diff --git a/.gitignore b/.gitignore index ddf01a091c8b5280d6013f14efecb956bb85be63..d8c2908d17f6623f91c1bbceee6ac7d57a2ceec1 100644 --- a/.gitignore +++ b/.gitignore @@ -109,7 +109,7 @@ cover/ *.pot # Django stuff: -*.log +# *log local_settings.py db.sqlite3 db.sqlite3-journal @@ -217,7 +217,7 @@ cython_debug/ # Logs logs -*.log +# *.log npm-debug.log* yarn-debug.log* yarn-error.log* @@ -353,8 +353,9 @@ dist !.vscode/settings.json # !.vscode/tasks.json # !.vscode/launch.json -# !.vscode/extensions.json +!.vscode/extensions.json !.vscode/*.code-snippets +!.vscode/schema_validation.json # Local History for Visual Studio Code .history/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 79b42f0e2a4a7087c6823aa80b460b54dd58258d..342d0209cc35ad16564a90a463e5b42900f7bddb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -86,13 +86,20 @@ python linting: before_script: - cd /app script: - - pycodestyle --config=pycodestyle.ini nomad tests + - ruff nomad tests --output-format gitlab > $CI_PROJECT_DIR/gl-code-quality-report.json - pylint --rcfile=.pylintrc nomad tests - mypy nomad tests rules: - if: $CI_COMMIT_TAG when: never - when: on_success + artifacts: + name: "nomad_code_quality" + when: always + reports: + codequality: gl-code-quality-report.json + + expire_in: never gui linting: stage: test @@ -203,6 +210,8 @@ install tests: - python -c 'import nomad.cli' - python -c 'from nomad.client import ArchiveQuery' - python -m nomad.cli parse vasp.xml + - pip install git+https://github.com/nomad-coe/nomad-parser-example.git + - python -m exampleparser tests/data/examples/example.out gui tests: diff --git a/.pylintrc b/.pylintrc index 8fb347420ba70fded735c7d840121838ffcb1563..a5c27b21c0351394c904cf970e010484ecc3cd95 100644 --- a/.pylintrc +++ b/.pylintrc @@ -3,7 +3,7 @@ # A comma-separated list of package or module names from where C extensions may # be loaded. Extensions are loading into the active Python interpreter and may # run arbitrary code. -extension-pkg-whitelist=pydantic +extension-pkg-whitelist=pydantic,orjson # List of plugins (as comma separated values of python module names) to load, # usually to register additional checkers. diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000000000000000000000000000000000000..1350c3e388cfce36b274ab236dc9ae63a376796d --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,15 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=827846 to learn about workspace recommendations. + // Extension identifier format: ${publisher}.${name}. Example: vscode.csharp + + // List of extensions which should be recommended for users of this workspace. + "recommendations": [ + "redhat.vscode-yaml", + "charliermarsh.ruff" + + ], + // List of extensions recommended by VS Code that should not be recommended for users of this workspace. + "unwantedRecommendations": [ + + ] +} \ No newline at end of file diff --git a/.vscode/schema_validation.json b/.vscode/schema_validation.json new file mode 100644 index 0000000000000000000000000000000000000000..4e8961924100495d3371ee993e476adabc1efb58 --- /dev/null +++ b/.vscode/schema_validation.json @@ -0,0 +1,243 @@ +{ + "$id": "#tbd", + "title": "Nomad Schema", + "$schema": "http://json-schema.org/draft-07/schema", + "properties": { + "definitions": { + "type": "object", + "properties": { + "sections": { + "type": "object", + "patternProperties": { + "^[a-zA-Z0-9_-]+$": { + "anyOf": [ + { + "$ref": "#/definitions/SectionSpec" + } + ] + } + }, + "errorMessage": { + "additionalProperties": "must contain alphanumeric character ([a-z0-9A-Z]), could contain dashes (-), underscores (_), and alphanumerics between." + }, + "description": "Sections are a representation of data and they are the building blocks for archives. Section definitions form a schema and they are the building blocks for the metainfo.", + "additionalProperties": false + } + } + }, + "data": { + "anyOf": [ + { + "$ref": "#/definitions/DataSpec" + } + ] + } + }, + "type": "object", + "description": "A schema validator for nomad schemas.", + "additionalProperties": false, + "externalDocs": { + "url": "https://nomad-lab.eu/prod/v1/docs/schema/basics.html#sections" + }, + "definitions": { + "SectionSpec": { + "properties": { + "quantities": { + "type": "object", + "patternProperties": { + "^[a-zA-Z0-9_-]+$": { + "anyOf": [ + { + "$ref": "#/definitions/QuantitySpec" + } + ] + } + }, + "errorMessage": { + "additionalProperties": "must contain alphanumeric character ([a-z0-9A-Z]), could contain dashes (-), underscores (_), and alphanumerics between." + } + }, + "sub_sections": { + "type": "object", + "patternProperties": { + "^[a-zA-Z0-9_-]+$": { + "anyOf": [ + { + "$ref": "#/definitions/SubSectionSpec" + } + ] + } + }, + "errorMessage": { + "additionalProperties": "must contain alphanumeric character ([a-z0-9A-Z]), could contain dashes (-), underscores (_), and alphanumerics between." + } + }, + "description": { + "type": "string", + "description": "Human readable description" + }, + "base_section": { + "type": "string", + "anyOf": [ + { + "$ref": "#/definitions/BaseSectionSpec" + } + ] + } + }, + "type": "object", + "description": "Sections are a representation of data and they are the building blocks for archives. Section definitions form a schema and they are the building blocks for the metainfo.", + "additionalProperties": true, + "externalDocs": { + "url": "https://nomad-lab.eu/prod/v1/docs/schema/basics.html#sections" + } + }, + "QuantitySpec": { + "properties": { + "description": { + "type": "string", + "description": "Human readable description" + }, + "type": { + "anyOf": [ + { + "type": "string", + "enum": [ + "Author", + "Datetime", + "User", + "bool", + "boolean", + "float", + "int", + "integer", + "np.float32", + "np.float64", + "np.int32", + "np.int64", + "str", + "string" + ] + }, + { + "type": "object", + "additionalProperties": false, + "required": ["type_kind", "type_data"], + "properties": { + "type_kind": { + "type": "string", + "enum": ["Enum"] + }, + "type_data": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "errorMessage": { + "pattern": "must be an ENUM of {type_kind: Enum, type_data: [val1, val2]}" + } + }, + { + "$ref": "#/definitions/ReferenceSpec" + } + ], + "description": "Type of quantity", + "errorMessage": "must be of the format str" + }, + "unit": { + "type": "string", + "anyOf": [ + { + "type": "string" + } + ], + "description": "Unit of quantity", + "errorMessage": "Must be a string" + }, + "shape": { + "type": "array", + "items": { + "anyOf": [ + { + "type": "string", + "enum": ["*"] + }, + { + "type": "integer" + } + ] + }, + "description": "Shape of quantity", + "errorMessage": "['*'] or [num] where num is an int. ex: [3, 3] or [4]" + } + }, + "type": "object", + "description": "Quantities define possible primitive values.", + "additionalProperties": true, + "externalDocs": { + "url": "https://nomad-lab.eu/prod/v1/docs/schema/basics.html#quantities" + } + }, + "SubSectionSpec": { + "properties": { + "section": { + "anyOf": [{"type": "string"}, {"type": "object"}], + "description": "Must be a valid section" + }, + "repeats": { + "type": "boolean", + "description": "A boolean that determines whether this subsection can appear multiple times in the parent section." + } + }, + "type": "object", + "required": [ + "section" + ], + "description": "Sub-sections define a part-of-relationship between two sections.", + "additionalProperties": true, + "externalDocs": { + "url": "https://nomad-lab.eu/prod/v1/docs/schema/basics.html#sub-sections" + } + }, + "DataSpec": { + "type": "object" + }, + "ReferenceSpec": { + "type": "string", + "pattern": "^[^#]+#[^#]+$", + "description": "A reference is a uni-directional link between a source section and a target section.", + "externalDocs": "https://nomad-lab.eu/prod/v1/docs/schema/basics.html#references" + }, + "BaseSectionSpec": { + "type": "string", + "anyOf": [ + { + "type": "string", + "enum": [ + "nomad.datamodel.EntryArchive", + "nomad.datamodel.EntryMetadata", + "nomad.datamodel.EntryData", + "ArchiveSection", + "nomad.parsing.tabular.TableData" + ] + }, + { + "type": "string", + "pattern": "^nomad\\.(datamodel\\.metainfo\\.(simulation|eln)|metainfo)\\.\\*$" + }, + { + "$ref": "#/definitions/ReferenceSpec" + }, + { + "type": "string" + } + ], + "description": "Relationship between section definitions that allows us to create more specialized definitions from more abstract definitions.", + "externalDocs": { + "url": "https://nomad-lab.eu/prod/v1/docs/schema/basics.html#base-sections-and-inheritance" + } + } + } +} diff --git a/.vscode/settings.json b/.vscode/settings.json index c10f6fd9718be3490e6060ae927c449fa3d2c55d..8173be24e3e5f71b778de3f9edc1e22f4014a76a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -25,6 +25,9 @@ "files.watcherExclude": { "${workspaceFolder}/.pyenv/**": true, }, + "yaml.schemas": { + ".vscode/schema_validation.json": "*.archive.yaml" + }, "launch": { "version": "0.2.0", "configurations": [ diff --git a/CHANGELOG.md b/CHANGELOG.md index 4abe6d407bdec7e82ca593309755cc814f816ef7..f8fc0e29f929ee078fa7cded8317b701ff8432fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,182 @@ +## 1.2.1 (2023-09-21) + +### Added (8 changes) + +- [CLI utility to export archive data.](nomad-lab/nomad-FAIR@88c59a988e2cfafa321466b2aadef70ef16f74ed) ([merge request](nomad-lab/nomad-FAIR!1452)) +- [Added Activity ID to ExperiementStep](nomad-lab/nomad-FAIR@1ff3610d114820df24b5cfd7a77415b1707a2893) ([merge request](nomad-lab/nomad-FAIR!1456)) +- [Added oasis registration link to the docs.](nomad-lab/nomad-FAIR@3b06ce9a083414da1340be14bbbc48a525436c10) ([merge request](nomad-lab/nomad-FAIR!1450)) +- [Added authentication for mongo and elastic use.](nomad-lab/nomad-FAIR@c1f4147dddbaf6def6e831bd924a170a401b7db8) ([merge request](nomad-lab/nomad-FAIR!1332)) +- [Added YAML linting plugin for NOMAD schemas.](nomad-lab/nomad-FAIR@d6ae88b6a84a7505d0f85d43a9e12a544c3780a0) ([merge request](nomad-lab/nomad-FAIR!1439)) +- [Added System and PureSubstance components for CompositeSystem, added...](nomad-lab/nomad-FAIR@03b23a052eb6d6c2e0cf06596c73b64ec2518f8a) ([merge request](nomad-lab/nomad-FAIR!1385)) +- [Added better search filters when searching for custom schemas.](nomad-lab/nomad-FAIR@d97d90e2c993fad1e5a199e6e7d03c36757578f4) ([merge request](nomad-lab/nomad-FAIR!1335)) +- [Resolve "Refactoring tabular parser"](nomad-lab/nomad-FAIR@1a68e76252f6da76aab40eff7250d99119d9b8e1) ([merge request](nomad-lab/nomad-FAIR!1377)) + +### Fixed (13 changes) + +- [Update parser](nomad-lab/nomad-FAIR@44043007d27552044407af750d7c45e7c241292b) ([merge request](nomad-lab/nomad-FAIR!1458)) +- [Resolve "ReadableIdentifiers Normalizers Fails"](nomad-lab/nomad-FAIR@e9726fac65e8b8882063ab1888e883974ec898a7) ([merge request](nomad-lab/nomad-FAIR!1454)) +- [Fixed the condition for maximum numbers of uploads.](nomad-lab/nomad-FAIR@6743000803b8af28481c1eacdd91d2b6a1b5ed96) ([merge request](nomad-lab/nomad-FAIR!1446)) +- [Fixed issue with inconsistent upload status icon usage, added more consistent...](nomad-lab/nomad-FAIR@91f57ea304e360f0e58febd59a93c97c26161bf5) ([merge request](nomad-lab/nomad-FAIR!1428)) +- [Fixed issues with zero values and redundant API calls in the user defined quantities menu.](nomad-lab/nomad-FAIR@ee5228bfc5d40ecf8385b0f9bcf18c20dad7bf71) ([merge request](nomad-lab/nomad-FAIR!1423)) +- [Fixed issue when stripping debug symbols from shared object files.](nomad-lab/nomad-FAIR@6500857b05cea0d9839e3c67b6b12ee269a66832) ([merge request](nomad-lab/nomad-FAIR!1409)) +- [Fixed problem with hardcoded jupyter keycloak realm.](nomad-lab/nomad-FAIR@a1ed9d4eec3e45a88868e748afd5b1a6e0a3a1a6) ([merge request](nomad-lab/nomad-FAIR!1407)) +- [Fixed issue with loading the custom quantities menu.](nomad-lab/nomad-FAIR@1ea52c685972e58938a735d6a05b54feda2c5ffb) ([merge request](nomad-lab/nomad-FAIR!1420)) +- [Fixed issue with reading boolean values from VASP INCAR and OUTCAR files.](nomad-lab/nomad-FAIR@1e47e7e4f43577466a4cbdc6876a56f3aeee20d8) ([merge request](nomad-lab/nomad-FAIR!1419)) +- [Update parser ref](nomad-lab/nomad-FAIR@2a333c2ff1e8a431f732fb8561b190a08a6fb938) ([merge request](nomad-lab/nomad-FAIR!1418)) +- [Fixing problem with removing archives generated with tabular parser entry mode](nomad-lab/nomad-FAIR@fe7e50447a6254fb2a0c1a15ae625ceb6722739d) ([merge request](nomad-lab/nomad-FAIR!1417)) +- [Fixed issue with row action visuals.](nomad-lab/nomad-FAIR@651a2f3c2be27b63eaee10362b76befb99135c79) ([merge request](nomad-lab/nomad-FAIR!1412)) +- [Fixed the missing call to generate_docs_artifacts in the setup_dev_env.sh.](nomad-lab/nomad-FAIR@035e1f43745d5422514d06187b675f89e2a39628) + +### Changed (8 changes) + +- [Removed obsolete elk csv to md script.](nomad-lab/nomad-FAIR@e50dc0fc009815e8c4127cf1fa7c195e6e683e8c) ([merge request](nomad-lab/nomad-FAIR!1332)) +- [Command line `--parser` now skips parser matching](nomad-lab/nomad-FAIR@b230af63d027c86828b71e1b7639de9448a9564c) ([merge request](nomad-lab/nomad-FAIR!1233)) +- [Improved styling and navigation when browsing nexus files](nomad-lab/nomad-FAIR@5a4184d2cca2ed73d5113de2202d5bd6c8ef1fd6) ([merge request](nomad-lab/nomad-FAIR!1397)) +- [Improved the handling of dynamically resolved filters in SearchContext.](nomad-lab/nomad-FAIR@e3248fdaa5a1c7cebae25102f0c464cb1587229d) ([merge request](nomad-lab/nomad-FAIR!1433)) +- [Changed the coloring and texts in the upload page to make typical upload...](nomad-lab/nomad-FAIR@8d3a24996f807340227bd73f006b0493a6debe8b) ([merge request](nomad-lab/nomad-FAIR!1425)) +- [Updated the documentation on mounting plugins within docker.](nomad-lab/nomad-FAIR@c0b0747a9a0bbcbdb3f6ccf4833a65354dfd7bea) ([merge request](nomad-lab/nomad-FAIR!1422)) +- [Refactored periodic table componeng using SVG.](nomad-lab/nomad-FAIR@ad3a56f8ab0a6a2fabcd0ad1f0a9334eaa8a4b53) ([merge request](nomad-lab/nomad-FAIR!1415)) +- [Removed outdated information about using parsers from the parser projects.](nomad-lab/nomad-FAIR@b41131f576d3fd3574d0e81f67b3c180ebec48b3) + +## 1.2.0 (2023-09-21) + +### Added (39 changes) + +- [CLI utility to export archive data.](nomad-lab/nomad-FAIR@88c59a988e2cfafa321466b2aadef70ef16f74ed) ([merge request](nomad-lab/nomad-FAIR!1452)) +- [Added Activity ID to ExperiementStep](nomad-lab/nomad-FAIR@1ff3610d114820df24b5cfd7a77415b1707a2893) ([merge request](nomad-lab/nomad-FAIR!1456)) +- [Added oasis registration link to the docs.](nomad-lab/nomad-FAIR@3b06ce9a083414da1340be14bbbc48a525436c10) ([merge request](nomad-lab/nomad-FAIR!1450)) +- [Added authentication for mongo and elastic use.](nomad-lab/nomad-FAIR@c1f4147dddbaf6def6e831bd924a170a401b7db8) ([merge request](nomad-lab/nomad-FAIR!1332)) +- [Added YAML linting plugin for NOMAD schemas.](nomad-lab/nomad-FAIR@d6ae88b6a84a7505d0f85d43a9e12a544c3780a0) ([merge request](nomad-lab/nomad-FAIR!1439)) +- [Added System and PureSubstance components for CompositeSystem, added...](nomad-lab/nomad-FAIR@03b23a052eb6d6c2e0cf06596c73b64ec2518f8a) ([merge request](nomad-lab/nomad-FAIR!1385)) +- [Added better search filters when searching for custom schemas.](nomad-lab/nomad-FAIR@d97d90e2c993fad1e5a199e6e7d03c36757578f4) ([merge request](nomad-lab/nomad-FAIR!1335)) +- [Resolve "Refactoring tabular parser"](nomad-lab/nomad-FAIR@1a68e76252f6da76aab40eff7250d99119d9b8e1) ([merge request](nomad-lab/nomad-FAIR!1377)) +- [Added compression suport to quantum expresso mainfiles.](nomad-lab/nomad-FAIR@cb7326b31a3f13fcb9c204c2c45c68144becec80) ([merge request](nomad-lab/nomad-FAIR!1401)) +- [Added a new code contribution guide to the docs.](nomad-lab/nomad-FAIR@5fef1c2eabdc6fcf14f32236ec38d4b57e269793) ([merge request](nomad-lab/nomad-FAIR!1396)) +- [Added helm config options for plugins and normalize.](nomad-lab/nomad-FAIR@73cdacf80c4b1abc54911dfb706791b6fd400be2) ([merge request](nomad-lab/nomad-FAIR!1393)) +- [Added more documentation on data, schemas, and plugins.](nomad-lab/nomad-FAIR@b0d590503e3eea3dff0e30672257cd4c0ab2318d) ([merge request](nomad-lab/nomad-FAIR!1390)) +- [Added new archive config options to helm chart.](nomad-lab/nomad-FAIR@25de71a4e72252e3236c5a6131c69deddf81a2a1) ([merge request](nomad-lab/nomad-FAIR!1251)) +- [Added a soap normalizer normalizer.](nomad-lab/nomad-FAIR@f6c5064f27056e70f920d8aeb5efc2ed4629124f) ([merge request](nomad-lab/nomad-FAIR!1391)) +- [Added list of all parsers to the reference documentation.](nomad-lab/nomad-FAIR@1c066432dd3fae88aa610c4d97397e66744456d8) ([merge request](nomad-lab/nomad-FAIR!1268)) +- [Added authors column to the processing table](nomad-lab/nomad-FAIR@bc2e6c7a5b0429772f273f20d647a70c6d186c6d) ([merge request](nomad-lab/nomad-FAIR!1360)) +- [Hight props for RichTextEditor](nomad-lab/nomad-FAIR@121ddcab7885105235dc0dc42903e1a1a8506562) ([merge request](nomad-lab/nomad-FAIR!1334)) +- [1. Foldable list of edit quantities](nomad-lab/nomad-FAIR@c77e2bff38999f55c9baf8fa80c536d526fd2ded) ([merge request](nomad-lab/nomad-FAIR!1337)) +- [Added normalizer for analyzing porous systems.](nomad-lab/nomad-FAIR@304c411013b2b3820188ef40846bdb0cab6b2d11) ([merge request](nomad-lab/nomad-FAIR!1294)) +- [Added new file formats for the API endpoint used for downloading atomistic...](nomad-lab/nomad-FAIR@55eb60873b65e5f6238cb0ff7dfb7006b192db0f) ([merge request](nomad-lab/nomad-FAIR!1353)) +- [Implement eos fit normalization #1439](nomad-lab/nomad-FAIR@37195bd45cfcbe99c6df219da2eb38a5b6873e04) ([merge request](nomad-lab/nomad-FAIR!1319)) +- [Resolve "Replace workflow with workflow2"](nomad-lab/nomad-FAIR@39891c46b06d0a123884f109df369336600e01ba) ([merge request](nomad-lab/nomad-FAIR!1261)) +- [Resolve "Documentation for third party integration"](nomad-lab/nomad-FAIR@eace52d4ff78041e733ca1bedc0dce26c8edfcad) ([merge request](nomad-lab/nomad-FAIR!1301)) +- [Add new metainfo `native tiers` in `run` under `electrons_representation` and...](nomad-lab/nomad-FAIR@2e9d138de277e73918ed43aa38696a6a14c00f54) ([merge request](nomad-lab/nomad-FAIR!1283)) +- [Added the functionality to optionally show the section label instead of full path of the reference](nomad-lab/nomad-FAIR@ec6a8c1322c7cf05dea29b34a4a2067c2b0b87d8) ([merge request](nomad-lab/nomad-FAIR!1215)) +- [Add parser level in interface](nomad-lab/nomad-FAIR@a395dc59ed9e5e141b624a569419ba7ab0dc6a8c) ([merge request](nomad-lab/nomad-FAIR!1298)) +- [Added basic topologies under results.material.topology for all simulation entries.](nomad-lab/nomad-FAIR@7b7e6b08f707618b0a594580a960d3bc8f01eca2) ([merge request](nomad-lab/nomad-FAIR!1284)) +- [Added warning when deleting uploads or entries that are referenced](nomad-lab/nomad-FAIR@13a65f94a3100ac90f1c335cfbf7486d50eda582) ([merge request](nomad-lab/nomad-FAIR!1218)) +- [Added basic information, such as mass fraction and atomic fraction, of each element in results.](nomad-lab/nomad-FAIR@f42b7caa6df07ed23f05c24ac2b0ae91e099d2dc) ([merge request](nomad-lab/nomad-FAIR!1190)) +- [Added ELN base section for reading and storing structure files.](nomad-lab/nomad-FAIR@22f5dc1af80822be500137422379a395eda1b1ae) ([merge request](nomad-lab/nomad-FAIR!1229)) +- [Added new metainfo for dimensionality and building_block](nomad-lab/nomad-FAIR@45e95123f4c9d51a9b57f4a796d3faa52845494f) ([merge request](nomad-lab/nomad-FAIR!1259)) +- [Added config switch for generating new timestamps.](nomad-lab/nomad-FAIR@3b97832c704d6e80e09bb0741eedef5f741ad8b1) ([merge request](nomad-lab/nomad-FAIR!1250)) +- [Added automatic subsystem detection.](nomad-lab/nomad-FAIR@08ef593bc3f0e184f97a79953c185dc34ddd2f59) ([merge request](nomad-lab/nomad-FAIR!1242)) +- [Added config option to fallback to a different archive version.](nomad-lab/nomad-FAIR@94d8412531ced89e8cc5f15c032e117bbfcc74ec) ([merge request](nomad-lab/nomad-FAIR!1248)) +- [Added new metainfo for storing the level of the XC functional.](nomad-lab/nomad-FAIR@0f6515828ca3c373f438db8e4e0e6e4c9d628911) ([merge request](nomad-lab/nomad-FAIR!1246)) +- [Added function m_setdefault for more conveniently storing data inside archives.](nomad-lab/nomad-FAIR@91b838cc2f1c32796478f005e0ec0b0aa7bba9ce) ([merge request](nomad-lab/nomad-FAIR!1232)) +- [Added plugin support for NOMAD Oasis.](nomad-lab/nomad-FAIR@9622d9192e7680b0077c10ad8e46f7b00c2e746f) ([merge request](nomad-lab/nomad-FAIR!1058)) +- [Added configurable list of normalizers.](nomad-lab/nomad-FAIR@8852644fd258ceb2ab080d41a793bab18ea1b704) ([merge request](nomad-lab/nomad-FAIR!1058)) +- [Added plugin base models and schema, parser models.](nomad-lab/nomad-FAIR@488873666807960fbe57eab0e72091203aaffa24) ([merge request](nomad-lab/nomad-FAIR!1058)) + +### Fixed (45 changes) + +- [Update parser](nomad-lab/nomad-FAIR@44043007d27552044407af750d7c45e7c241292b) ([merge request](nomad-lab/nomad-FAIR!1458)) +- [Resolve "ReadableIdentifiers Normalizers Fails"](nomad-lab/nomad-FAIR@e9726fac65e8b8882063ab1888e883974ec898a7) ([merge request](nomad-lab/nomad-FAIR!1454)) +- [Fixed the condition for maximum numbers of uploads.](nomad-lab/nomad-FAIR@6743000803b8af28481c1eacdd91d2b6a1b5ed96) ([merge request](nomad-lab/nomad-FAIR!1446)) +- [Fixed issue with inconsistent upload status icon usage, added more consistent...](nomad-lab/nomad-FAIR@91f57ea304e360f0e58febd59a93c97c26161bf5) ([merge request](nomad-lab/nomad-FAIR!1428)) +- [Fixed issues with zero values and redundant API calls in the user defined quantities menu.](nomad-lab/nomad-FAIR@ee5228bfc5d40ecf8385b0f9bcf18c20dad7bf71) ([merge request](nomad-lab/nomad-FAIR!1423)) +- [Fixed issue when stripping debug symbols from shared object files.](nomad-lab/nomad-FAIR@6500857b05cea0d9839e3c67b6b12ee269a66832) ([merge request](nomad-lab/nomad-FAIR!1409)) +- [Fixed problem with hardcoded jupyter keycloak realm.](nomad-lab/nomad-FAIR@a1ed9d4eec3e45a88868e748afd5b1a6e0a3a1a6) ([merge request](nomad-lab/nomad-FAIR!1407)) +- [Fixed issue with loading the custom quantities menu.](nomad-lab/nomad-FAIR@1ea52c685972e58938a735d6a05b54feda2c5ffb) ([merge request](nomad-lab/nomad-FAIR!1420)) +- [Fixed issue with reading boolean values from VASP INCAR and OUTCAR files.](nomad-lab/nomad-FAIR@1e47e7e4f43577466a4cbdc6876a56f3aeee20d8) ([merge request](nomad-lab/nomad-FAIR!1419)) +- [Update parser ref](nomad-lab/nomad-FAIR@2a333c2ff1e8a431f732fb8561b190a08a6fb938) ([merge request](nomad-lab/nomad-FAIR!1418)) +- [Fixing problem with removing archives generated with tabular parser entry mode](nomad-lab/nomad-FAIR@fe7e50447a6254fb2a0c1a15ae625ceb6722739d) ([merge request](nomad-lab/nomad-FAIR!1417)) +- [Fixed issue with row action visuals.](nomad-lab/nomad-FAIR@651a2f3c2be27b63eaee10362b76befb99135c79) ([merge request](nomad-lab/nomad-FAIR!1412)) +- [Fixed the missing call to generate_docs_artifacts in the setup_dev_env.sh.](nomad-lab/nomad-FAIR@035e1f43745d5422514d06187b675f89e2a39628) +- [Fixed broken links in the documentation.](nomad-lab/nomad-FAIR@5caceed75a964f2c10884c15e93acfa33a9f1a6a) ([merge request](nomad-lab/nomad-FAIR!1403)) +- [Fixed issue with extra_fields in extracted elabFTW `.eln` file](nomad-lab/nomad-FAIR@5d61bcdf909104fa4d0bbce9739e6113dbadcc33) ([merge request](nomad-lab/nomad-FAIR!1383)) +- [Fix some visual problems](nomad-lab/nomad-FAIR@50d749a0d73e2e45377ef301f6af9e16ca5431f7) ([merge request](nomad-lab/nomad-FAIR!1375)) +- [The plot axis units should firstly follow the eln.defaultDisplayUnit annotation if exists](nomad-lab/nomad-FAIR@5d9af6ee5741652653002e377f4101c7dfc49aaf) ([merge request](nomad-lab/nomad-FAIR!1346)) +- [Allow uploading multiple files to a list-shaped FileEditQuantity](nomad-lab/nomad-FAIR@5d81efa1415880c5d4f3380aa15f3d934ddb1503) ([merge request](nomad-lab/nomad-FAIR!1333)) +- [Cleaning up the method how the version has been determined during the CI/CD build process](nomad-lab/nomad-FAIR@1fdc3c139e21a219f02365ab4b9e35f5244a8522) ([merge request](nomad-lab/nomad-FAIR!1354)) +- [Fixed ASE warnings about get_number_of_atoms and the usage of arrays with...](nomad-lab/nomad-FAIR@be65aa650968921eb422f8b80bd3a78988d4cb6b) ([merge request](nomad-lab/nomad-FAIR!1352)) +- [Adjust matching parser regex for new mopac version](nomad-lab/nomad-FAIR@09c0cf4a8ea41225f63bcc01d3067606e1e96e45) ([merge request](nomad-lab/nomad-FAIR!1349)) +- [Address performance issue in matching parser with child archives](nomad-lab/nomad-FAIR@539278167e7a046c67f633bdb39c09b635989652) ([merge request](nomad-lab/nomad-FAIR!1343)) +- [Resolve "Referenced section is not working"](nomad-lab/nomad-FAIR@9b9e694d23947e895d7cb2723a985b951bcb71fc) ([merge request](nomad-lab/nomad-FAIR!1338)) +- [Fixed issue with the conventional cell reported by MatID.](nomad-lab/nomad-FAIR@c243c9db2c702e6f039facfb0d26cac838d0281e) ([merge request](nomad-lab/nomad-FAIR!1336)) +- [Visually indicate entries with processing errors](nomad-lab/nomad-FAIR@cdd7339688e73b7472b87931a67d75e831ac182a) ([merge request](nomad-lab/nomad-FAIR!1318)) +- [Fixed the staging deployment.](nomad-lab/nomad-FAIR@9a8aea95adc0404498fdceea72787cfcca276f0c) ([merge request](nomad-lab/nomad-FAIR!1329)) +- [Uploads Page, delete button is disabled when selecting all uploads](nomad-lab/nomad-FAIR@f7da75ce50a615961196dccd9bb6047befe0cfdf) ([merge request](nomad-lab/nomad-FAIR!1313)) +- [fix saving files including both definitions and data](nomad-lab/nomad-FAIR@1d5752318457582889efaacf703970a6d4c6b2fb) ([merge request](nomad-lab/nomad-FAIR!1231)) +- [Fixed the staging deployment.](nomad-lab/nomad-FAIR@449ca9e95b82ac542915e6d2cab17d8fb0ecf137) ([merge request](nomad-lab/nomad-FAIR!1324)) +- [Fixed the name of the fhi parser.](nomad-lab/nomad-FAIR@f2d8e82aa65324ef4b96101372e4f3e9a6e54a83) ([merge request](nomad-lab/nomad-FAIR!1326)) +- [Fix creation of d3 elements](nomad-lab/nomad-FAIR@7fef1551a25758957198168eeca5e3a2bb94b317) ([merge request](nomad-lab/nomad-FAIR!1320)) +- [Indicate there are multiple co-authors in the upload list.](nomad-lab/nomad-FAIR@a1edfcc8fa27200ad409d59a277c52066f7cb9ad) ([merge request](nomad-lab/nomad-FAIR!1303)) +- [Only the main author should be allowed to remove an upload](nomad-lab/nomad-FAIR@0207b89588eb0382e9f3ef4738f9e9d9b4dc43a9) ([merge request](nomad-lab/nomad-FAIR!1291)) +- [Update parser refs](nomad-lab/nomad-FAIR@6a6f8cd601f3e95ba957dd4a6b21110d9e4bf068) ([merge request](nomad-lab/nomad-FAIR!1300)) +- [Various minor fixes](nomad-lab/nomad-FAIR@75d40012aa236dddd5ed4c183fe6f923249fd717) ([merge request](nomad-lab/nomad-FAIR!1296)) +- [Processing fixes](nomad-lab/nomad-FAIR@a7ffc56c479c16c5fe7bd93cc9d07888bbfce950) ([merge request](nomad-lab/nomad-FAIR!1280)) +- [Remove Duplicated items in archive browser](nomad-lab/nomad-FAIR@a5601fc12085c0c28b6586774ba7fe4ff7f15d61) ([merge request](nomad-lab/nomad-FAIR!1254)) +- [Fix cp2k, abinit and phonopy parsers](nomad-lab/nomad-FAIR@065afe432faa2ef61093b8f6f6ff5f4abff00634) ([merge request](nomad-lab/nomad-FAIR!1265)) +- [Implement new workflow visualizer](nomad-lab/nomad-FAIR@763f3547763c94b8dc44484017068e12fa6f1ac5) ([merge request](nomad-lab/nomad-FAIR!1211)) +- [Fix RichText editor style in non editable mode](nomad-lab/nomad-FAIR@fadb0387c562648a5b6182c82232db28edc3221d) ([merge request](nomad-lab/nomad-FAIR!1240)) +- [Fixed javascript error on north page.](nomad-lab/nomad-FAIR@08d4615cef69446e4f31f98dec2f265b4bbbf94c) ([merge request](nomad-lab/nomad-FAIR!1247)) +- [Fix the lane computing](nomad-lab/nomad-FAIR@ec095372cadf9aaf55ec60faa5c7eb0a073e2f4d) ([merge request](nomad-lab/nomad-FAIR!1243)) +- [Fix a bug in deployment regarding loading North tools](nomad-lab/nomad-FAIR@885bdd3e4e66154aa9e59730bf5ea4f3a51b8e6c) ([merge request](nomad-lab/nomad-FAIR!1241)) +- [Fix phonopy and lobster parser](nomad-lab/nomad-FAIR@ed380695fee5d507ad941eb1274a7c867a3508e4) ([merge request](nomad-lab/nomad-FAIR!1238)) +- [Fixed file table in parser about dialog.](nomad-lab/nomad-FAIR@1cb47611b8aad8fcb04fedf61bc2925f4e0a1a8f) ([merge request](nomad-lab/nomad-FAIR!1058)) + +### Changed (26 changes) + +- [Removed obsolete elk csv to md script.](nomad-lab/nomad-FAIR@e50dc0fc009815e8c4127cf1fa7c195e6e683e8c) ([merge request](nomad-lab/nomad-FAIR!1332)) +- [Command line `--parser` now skips parser matching](nomad-lab/nomad-FAIR@b230af63d027c86828b71e1b7639de9448a9564c) ([merge request](nomad-lab/nomad-FAIR!1233)) +- [Improved styling and navigation when browsing nexus files](nomad-lab/nomad-FAIR@5a4184d2cca2ed73d5113de2202d5bd6c8ef1fd6) ([merge request](nomad-lab/nomad-FAIR!1397)) +- [Improved the handling of dynamically resolved filters in SearchContext.](nomad-lab/nomad-FAIR@e3248fdaa5a1c7cebae25102f0c464cb1587229d) ([merge request](nomad-lab/nomad-FAIR!1433)) +- [Changed the coloring and texts in the upload page to make typical upload...](nomad-lab/nomad-FAIR@8d3a24996f807340227bd73f006b0493a6debe8b) ([merge request](nomad-lab/nomad-FAIR!1425)) +- [Updated the documentation on mounting plugins within docker.](nomad-lab/nomad-FAIR@c0b0747a9a0bbcbdb3f6ccf4833a65354dfd7bea) ([merge request](nomad-lab/nomad-FAIR!1422)) +- [Refactored periodic table componeng using SVG.](nomad-lab/nomad-FAIR@ad3a56f8ab0a6a2fabcd0ad1f0a9334eaa8a4b53) ([merge request](nomad-lab/nomad-FAIR!1415)) +- [Removed outdated information about using parsers from the parser projects.](nomad-lab/nomad-FAIR@b41131f576d3fd3574d0e81f67b3c180ebec48b3) +- [Changed dependency versions to increase compatibility.](nomad-lab/nomad-FAIR@13e051c104ec8cb4af12507eb260413fb5cc562e) ([merge request](nomad-lab/nomad-FAIR!1402)) +- [Changed the version of scikit-learn for better compatibility.](nomad-lab/nomad-FAIR@74f2f767d71012b7d977996084fe82831a9be7c9) ([merge request](nomad-lab/nomad-FAIR!1399)) +- [Changed xarray requirements to allow install in colab.](nomad-lab/nomad-FAIR@f15d45debb617e748e487fdad9ba37b67ae0fbb2) ([merge request](nomad-lab/nomad-FAIR!1395)) +- [Fixed indexing of NaN in dynamic search properties.](nomad-lab/nomad-FAIR@f7f01bd60a7aee57b69783d6d2bc6e9b7ea2bac2) ([merge request](nomad-lab/nomad-FAIR!1339)) +- [Changed version requirements on some dependencies.](nomad-lab/nomad-FAIR@70d1d5a726690e45dc75a5bb25e1aaf26ca691bd) ([merge request](nomad-lab/nomad-FAIR!1384)) +- [Update dependencies for parallel test execution with pytest-xdist](nomad-lab/nomad-FAIR@dcf8842b36ae525a06e790654cd97b964f235a13) ([merge request](nomad-lab/nomad-FAIR!1376)) +- [Added detailed breadcrumbs](nomad-lab/nomad-FAIR@f5c6519c28b2a669e5be2afe621eb2400ec125ec) ([merge request](nomad-lab/nomad-FAIR!1361)) +- [Changed the documentation structure.](nomad-lab/nomad-FAIR@780e7d49b2afac9b2276a902ae0e7c6b7122bf57) ([merge request](nomad-lab/nomad-FAIR!1268)) +- [allow navigation to entries with processing errors](nomad-lab/nomad-FAIR@96749a1981deb48797fde775741b21e09670567b) ([merge request](nomad-lab/nomad-FAIR!1327)) +- [Changed the versions of pyproject.toml dependencies.](nomad-lab/nomad-FAIR@6b98f085a996311dfc89640d9ffd766aa3298892) ([merge request](nomad-lab/nomad-FAIR!1350)) +- [Removed the old material_library ELN example build-in schema.](nomad-lab/nomad-FAIR@6b68dc8e6b1946ebcfaad2999a474c7c2a61373e) ([merge request](nomad-lab/nomad-FAIR!1350)) +- [Changed the used jupyterlab image in NORTH.](nomad-lab/nomad-FAIR@daa4f98cd89d653e7ba23dcda9605a9a2d1836cc) ([merge request](nomad-lab/nomad-FAIR!1324)) +- [Update parsers ref](nomad-lab/nomad-FAIR@842a11f3fea23d0e73d79acc58fe75cfad372909) ([merge request](nomad-lab/nomad-FAIR!1328)) +- [Moved ELN Base Sections](nomad-lab/nomad-FAIR@62d3a60cfd222a16ebd08c2c73be02e898007360) ([merge request](nomad-lab/nomad-FAIR!1295)) +- [Make table actions always visible.](nomad-lab/nomad-FAIR@fbaa9786da8a372aef148ce521cf7c8e58069055) ([merge request](nomad-lab/nomad-FAIR!1302)) +- [Changed entry_type and entry_name for simulations](nomad-lab/nomad-FAIR@8b0a5d721a6c714fe06ff3ce741f2237d9d0c5a2) ([merge request](nomad-lab/nomad-FAIR!1066)) +- [Removed the generation of gui artifacts for development.](nomad-lab/nomad-FAIR@2d9d1c8b1cff0aa28bef8e3b8da6aa026e649880) ([merge request](nomad-lab/nomad-FAIR!1058)) +- [Changed gui artifact generation to happen at app start.](nomad-lab/nomad-FAIR@a488b4700b9125be44daff78368f6575e1335e6e) ([merge request](nomad-lab/nomad-FAIR!1058)) + +### New feature (1 change) + +- [Add service "logtransfer" to submit logs generated at a NOMAD OASIS to the central unit (opt-in). ](nomad-lab/nomad-FAIR@cb14c6932b44d304fd8d15e9a0abbf1ba18ae8e7) ([merge request](nomad-lab/nomad-FAIR!894)) + +### Fixed. (1 change) + +- [Fixed docker build: added explicit npm installation.](nomad-lab/nomad-FAIR@6e3fd5f92885f8dbb30d54b7d1e359479b3bfcf2) ([merge request](nomad-lab/nomad-FAIR!1358)) + +### Feature (2 changes) + +- [Duplicate functionality for entries.](nomad-lab/nomad-FAIR@d57f1e2f74b2eb1e969b3133ee87d850e3c8ebc6) ([merge request](nomad-lab/nomad-FAIR!1312)) +- [Show upload progress when uploading a file in FileEditQuantity](nomad-lab/nomad-FAIR@aa26e28b71ed785e84d01b4ae99a361839969b7c) ([merge request](nomad-lab/nomad-FAIR!1305)) + +### Fix (1 change) + +- [Fixed the version of the datascience-notebook image NORTH tool.](nomad-lab/nomad-FAIR@6f469ca3b57a1c5b0ba3dabc907d6e356e2208fb) ([merge request](nomad-lab/nomad-FAIR!1276)) + ## 1.1.9 (2023-03-31) ### Added (10 changes) diff --git a/Dockerfile b/Dockerfile index 4712cb0410394389681311b9c4d712c7a25e9a55..210bce4adb6e9badf1414566d47f2c39ac963366 100644 --- a/Dockerfile +++ b/Dockerfile @@ -119,7 +119,6 @@ COPY --chown=nomad .pylintrc \ LICENSE \ MANIFEST.in \ mkdocs.yml \ - pycodestyle.ini \ pyproject.toml \ pytest.ini \ README.md \ @@ -206,9 +205,9 @@ COPY --chown=nomad --from=development /app/dist/nomad-lab-*.tar.gz . RUN pip install nomad-lab-*.tar.gz # Reduce the size of the packages -RUN find $VIRTUAL_ENV/lib/python3.9/ -type d -name 'tests' ! -path '*/networkx/*' -exec rm -r '{}' + \ - && find $VIRTUAL_ENV/lib/python3.9/ -type d -name 'test' -exec rm -r '{}' + \ - && find $VIRTUAL_ENV/lib/python3.9/site-packages/ -name '*.so' ! -path '*/h5py/*' -print -exec sh -c 'file "{}" | grep -q "not stripped" && strip -s "{}"' \; +RUN find /usr/local/lib/python3.9/ -type d -name 'tests' ! -path '*/networkx/*' -exec rm -r '{}' + \ + && find /usr/local/lib/python3.9/ -type d -name 'test' -exec rm -r '{}' + \ + && find /usr/local/lib/python3.9/site-packages/ -name '*.so' ! -path '*/h5py/*' ! -path '*/quippy*/*' -print -exec sh -c 'file "{}" | grep -q "not stripped" && strip -s "{}"' \; # ================================================================================ @@ -242,9 +241,10 @@ ENV PATH="$VIRTUAL_ENV/bin:$PATH" COPY --chown=nomad --from=development /app/.venv /app/.venv # transfer installed packages from the build stage -COPY --chown=nomad scripts/run.sh . -COPY --chown=nomad nomad/jupyterhub_config.py ./nomad/jupyterhub_config.py -COPY --chown=nomad --from=development /app/examples/data/uploads /app/examples/data/uploads +COPY --chown=nomad:1000 scripts/run.sh . +COPY --chown=nomad:1000 nomad/jupyterhub_config.py ./nomad/jupyterhub_config.py +COPY --chown=nomad:1000 --from=development /app/examples/data/uploads /app/examples/data/uploads + RUN mkdir -p /app/.volumes/fs VOLUME /app/.volumes/fs diff --git a/MANIFEST.in b/MANIFEST.in index 08b58091f3d440b8e3b661a8b4879fc51e22789b..6c5be2c1d01eb3758d32bf4ce158bf2015ee09e2 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -21,8 +21,8 @@ recursive-include dependencies/parsers/eelsdb/eelsdbparser *.py nomad_plugin.yam include dependencies/parsers/electronic/README.md recursive-include dependencies/parsers/electronic/electronicparsers *.py *.json nomad_plugin.yaml include dependencies/parsers/nexus/README.md -recursive-include dependencies/parsers/nexus/nexusutils *.py -include dependencies/parsers/nexus/nexusutils/dataconverter/readers/hall/enum_map.json -recursive-include dependencies/parsers/nexus/nexusutils/definitions *.xml *.xsd +recursive-include dependencies/parsers/nexus/pynxtools *.py +include dependencies/parsers/nexus/pynxtools/dataconverter/readers/hall/enum_map.json +recursive-include dependencies/parsers/nexus/pynxtools/definitions *.xml *.xsd include dependencies/parsers/workflow/README.md recursive-include dependencies/parsers/workflow/workflowparsers *.py nomad_plugin.yaml diff --git a/README.md b/README.md index 98258a70cc29f91412242df157b0386acfd8df5e..61d589e0a208939f5486dd41c36da1175115aeeb 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ [](https://gitlab.mpcdf.mpg.de/nomad-lab/nomad-FAIR/commits/develop) [](https://gitlab.mpcdf.mpg.de/nomad-lab/nomad-FAIR/commits/develop) [](https://gitlab.mpcdf.mpg.de/nomad-lab/nomad-FAIR/commits/develop) +[](https://doi.org/10.21105/joss.05388) **NOMAD** is a web-based research data management software for materials science. You find the official project homepage and documentation here [https://nomad-lab.eu](https://nomad-lab.eu). @@ -35,12 +36,33 @@ For a general project overview visit the official project page [https://nomad-la - [install and use NOMAD as Python package (to use our APIs or parsers)](https://nomad-lab.eu/prod/v1/docs/pythonlib.html) - [install NOMAD Oasis](https://nomad-lab.eu/prod/v1/docs/oasis.html) +Your current citation section is clear and provides both a human-readable citation and a BibTeX entry, which is great for accessibility and ease of use for different people. However, there are a few minor adjustments and improvements that could be made for clarity and professionalism. Here's a revised version: + +## Citing NOMAD + +If you use this software in your research, for data sharing, or in your lab, we encourage you to cite the following [paper](https://doi.org/10.21105/joss.05388). + +``` +Scheidgen et al., (2023). NOMAD: A distributed web-based platform for managing materials science research data. Journal of Open Source Software, 8(90), 5388, https://doi.org/10.21105/joss.05388 +``` + +For citation in academic works, you can use this [BibTeX file](docs/assets/joss_paper.bib). + ## Change log Omitted versions are plain bugfix releases with only minor changes and fixes. The file [`CHANGELOG.md`](https://gitlab.mpcdf.mpg.de/nomad-lab/nomad-FAIR/-/blob/develop/CHANGELOG.md) contains much more detailed information about changes and fixes in the released versions. +### v1.2.2 +- Added gunicron multi-process manager to serve the app. + +### v1.2.1 +- CLI utility to export archive data +- Added authentication for mongo and elastic use +- YAML linting plugin for NOMAD schemas +- Refactored the tabular parser + ### v1.2.0 - Restructured documentation - More how-to guides and learning material diff --git a/dependencies/nomad-remote-tools-hub b/dependencies/nomad-remote-tools-hub index e2903bf942b6823d6c0ea6d3ff7b3db67df28895..b0f4c076d1feef4c1a28a311add495a5dc69b76c 160000 --- a/dependencies/nomad-remote-tools-hub +++ b/dependencies/nomad-remote-tools-hub @@ -1 +1 @@ -Subproject commit e2903bf942b6823d6c0ea6d3ff7b3db67df28895 +Subproject commit b0f4c076d1feef4c1a28a311add495a5dc69b76c diff --git a/dependencies/parsers/atomistic b/dependencies/parsers/atomistic index a8354be2d77918384abf02129175a0765774fbc2..33ae2ef4ed364de97b2575c0ae54fb8741a0e133 160000 --- a/dependencies/parsers/atomistic +++ b/dependencies/parsers/atomistic @@ -1 +1 @@ -Subproject commit a8354be2d77918384abf02129175a0765774fbc2 +Subproject commit 33ae2ef4ed364de97b2575c0ae54fb8741a0e133 diff --git a/dependencies/parsers/eelsdb b/dependencies/parsers/eelsdb index 6bceb2fbec7a7e67f7b40845b9481eda2b7a6674..44d81d4dc5a5bc438a4cee00dd3703458fa1f786 160000 --- a/dependencies/parsers/eelsdb +++ b/dependencies/parsers/eelsdb @@ -1 +1 @@ -Subproject commit 6bceb2fbec7a7e67f7b40845b9481eda2b7a6674 +Subproject commit 44d81d4dc5a5bc438a4cee00dd3703458fa1f786 diff --git a/dependencies/parsers/electronic b/dependencies/parsers/electronic index df815b269879b7e7c31f33e7a8a1ce280394d187..6f09584e8aab77231d62c81c7194c1dda3868fe1 160000 --- a/dependencies/parsers/electronic +++ b/dependencies/parsers/electronic @@ -1 +1 @@ -Subproject commit df815b269879b7e7c31f33e7a8a1ce280394d187 +Subproject commit 6f09584e8aab77231d62c81c7194c1dda3868fe1 diff --git a/dependencies/parsers/nexus b/dependencies/parsers/nexus index e7fa508ed8ead8d40687db3676a3c3abc37129d2..57a90384b0b85fa5fb1f5deabbac84ae83138bca 160000 --- a/dependencies/parsers/nexus +++ b/dependencies/parsers/nexus @@ -1 +1 @@ -Subproject commit e7fa508ed8ead8d40687db3676a3c3abc37129d2 +Subproject commit 57a90384b0b85fa5fb1f5deabbac84ae83138bca diff --git a/dependencies/parsers/workflow b/dependencies/parsers/workflow index da3605865a2121e2b957f27c17ac450fdadc9ecc..988344e28ee244dc9d806a28b5159bd2567ec953 160000 --- a/dependencies/parsers/workflow +++ b/dependencies/parsers/workflow @@ -1 +1 @@ -Subproject commit da3605865a2121e2b957f27c17ac450fdadc9ecc +Subproject commit 988344e28ee244dc9d806a28b5159bd2567ec953 diff --git a/docs/apis/api.md b/docs/apis/api.md index 509d83f3ecb1903e3555a7f16959c982eefd9159..1d57adcafe62000dc36790c13d7d75fce4b5487e 100644 --- a/docs/apis/api.md +++ b/docs/apis/api.md @@ -2,7 +2,7 @@ This guide is about using NOMAD's REST APIs directly, e.g. via Python's *request To access the processed data with our client library `nomad-lab` follow [How to access the processed data](archive_query.md). You watch our -[video tutorial on the API](../tutorial.md#access-data-via-api). +[video tutorial on the API](../tutorial/access_api.md#access-data-via-api). ## Different options to use the API @@ -250,7 +250,7 @@ the API: - Raw files, the files as they were uploaded to NOMAD. - Archive data, all of the extracted data for an entry. -There are also different entities (see also [Datamodel](../learn/basics.md)) with different functions in the API: +There are also different entities (see also [Datamodel](../explanation/basics.md)) with different functions in the API: - Entries - Uploads @@ -390,6 +390,21 @@ To use authentication in the dashboard, simply use the Authorize button. The dashboard GUI will manage the access token and use it while you try out the various operations. +#### App token + +If the short-term expiration of the default *access token* does not suit your needs, +you can request an *app token* with a user-defined expiration. For example, you can +send the GET request `/auth/app_token?expires_in=86400` together with some way of +authentication, e.g. header `Authorization: Bearer <access token>`. The API will return +an app token, which is valid for 24 hours in subsequent request headers with the format +`Authorization: Bearer <app token>`. The request will be declined if the expiration is +larger than the maximum expiration defined by the API config. + +!!! warning + Despite the name, the app token is used to impersonate the user who requested it. + It does not discern between different uses and will only become invalid once it + expires (or when the API's secret is changed). + ## Search for entries See [getting started](#getting-started) for a typical search example. Combine the [different diff --git a/docs/assets/joss_paper.bib b/docs/assets/joss_paper.bib new file mode 100644 index 0000000000000000000000000000000000000000..e2f306812f3d76956b92f242dd30368736842989 --- /dev/null +++ b/docs/assets/joss_paper.bib @@ -0,0 +1,13 @@ + +@article{Scheidgen2023, + author = {Scheidgen, Markus and Himanen, Lauri and Ladines, Alvin Noe and Sikter, David and Nakhaee, Mohammad and Fekete, Ádám and Chang, Theodore and Golparvar, Amir and Márquez, José A. and Brockhauser, Sandor and Brückner, Sebastian and Ghiringhelli, Luca M. and Dietrich, Felix and Lehmberg, Daniel and Denell, Thea and Albino, Andrea and Näsström, Hampus and Shabih, Sherjeel and Dobener, Florian and Kühbach, Markus and Mozumder, Rubel and Rudzinski, Joseph F. and Daelman, Nathan and Pizarro, José M. and Kuban, Martin and Salazar, Cuauhtemoc and Ondračka, Pavel and Bungartz, Hans-Joachim and Draxl, Claudia}, + title = {NOMAD: A distributed web-based platform for managing materials science research data}, + journal = {Journal of Open Source Software}, + volume = {8}, + number = {90}, + pages = {5388}, + year = {2023}, + publisher = {The Open Journal}, + doi = {10.21105/joss.05388}, + url = {https://doi.org/10.21105/joss.05388} +} diff --git a/docs/data/upload.md b/docs/data/upload.md index 8de4e64359dd7583dc1039a106b5a1fec9a0c033..b97773c0fa0d565990bda80647e2537c713b4c5d 100644 --- a/docs/data/upload.md +++ b/docs/data/upload.md @@ -1,4 +1,4 @@ -This guide describes how to upload data in NOMAD supported file formats. You find a +This guide describes how to upload data in NOMAD [supported file formats](../reference/parsers.md). You find a list of supported formats on top of each upload page, see below. ## Preparing files @@ -10,11 +10,14 @@ NOMAD will simply extract them and consider the whole directory structure within ## Create an upload and add files -Open [NOMAD](https://nomad-lab.eu/prod/v1) and log in (you need to create an account first). +Open [NOMAD](https://nomad-lab.eu/prod/v1) and log in; if you don't have a NOMAD account, please create one. Go to `PUBLISH` / `Uploads`. Here you can create an upload with the `CREATE A NEW UPLOAD` button. This will bring you to the upload page. +Before you start, make sure that the size of your data does not exceed the [upload limits](#upload-limits). If it does, please contact us. + + You can drop your files on (or click) the `CLICK OR DROP FILES` button. On top you will see a list of supported file formats and details on the files to upload. You can also go to the `FILES` tab. Here you can create directories and drop files into directories. @@ -22,16 +25,16 @@ You can also go to the `FILES` tab. Here you can create directories and drop fil ## Processing files NOMAD interprets your files. It checks each file and recognizes the main output file of the -supported codes. NOMAD creates an entry for this *mainfile* that represents the respective +supported codes. NOMAD creates an entry for this **mainfile** that represents the respective data of this code run, experiment, etc. -While you can browse all files of an upload from its *upload page*, NOMAD only -allows to search for such recognized *mainfiles*. As long as your upload does not contain any +While you can browse all files of an upload from its **upload page**, NOMAD only +allows to search for such recognized **mainfiles**. As long as your upload does not contain any files that are recognized by NOMAD, you cannot publish the data. However, all files that are associated to a recognized *mainfile* by being in the -same directory are displayed as *auxiliary* files next to the entry represented -by the *mainfile*. +same directory are displayed as **auxiliary** files next to the entry represented +by the **mainfile**. @@ -93,7 +96,7 @@ not remove entries. - One upload cannot exceed **32 GB** in size. - Only **10 non published uploads** are allowed per user. -- Only uploads with at least one recognized entry can be published. See also [supported codes](#supported-codes) below. +- Only uploads with at least one recognized entry can be published. See also [supported codes/formats](../reference/parsers.md) below. ## Strategies for large amounts of data @@ -120,7 +123,7 @@ If you provide data for a potentially large amount of entries, it might be advis to provide *user metadata* via file. See [user metadata](#user-metadata) above for details. To further automate, you can also upload and directly publish data. After performing some -smaller test uploads, you should consider to skip our staging and publish the upload +smaller test uploads, you should consider skipping our staging and publish the upload right away. This can save you some time and additional API calls. The upload endpoint has a parameter `publish_directly`. You can modify the upload command you get on the upload page as follows: diff --git a/docs/develop/code.md b/docs/develop/code.md index db475e7fce3d5c1f8ff1acdd269956d0f7b431c9..e207674c34a61ff4d6a5fbabbb2fac2502ae514f 100644 --- a/docs/develop/code.md +++ b/docs/develop/code.md @@ -1,73 +1,118 @@ +# How to navigate the code + NOMAD is a complex project with lots of parts. This guide gives you a rough overview -about the code-base and ideas to what to look at first. +about the codebase and ideas about what to look at first. ## Git Projects There is one [main NOMAD project](https://gitlab.mpcdf.mpg.de/nomad-lab/nomad-FAIR) (and its [fork on GitHub](https://github.com/nomad-coe/nomad)). This project contains -all the framework and infrastructure code. It instigates all checks, builds, and deployments -for the public NOMAD service, the NOMAD Oasis, and the `nomad-lab` Python package. All -contributions to NOMAD have to go through this project eventually. +all the framework and infrastructure code. It instigates all checks, builds, and +deployments for the public NOMAD service, the NOMAD Oasis, and the `nomad-lab` Python +package. All contributions to NOMAD have to go through this project eventually. All (Git) projects that NOMAD depends on are either a Git submodule (you find -them all in the `/dependencies` directory or its subdirectories) or they are -listed as PyPI packages in the `/pyproject.toml` of the main project (or one of its +them all in the `dependencies` directory or its subdirectories) or they are +listed as PyPI packages in the `pyproject.toml` of the main project (or one of its submodules). -You can also have a look at the [list of parsers](../reference/parsers.md) and [built-in plugins](../reference/plugins.md) -that constitute the majority of these projects. The only other projects are -[matid](https://github.com/SINGROUP/matid), [density of state fingerprints](https://gitlab.mpcdf.mpg.de/nomad-lab/nomad-dos-fingerprints), and the [NOMAD Remote Tools Hub tools](https://gitlab.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub). +You can also have a look at the [list of parsers](../reference/parsers.md) and +[built-in plugins](../reference/plugins.md) that constitute the majority of these +projects. The only other projects are [MatID](https://github.com/nomad-coe/matid), +[DOS fingerprints](https://gitlab.mpcdf.mpg.de/nomad-lab/nomad-dos-fingerprints), +and the +[NOMAD Remote Tools Hub](https://gitlab.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub). !!! note - The GitLab organization [nomad-lab](https://gitlab.mpcdf.mpg.de/nomad-lab) and the GitHub organizations for [FAIRmat](https://github.com/fairmat-nfdi) and - the [NOMAD CoE](https://github.com/nomad-coe) all represent larger infrastructure and research projects, and - they include many other Git projects that are not related. When navigating the - code-base only follow the submodules. + The GitLab organization [nomad-lab](https://gitlab.mpcdf.mpg.de/nomad-lab) and the + GitHub organizations for [FAIRmat](https://github.com/fairmat-nfdi) and the + [NOMAD CoE](https://github.com/nomad-coe) all represent larger infrastructure and + research projects, and they include many other Git projects that are not related. + When navigating the codebase, only follow the submodules. ## Python code There are three main directories with Python code: -- `/nomad`: The actual NOMAD code. It is structured into more subdirectories and modules. -- `/tests`: Tests ([pytest](https://docs.pytest.org)) for the NOMAD code. It follows the same module structure, but Python files -are prefixed with `test_`. -- `/examples`: This contains a few small Python scripts that might be linked in the documentation. - -The `/nomad` directory contains the following "main" modules. This list is not extensive, but -should help you to navigate the code base: - -- `config`: NOMAD is configured through the `nomad.yaml` file. This contains all the ([pydantic](https://docs.pydantic.dev/)) models and default config parameters. -- `utils`: Somewhat self-explanatory; notable features: the structured logging system ([structlog](https://www.structlog.org/)) and id generation and hashes. -- `units`: The unit and unit conversion system based on [Pint](https://pint.readthedocs.io). -- `app`: The [fast-api](https://fastapi.tiangolo.com/) APIs: v1 and v1.2 NOMAD APIs, [OPTIMADE](https://www.optimade.org/), [DCAT](https://www.w3.org/TR/vocab-dcat-2/), [h5grove](https://github.com/silx-kit/h5grove), and more. -- `cli`: The command line interface (based on [click](https://click.palletsprojects.com)). Subcommands are structured into submodules. -- `parsing`: The base classes for parsers, matching functionality, parser initialization, some fundamental parsers like the *archive* parser. See also the docs on [processing](../learn/basics.md#parsing). -- `normalizing`: All the normalizers. See also the docs on [processing](../learn/basics.md#normalizing). -- `metainfo`: The metainfo system, e.g. the schema language that NOMAD uses. -- `datamodel`: The built-in schemas (e.g. `nomad.datamodel.metainfo.simulation` used by all the theory parsers). The base sections and section for the shared entry structure. See also the docs on the [datamodel](../learn/data.md) and [processing](../learn/basics.md). -- `search`: The interface to [elasticsearch](https://www.elastic.co/guide/en/enterprise-search/current/start.html). -- `processing`: Its all about processing uploads and entries. The interface to [celery](https://docs.celeryq.dev/en/stable/) and [mongodb](https://www.mongodb.com). -- `files`: Functionality to main the files for uploads in staging and published. The interface to the file system. -- `archive`: Functionality to store and access archive files. This is the storage format for all processed data in nomad. See also the docs on [structured data](../learn/data.md). +- `nomad`: The actual NOMAD code. It is structured into more subdirectories and modules. + +- `tests`: Tests ([pytest](https://docs.pytest.org)) for the NOMAD code. + It follows the same module structure, but Python files are prefixed with `test_`. + +- `examples`: A few small Python scripts that might be linked in the documentation. + +The `nomad` directory contains the following "main" modules. This list is not extensive +but should help you to navigate the codebase: + +- `app`: The [FastAPI](https://fastapi.tiangolo.com/) APIs: v1 and v1.2 NOMAD APIs, + [OPTIMADE](https://www.optimade.org/), [DCAT](https://www.w3.org/TR/vocab-dcat-2/), + [h5grove](https://github.com/silx-kit/h5grove), and more. + +- `archive`: Functionality to store and access archive files. This is the storage format + for all processed data in NOMAD. See also the docs on + [structured data](../explanation/data.md). + +- `cli`: The command line interface (based on [Click](https://click.palletsprojects.com)). + Subcommands are structured into submodules. + +- `config`: NOMAD is configured through the `nomad.yaml` file. This contains all the + ([Pydantic](https://docs.pydantic.dev/)) models and default config parameters. + +- `datamodel`: The built-in schemas (e.g. `nomad.datamodel.metainfo.simulation` used by + all the theory parsers). The base sections and section for the shared entry structure. + See also the docs on the [datamodel](../explanation/data.md) and + [processing](../explanation/basics.md). + +- `metainfo`: The Metainfo system, e.g. the schema language that NOMAD uses. + +- `normalizing`: All the normalizers. See also the docs on + [processing](../explanation/basics.md#normalizing). + +- `parsing`: The base classes for parsers, matching functionality, parser initialization, + some fundamental parsers like the *archive* parser. See also the docs on + [processing](../explanation/basics.md#parsing). + +- `processing`: It's all about processing uploads and entries. The interface to + [Celery](https://docs.celeryq.dev/en/stable/) and [MongoDB](https://www.mongodb.com). + +- `units`: The unit and unit conversion system based on + [Pint](https://pint.readthedocs.io). + +- `utils`: Utility modules, e.g. the structured logging system + ([structlog](https://www.structlog.org/)), id generation, and hashes. + +- `files.py`: Functionality to maintain the files for uploads in staging and published. + The interface to the file system. + +- `search.py`: The interface to + [Elasticsearch](https://www.elastic.co/guide/en/enterprise-search/current/start.html). ## GUI code -The NOMAD UI is written as a [react](https://react.dev/) single page application (SPA). It uses (among many other libraries) -[MUI](https://mui.com/), [plotly](https://plotly.com/python/), and [D3](https://d3js.org/). The GUI code is maintained in the `/gui` directory. Most relevant code -can be found in `/gui/src/components`. The application entrypoint is `/gui/src/index.js`. +The NOMAD UI is written as a [React](https://react.dev/) single-page application (SPA). It +uses (among many other libraries) [MUI](https://mui.com/), +[Plotly](https://plotly.com/python/), and [D3](https://d3js.org/). The GUI code is +maintained in the `gui` directory. Most relevant code can be found in +`gui/src/components`. The application entry point is `gui/src/index.js`. ## Documentation The documentation is based on [MkDocs](https://www.mkdocs.org/). The important files and directories are: -- [/docs](https://gitlab.mpcdf.mpg.de/nomad-lab/nomad-FAIR/-/tree/develop/docs): Contains all the markdown files that contribute to the documentation system. -- [/mkdocs.yml](https://gitlab.mpcdf.mpg.de/nomad-lab/nomad-FAIR/-/tree/develop/mkdocs.yml): The index and configuration of the documentation, new files have to be added here as well. -- [/nomad/mkdocs.py](https://gitlab.mpcdf.mpg.de/nomad-lab/nomad-FAIR/-/tree/develop/nomad/mkdocs.py): Python code that defines [macros](https://mkdocs-macros-plugin.readthedocs.io/) that can be -used in markdown. +- `docs`: Contains all the Markdown files that contribute to the documentation system. + +- `mkdocs.yml`: The index and configuration of the documentation. New files have to be + added here as well. + +- `nomad/mkdocs.py`: Python code that defines + [macros](https://mkdocs-macros-plugin.readthedocs.io/) which can be used in Markdown. ## Other top-level directories -- `dependencies`: Contains all the submodules (e.g. the parsers). -- `ops`: Contains artifacts to run NOMAD components, e.g. docker-compose.yaml files and our kubernetes helm chart. -- `scripts`: Contains scripts used during build or for certain development tasks. \ No newline at end of file +- `dependencies`: Contains all the submodules, e.g. the parsers. + +- `ops`: Contains artifacts to run NOMAD components, e.g. `docker-compose.yaml` files, + and our Kubernetes Helm chart. + +- `scripts`: Contains scripts used during the build or for certain development tasks. diff --git a/docs/develop/contrib.md b/docs/develop/contrib.md index be7498bc55487069950db662381ddba6b2b3ae1b..b172b7881f50af33ad1abccf1420cd236bda1079 100644 --- a/docs/develop/contrib.md +++ b/docs/develop/contrib.md @@ -1,8 +1,12 @@ +# How to contribute + !!! note - The NOMAD source-code is maintained in two synchronized projects on [GitHub](https://github.com/nomad-coe/nomad) and - a [GitLab run by MPCDF](https://gitlab.mpcdf.mpg.de/nomad-lab/nomad-FAIR). - Everyone can contribute on GitHub. The GitLab requires an account for active contribution. + The NOMAD source code is maintained in two synchronized projects on + [GitHub](https://github.com/nomad-coe/nomad) and a + [GitLab run by MPCDF](https://gitlab.mpcdf.mpg.de/nomad-lab/nomad-FAIR). + Everyone can contribute on GitHub. The GitLab instance requires an account for active + contribution. This not an ideal situation: there are historic reasons and there is a lot of buy-in into the GitLab CI/CD system. This guide addresses contributions to both projects. @@ -11,148 +15,162 @@ ### Issue trackers -Everyone can open an issue in our main [GitHub project](https://github.com/nomad-coe/nomad): - -- [https://github.com/nomad-coe/nomad/issues/new](https://github.com/nomad-coe/nomad/issues/new) +Everyone can open a [new issue](https://github.com/nomad-coe/nomad/issues/new) in our main +[GitHub project](https://github.com/nomad-coe/nomad). -Use issues to ask questions, report bugs, or suggest features. If in doubt, use the main project -to engage with us. If you address a specific -plugin (e.g. parser), you can also post into the respective projects. See also the -list of [parsers](../reference/parsers.md) and list of [built-in plugins](../reference/plugins.md). +Use issues to ask questions, report bugs, or suggest features. If in doubt, use the main +project to engage with us. If you address a specific plugin (e.g. parser), you can also +post into the respective projects. See also the list of [parsers](../reference/parsers.md) +and the list of [built-in plugins](../reference/plugins.md). If you are a member of FAIRmat, the NOMAD CoE, or are a close collaborator, you probably have an MPCDF GitLab account (or should ask us for one). Please use the -issue tracker on our main [GitLab project](https://gitlab.mpcdf.mpg.de/nomad-lab/nomad-FAIR). +issue tracker on our main +[GitLab project](https://gitlab.mpcdf.mpg.de/nomad-lab/nomad-FAIR). This is where most of the implementation work is planned and executed. ### Issue content + A few tips that will help us to solve your issues quicker: -- Focus on the issue. You don't need to greet us or say thx and goodbye. Let's keep it technical. +- Focus on the issue. You don't need to greet us or say thanks and goodbye. Let's keep it + technical. + - Use descriptive short issue titles. Use specific words over general words. -- Describe the observed problem and not the assumed causes. Clearly separate speculation from the -problem description. -- **Bugs**: think how we could re-produce the problem: - - What nomad URL are you using (UI), which package version (Python)? +- Describe the observed problem and not the assumed causes. Clearly separate speculation + from the problem description. + +- **Bugs**: Think how we could reproduce the problem: + + - What NOMAD URL are you using (UI), which package version (Python)? - Is there an upload or entry id that we can look at? - Example files or code snippets? - - Don't screenshot code, copy&paste please. + - Don't screenshot code, copy and paste instead. Use + [code blocks](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/creating-and-highlighting-code-blocks#syntax-highlighting). -- **Features**: augment your feature descriptions with a use-case that helps us understand the feature and its scope. +- **Features**: Augment your feature descriptions with a use case that helps us understand + the feature and its scope. ### Issues labels (GitLab) -On the main GitLab project, there are three main categories for labels. Ideally each issue gets one of each category: +On the main GitLab project, there are three main categories for labels. Ideally, each +issue gets one of each category: -- The *state* labels (grey). Those are used to manage when and how the issue is addressed. -This should be given the NOMAD team member who is currently responsible to moderate the -development. If its a simple fix and you want to do it yourself, assign yourself and use +- *State* label (grey): These are used to manage when and how the issue is addressed. This +should be given by the NOMAD team member who is currently responsible to moderate the +development. If it's a simple fix and you want to do it yourself, assign yourself and use "bugfixes". -- The *component* label (purple). These denote the part of the NOMAD software that is -most likely effected. Multiple purple labels are possible. +- *Component* label (purple): These denote the part of the NOMAD software that is most +likely effected. Multiple purple labels are possible. -- The *kind* label (red). Wether this is a bug, feature, refactoring, or documentation issue. +- *Kind* label (red): Whether this is a bug, feature, refactoring, or documentation issue. Unlabeled issues will get labeled by the NOMAD team as soon as possible. You can provide labels yourself. ## Documentation -The documentation is part of NOMAD's main source code project. You can raise issues -about the documentation in the usual way (see [above](#issues)). To make changes, -create a [merge](#merge-requests-gitlab) or [pull](#pull-requests-github) request. +The documentation is part of NOMAD's main source code project. You can +[raise issues](#issues) about the documentation as usual. To make changes, create a +[merge](#merge-requests-mr-gitlab) or [pull](#pull-requests-pr-github) request. See also the [documentation part](./code.md#documentation) in our code navigation guide. ## Plugins -Also read the guide on [how to develop, publish, and distribute plugins](../plugins/plugins.md). +Also read the guide on +[how to develop, publish, and distribute plugins](../plugins/plugins.md). ### Built-in plugins (and submodules) -Most plugins that are maintained by the NOMAD team are built-in plugins (e.g. all the parsers). -These plugins are also available on the public NOMAD service. +Most plugins that are maintained by the NOMAD team are built-in plugins (e.g. all the +parsers). These plugins are also available on the public NOMAD service. -These plugins are tight to the main project's source-code via submodules. They are -included in the built and therefore automatically distributed as part of the -NOMAD docker images and Python package. +These plugins are tied to the main project's source code via submodules. They are included +in the build and therefore automatically distributed as part of the NOMAD docker images +and Python package. To contribute to these plugins, use the respective GitHub projects. See also the -list of [parsers](../reference/parsers.md) and list of [built-in plugins](../reference/plugins.md). -The same rules apply there. A merge request to the main project will also be required to update the -submodule. - -All these submodules are placed in the `/dependencies` directory. After merging or checking out, -you have to make sure that the modules are updated to not accidentally commit old -submodule commits again. Usually you do the following to check if you really have a -clean working directory. - -```sh - git checkout something-with-changes - git submodule update --init --recursive - git status +list of [parsers](../reference/parsers.md) and the list of +[built-in plugins](../reference/plugins.md). The same rules apply there. A merge request +to the main project will also be required to update the submodule. + +All these submodules are placed in the `dependencies` directory. After merging or +checking out, you have to make sure that the modules are updated to not accidentally +commit old submodule commits again. Usually you do the following to check if you really +have a clean working directory: + +```shell +git checkout something-with-changes +git submodule update --init --recursive +git status ``` ### 3rd-party plugins Please open an issue, if you want to announce a plugin or contribute a plugin as a -potential built-in plugin (e.g. that is part of the public NOMAD service). +potential built-in plugin (i.e. as part of the public NOMAD service). ## Branches and Tags -On the [main GitLab project](https://gitlab.mpcdf.mpg.de/nomad-lab/nomad-FAIR), we use *protected* and *feature* branches. -You must not (even if you have the rights) commit to protected branches directly. +On the [main GitLab project](https://gitlab.mpcdf.mpg.de/nomad-lab/nomad-FAIR) we use +*protected* and *feature* branches. You must not commit to protected branches directly +(even if you have the rights). + +- `develop`: a *protected* branch and the *default* branch. It contains the latest, + potentially unreleased, features and fixes. This is the main working branch. -- `develop`, a *protected* branch and the *default* branch. It contains the latest, potentially unreleased, features and fixes. -This is the main working branch. -- `master`, a *protected* branch. Represents the latest stable -release (usually what the current official NOMAD runs on). +- `master`: a *protected* branch. Represents the latest stable release (usually what the + current official NOMAD runs on). -- *feature branches*, this is where you work. Typically they are automatically -(use the *create merge request* button) named after issues: `<issue-number>-<issue-title>`. +- *feature branches*: this is where you work. Typically they are automatically (use the + "Create merge request" button) named after issues: `<issue-number>-<issue-title>`. -- `vX.X.X` or `vX.X.XrcX` *tags* for (pre-)releases. +- `vX.X.X` or `vX.X.XrcX`: *tags* for (pre-)releases. -The `develop` branch and release tags are automatically synchronized to the [GitHub project](https://github.com/nomad-coe/nomad). -Otherwise, this project is mostly the target for [pull requests](#pull-requests-github) -and does not contain other relevant branches. +The `develop` branch and release tags are automatically synchronized to the +[GitHub project](https://github.com/nomad-coe/nomad). Otherwise, this project is mostly +the target for [pull requests](#pull-requests-pr-github) and does not contain other relevant +branches. -## Merge requests (GitLab) +## Merge requests (MR, GitLab) ### Create the MR -Ideally have an issue first and create the merge request (and branch) in the -GitLab UI. There is an *create merge request* button on each issue. -When done manually, branches should be based on `develop` and merge request should target `develop` as well. +Ideally, have an issue first and create the merge request (and branch) in the GitLab UI. +There is a "Create merge request" button on each issue. When done manually, branches +should be based on the `develop` branch and merge request should target `develop` as well. ### Commit -Make sure, you follow our [coding guide-lines](./guides.md) and [setup your IDE](./setup.md#setup-your-ide) to enforce -stylechecks, linting, and static analysis. You can also run [tests locally](./setup.md#running-tests). -Try to keep a clean commit history and follow our [Git tips](#git-tips-for-a-clean-history). +Make sure you follow our [code guidelines](./guides.md) and +[set up your IDE](./setup.md#set-up-your-ide) to enforce style checks, linting, and static +analysis. You can also run [tests locally](./setup.md#running-tests). Try to keep a clean +commit history and follow our [Git tips](#tips-for-a-clean-git-history). Usually only one person is working on a feature branch. Rebasing, amendments, and force pushes are allowed. ### Changelog + We have an automatically generated changelog in the repository file `CHANGELOG.md`. This changelog is produced from commit messages and to maintain this file, you need to write commit messages accordingly. -To trigger a changelog entry, your commit needs to end with a so called *git trailer* -called `Changelog`. A typical commit message for a changelog entry should look like this: +To trigger a changelog entry, your commit needs to end with a so-called *Git trailer* +named `Changelog`. A typical commit message for a changelog entry should look like this: -``` -A brief one line title of the change. +```text +A brief one-line title of the change. -A longer *markdown* formatted description of the change. Keep in mind that gitlab -will automatically link the changelog entry with this commit and a respective merge -requests. You do not need to manually link to any gitlab resources. +A longer *Markdown*-formatted description of the change. Keep in mind that GitLab will +automatically link the changelog entry with this commit and a respective merge requests. +You do not need to manually link to any GitLab resources. -This could span multiple paragraphs. However, keep it short. Documentation should -go into the actual documentation, but you should mention breaks in backward compatibility, +This could span multiple paragraphs. However, keep it short. Documentation should go into +the actual documentation, but you should mention breaks in backward compatibility, deprecation of features, etc. Changelog: Fixed @@ -160,43 +178,46 @@ Changelog: Fixed The trailer value (`Fixed` in the example) has to be one of the following values: -- `Fixed`, for bugfixes. -- `Added`, for new features. -- `Changed`, for general improvements, e.g. updated documentation, refactoring, +- `Fixed` for bugfixes. + +- `Added` for new features. + +- `Changed` for general improvements, e.g. updated documentation, refactoring, improving performance, etc. These categories are consistent with [keepachangelog.com](https://keepachangelog.com/). -For more information about the changelog generation read the [gitlab documentation](https://docs.gitlab.com/ee/api/repositories.html#add-changelog-data-to-a-changelog-file). +For more information about the changelog generation read the +[GitLab documentation](https://docs.gitlab.com/ee/api/repositories.html#add-changelog-data-to-a-changelog-file). ### CI/CD pipeline and review If you push to your merge requests, GitLab will run an extensive CI/CD pipeline. You need to pay attention to failures and resolve them before review. -To review GUI changes, you can deploy your branch to the dev-cluster via CI/CD actions. +To review GUI changes, you can deploy your branch to the dev cluster via CI/CD actions. -Find someone on the NOMAD developer team to review your MR and request a review through -GitLab. The review should be performed shortly and should not stall the MR longer than -two full work days. +Find someone on the NOMAD developer team to review your merge request and request a review +through GitLab. The review should be performed shortly and should not stall the merge +request longer than two full work days. -The reviewer needs to be able to learn about the merge requests and what it tries -to achieve. This information can come from: +The reviewer needs to be able to learn about the merge request and what it tries to +achieve. This information can come from: - the linked issue -- the merge request description (might contain your commit message) and your comments -- threads that were open by the author to attach comments to specific places in the code +- the merge request description (may contain your commit message) and your comments +- threads that were opened by the author to attach comments to specific places in the code -The reviewer will open *threads* that need to be solved by the MR author. If all -threads are resolved, you can re-request a review. +The reviewer will open *threads* that need to be solved by the merge request author. If +all threads are resolved, you can request another review. For complex merge requests, you can also comment your code and create *threads* for the reviewer to resolve. This will allow you to explain your changes. ### Merge -The branch should be recently rebase with develop to allow a smooth merge: +The branch should be recently rebased with `develop` to allow a smooth merge: -``` +```shell git fetch git rebase origin/develop git push origin <branch> -f @@ -205,78 +226,88 @@ git push origin <branch> -f The merge is usually performed by the merge request author after a positive review. If you could not keep a clean Git history with your commits, squash the merge request. -Make sure to added the commit messaged when squashing to have a [changelog](#changelog) entry. +Make sure to edit the commit message when squashing to have a [changelog](#changelog) +entry. Make sure to delete the branch on merge. The respective issue usually closes itself, due to the references put in by GitLab. -## Pull requests (GitHub) +## Pull requests (PR, GitHub) -You can fork the [main NOMAD project](https://github.com/nomad-coe/nomad) and create pull requests following the usual -GitHub flow. Make sure to target the `develop` branch. A team member will pickup your -pull request and automatically copy it to GitLab to run the pipeline and potentially -perform the merge. This process is made transparent in the pull request discussion. Your -commits and your authorship is maintained in this process. +You can fork the [main NOMAD project](https://github.com/nomad-coe/nomad) and create pull +requests following the usual GitHub flow. Make sure to target the `develop` branch. A team +member will pick up your pull request and automatically copy it to GitLab to run the +pipeline and potentially perform the merge. This process is made transparent in the pull +request discussion. Your commits and your authorship is maintained in this process. -Similar rules apply to all the parser and plugin projects. Here pipelines are run +Similar rules apply to all the parser and plugin projects. Here, pipelines are run directly on GitHub. A team member will review and potentially merge your pull requests. -## Git tips for a clean history +## Tips for a clean Git history -It is often necessary to consider code history to reason about potential problems in -our code. This can only be done, if we keep a "clean" history. +It is often necessary to consider code history to reason about potential problems in our +code. This can only be done if we keep a "clean" history. -- Use descriptive commit messages. Use simple verbs (*added*, *removed*, *refactored*, etc.) -name features and changed components. [Include issue numbers](https://docs.gitlab.com/ee/user/project/issues/crosslinking_issues.html) -to create links in gitlab. +- Use descriptive commit messages. Use simple verbs (*added*, *removed*, *refactored*, + etc.) name features and changed components. + [Include issue numbers](https://docs.gitlab.com/ee/user/project/issues/crosslinking_issues.html) + to create links in GitLab. -- Learn how to amend to avoid lists of small related commits. +- Learn how to *amend* to avoid lists of small related commits. -- Learn how to rebase. Only merging feature-branches should create merge commits. +- Learn how to *rebase*. Only merging feature branches should create merge commits. - Squash commits when merging. -- Some videos on more advanced Git usage: https://youtube.be/Uszj_k0DGsg, https://youtu.be/qsTthZi23VE +- Some videos on more advanced Git usage: + + - [Tools & Concepts for Matering Version Control with Git](https://youtu.be/Uszj_k0DGsg) + - [Interactive Rebase, Cherry-Picking, Reflog, Submodules, and more](https://youtu.be/qsTthZi23VE) + +### Amend -### amend While working on a feature, there are certain practices that will help us to create a clean history with coherent commits, where each commit stands on its own. -```sh - git commit --amend +```shell +git commit --amend ``` If you committed something to your own feature branch and then realize by CI that you have -some tiny error in it that you need to fix, try to amend this fix to the last commit. -This will avoid unnecessary tiny commits and foster more coherent single commits. With *amend* -you are basically adding changes to the last commit, i.e. editing the last commit. If -you push, you need to force it `git push origin feature-branch --force-with-lease`. So be careful, and -only use this on your own branches. - -### rebase -```sh - git rebase <version-branch> +some tiny error in it you need to fix, try to amend this fix to the last commit. +This will avoid unnecessary tiny commits and foster more coherent single commits. With +`--amend` you are adding changes to the last commit, i.e. editing the last commit. When +you push, you need to force it, e.g. `git push origin feature-branch --force-with-lease`. +So be careful, and only use this on your own branches. + +### Rebase + +```shell +git rebase <version-branch> ``` -Lets assume you work on a bigger feature that takes more time. You might want to merge +Let's assume you work on a bigger feature that takes more time. You might want to merge the version branch into your feature branch from time to time to get the recent changes. -In these cases, use rebase and not merge. Rebase puts your branch commits in front of the -merged commits instead of creating a new commit with two ancestors. It basically moves the +In these cases, use `rebase` and not `merge`. Rebasing puts your branch commits in front +of the merged commits instead of creating a new commit with two ancestors. It moves the point where you initially branched away from the version branch to the current position in -the version branch. This will avoid merges, merge commits, and generally leave us with a -more consistent history. You can also rebase before creating a merge request, which basically -allows no-op merges. Ideally the only real merges that we ever have, are between +the version branch. This will avoid merges, merge commits, and generally leaves us with a +more consistent history. You can also rebase before creating a merge request, which +allows no-op merges. Ideally, the only real merges that we ever have are between version branches. +### Squash -### squash -```sh - git merge --squash <other-branch> +```shell +git merge --squash <other-branch> ``` When you need multiple branches to implement a feature and merge between them, try to -use *squash*. Squashing basically puts all commits of the merged branch into a single commit. -It basically allows you to have many commits and then squash them into one. This is useful +use `--squash`. Squashing puts all commits of the merged branch into a single commit. +It allows you to have many commits and then squash them into one. This is useful if these commits were made just to synchronize between workstations, due to -unexpected errors in CI/CD, because you needed a save point, etc. Again the goal is to have -coherent commits, where each commits makes sense on its own. +unexpected errors in CI/CD, because you needed a save point, etc. Again the goal is to +have coherent commits, where each commit makes sense on its own. + +Squashing can also be applied on a selection of commits during an +[interactive rebase](https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History#_squashing). diff --git a/docs/develop/guides.md b/docs/develop/guides.md index d03d454487f26b2bbe285efead811213f80f61ea..6c5ce9e7d090a1882044a1026c584d80de66043c 100644 --- a/docs/develop/guides.md +++ b/docs/develop/guides.md @@ -1,6 +1,4 @@ ---- -title: Code guidelines ---- +# Code guidelines NOMAD has a long history and many people are involved in its development. These guidelines are set out to keep the code quality high and consistent. Please read @@ -9,70 +7,81 @@ them carefully. ## Principles and rules - simple first, complicated only when necessary -- search and adopt generic established 3rd party solutions before implementing specific solutions -- only uni directional dependencies between components/modules, no circles -- only one language: Python (except, GUI of course) + +- search and adopt generic established 3rd-party solutions before implementing specific + solutions + +- only unidirectional dependencies between components/modules, no circles + +- only one language: Python (except GUI of course) The are some *rules* or better strong *guidelines* for writing code. The following -applies to all python code (and were applicable, also to JS and other code): +applies to all Python code (and where applicable, also to Javascript and other code): -- Use an IDE (e.g. [vscode](https://code.visualstudio.com/) or otherwise automatically - enforce code ([formatting and linting](https://code.visualstudio.com/docs/python/linting)). - Use `nomad qa` before committing. This will run all tests, static type checks, linting, etc. +- Use an IDE (e.g. [VS Code](https://code.visualstudio.com/)) or otherwise automatically + enforce + [code formatting and linting](https://code.visualstudio.com/docs/python/linting). -- There is a style guide to python. Write [pep-8](https://www.python.org/dev/peps/pep-0008/) - compliant python code. An exception is the line cap at 79, which can be broken but keep it 90-ish. +- Use `nomad qa` before committing. This will run all tests, static type checks, linting, + etc. -- Test the public interface of each sub-module (i.e. python file) +- Test the public interface of each submodule (i.e. Python file). -- Be [pythonic](https://docs.python-guide.org/writing/style/) and watch - [this](https://www.youtube.com/watch?v=wf-BqAjZb8M). +- There is a style guide to Python. Write + [PEP 8](https://www.python.org/dev/peps/pep-0008/)-compliant Python code. An exception + is the line cap at 79, which can be broken but keep it 90-ish. -- Add doc-strings to the *public* interface of each sub-module (e.g. python file). Public meaning API that - is exposed to other sub-modules (i.e. other python files). +- Be [Pythonic](https://docs.python-guide.org/writing/style/) and watch + [this talk about best practices](https://www.youtube.com/watch?v=wf-BqAjZb8M). -- The project structure is according to [this guide](https://docs.python-guide.org/writing/structure/). - Keep it! +- Add docstrings to the *public* interface of each submodule (i.e. Python file). This + includes APIs that are exposed to other submodules (i.e. other Python files). -- Write tests for all contributions. +- The project structure follows + [this guide](https://docs.python-guide.org/writing/structure/). Keep it! -- Adopt *Clean Code* practices. Here is a [good introduction](https://youtu.be/7EmboKQH8lM). +- Write tests for all contributions. +- Adopt *Clean Code* practices. Here is a good + [introductory talk to Clean Code](https://youtu.be/7EmboKQH8lM). -## Enforcing Rules with CI/CD +## Enforcing rules with CI/CD These *guidelines* are partially enforced by CI/CD. As part of CI all tests are run on all -branches; further we run a *linter*, *pep8* checker, and *mypy* (static type checker). You can -run `nomad qa` to run all these tests and checks before committing. +branches; further we run a *linter*, *PEP 8* checker, and *mypy* (static type checker). +You can run `nomad qa` to run all these tests and checks before committing. -See [the contributing guide](./contrib.md) for more details on how to work with issues, branches, merge -requests, and CI/CD. +See [the contributing guide](./contrib.md) for more details on how to work with issues, +branches, merge requests, and CI/CD. ## Documenting code -Write [clean code](https://youtu.be/7EmboKQH8lM) that is easy to comprehend. +Write [Clean Code](https://youtu.be/7EmboKQH8lM) that is easy to comprehend. -However, you should document the whole publically exposed interface of a module. For Python this -include most classes and functions that you will write. For react its exported components -and their props. +However, you should document the whole publicly exposed interface of a module. For Python +this includes most classes and functions that you will write, for React its exported +components and their props. -For all functionality that is exposed to clients (APIs, CLI, schema base classes and annotations, UI functionality), -you must consider to add explanations, tutorials, and examples to the documentation system (i.e. the `/docs` folder). -This is built with [mkdocs](https://www.mkdocs.org/) and published as part of each NOMAD installation. -Also mind `/nomad/mkdocs.py` and `mkdocs.yaml` and have a look at used plugins and extra functions. -E.g. this includs generation of markdown from `/examples` or Pydantic models. +For all functionality that is exposed to clients (APIs, CLI, schema base classes and +annotations, UI functionality), you must consider to add explanations, tutorials, and +examples to the documentation system (i.e. the `docs` folder). This is built with +[mkdocs](https://www.mkdocs.org/) and published as part of each NOMAD installation. +Also mind `nomad/mkdocs.py` and `mkdocs.yaml` and have a look at used plugins and extra +functions, e.g. this includes generation of Markdown from `examples` or Pydantic models. -To document Python functions and classes, use google [docstrings](https://github.com/NilsJPWerner/autoDocstring/blob/HEAD/docs/google.md). -Use markdown if you need to add markup, but try to reduce this to a minimum. -You can use VSCode plugins like +To document Python functions and classes, use Google +[docstrings](https://github.com/NilsJPWerner/autoDocstring/blob/HEAD/docs/google.md). +Use Markdown if you need to add markup but try to reduce this to a minimum. +You can use VS Code plugins like [autoDocstring](https://github.com/NilsJPWerner/autoDocstring/tree/f7bc9f427d5ebcd87e6f5839077a87ecd1cbb404) -to help. Use single quotes (as always), pad single-line docstrings with spaces and start -multi-line ones on a new line. - Here are a few examples: +to help. +Always use single quotes, pad single-line docstrings with spaces and start multi-line ones +on a new line. +Here are a few examples: ```python def generate_uuid() -> str: - ''' Generates a base64 encoded Version 4 unique identifier. ''' + '''Generates a base64 encoded Version 4 unique identifier. ''' return base64.encode(uuid4()) @@ -94,139 +103,163 @@ def add(a: float, b: float) -> float: The only reason to comment individual lines is because there is absolutely no way to write it simple enough. The typical scenarios are: -- workarrounds to known issues with used dependencies -- complex interactions between seemingly unrelated pieces of code that cannot be resolved otherwise -- code that has to be cumbersome due to performance optimizations +- workarounds to known issues with used dependencies + +- complex interactions between seemingly unrelated pieces of code that cannot be resolved + otherwise -DO NOT out-comment code. We have git for that. +- code that has to be cumbersome due to performance optimizations +**Do not** comment out code. We have Git for that. ## Names and identifiers There is a certain terminology consistently used in this documentation and the source code. Use this terminology for identifiers. -Do not use abbreviations. There are (few) exceptions: `proc` (processing); `exc`, `e` (exception); -`calc` (calculation), `repo` (repository), `utils` (utilities), and `aux` (auxiliary). -Other exceptions are `f` for file-like streams and `i` for index running variables. -Btw., the latter is almost never necessary in python. +Do not use abbreviations. There are (few) exceptions: `proc` (processing), `exc` or +`e` (exception), `calc` (calculation), `repo` (repository), `utils` (utilities), and +`aux` (auxiliary). +Other exceptions are `f` for file-like streams and `i` for index running variables, +although the latter is almost never necessary in Python. Terms: -- upload: A logical unit that comprises a collection of files uploaded by a user, organized - in a directory structure. -- entry: An archive item, created by parsing a *mainfile*. Each entry belongs to an upload and - is associated with various metadata (an upload may have many entries). -- child entry: Some parsers generate multiple entries - a *main* entry plus some number of - *child* entries. Child entries are identified by the mainfile plus a *mainfile_key* +- *upload*: A logical unit that comprises a collection of files uploaded by a user, + organized in a directory structure. + +- *entry*: An archive item, created by parsing a *mainfile*. Each entry belongs to an + upload and is associated with various metadata (an upload may have many entries). + +- *child entry*: Some parsers generate multiple entries -- a *main* entry plus some number + of *child* entries. Child entries are identified by the *mainfile* plus a *mainfile_key* (string value). -- calculation: denotes the results of a theoretical computation, created by CMS code. - Note that entries do not have to be based on calculations; they can also be based on - experimental results. -- raw file: A user uploaded file, located somewhere in the upload's directory structure. -- mainfile: A raw file identified as parseable, defining an entry of the upload in question. -- aux file: Additional files the user uploaded within an upload. -- entry metadata: Some quantities of an entry that are searchable in NOMAD. -- archive data: The normalized data of an entry in nomad's meta-info-based format. - -Throughout nomad, we use different ids. If something -is called *id*, it is usually a random uuid and has no semantic connection to the entity -it identifies. If something is called a *hash* then it is a hash generated based on the -entity it identifies. This means either the whole thing or just some properties of -this entities. - -- The most common hashes is the `entry_hash` based on mainfile and auxfile contents. + +- *calculation*: denotes the results of either a theoretical computation created by CMS + code, or an experiment. + +- *raw file*: A user uploaded file, located somewhere in the upload's directory structure. + +- *mainfile*: A raw file identified as parsable, defining an entry of the upload in + question. + +- *aux file*: Additional files within an upload. + +- *entry metadata*: Some quantities of an entry that are searchable in NOMAD. + +- *archive data*: The normalized data of an entry in NOMAD's Metainfo-based format. + +Throughout NOMAD, we use different ids. If something is called *id*, it is usually a +random uuid and has no semantic connection to the entity it identifies. If something is +called a *hash* then it is a hash generated based on the entity it identifies. This means +either the whole thing or just some properties of this entities. + +- The most common hash is the `entry_hash` based on `mainfile` and aux file contents. + - The `upload_id` is a UUID assigned to the upload on creation. It never changes. -- The `mainfile` is a path within an upload that points to a file identified as parseable. + +- The `mainfile` is a path within an upload that points to a file identified as parsable. This also uniquely identifies an entry within the upload. + - The `entry_id` (previously called `calc_id`) uniquely identifies an entry. It is a hash over the `mainfile` and respective `upload_id`. **NOTE:** For backward compatibility, - `calc_id` is also still supported in the api, but using it is strongly discouraged. -- We often use pairs of `upload_id/entry_id`, which in many contexts allow to resolve an entry-related - file on the filesystem without having to ask a database about it. -- The `pid` or (`coe_calc_id`) is a legacy sequential interger id, previously used to identify - entries. We still store the `pid` on these older entries for historical purposes. + `calc_id` is also still supported in the API, but using it is strongly discouraged. + +- We often use pairs of `upload_id/entry_id`, which in many contexts allow to resolve an + entry-related file on the filesystem without having to ask a database about it. + +- The `pid` or (`coe_calc_id`) is a legacy sequential integer id, previously used to + identify entries. We still store the `pid` on these older entries for historical + purposes. + - Calculation `handle` or `handle_id` are created based on those `pid`. To create hashes we use :py:func:`nomad.utils.hash`. - ## Logging There are three important prerequisites to understand about nomad-FAIRDI's logging: -- All log entries are recorded in a central elastic search database. To make this database - useful, log entries must be sensible in size, frequence, meaning, level, and logger name. - Therefore, we need to follow some rules when it comes to logging. -- We use an *structured* logging approach. Instead of encoding all kinds of information +- All log entries are recorded in a central Elasticsearch database. To make this database + useful, log entries must be sensible in size, frequency, meaning, level, and logger + name. Therefore, we need to follow some rules when it comes to logging. + +- We use a *structured* logging approach. Instead of encoding all kinds of information in log messages, we use key-value pairs that provide context to a log *event*. In the - end all entries are stored as JSON dictionaries with `@timestamp`, `level`, + end, all entries are stored as JSON dictionaries with `@timestamp`, `level`, `logger_name`, `event` plus custom context data. Keep events very short, most information goes into the context. -- We use logging to inform about the state of nomad-FAIRDI, not about user - behavior, input, or data. Do not confuse this when determining the log-level for an event. + +- We use logging to inform about the state of nomad-FAIRDI, not about user behavior, + input, or data. Do not confuse this when determining the log level for an event. For example, a user providing an invalid upload file should never be an error. Please follow the following rules when logging: -- If a logger is not already provided, only use - :py:func:`nomad.utils.get_logger` to acquire a new logger. Never use the - built-in logging directly. These logger work like the system loggers, but - allow you to pass keyword arguments with additional context data. See also - the [structlog docs](https://structlog.readthedocs.io/en/stable/). -- In many context, a logger is already provided (e.g. api, processing, parser, normalizer). - This provided logger has already context information bounded. So it is important to - use those instead of acquiring your own loggers. Have a look for methods called - `get_logger` or attributes called `logger`. -- Keep events (what usually is called *message*) very short. Examples are: *file uploaded*, - *extraction failed*, etc. -- Structure the keys for context information. When you analyse logs in ELK, you will - see that the set of all keys over all log entries can be quit large. Structure your +- If a logger is not already provided, only use :py:func:`nomad.utils.get_logger` to + acquire a new logger. Never use the built-in logging directly. These loggers work like + the system loggers, but allow you to pass keyword arguments with additional context + data. See also the [structlog docs](https://structlog.readthedocs.io/en/stable/). + +- In many context, a logger is already provided (e.g. API, processing, parser, + normalizer). This provided logger has already context information bounded. So it is + important to use those instead of acquiring your own loggers. Have a look for methods + called `get_logger` or attributes called `logger`. + +- Keep events (what usually is called *message*) very short. Examples are: + *file uploaded*, *extraction failed*, etc. + +- Structure the keys for context information. When you analyze logs in ELK, you will + see that the set of all keys over all log entries can be quite large. Structure your keys to make navigation easier. Use keys like `nomad.proc.parser_version` instead of `parser_version`. Use module names as prefixes. -- Don't log everything. Try to anticipate, how you would use the logs in case of bugs, + +- Don't log everything. Try to anticipate how you would use the logs in case of bugs, error scenarios, etc. + - Don't log sensitive data. -- Think before logging data (especially dicts, list, numpy arrays, etc.). + +- Think before logging data (especially dicts, list, NumPy arrays, etc.). + - Logs should not be abused as a *printf*-style debugging tool. The following keys are used in the final logs that are piped to Logstash. -Notice that the key name is automatically formed by a separate formatter and -may differ from the one used in the actual log call. +Notice that the key name is automatically formed by a separate formatter and may differ +from the one used in the actual log call. Keys that are autogenerated for all logs: - - `@timestamp`: Timestamp for the log - - `@version`: Version of the logger - - `host`: The host name from which the log originated - - `path`: Path of the module from which the log was created - - `tags`: Tags for this log - - `type`: The *message_type* as set in the LogstashFormatter - - `level`: The log level: `DEBUG`, `INFO`, `WARNING`, `ERROR` - - `logger_name`: Name of the logger - - `nomad.service`: The service name as configured in `config.py` - - `nomad.release`: The release name as configured in `config.py` +- `@timestamp`: Timestamp for the log +- `@version`: Version of the logger +- `host`: Host name from which the log originated +- `path`: Path of the module from which the log was created +- `tags`: Tags for this log +- `type`: *message_type* as set in the LogstashFormatter +- `level`: Log level: `DEBUG`, `INFO`, `WARNING`, `ERROR` +- `logger_name`: Name of the logger +- `nomad.service`: Service name as configured in `config.py` +- `nomad.release`: Release name as configured in `config.py` Keys that are present for events related to processing an entry: - - `nomad.upload_id`: The id of the currently processed upload - - `nomad.entry_id`: The id of the currently processed entry - - `nomad.mainfile`: The mainfile of the currently processed entry +- `nomad.upload_id`: id of the currently processed upload +- `nomad.entry_id`: id of the currently processed entry +- `nomad.mainfile`: mainfile of the currently processed entry Keys that are present for events related to exceptions: - - `exc_info`: Stores the full python exception that was encountered. All - uncaught exceptions will be stored automatically here. - - `digest`: If an exception was raised, the last 256 characters of the message - are stored automatically into this key. If you wish to search for exceptions - in Kibana, you will want to use this value as it will be indexed unlike the - full exception object. +- `exc_info`: Stores the full Python exception that was encountered. All uncaught + exceptions will be stored automatically here. +- `digest`: If an exception was raised, the last 256 characters of the message are stored + automatically into this key. If you wish to search for exceptions in + [Kibana](https://www.elastic.co/de/kibana), you will want to use this value as it will + be indexed unlike the full exception object. -## Copyright Notices +## Copyright notices -We follow this [recommendation](https://www.linuxfoundation.org/blog/2020/01/copyright-notices-in-open-source-software-projects/) -of the Linux Foundation for the copyright notice that is placed on top of each source -code file. +We follow this +[recommendation of the Linux Foundation](https://www.linuxfoundation.org/blog/2020/01/copyright-notices-in-open-source-software-projects/) +for the copyright notice that is placed on top of each source code file. It is intended to provide a broad generic statement that allows all authors/contributors of the NOMAD project to claim their copyright, independent of their organization or @@ -234,11 +267,11 @@ individual ownership. You can simply copy the notice from another file. From time to time we can use a tool like [licenseheaders](https://pypi.org/project/licenseheaders/) to ensure correct -notices. In addition we keep an purely informative AUTHORS file. - +notices. In addition we keep a purely informative AUTHORS file. ## Git submodules and other "in-house" dependencies -As the NOMAD eco-systems grows, you might develop libraries that are used by NOMAD instead -of being part of its main code-base. The same guide-lines should apply. You can -use git-hub actions if you library is hosted on github to ensure automated linting and tests. +As the NOMAD ecosystem grows, you might develop libraries that are used by NOMAD instead +of being part of its main codebase. The same guidelines should apply. You can use +[GitHub Actions](https://github.com/features/actions) if your library is hosted on Github +to ensure automated linting and tests. diff --git a/docs/develop/normalizers.md b/docs/develop/normalizers.md index 82ab15e7b846addeda84f1c75834c3572fbb818a..6451afb7c2d2bbb3e4604f9d1acbdb6b3f7fcb19 100644 --- a/docs/develop/normalizers.md +++ b/docs/develop/normalizers.md @@ -4,15 +4,15 @@ A normalizer can be any Python algorithm that takes the archive of an entry as input and manipulates (usually expands) the given archive. This way, a normalizer can add -additional sections and quantities based on the information already available in the archive. +additional sections and quantities based on the information already available in the +archive. -All normalizer are executed after parsing. Normalizers are run for each entry (i.e. each +All normalizers are executed after parsing. Normalizers are run for each entry (i.e. each set of files that represent a code run). Normalizers are run in a particular order, and you can make assumptions about the availability of data created by other normalizers. A normalizer is run in any case, but it might choose not to do anything. A normalizer -can perform any operation on the archive, but in general should not alter existing information, -but only add more information. - +can perform any operation on the archive, but in general it should only add more +information, not alter existing information. ## Starting example @@ -33,15 +33,13 @@ class UnitCellVolumeNormalizer(Normalizer): You simply inherit from `Normalizer` and implement the `normalize` method. The `archive` is available as a field. There is also a logger on the object that can be used. -Be aware that the processing will already report the run of the normalizer, log its execution -time and any exceptions that might been thrown. - +Be aware that the processing will already report the run of the normalizer, log its +execution time and any exceptions that might been thrown. -Of course, if you add new information to the archive, this needs also be defined in the -metainfo. For example you could extend the section system with a special system definition +Of course, if you add new information to the archive, this also needs to be defined in the +Metainfo. For example you could extend the section system with a special system definition that extends the existing section system definition: - ```python import numpy as np from nomad.datamodel.metainfo.public import section_system as System @@ -54,13 +52,11 @@ class UnitCellVolumeSystem(System): Or you simply alter the `section_system` class (`nomad/datamodel/metainfo/public.py`). - ## System normalizer -There is a special base-class for normalizing systems that allows to run the normalization +There is a special base class for normalizing systems that allows to run the normalization on all (or only the resulting) `representative` systems: - ```python from nomad.normalizing import SystemBasedNormalizer from nomad.atomutils import get_volume @@ -73,7 +69,6 @@ class UnitCellVolumeNormalizer(SystemBasedNormalizer): The parameter `is_representative` will be true for the `representative` systems, i.e. the final step in a geometry optimization or other workflow. - ## Adding a normalizer to the processing For any new normalizer class to be recognized by the processing, the normalizer class @@ -93,16 +88,14 @@ normalizers: Iterable[Type[Normalizer]] = [ ] ``` - ## Testing a normalizer -To simply tryout a normalizer, you could use the CLI and run the parse command: +To simply try out a normalizer, you could use the CLI and run the parse command: -```sh +```shell nomad --debug parse --show-archive <path-to-example-file> ``` - -But eventually you need to add a more formal test. Place your `pytest`-tests in +But eventually you need to add a more formal test. Place your `pytest` tests in `tests/normalizing/test_unitcellvolume.py` similar to the existing tests. Necessary test data can be added to `tests/data/normalizers`. diff --git a/docs/develop/parsers.md b/docs/develop/parsers.md index 86b7caf1834e624f17e9e820db51026d6cb77163..a2c561c87c196defdb9341b59752c30eae6d8b87 100644 --- a/docs/develop/parsers.md +++ b/docs/develop/parsers.md @@ -1,74 +1,87 @@ -NOMAD uses parsers to convert raw code input and output files into NOMAD's common Archive format. This is the documentation on how to develop such a parser. +# How to write a parser + +NOMAD uses parsers to convert raw code input and output files into NOMAD's common archive +format. This is the documentation on how to develop such a parser. ## Getting started Let's assume we need to write a new parser from scratch. -First we need to install *nomad-lab* Python package to get the necessary libraries: -```sh +First we need to install the `nomad-lab` Python package to get the necessary libraries. +See [how to get started](../develop/setup.md) for the installation guide: + +```shell pip install nomad-lab ``` -We prepared an example parser project that you can work with. -```sh +We prepared an example parser in a github repository to learn how to write parsers. Clone it by: + +```shell git clone https://github.com/nomad-coe/nomad-parser-example.git --branch hello-world ``` Alternatively, you can fork the example project on GitHub to create your own parser. Clone your fork accordingly. -The project structure should be -```none -example/exampleparser/__init__.py -example/exampleparser/__main__.py -example/exampleparser/metainfo.py -example/exampleparser/parser.py -example/LICENSE.txt -example/README.md -example/setup.py +The project structure should be: + +``` +├── example +│ ├── exampleparser +│ │ ├── __init__.py +│ │ ├── __main__.py +│ │ ├── metainfo.py +│ │ ├── parser.py +│ ├── LICENSE.txt +│ ├── README.md +│ ├── setup.py ``` -Next you should install your new parser with pip. The `-e` parameter installs the parser -in *development*. This means you can change the sources without having to reinstall. -```sh +Next, you should install your new parser with pip. The `-e` parameter installs the parser +in *development*. This means you can change the sources without having to reinstall: + +```shell cd example pip install -e . ``` -The main code file `exampleparser/parser.py` should look like this: -```python -class ExampleParser(MatchingParser): - def __init__(self): - super().__init__(name='parsers/example', code_name='EXAMPLE') +The main parser class is found in `exampleparser/parser.py`: - def run(self, mainfile: str, archive: EntryArchive, logger): +```python +class ExampleParser: + def parse(self, mainfile: str, archive: EntryArchive, logger): # Log a hello world, just to get us started. TODO remove from an actual parser. logger.info('Hello World') run = archive.m_create(Run) - run.program_name = 'EXAMPLE' + run.program = Program(name='EXAMPLE') ``` -A parser is a simple program with a single class. The base class `MatchingParser` -provides the necessary interface to NOMAD. We provide some basic information -about our parser in the constructor. The *main* function `run` simply takes a filepath -and an empty archive as input. Now its up to you, to open the given file and populate the -given archive accordingly. In the plain *hello world*, we simple create a log entry, -populate the archive with a *root section* `Run`, and set the program name to `EXAMPLE`. +A parser is a simple Python module containing a single class. For simulation, the convention +for the class name is `<CodeName>Parser` e.g. `VASPParser`. It has a main function, `parse` +which takes the path to the mainfile and an empty `EntryArchive` object as input to be +populated with the parsed quantities. The development of parsers is up to each user, and +will heavily depend on what the user wants to parse. In the simple example above, we created +a logger info entry and populated the archive with a root section called `Run`. We then +created the program section and set the program name to `Example`. -You can run the parser with the included `__main__.py`. It takes a file as argument and -you can run it like this: -```sh +You can run the parser (see the included `__main__.py`) with the path to the file to be +parsed as argument: + +```shell python -m exampleparser tests/data/example.out ``` -The output should show the log entry and the minimal archive with one `section_run` and -the respective `program_name`. +The output show the log entry and the minimal archive with a `run` section and the +respective `program.name` as in the following: + ```json { - "section_run": [ + "run": [ { - "program_name": "EXAMPLE" + "program": { + "name": "EXAMPLE" + } } ] } @@ -76,16 +89,18 @@ the respective `program_name`. ## Parsing test files -Let's do some actual parsing. Here we demonstrate how to parse ASCII files with some -structure information in it. As it is typically used by materials science codes. +We will now show you how to parse ASCII files containing some structure information, a +typical output of simulation codes. -On the `master` branch of the example project, we have a more 'realistic' example: -```sh +Check out the `master` branch of the `exampleparser` project, + +```shell git checkout master ``` -This example imagines a potential code output that looks like this (`tests/data/example.out`): -```none +and examine the file to be parsed in `tests/data/example.out`: + +```text 2020/05/15 *** super_code v2 *** @@ -106,14 +121,17 @@ cell: (0, 0, 0), (1, 0, 0), (1, 1, 0) energy: 1.29372 ``` -At the top there are some general informations. Below that is a list of simulated systems with -sites and lattice describing crystal structures as well as a computed energy value as an example for -a code specific quantity from a 'magic source'. +At the top there is some general information such as date, name of the code (`super_code`) +and its version (`v2`). Then there are two systems sections (`system 1` and `system 2`) +separated with a string containing a code-specific value `magic source`. Each system section +contains data about the atom positions (`sites`), the lattice information (`latice`), +and a variable `energy`. -In order to convert the information from this file into the archive, we first have to -parse the necessary quantities: the date, system, energy, etc. The *nomad-lab* Python +In order to convert the information from this file into the archive, we first have to +parse the necessary quantities: the date, system, energy, etc. The `nomad-lab` Python package provides a `text_parser` module for declarative parsing of text files. You can -define text file parsers like this: +define text file parsers as in the following: + ```python def str_to_sites(string): sym, pos = string.split('(') @@ -121,16 +139,16 @@ def str_to_sites(string): return sym, pos -calculation_parser = UnstructuredTextFileParser(quantities=[ +calculation_parser = TextParser(quantities=[ Quantity('sites', r'([A-Z]\([\d\.\, \-]+\))', str_operation=str_to_sites), Quantity( - System.lattice_vectors, + Atoms.lattice_vectors, r'(?:latice|cell): \((\d)\, (\d), (\d)\)\,?\s*\((\d)\, (\d), (\d)\)\,?\s*\((\d)\, (\d), (\d)\)\,?\s*', repeats=False), Quantity('energy', r'energy: (\d\.\d+)'), Quantity('magic_source', r'done with magic source\s*\*{3}\s*\*{3}\s*[^\d]*(\d+)', repeats=False)]) -mainfile_parser = UnstructuredTextFileParser(quantities=[ +mainfile_parser = TextParser(quantities=[ Quantity('date', r'(\d\d\d\d\/\d\d\/\d\d)', repeats=False), Quantity('program_version', r'super\_code\s*v(\d+)\s*', repeats=False), Quantity( @@ -140,76 +158,91 @@ mainfile_parser = UnstructuredTextFileParser(quantities=[ ]) ``` -The quantities to be parsed can be specified as a list of `Quantity` objects with a name -and a *regular expression (re)* pattern. The matched value should be enclosed in a group(s) -denoted by `(...)`. -By default, the parser uses the *findall* method of `re`, hence overlap -between matches is not tolerated. If overlap cannot be avoided, you should switch to the -*finditer* method by passing *findall=False* to the parser. Multiple -matches for the quantity are returned if *repeats=True* (default). The name, data type, -shape and unit for the quantity can also be intialized by passing a metainfo Quantity. -An external function *str_operation* can also be passed to perform more specific -string operations on the matched value. A local parsing on a matched block can be carried -out by nesting a *sub_parser*. This is also an instance of the `UnstructuredTextFileParser` -with a list of quantities to parse. To access a parsed quantity, you can use the *get* -method. - -We can apply these parser definitions like this: -```sh +The quantities to be parsed can be specified as a list of `Quantity` objects in `TextParser`. +Each quantity should have a name and a *regular expression (re)* pattern to match the value. +The matched value should be enclosed in a group(s) denoted by `(...)`. In addition, we can +specify the following arguments: + +1. `findall (default=True)` Switches simultaneous matching of all quantities using `re.findall`. +In this case, overlap between matches is not tolerated, i.e. two quantities cannot share the same +block in the file. If this cannot be avoided, set `findall=False` switching to`re.finditer`. +This will perform matching one quantity at a time which is slower but with the benefit that +matching is done independently of other quantities. +2. `repeats (default=False)` Switches finding multiple matches for a quantity. By default, +only the first match is returned. +3. `str_operation (default=None)` An external function to be applied on the matched value +to perform more specific string operations. +4. `sub_parser (default=None)` A nested parser to be applied on the matched block. This can +also be a `TextParser` object with a list of quantities to be parsed or [other `FileParser` objects](#other-fileparser-classes). +5. `dtype (default=None)` The data type of the parsed value. +6. `shape (default=None)` The shape of the parsed data. +7. `unit (default=None)` The pint unit of the parsed data. +8. `flatten (default=True)` Switches splitting the parsed string into a flat list. +9. `convert (default=True)` Switches automatic conversion of parsed value. +10. `comment (default=None)` String preceding a line to ignore. + +A `metainfo.Quantity` object can also be passed as first argument in place of name in order +to define the data type, shape and unit for the quantity. `TextParser returns a dictionary +of key-value pairs, where the key is defined by the name of the quantities and the value is +based on the matched re pattern. + +To parse a file, simply do: + +```shell mainfile_parser.mainfile = mainfile mainfile_parser.parse() ``` This will populate the `mainfile_parser` object with parsed data and it can be accessed -like a Python dict with quantity names as keys: +like a Python dict with quantity names as keys or directly as attributes: + ```python -run = archive.m_create(Run) -run.program_name = 'super_code' -run.program_version = str(mainfile_parser.get('program_version')) -date = datetime.datetime.strptime( - mainfile_parser.get('date'), - '%Y/%m/%d') - datetime.datetime(1970, 1, 1) -run.program_compilation_datetime = date.total_seconds() - -for calculation in mainfile_parser.get('calculation'): - system = run.m_create(System) - - system.lattice_vectors = calculation.get('lattice_vectors') +run = Run() +run.program = Program( + name='super_code', version=mainfile_parser.get('program_version')) +date = datetime.datetime.strptime(mainfile_parser.date, '%Y/%m/%d') +run.program_compilation_datetime = date.timestamp() + +for calculation in mainfile_parser.get('calculation', []): + system = System(atoms=Atoms()) + + system.atoms.lattice_vectors = calculation.get('lattice_vectors') sites = calculation.get('sites') - system.atom_labels = [site[0] for site in sites] - system.atom_positions = [site[1] for site in sites] + system.atoms.labels = [site[0] for site in sites] + system.atoms.positions = [site[1] for site in sites] + run.system.append(system) - scc = run.m_create(SCC) - scc.single_configuration_calculation_to_system_ref = system - scc.energy_total = calculation.get('energy') * units.eV - scc.single_configuration_calculation_to_system_ref = system + calc = Calculation(energy=Energy()) + calc.system_ref = system + calc.energy.total = EnergyEntry(value=calculation.get('energy') * units.eV) magic_source = calculation.get('magic_source') if magic_source is not None: - scc.x_example_magic_value = magic_source + calc.x_example_magic_value = magic_source + run.calculation.append(calc) +archive.run.append(run) ``` -You can still run the parser on the given example file: -```sh +When the parser is run on the given example file: + +```shell python -m exampleparser tests/data/example.out ``` -Now you should get a more comprehensive archive with all the provided information from -the `example.out` file. - -** TODO more examples and an explanations for: unit conversion, logging, types, scalar, vectors, -multi-line matrices ** +you should get a more comprehensive archive with all the provided information.. ## Extending the Metainfo -The NOMAD Metainfo defines the schema of each archive. There are pre-defined schemas for -all domains (e.g. `common_dft.py` for electron-structure codes; `common_ems.py` for -experiment data, etc.). The sections `Run`, `System`, and the single configuration calculations (`SCC`) -in the example are taken fom `common_dft.py`. While this covers most of the data usually -provided in code input/output files, some data is typically format-specific and applies only -to a certain code or method. For these cases, we allow to extend the Metainfo like -this (`exampleparser/metainfo.py`): + +The NOMAD Metainfo defines the schema of each archive. There are predefined schemas for both +simulation `nomad.datamodel.metainfo.simulation` and experimental data +`nomad.datamodel.metainfo.eln`. The sections `Run`, `System`, and `Calculation` in the +example are taken from the simulation metainfo definitions. While this covers most +of the data usually provided in code input/output files, some data are typically +community-specific and applies only to a certain type of codes or methodologies.For these +cases, we allow for the extension of the definitions like this (`exampleparser/metainfo.py`): + ```python -# We extend the existing common definition of a section "single configuration calculation" -class ExampleSCC(SCC): +# We extend the existing common definition of a section "Calculation" +class ExampleCalculation(Calculation): # We alter the default base class behavior to add all definitions to the existing # base class instead of inheriting from the base class m_def = Section(extends_base_section=True) @@ -221,120 +254,141 @@ class ExampleSCC(SCC): ## Testing a parser -Until now, we simply run our parser on some example data and manually observed the output. -To improve the parser quality and ease the further development, you should get into the -habit of testing the parser. +We developed an initial parser on some example data, and learned how to print out the +output in an archive format. As a good software development practice, we have to add +testing the parser for future maintenance and to ease the future development. -We use the Python unit test framework *pytest*: -```sh -pip install pytest -``` +We use the Python unit test framework `pytest`. +A typical test would take one example file, parse it, and check assertions about the +output: -A typical test, would take one example file, parse it, and make statements about -the output. ```python def test_example(): - parser = rExampleParser() + parser = ExampleParser() archive = EntryArchive() - parser.run('tests/data/example.out', archive, logging) + parser.parse('tests/data/example.out', archive, logging) - run = archive.section_run[0] - assert len(run.section_system) == 2 - assert len(run.section_single_configuration_calculation) == 2 - assert run.section_single_configuration_calculation[0].x_example_magic_value == 42 + run = archive.run[0] + assert len(run.system) == 2 + assert len(run.calculation) == 2 + assert run.calculation[0].x_example_magic_value == 42 ``` You can run all tests in the `tests` directory like this: -```sh -pytest -svx tests + +```shell +python -m pytest -svx tests ``` You should define individual test cases with example files that demonstrate certain features of the underlying code/format. -## Structured data files with numpy -**TODO: examples** - -The `DataTextParser` uses the numpy.loadtxt function to load an structured data file. -The loaded data can be accessed from property *data*. - -## XML Parser +## Other FileParser classes +Aside from `TextParser`, other `FileParser` classes are also defined. These include: -**TODO: examples** +1. `DataTextParser` uses the `numpy.loadtxt` function to load a structured data file. +The loaded data can be accessed from property `data`. -The `XMLParser` uses the ElementTree module to parse an xml file. The parse method of the -parser takes in an xpath style key to access individual quantities. By default, automatic -data type conversion is performed, which can be switched off by setting *convert=False*. +2. `XMLParser` uses the ElementTree module to parse an XML file. The `parse` method of +the parser takes in an XPath-style key to access individual quantities. By default, +automatic data type conversion is performed, which can be switched off by setting +`convert=False`. ## Add the parser to NOMAD +NOMAD has to manage multiple parsers and must decide during processing which parsers to run +on which files. To accomplish this, specific parser attributes are matched to a +file. These are specified by interfacing the parser with `MatchingParser`. There are a +couple of ways to do this, first as a plug-in (`nomad.config.__init__.py::plugins`) and +second, directly adding it to the list of parsers (`nomad.parsing.parsers.py::parsers`), +the former being the preferred route. See [how to write parser plug-ins](../plugins/parsers.md) +to learn more. -NOMAD has to manage multiple parsers and must decide during processing which parsers -to run on which files. To decide what parser is used, NOMAD processing relies on specific -parser attributes. - -Consider the example where we use the `MatchingParser` constructor to add additional -attributes that determine for which files the parser is intended for: ```python -class ExampleParser(MatchingParser): - def __init__(self): - super().__init__( - name='parsers/example', code_name='EXAMPLE', code_homepage='https://www.example.eu/', - mainfile_mime_re=r'(application/.*)|(text/.*)', - mainfile_contents_re=(r'^\s*#\s*This is example output'), - supported_compressions=["gz", "bz2", "xz"], - mainfile_alternative=False, - mainfile_contents_dict={'program': {'version': '1', 'name': 'EXAMPLE'}}) +MatchingParserInterface( + 'parsers/example', + mainfile_contents_re=(r'^\s*#\s*This is example output'), + mainfile_mime_re=r'(application/.*)|(text/.*)', + supported_compressions=["gz", "bz2", "xz"], + mainfile_alternative=False, + mainfile_contents_dict={'program': {'version': '1', 'name': 'EXAMPLE'}}) ``` -- `mainfile_mime_re`: A regular expression on the mime type of files. The parser is run only - on files with matching mime type. The mime-type is *guessed* with libmagic. -- `mainfile_contents_re`: A regular expression that is applied to the first 4k of a file. -The parser is run only on files where this matches. -- `mainfile_name_re`: A regular expression that can be used to match against the name and path of the file. -- `supported compressions`: A list of [gz, bz2], if the parser supports compressed files -- `mainfile_alternative`: If True files are mainfile if no mainfile_name_re matching file -is present in the same directory. -- `mainfile_contents_dict`: A dictionary to match the contents of the file. If provided -will load the file and match the value of the key(s) provided. +- `mainfile_mime_re`: A regular expression on the MIME type of files. The parser is run + only on files with matching MIME type. The MIME type is *guessed* with libmagic. + +- `mainfile_contents_re`: A regular expression that is applied to the first 4k characters of a file. + The parser is run only on files where this matches. + +- `mainfile_name_re`: A regular expression that can be used to match against the name and + path of the file. + +- `supported compressions`: A list of [`gz`, `bz2`] if the parser supports compressed + files. + +- `mainfile_alternative`: If `True`, a file is `mainfile` unless another file in the same + directory matches `mainfile_name_re`. + +- `mainfile_contents_dict`: A dictionary to match the contents of the file. If provided, + it will load the file and match the value of the key(s) provided. One can also specify + the keys that should be present by using the tags `__has_key`, `__has_all_keys` + and `__has_only_keys`. For example, one can have + `{'program': {'__has_all_keys': ['version', 'name']}}` to specify that `version` and `name` + must be present in the file to be matched. Not all of these attributes have to be used. Those that are given must all match in order to use the parser on a file. -The nomad infrastructure keeps a list of parser objects (in `nomad/parsing/parsers.py::parsers`). -These parsers are considered in the order they appear in the list. The first matching parser -is used to parse a given file. +The NOMAD infrastructure keeps a [list of parser](../reference/parsers.md#supported-parsers) objects (in +`nomad/parsing/parsers.py::parsers`). These parsers are considered in the order they +appear in the list. The first matching parser is used to parse a given file. + +While each parser project should provide its own tests, a test should be +added to the infrastructure parser tests (`tests/parsing/test_parsing.py`) to guarantee that +the processing runs through. -While each parser project should provide its own tests, a single example file should be -added to the infrastructure parser tests (`tests/parsing/test_parsing.py`). +Once the parser is successfully installed and added, it becomes also available through the +command line interface and normalizers are applied as well: -Once the parser is added, it becomes also available through the command line interface and -normalizers are applied as well: -```sh -nomad parser tests/data/example.out +```shell +nomad parse tests/data/example.out ``` ## Developing an existing parser + +A number of parsers are constantly being developed in NOMAD. + +| Description | Project url | +| ---------------------------- | ------------------------------------------------------ | +| electronic structure codes | <https://github.com/nomad-coe/electronic-parsers.git> | +| atomistic codes | <https://github.com/nomad-coe/atomistic-parsers.git> | +| workflow engines | <https://github.com/nomad-coe/workflow-parsers.git> | +| databases | <https://github.com/nomad-coe/database-parsers.git> | + To refine an existing parser, you should install the parser via the `nomad-lab` package: -```sh + +```shell pip install nomad-lab ``` -Close the parser project on top: -```sh +Clone the parser project: + +```shell git clone <parser-project-url> cd <parser-dir> ``` -Either remove the installed parser and pip install the cloned version: -```sh -rm -rf <path-to-your-python-env>/lib/python3.7/site-packages/<parser-module-name> +Either remove the installed parser and `pip install` the cloned version: + +```shell +rm -rf <path-to-your-python-env>/lib/python3.9/site-packages/<parser-module-name> pip install -e . ``` -Or use `PYTHONPATH` so that the cloned code takes precedence over the installed code: -```sh -PYTHONPATH=. nomad parser <path-to-example-file> +Or set `PYTHONPATH` so that the cloned code takes precedence over the installed code: + +```shell +PYTHONPATH=. nomad parse <path-to-example-file> ``` -Alternatively, you can also do a full developer setup of the NOMAD infrastructure and +Alternatively, you can also do a full [developer setup](../develop/setup.md) of the NOMAD infrastructure and enhance the parser there. diff --git a/docs/develop/search.md b/docs/develop/search.md index 0d147c47d289186fd9aa0e32245a86d287f3c1bd..c57b94a219ba3d59b738b3de507a2f30e14244c8 100644 --- a/docs/develop/search.md +++ b/docs/develop/search.md @@ -1,20 +1,20 @@ -# Extending the search +# How to extend the search ## The search indices -NOMAD uses elasticsearch as the underlying search engine. The respective indices -are automatically populate during processing and other NOMAD operations. The indices +NOMAD uses Elasticsearch as the underlying search engine. The respective indices +are automatically populated during processing and other NOMAD operations. The indices are built from some of the archive information of each entry. These are mostly the sections `metadata` (ids, user metadata, other "administrative" and "internal" metadata) -and `results` (a summary of all extracted (meta-)data). However, these sections are not -indexed verbatim. What exactly and how it is indexed is determined by the metainfo -and the `elasticsearch` metainfo extension. +and `results` (a summary of all extracted (meta)data). However, these sections are not +indexed verbatim. What exactly and how it is indexed is determined by the Metainfo +and the `elasticsearch` Metainfo extension. - -### The elasticsearch metainfo extension +### The `elasticsearch` Metainfo extension Here is the definition of `results.material.elements` as an example: -```py + +```python class Material(MSection): ... elements = Quantity( @@ -30,68 +30,73 @@ class Material(MSection): ``` Extensions are denoted with the `a_` prefix as in `a_elasticsearch`. -Since extensions can have all kinds of values, the elasticsearch extension is rather +Since extensions can have all kinds of values, the `elasticsearch` extension is rather complex and uses the `Elasticsearch` class. There can be multiple values. Each `Elasticsearch` instance configures a different part of the index. This means that the same quantity can be indexed multiple time. For example, if you need a text- and a keyword-based search for the same data. Here -is a version of the `metadata.mainfile` definition as another example: - -```py - mainfile = metainfo.Quantity( - type=str, categories=[MongoEntryMetadata, MongoSystemMetadata], - description='The path to the mainfile from the root directory of the uploaded files', - a_elasticsearch=[ - Elasticsearch(_es_field='keyword'), - Elasticsearch( - mapping=dict(type='text', analyzer=path_analyzer.to_dict()), - field='path', _es_field='') - ] - ) +is a version of the `metadata.mainfile` definition as another example: + +```python +mainfile = metainfo.Quantity( + type=str, categories=[MongoEntryMetadata, MongoSystemMetadata], + description='The path to the mainfile from the root directory of the uploaded files', + a_elasticsearch=[ + Elasticsearch(_es_field='keyword'), + Elasticsearch( + mapping=dict(type='text', analyzer=path_analyzer.to_dict()), + field='path', _es_field='') + ] +) ``` ### The different indices + The first (optional) argument for `Elasticsearch` determines where the data is indexed. There are three principle places: -- the entry index (default, `entry_type`) +- the entry index (`entry_type`, default) - the materials index (`material_type`) - the entries within the materials index (`material_entry_type`) #### Entry index + This is the default and is used even if another (additional) value is given. All data is put into the entry index. #### Materials index -This is a separate index from the entry index and contains aggregated material information. -Each document in this index represents a material. We use a hash over some material -properties (elements, system type, symmetry) to define what a material is and which entries -belong to which material. + +This is a separate index from the entry index and contains aggregated material +information. Each document in this index represents a material. We use a hash over some +material properties (elements, system type, symmetry) to define what a material is and +which entries belong to which material. Some parts of the material documents contain the material information that is always the same for all entries of this material. Examples are elements, formulas, symmetry. #### Material entries -The materials index also contains entry specific information that allows to filter -materials for the existence of entries with certain criteria. Examples are -publish status, user metadata, used method, or property data. + +The materials index also contains entry-specific information that allows to filter +materials for the existence of entries with certain criteria. Examples are publish status, +user metadata, used method, or property data. ### Adding quantities -In principle, all quantities could be added to the index, but for convention and simplicity, -only quantities defined in the sections `metadata` and `results` should be added. This -means that if you want to add custom quantities from your parser, for example, you will -also need to customize the results normalizer to copy or reference parsed data. + +In principle, all quantities could be added to the index, but for convention and +simplicity, only quantities defined in the sections `metadata` and `results` should be +added. This means that if you want to add custom quantities from your parser, for example, +you will also need to customize the results normalizer to copy or reference parsed data. ## The search API -The search API does not have to change. It automatically supports all quantities with -the eleasticsearch extensions. The keys that you can use in the API are the metainfo -paths of the respective quantities, e.g. `results.material.elements` or `mainfile` (note -that the `metadata.` prefix is always omitted). If there are multiple elasticsearch -annotations for the same quantity, all but one define a `field` parameter, which -is added to the quantity path, e.g. `mainfile.path`. +The search API does not have to change. It automatically supports all quantities with the +`elasticsearch` extension. The keys that you can use in the API are the Metainfo paths of +the respective quantities, e.g. `results.material.elements` or `mainfile` (note that the +`metadata.` prefix is always omitted). If there are multiple `elasticsearch` annotations +for the same quantity, all but one define a `field` parameter, which is added to the +quantity path, e.g. `mainfile.path`. ## The search web interface -Comming soon ... +Coming soon ... \ No newline at end of file diff --git a/docs/develop/setup.md b/docs/develop/setup.md index d9ac86ca33aa522e8c321216582bffe6281f60e9..b2ccd1f74542e2b55c398dfa90ce0f4c4cad67bd 100644 --- a/docs/develop/setup.md +++ b/docs/develop/setup.md @@ -1,134 +1,145 @@ ---- -title: Getting started ---- -# Setup a dev environment, run the app, and run test +# How to get started This is a step-by-step guide to get started with NOMAD development. You will clone -all sources, set-up a *Python* and *node* environment, install all necessary dependency, -run the infrastructure in development mode, learn to run out test-suites, and setup-up +all sources, set up a *Python* and *Node.js* environment, install all necessary dependencies, +run the infrastructure in development mode, learn to run the test suites, and set up *Visual Studio Code* for NOMAD development. -This is not about working with the NOMAD Python package. You can find the `nomad-lab` +This is not about working with the NOMAD Python package `nomad-lab`. You can find its documentation [here](../apis/pythonlib.md). ## Clone the sources -If not already done, you should clone nomad. If you have a gitlab@MPCDF account, you can clone with git URL: -``` +If not already done, you should clone NOMAD. If you have an account at the +[MPDCF Gitlab](https://gitlab.mpcdf.mpg.de/), you can clone with the SSH URL: + +```shell git clone git@gitlab.mpcdf.mpg.de:nomad-lab/nomad-FAIR.git nomad ``` -Otherwise, clone using HTTPS URL: +Otherwise, clone using the HTTPS URL: -``` +```shell git clone https://gitlab.mpcdf.mpg.de/nomad-lab/nomad-FAIR.git nomad ``` -then change directory to nomad +Then change directory to `nomad` -``` +```shell cd nomad ``` -There are several branches in the repository. The master branch contains the latest released version, -but there is also a develop (new features) and release branch (hotfixes). There are also -tags for each version called vX.X.X. Checkout the branch you want to work on. -``` +There are several branches in the repository. The `master` branch contains the latest released version, +but there is also a `develop` (new features) and `release` branch (hotfixes). There are also +tags for each version called `vX.X.X`. Check out the branch you want to work on. + +```shell git checkout develop ``` + The development branches are protected and you should create a new branch including your changes. -``` + +```shell git checkout -b <my-branch-name> ``` + This branch can be pushed to the repo, and then later may be merged to the relevant branch. -### Install sub-modules +### Install submodules -Nomad is based on python modules from the NOMAD-coe project. -This includes parsers, python-common and the meta-info. These modules are maintained as -their own GITLab/git repositories. To clone and initialize these modules, run: +Parts of the NOMAD software, such as parsers, are maintained in separate Git repositories. +These are then connected to the main repository as Git submodules. To clone and initialize +these submodules, run: -```sh +```shell git submodule update --init ``` ## Installation -### Setup a Python environment +### Set up a Python environment You should work in a Python virtual environment. -#### pyenv -The nomad code currently targets python 3.9. If your host machine has an older version installed, -you can use [pyenv](https://github.com/pyenv/pyenv) to use python 3.9 in parallel with your -system's python. +#### Pyenv + +The NOMAD code currently targets Python 3.9. If your host machine has an older version installed, +you can use [pyenv](https://github.com/pyenv/pyenv) to use Python 3.9 in parallel with your +system's Python. + +#### Virtualenv -#### virtualenv Create a virtual environment. It allows you -to keep nomad and its dependencies separate from your system's python installation. +to keep NOMAD and its dependencies separate from your system's Python installation. Make sure that the virtual environment is based on Python 3.9 or higher. -Use the built-in `venv` or (virtualenv)[https://pypi.org/project/virtualenv/] alternatively. +Use either the built-in `venv` module (see example) or [virtualenv](https://pypi.org/project/virtualenv/). -``` +```shell python3 -m venv .pyenv source .pyenv/bin/activate ``` -#### conda -If you are a conda user, there is an equivalent, but you have to install pip and the -right python version while creating the environment. -```sh +#### Conda + +If you are a conda user, there is an equivalent, but you have to install `pip` and the +right Python version while creating the environment. + +```shell conda create --name nomad_env pip python=3.9 conda activate nomad_env ``` -To install libmagick for conda, you can use (other channels might also work): -```sh +To install libmagick for Conda, you can use (other channels might also work): + +```shell conda install -c conda-forge --name nomad_env libmagic ``` #### Upgrade pip -Make sure you have the most recent version of pip: -```sh + +Make sure you have the most recent version of `pip`: + +```shell pip install --upgrade pip ``` ### Install missing system libraries (e.g. on MacOS) -Even though the NOMAD infrastructure is written in python, there is a C library -required by one of our python dependencies. Libmagic is missing on some systems. +Even though the NOMAD infrastructure is written in Python, there is a C library +required by one of our Python dependencies. Libmagic is missing on some systems. Libmagic allows to determine the MIME type of files. It should be installed on most -unix/linux systems. It can be installed on MacOS with homebrew: +Unix/Linux systems. It can be installed on MacOS with homebrew: -```sh +```shell brew install libmagic ``` If you are using a Mac with Apple Silicon, we recommend that you use rosetta, homebrew -for Intel, and install and use an Intel based Python. The second answer in this +for Intel, and install and use an Intel-based Python. The second answer in this [Stackoverflow post](https://stackoverflow.com/questions/64882584/how-to-run-the-homebrew-installer-under-rosetta-2-on-m1-macbook) describes how to use both the Apple and Intel homebrew simultaneously. -### Install nomad +### Install NOMAD + The following command can be used to install all dependencies of all submodules -and nomad itself. -``` +and NOMAD itself. + +```shell ./scripts/setup_dev_env.sh ``` ??? note "Installation details" - Here is more detailed rundown of the installation steps. First we ensure that all submodules are up-to-date: - ```sh + ```shell git submodule update --init --recursive ``` Previous build is cleaned: - ```sh + ```shell rm -rf nomad/app/static/docs rm -rf nomad/app/static/gui rm -rf site @@ -136,7 +147,7 @@ and nomad itself. All the requirements needed for development (including submodule requirements) are installed: - ```sh + ```shell pip install --prefer-binary -r requirements-dev.txt ``` @@ -144,89 +155,93 @@ and nomad itself. option will install NOMAD with symbolic links that allow you to change the code without having to reinstall after each change. - ```sh + ```shell pip install -e .[parsing,infrastructure,dev] ``` - If pip tries to use and compile sources that create errors, it can be told to prefer the binary version: + If pip tries to use and compile sources that create errors, it can be told to prefer the binary version: - ```sh + ```shell pip install -e .[parsing,infrastructure,dev] --prefer-binary ``` - The NOMAD GUI requires a static .env file that can be generated with: + The NOMAD GUI requires a static `.env` file, which can be generated with: - ```sh + ```shell python -m nomad.cli dev gui-env > gui/.env.development ``` - This file includes some of the server details that are needed so that the - GUI can make the initial connection properly. If for example you change the server + This file includes some of the server details needed so that the + GUI can make the initial connection properly. If, for example, you change the server address in your NOMAD configuration file, it will be necessary to regenerate - this .env file. In production this file will be overridden. + this `.env` file. In production this file will be overridden. In addition, you have to do some more steps to prepare your working copy to run -all the tests. See below. +all the tests, see below. ## Run the infrastructure -### Install docker -You need to install [docker](https://docs.docker.com/engine/install/). -Docker nowadays comes with `docker compose` build in. Prior, you needed to -install the standalone [docker-compose](https://docs.docker.com/compose/install/). +### Install Docker + +You need to install [Docker](https://docs.docker.com/engine/install/). +Docker nowadays comes with Docker Compose (`docker compose`) built-in. Prior, you needed to +install the standalone [Docker Compose (`docker-compose`)](https://docs.docker.com/compose/install/). ### Run required 3rd party services To run NOMAD, some 3rd party services are needed -- elastic search: nomad's search and analytics engine -- mongodb: used to store processing state -- rabbitmq: a task queue used to distribute work in a cluster +- Elasticsearch: NOMAD's search and analytics engine +- MongoDB: used to store processing state +- RabbitMQ: a task queue used to distribute work in a cluster -All 3rd party services should be run via *docker-compose* (see below). -Keep in mind that *docker-compose* configures all services in a way that mirrors -the configuration of the python code in `nomad/config.py` and the gui config in +All 3rd party services should be run via `docker compose` (see below). +Keep in mind that `docker compose` configures all services in a way that mirrors +the configuration of the Python code in `nomad/config.py` and the GUI config in `gui/.env.development`. -The default virtual memory for Elasticsearch is likely to be too low. On Linux, you can run the following command as root: -```sh +The default virtual memory for Elasticsearch will likely be too low. On Linux, you can run the following command as root: + +```shell sysctl -w vm.max_map_count=262144 ``` -To set this value permanently, see [here](https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html). Then, you can run all services with: -```sh +To set this value permanently, see [here](https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html). Then you can run all services with: + +```shell cd ops/docker-compose/infrastructure -docker compose up -d mongo elastic rabbitmq +docker compose up -d elastic mongo rabbitmq cd ../../.. ``` -If your system almost ran out of disk space the elasticsearch enforces a read-only index block ([read more](https://www.elastic.co/guide/en/elasticsearch/reference/6.2/disk-allocator.html)), but +If your system almost ran out of disk space, Elasticsearch enforces a read-only index block ([read more](https://www.elastic.co/guide/en/elasticsearch/reference/6.2/disk-allocator.html)), but after clearing up the disk space you need to reset it manually using the following command: -```sh +```shell curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": false}' ``` -Note that the ElasticSearch service has a known problem in quickly hitting the +Note that the Elasticsearch service has a known problem in quickly hitting the virtual memory limits of your OS. If you experience issues with the -ElasticSearch container not running correctly or crashing, try increasing the +Elasticsearch container not running correctly or crashing, try increasing the virtual memory limits as shown [here](https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html). To shut down everything, just `ctrl-c` the running output. If you started everything in *deamon* mode (`-d`) use: -```sh + +```shell docker compose down ``` Usually these services are used only by NOMAD, but sometimes you also -need to check something or do some manual steps. You can access mongodb and elastic search +need to check something or do some manual steps. You can access MongoDB and Elasticsearch via your preferred tools. Just make sure to use the right ports. ## Run NOMAD -### nomad.yaml +### `nomad.yaml` -Before you run NOMAD for development purposes, you should configure it to use the `test` +Before you run NOMAD for development purposes, you should configure it to use the test realm of our user management system. By default, NOMAD will use the `fairdi_nomad_prod` realm. Create a `nomad.yaml` file in the root folder: @@ -238,7 +253,7 @@ keycloak: You might also want to exclude some of the default plugins, or only include the plugins you'll need. Especially plugins with slower start-up and import times due to instantiation of large schemas (e.g. nexus create couple thousand definitions for 70+ applications) can -often be excluded. +often be excluded: ```yaml plugins: @@ -246,22 +261,26 @@ plugins: - parsers/nexus ``` -### App and Worker -NOMAD consist of the NOMAD app/api, a worker, and the GUI. You can run the app and the worker with -the NOMAD cli. These commands will run the services and display their log output. You should open +Note that this will lead to [failing tests](#backend-tests) for the excluded plugins. + +### App and worker + +NOMAD consists of the NOMAD app/API, a worker, and the GUI. You can run the app and the worker with +the NOMAD CLI. These commands will run the services and display their log output. You should open them in separate shells as they run continuously. They will not watch code changes and you have to restart manually. -```sh +```shell nomad admin run app ``` -```sh +```shell nomad admin run worker ``` Or both together in one process: -``` + +```shell nomad admin run appworker ``` @@ -269,63 +288,73 @@ On MacOS you might run into multiprocessing errors. That can be solved as descri The app will run at port 8000 by default. -To run the worker directly with celery, do (from the root) -```sh +To run the worker directly with Celery, do (from the root) + +```shell celery -A nomad.processing worker -l info ``` -If you run the gui on its own (e.g. with react dev server below), you also need to start -the app manually. The gui and its dependencies run on [node](https://nodejs.org) and -the [yarn](https://yarnpkg.com/) dependency manager. Read their documentation on how to +If you run the GUI on its own (e.g. with the React dev server below), you also need to start +the app manually. The GUI and its dependencies run on [Node.js](https://nodejs.org) and +the [Yarn](https://yarnpkg.com/) dependency manager. Read their documentation on how to install them for your platform. -```sh + +```shell cd gui yarn yarn start ``` -### JupyterHUB +### JupyterHub -NOMAD also has a build in JupyterHUB that is used to launch remote tools (e.g. Jupyter +NOMAD also has a built-in JupyterHub that is used to launch remote tools (e.g. Jupyter notebooks). -To run the JupyterHUB, some additional configuration might be necessary. -```sh +To run JupyterHub, some additional configuration might be necessary. + +```yaml north: - hub_connect_ip: 'host.docker.internal' - jupyterhub_crypt_key: '<crypt key>' + hub_connect_ip: 'host.docker.internal' + jupyterhub_crypt_key: '<crypt key>' ``` On Windows system, you might have to activate further specific functionality: -```sh + +```yaml north: - hub_connect_ip: 'host.docker.internal' - hub_connect_url: 'http://host.docker.internal:8081' - windows: true - jupyterhub_crypt_key: '<crypt key>' + hub_connect_ip: 'host.docker.internal' + hub_connect_url: 'http://host.docker.internal:8081' + windows: true + jupyterhub_crypt_key: '<crypt key>' ``` -- If you are not on Linux, you need to configure how JupyterHUB can reach your host network from -docker containers. For Windows and MacOS you need to set `hub_connect_ip` to `host.docker.internal`. For linux you can leave it out and use the default `172.17.0.1`, unless you changed your -docker configuration. +- If you are not on Linux, you need to configure how JupyterHub can reach your host + network from docker containers. For Windows and MacOS you need to set `hub_connect_ip` + to `host.docker.internal`. For Linux you can leave it out and use the default + `172.17.0.1`, unless you changed your docker configuration. + - You have to generate a `crypt key` with `openssl rand -hex 32`. -- You might need to install [configurable-http-proxy](https://github.com/jupyterhub/configurable-http-proxy). -The *configurable-http-proxy* It comes as a node package. See [node](https://nodejs.org) for how to install `npm`. The proxy can be globally installed with: +- You might need to install + [configurable-http-proxy](https://github.com/jupyterhub/configurable-http-proxy). -```sh +The `configurable-http-proxy` comes as a Node.js package. See +[Node.js](https://nodejs.org) for how to install `npm`. The proxy can be globally +installed with: + +```shell npm install -g configurable-http-proxy ``` -The JupyterHUB is a separate application. You can run the JuypterHUB similar -to the other part. +JupyterHub is a separate application. You can run JuypterHub similar to the other part: -```sh +```shell nomad admin run hub ``` -To run the JupyterHUB directly, do (from the root) -```sh +To run JupyterHub directly, do (from the root) + +```shell jupyterhub -f nomad/jupyterhub_config.py --port 9000 ``` @@ -334,31 +363,50 @@ jupyterhub -f nomad/jupyterhub_config.py --port 9000 ### Backend tests To run the tests some additional settings and files are necessary that are not part -of the code base. +of the codebase. You have to provide static files to serve the docs and NOMAD distribution: -```sh + +```shell ./scripts/generate_docs_artifacts.sh rm -rf site && mkdocs build && mv site nomad/app/static/docs ``` -You need to have the infrastructure partially running: elastic, rabbitmq. +You need to have the infrastructure partially running: `elastic`, `mongo`, `rabbitmq`. The rest should be mocked or provided by the tests. Make sure that you do not run any -worker, as they will fight for tasks in the queue. -```sh +worker, as they will fight for tasks in the queue. To start the infrastructure and run the +tests, use: + +```shell cd ops/docker-compose/infrastructure -docker compose up -d elastic rabbitmq -cd ../.. -pytest -svx tests +docker compose up -d elastic mongo rabbitmq +cd ../../.. +pytest -sv tests ``` -We use pylint, pycodestyle, and mypy to ensure code quality. To run those: -```sh +!!! note + Some of these tests will fail because a few large files are not included in the Git + repository. You may ignore these for local testing, they are still checked by the + CI/CD pipeline: + + ```text + FAILED tests/archive/test_archive.py::test_read_springer - AttributeError: 'NoneType' object has no attribute 'seek' + FAILED tests/normalizing/test_material.py::test_material_bulk - assert None + FAILED tests/normalizing/test_system.py::test_springer_normalizer - IndexError: list index out of range + ``` + + If you excluded plugins in your [NOMAD config](### `nomad.yaml`), then those tests + will also fail. + +We use Pylint, ruff, and mypy to ensure code quality. To run those: + +```shell nomad dev qa --skip-tests ``` -To run all tests and code qa: -```sh +To run all tests and code QA: + +```shell nomad dev qa ``` @@ -368,8 +416,8 @@ This mimics the tests and checks that the GitLab CI/CD will perform. We use [`testing-library`](https://testing-library.com/docs/react-testing-library/intro/) -to implement our GUI tests and testing-library itself uses -[`jest`](https://jestjs.io/) to run the tests. Tests are written in `\*.spec.js` +to implement our GUI tests and `testing-library` itself uses +[`Jest`](https://jestjs.io/) to run the tests. Tests are written in `*.spec.js` files that accompany the implementation. Tests should focus on functionality, not on implementation details: `testing-library` is designed to enforce this kind of testing. @@ -378,7 +426,7 @@ of testing. When testing HTML output, the elements are rendered using [jsdom](https://github.com/jsdom/jsdom): this is not completely identical - to using an actual browser (does not support e.g. WebGL), but in practice + to using an actual browser (e.g. does not support WebGL), but in practice is realistic enough for the majority of the test. #### Test structure @@ -388,29 +436,31 @@ each source code folder may contain a `conftest.js` file that contains utilities that are relevant for testing the code in that particular folder. These utilities can usually be placed into the following categories: - - Custom renders: When testing React components, the - [`render`](https://testing-library.com/docs/react-testing-library/api/#render)-function - is used to display them on the test DOM. Typically your components require - some parts of the infrastructure to work properly, which is achieved by - wrapping your component with other components that provide a context. Custom - render functions can do this automatically for you. E.g. the default render - as exported from `src/components/conftest.js` wraps your components with an - infrastructure that is very similar to the production app. See - [here](https://testing-library.com/docs/react-testing-library/setup/#custom-render) - for more information. - - Custom queries: See - [here](https://testing-library.com/docs/react-testing-library/setup/#add-custom-queries) - for more information. - - Custom expects: These are reusable functions that perform actual tests using - the expect-function. Whenever the same tests are performed by several - \*.spec.js files, you should formalize these common tests into a - `expect*`-function and place it in a relevant conftest.js file. +- Custom renders: When testing React components, the + [`render`](https://testing-library.com/docs/react-testing-library/api/#render) function + is used to display them on the test DOM. Typically your components require + some parts of the infrastructure to work properly, which is achieved by + wrapping your component with other components that provide a context. Custom + render functions can do this automatically for you, e.g. the default render + as exported from `src/components/conftest.js` wraps your components with an + infrastructure that is very similar to the production app. See + [here](https://testing-library.com/docs/react-testing-library/setup/#custom-render) + for more information. + +- Custom queries: See + [here](https://testing-library.com/docs/react-testing-library/setup/#add-custom-queries) + for more information. + +- Custom expects: These are reusable functions that perform actual tests using + the `expect` function. Whenever the same tests are performed by several + `*.spec.js` files, you should formalize these common tests into an + `expect*` function and place it in a relevant `conftest.js` file. Often your components will need to communicate with the API during tests. One should generally avoid using manually created mocks for the API traffic, and instead prefer using API responses that originate from an actual API call during testing. Manually created mocks require a lot of manual work in creating -them and keeping them up to date and true integration tests are impossible +them and keeping them up-to-date and true integration tests are impossible to perform without live communication with an API. In order to simplify the API communication during testing, you can use the `startAPI`+`closeAPI` functions, that will prepare the API traffic for you. A simple example could look like this: @@ -431,12 +481,13 @@ test('periodic table shows the elements retrieved through the API', async () => Here the important parameters are: - - `<state_name>`: Specifies an initial backend configuration for this test. These - states are defined as python functions that are stored in - nomad-FAIR/tests/states, example given below. These functions may e.g. - prepare several uploads entries, datasets, etc. for the test. - - `<snapshot_name>`: Specifies a filepath for reading/recording pre-recorded API - traffic. +- `<state_name>`: Specifies an initial backend configuration for this test. These + states are defined as Python functions that are stored in + `nomad-FAIR/tests/states`, example given below. These functions may, for example, + prepare several uploads entries, datasets, etc. for the test. + +- `<snapshot_name>`: Specifies a filepath for reading/recording pre-recorded API + traffic. An example of a simple test state could look like this: @@ -467,131 +518,118 @@ def search(): When running in the online mode (see below), this function will be executed in order to prepare the application backend. The `closeAPI` function will handle cleaning the test state between successive `startAPI` calls: it will completely -wipe out MongoDB, ElasticSearch and the upload files. +wipe out MongoDB, Elasticsearch and the upload files. -#### Running tests -The tests can be run in two different modes. _Offline testing_ uses +#### Running frontend tests + +The tests can be run in two different modes. *Offline testing* uses pre-recorded files to mock the API traffic during testing. This allows one to -run tests more quickly without a server. During _online testing_, the tests +run tests more quickly without a server. During *online testing*, the tests perform calls to a running server where a test state has been prepared. This -mode can be used to perform integration tests, but also to record the snapshot +mode can be used to perform integration tests but also to record the snapshot files needed by the offline testing. ##### Offline testing -This is the way our CI pipeline runs the tests and should be used locally -whenever you wish to e.g. reproduce pipeline errors or when your tests do not + +This is the way our CI pipeline runs the tests and should be used locally, e.g. +whenever you wish to reproduce pipeline errors or when your tests do not involve any API traffic. -1. Ensure that the gui artifacts are up-to-date: - ```sh - ./scripts/generate_gui_test_artifacts.sh - ``` - As snapshot tests do not connect to the server, the artifacts cannot be - fetched dynamically from the server and static files need to be used - instead. +1. Ensure that the GUI artifacts are up-to-date: + + ```shell + ./scripts/generate_gui_test_artifacts.sh + ``` + + As snapshot tests do not connect to the server, the artifacts cannot be + fetched dynamically from the server and static files need to be used + instead. 2. Run `yarn test` to run the whole suite or `yarn test [<filename>]` to run a specific test. ##### Online testing + When you wish to record API traffic for offline testing, or to perform integration tests, you will need to have a server running with the correct configuration. To do this, follow these steps: -1. Have the docker infrastructure running: `docker-compose up` +1. Have the docker infrastructure running: `docker compose up` 2. Have the `nomad appworker` running with the config found in - `gui/tests/nomad.yaml`. This can be achieved e.g. with the command: `export - NOMAD_CONFIG=gui/tests/nomad.yaml; nomad admin run appworker` + `gui/tests/nomad.yaml`: + `export NOMAD_CONFIG=gui/tests/nomad.yaml; nomad admin run appworker` -3. Activate the correct python virtual environment before running the tests - with yarn (yarn will run the python functions that prepare the state). +3. Activate the correct Python virtual environment before running the tests + with Yarn (Yarn will run the Python functions that prepare the state). 4. Run the tests with `yarn test-record [<filename>]` if you wish to record a snapshot file or `yarn test-integration [<filename>]` if you want the perform the test without any recording. +## Build the Docker image -## Build the docker image +Normally the Docker image is build via a CI/CD pipeline that is run when pushing commits +to [NOMAD's GitLab at MPCDF](https://gitlab.mpcdf.mpg.de/). These images are distributed +via NOMAD's GitLab container registry. For most purposes you would use these +automatically-built images. -Normally the docker image is build via a CI/CD pipeline that is run when pushing -commits to NOMAD's gitlab at MPCDF. These images are distributed via NOMAD's gitlab -container registry. For most purposes you would use these automatically build images. +If you want to build a custom image, e.g. to be used in your NOMAD Oasis, you can +run the NOMAD Docker build manually. From the cloned project root run: -If you want to build a custom images, e.g. to be used in your Oasis, you can -run the NOMAD docker built manually. From the cloned project root run - -```sh +```shell docker build -t <image-name>:<image-tag> . ``` -This will build the normal image indented for production use. There are other build +This will build the normal image intended for production use. There are other build targets: `dev_python` and `dev_node`. Especially `dev_python` might be interesting for debugging purposes as it contains all sources and dev dependencies. You can build specific targets with: -```sh +```shell docker build --target dev_python -t <image-name>:<image-tag> . ``` -If you want to build an image directly from a remote git repository (e.g. for a specific `branch`), run +If you want to build an image directly from a remote Git repository (e.g. for a specific `branch`), run: -``` +```shell DOCKER_BUILDKIT=1 docker build --build-arg BUILDKIT_CONTEXT_KEEP_GIT_DIR=1 --pull -t <image-name>:<image-tag> https://github.com/nomad-coe/nomad.git#<branch> ``` -The buildkit parametrization ensures that the the `.git` directory is available in the -docker build context. NOMAD's build process requires the `.git` folder to determine the +The BuildKit parametrization ensures that the `.git` directory is available in the +Docker build context. NOMAD's build process requires the `.git` folder to determine the package version from version tags in the repository. The build process installs a substantial amount of dependencies and requires multiple -docker images for various build stages. Make sure that docker has at least 20 GB of +Docker images for various build stages. Make sure that Docker has at least 20 GB of storage available. ## Setup your IDE -The documentation section for development guidelines (see below) provide details on how the code is organized, -tested, formatted, and documented. To help you meet these guidelines, we recommend to -use a proper IDE for development and ditch any VIM/Emacs (mal-)practices. +The documentation section for development guidelines (see below) provide details on how +the code is organized, tested, formatted, and documented. To help you meet these +guidelines, we recommend to use a proper IDE for development and ditch any Vim/Emacs +(mal-)practices. -We strongly recommend that all developers use *visual studio code*, or *vscode* for short, -(this is a completely different product than *visual studio*). It is available for free +We strongly recommend that all developers use *Visual Studio Code (VS Code)*. (This is a +completely different product than *Visual Studio*.) It is available for free for all major platforms [here](https://code.visualstudio.com/download). -You should launch and run vscode directly from the projects root directory. The source -code already contains settings for vscode in the `.vscode` directory. The settings -contain the same setup for stylechecks, linter, etc. that is also used in our CI/CD -pipelines. -In order to ractually use the these features you have to make sure that they are enabled -in your own User settings: -``` - "python.linting.pycodestyleEnabled": true, - "python.linting.pylintEnabled": true, - "python.linting.mypyEnabled": true, - "python.testing.pytestEnabled": true, -``` - - -The settings also include a few launch configuration for vscode's debugger. You can create -your own launch configs in `.vscode/launch.json` (also in .gitignore). - -The settings expect that you have installed a python environment at `.pyenv` as -described in this tutorial (see above). - -We also provide developers with a vscode extension that is designed to support nomad schema language. -One can generate the extension using the following command after nomad installation +You should launch and run VS Code directly from the project's root directory. The source +code already contains settings for VS Code in the `.vscode` directory. The settings +contain the same setup for style checks, linter, etc. that is also used in our CI/CD +pipelines. In order to actually use the these features, you have to make sure that they +are enabled in your own User settings: -```sh - nomad dev vscode-extension -o <path to output> +```json +"python.linting.pycodestyleEnabled": true, +"python.linting.pylintEnabled": true, +"python.linting.mypyEnabled": true, +"python.testing.pytestEnabled": true, ``` -this command generate an up-to-date extension folder namely `nomad-vscode`. You can either copy -this folder into vscode extensions folder `~/.vscode/extensions/` or create an installable package as follows - -```sh - sudo npm install -g vsce # if vsce is not installed - cd ./nomad-vscode - vsce package -``` +The settings also include a few launch configuration for VS Code's debugger. You can create +your own launch configs in `.vscode/launch.json` (also in `.gitignore`). -then install the extension by drag the file `nomad-0.0.x.vsix` and drop it into the extension panel of the vscode. +The settings expect that you have installed a Python environment at `.pyenv` as +described in this tutorial (see above). diff --git a/docs/learn/architecture.md b/docs/explanation/architecture.md similarity index 99% rename from docs/learn/architecture.md rename to docs/explanation/architecture.md index fa76aed08cb349e2947489aabe11028b96fcf57d..18549c4696399c63dbb5226816e76c515a77ba01 100644 --- a/docs/learn/architecture.md +++ b/docs/explanation/architecture.md @@ -52,7 +52,7 @@ The *backend* of nomad is written in Python. This includes all parsers, normaliz and other data processing. We only use Python 3 and there is no compatibility with Python 2. Code is formatted close to [pep8](https://www.python.org/dev/peps/pep-0008/), critical parts use [pep484](https://www.python.org/dev/peps/pep-0484/) type-hints. -[Pycodestyle](https://pypi.org/project/pycodestyle/), +[ruff](https://docs.astral.sh/ruff), [pylint](https://www.pylint.org/), and [mypy](http://mypy-lang.org/) (static type checker) are used to ensure quality. Tests are written with [pytest](https://docs.pytest.org/en/latest/contents.html). diff --git a/docs/learn/architecture.png b/docs/explanation/architecture.png similarity index 100% rename from docs/learn/architecture.png rename to docs/explanation/architecture.png diff --git a/docs/learn/basics.md b/docs/explanation/basics.md similarity index 100% rename from docs/learn/basics.md rename to docs/explanation/basics.md diff --git a/docs/learn/data.md b/docs/explanation/data.md similarity index 88% rename from docs/learn/data.md rename to docs/explanation/data.md index 1445b46577df2837650a78952bb2ea71ee4f914a..7749d1c721a3ec90307263b229ecfa9098c386c7 100644 --- a/docs/learn/data.md +++ b/docs/explanation/data.md @@ -62,28 +62,6 @@ specific types of data. </figcaption> </figure> -### Shared entry structure - -The processed data (archive) of each entry share the same structure. They all instantiate -the same root section `EntryArchive`. They all share common sections `metadata:EntryMetadata` -and `results:Results`. They also all contain a *data* section, but the used section -definition varies depending on the type of data of the specific entry. There is the -literal `data:EntryData` sub-section. Here `EntryData` is abstract and specific entries -will use concrete definitions that inherit from `EntryData`. There are also specific *data* -sections, like `run` for simulation data and `nexus` for nexus data. - -!!! attention - The results, originally only designed for computational data, will soon be revised - an replaced by a different section. However, the necessity and function of a section - like this remains. - -<figure markdown> -  - <figcaption> - All entries instantiate the same section share the same structure. - </figcaption> -</figure> - ### Base sections Base section is a very loose category. In principle, every section definition can be @@ -148,7 +126,7 @@ and browse based on sub-sections, or explore the Metainfo through packages. To see all user provided uploaded schemas, you can use a [search for the sub-section `definition`](https://nomad-lab.eu/prod/v1/gui/search/entries?quantities=definitions). The sub-section `definition` is a top-level `EntryArchive` sub-section. See also our -[how-to on writing and uploading schemas](http://127.0.0.1:8001/schemas/basics.html#uploading-schemas). +[how-to on writing and uploading schemas](../schemas/basics.md#uploading-schemas). ### Contributing to the Metainfo @@ -167,7 +145,7 @@ schemas, you most likely also upload data in archive files (or use ELNs to edit Here you can also provide schemas and data in the same file. In many case specific schemas will be small and only re-combine existing base sections. See also our -[how-to on writing schemas](http://127.0.0.1:8001/schemas/basics.html). +[how-to on writing schemas](../schemas/basics.md). ## Data @@ -180,7 +158,45 @@ The Metainfo has many serialized forms. You can write `.archive.json` or `.archi files yourself. NOMAD internally stores all processed data in [message pack](https://msgpack.org/). Some of the data is stored in mongodb or elasticsearch. When you request processed data via API, you receive it in JSON. When you use the [ArchiveQuery](../apis/archive_query.md), all data is represented -as Python objects (see also [here](http://127.0.0.1:8001/plugins/schemas.html#starting-example)). +as Python objects (see also [here](../plugins/schemas.md#starting-example)). No matter what the representation is, you can rely on the structure, names, types, shapes, and units defined in the schema to interpret the data. + +## Archive files: a shared entry structure + +Broadening the discussion on the *entry* files that one can find in NOMAD, both [schemas](#schema) or [processed data](#data) are serialized as the same kind of *archive file*, either `.archive.json` or `.archive.yaml`. + +The NOMAD archive file is indeed composed by several sections. + +NOMAD archive file:`EntryArchive` + +* definitions: `Definitions` +* metadata: `EntryMetadata` +* data: `EntryData` +* run: `Run` +* nexus: `Nexus` +* workflow: `Workflow` +* results: `Results` + +They all instantiate the same root section `EntryArchive`. They all share common sections `metadata:Metadata` +and `results:Results`. They also all contain a *data* section, but the used section +definition varies depending on the type of data of the specific entry. There is the +literal `data:EntryData` sub-section. Here `EntryData` is abstract and specific entries +will use concrete definitions that inherit from `EntryData`. There are also specific *data* +sections, like `run` for simulation data and `nexus` for nexus data. + +!!! note + As shown in [Uploading schemas](../schemas/basics.md#uploading-schemas), one can, in principle, create an archive file with both `definitions` and one of the *data* sections filled, although this is not always desired because it will stick together a schema and a particular instance of that schema. They should be kept separate so that it is still possible to generate new data files from the same schema file. + +!!! attention + The results, originally only designed for computational data, will soon be revised + an replaced by a different section. However, the necessity and function of a section + like this remains. + +<figure markdown> +  + <figcaption> + All entries instantiate the same section share the same structure. + </figcaption> +</figure> diff --git a/docs/learn/data.png b/docs/explanation/data.png similarity index 100% rename from docs/learn/data.png rename to docs/explanation/data.png diff --git a/docs/learn/datamodel.png b/docs/explanation/datamodel.png similarity index 100% rename from docs/learn/datamodel.png rename to docs/explanation/datamodel.png diff --git a/docs/learn/oasis-use-cases.png b/docs/explanation/oasis-use-cases.png similarity index 100% rename from docs/learn/oasis-use-cases.png rename to docs/explanation/oasis-use-cases.png diff --git a/docs/learn/oasis.md b/docs/explanation/oasis.md similarity index 100% rename from docs/learn/oasis.md rename to docs/explanation/oasis.md diff --git a/docs/learn/schema.png b/docs/explanation/schema.png similarity index 100% rename from docs/learn/schema.png rename to docs/explanation/schema.png diff --git a/docs/learn/schema_language.png b/docs/explanation/schema_language.png similarity index 100% rename from docs/learn/schema_language.png rename to docs/explanation/schema_language.png diff --git a/docs/learn/screenshot.png b/docs/explanation/screenshot.png similarity index 100% rename from docs/learn/screenshot.png rename to docs/explanation/screenshot.png diff --git a/docs/learn/stack.png b/docs/explanation/stack.png similarity index 100% rename from docs/learn/stack.png rename to docs/explanation/stack.png diff --git a/docs/learn/super_structure.png b/docs/explanation/super_structure.png similarity index 100% rename from docs/learn/super_structure.png rename to docs/explanation/super_structure.png diff --git a/docs/index.md b/docs/index.md index d403f067a72debbe6e531126dac6ed5f6ac00031..1b0631715ee9805ed079f60a372fd609d62e5810 100644 --- a/docs/index.md +++ b/docs/index.md @@ -5,17 +5,14 @@ hide: toc # NOMAD Documentation <!-- A single sentence that says what the product is, succinctly and memorably --> -NOMAD is a free open-source data management platform for materials science, based on FAIR (findable, accessible, interoperable and reusable) principles. +NOMAD is a free, and open-source data management platform for materials science, whose goal is to make scientific research data FAIR (findable, accessible, interoperable and reusable). <!-- A paragraph of one to three short sentences, that describe what the product does. --> -NOMAD enables scientists and researchers to manage, share, and publish data. +NOMAD provides tools for data management, sharing, and publishing. The platform lets you structure, explore, and analyze your data and the data of others. -NOMAD promotes data-centered collaboration through an integrated and extendable set of tools. <!-- A third paragraph of similar length, this time explaining what need the product meets --> -NOMAD solves the problem of not being able to use data that you can't find or that is too -heterogenous to be use effectively. - +NOMAD solves the challenge of using heterogeneous and unfindable data. <!-- Finally, a paragraph that describes whom the product is useful for. --> NOMAD is useful for scientists that work with data, for research groups that need to collaborate on data, and for communities that need to build an archive of FAIR research data. @@ -24,19 +21,26 @@ NOMAD is useful for scientists that work with data, for research groups that nee ### Tutorial -This series of [short videos will guide you through the main functionality of NOMAD](tutorial.md). -It covers th whole publish, explore, analyze cycle: +A series of tutorials will guide you through the main functionality of NOMAD. + +- [Upload and publish your own data](tutorial/upload_publish.md) +- [Use the search interface to identify interesting data](tutorial/explore.md) +- [Use the API to search and access processed data for analysis](tutorial/access_api.md) +- [Find and use the automations of the built-in schemas available in NOMAD](tutorial/builtin.md) +- [Create and use custom schemas in NOMAD](tutorial/custom.md) +- [Customization at its best: user-defined schema and automation](tutorial/plugins.md) +- [Third-party ELN integration](tutorial/third_party.md) + +- [Example data and exercises](https://www.fairmat-nfdi.eu/events/fairmat-tutorial-1/tutorial-1-materials) +- [More videos and tutorials on YouTube](https://youtube.com/playlist?list=PLrRaxjvn6FDW-_DzZ4OShfMPcTtnFoynT) -- Upload and publish your own data -- Use the search interface to identify interesting data -- Use the API to search and access processed data for analysis </div> <div markdown="block"> ### How-to guides -The documentation provides step-by-step instructions for a wide range of tasks. For example: +These docs provides step-by-step instructions for a wide range of tasks. For example: - [How to upload and publish data](data/upload.md) - [How to write a custom ELN](schemas/elns.md) @@ -47,7 +51,7 @@ The documentation provides step-by-step instructions for a wide range of tasks. <div markdown="block"> -### Learn +### Explanation This section provides background knowledge on what are schemas and structured data, how does processing work, the NOMAD architecture, and more. @@ -72,7 +76,7 @@ data structure of for materials science together. - [Get support](https://nomad-lab.eu/nomad-lab/support.html) - [Join our online forum](https://matsci.org/c/nomad/32) - [Contribute](develop/contrib.md) -- [Roadmap](https://nomad-lab.eu/nomad-lab/features.html) +- [View our roadmap](https://nomad-lab.eu/nomad-lab/features.html) - [Code guidelines](develop/guides.md) Thinking about using NOMAD for your next project? Get in touch! diff --git a/docs/oasis/apps.md b/docs/oasis/apps.md new file mode 100644 index 0000000000000000000000000000000000000000..a852af3450a0af56d1a7fdeac877253c9864eaf4 --- /dev/null +++ b/docs/oasis/apps.md @@ -0,0 +1,206 @@ +Apps provide customized views of data for specific domains, making it easier for +the users to navigate and understand the data. This typically means that certain +domain-specific properties are highlighted, different units may be used for +physical properties, and specialized dashboards may be presented. This becomes +crucial for NOMAD installations to be able to scale with data that contains a +mixture of experiments and simulations, different techniques, and physical +properties spanning different time and length scales. + +Apps only affect the way data is *displayed* for the user: if you wish to affect +the underlying data structure, you will need to define a custom [Python schema](../plugins/schemas.md) +or [YAML schema](../schemas/basics.md). It is common that a custom schema has +an app associated with it, but apps can also provide different views of the same +underlying data. + +Apps are defined with a static YAML configuration file, which means that no +special programming skills are needed and app definitions can be shared easily. + +## App example + +Here is an example of a simple app definition in YAML. A full breakdown of the +configuration options are given in the [reference below](#app-configuration-reference). + +```yaml +# Label of the App +label: 'My App' +# Path used in the URL, must be unique +path: 'myapp' +# Used to categorize apps in the explore menu +category: 'Simulations' +# Brief description used in the app menu +description: 'An app customized for me.' +# Longer description that can also use markdown +readme: 'Here is a much longer description of this app' +# Controls which columns are shown in the results table +columns: + selected: + - 'entry_type' + options: + entry_type: + label: 'Entry type' + align: 'left' + upload_create_time: + label: 'Upload time' + align: 'left' +# Controls the filter menus shown on the left +filter_menus: + options: + material: + label: 'Material' + level: 0 + elements: + label: 'Elements / Formula' + level: 1 + size: 'xl' +# Dictionary of search filters that are always enabled for queries made within +# this app. This is especially important to narrow down the results to the +# wanted subset. Any available search filter can be targeted here. +filters_locked: + upload_create_time: + gte: 0 +# Controls the default dashboard shown in the search interface +dashboard: + widgets: + - type: histogram + showinput: false + autorange: true + nbins: 30 + scale: linear + quantity: results.material.n_elements + layout: + lg: + minH: 3 + minW: 3 + h: 4 + w: 12 + y: 0 + x: 0 +``` + +## Customizing default apps in a NOMAD installation + +Each NOMAD installation has a set of built-in apps, which are controlled through +the [ui.apps](../reference/config.md#ui) field in the `nomad.yaml` configuration file. These are +the apps that are defined by default in a NOMAD installation: + +{{ default_apps_list()}} + +In `nomad.yaml`, it is easy to to select which apps to include or exclude like +this: + +```yaml +ui: + apps: + include: ['entries', 'materials'] +``` + +It is also possible to customize specific parts of an existing app definition: + +```yaml +ui: + apps: + options: + entries: + columns: + exclude: ['upload_create_time'] +``` + +Completely new apps can also be defined by adding new entries to the +`ui.apps.options` dictionary: + +```yaml +ui: + apps: + options: + myapp: + label: 'My App' + ... +``` + +If no explicit rules are added in `ui.apps.include` or `ui.apps.exclude`, these +new options will be included by default. + +## Adding schemas into an app + +Each app may define the schemas that should be enabled in it. By adding a schema +into the app, an additional selection of quantities from that schema will be +available for use in the app. This means that these quantities can be queried in +the search interface of the app, but also targeted in the rest of the app +configuration as explained below in +[using quantities from a schema within an app](#using-quantities-from-a-schema-within-an-app). + +### Schema names + +Each schema has a unique name within the NOMAD ecosystem, which is needed to +target them in the configuration. The name depends on the resource in which the +schema is defined in: + +- Python schemas are identified by the python path for the class that inherits +from `EntryData`. For example, if you have a python package called `myschema`, +which has a module called `schema.py`, which contains the class `MySchema`, then +the schema name will be `myschema.schema.MySchema`. +- YAML schemas are identified by the entry id of the schema file together with +the name of the section defined in the YAML schema. For example +if you have uploaded a schema YAML file containing a section definition called +`MySchema`, and it has been assigned an `entry_id`, the schema name will be +`entry_id:<entry_id>.MySchema`. + +Schemas may be included or excluded by using the [`schemas`](#schemas) field +in the app config: + +```yaml +myapp: + schemas: + include: + - 'myschema.schema.MySchema' +``` + +YAML schemas are not known at run-time, so they can only be targeted by using +the full path, whereas python schemas can also be targeted by using a glob +pattern, e.g. + +```yaml +myapp: + schemas: + include: + - 'myschema.*' +``` + +### Using quantities from a schema within an app + +Once a schema is included in an app, the quantities from it can be targeted in +the rest of the app. The app configuration often refers to specific quantities +in a schema to configure parts of the user interface. For example, one could +configure the results table to show a new column using one of the schema +quantities with: + +```yaml +myapp: + columns: + include: + - 'data.mysection.myquantity#myschema.schema.MySchema' + - 'entry_id' + options: + data.mysection.myquantity#myschema.schema.MySchema: + ... +``` + +The syntax for targeting quantities depends on the resource: + +- For python schemas, you need to provide the path and the python schema name separated +by a hashtag (#), for example `data.mysection.myquantity#myschema.schema.MySchema`. +- For YAML schemas, you need to provide the path and the YAML schema name separated +by a hashtag (#), for example `data.mysection.myquantity#entry_id:<entry_id>.MySchema`. +- Quantities that are common for all NOMAD entries can be targeted by using only +the path without the need for specifying a schema, e.g. `results.material.symmetry.space_group`. + +!!! note + + Note that not all of the quantities from a custom schema will be available + for e.g. usage in the search interface. At the moment we only support + targeting **scalar** quantities from custom schemas. + +## App configuration reference + + +{{ pydantic_model('nomad.config.models.App')}} diff --git a/docs/oasis/customize.md b/docs/oasis/customize.md index 30609f00655a8b0be2fc3f293e39ada799d1393b..10f9335a3fdc73a71b306d99233b090889509acf 100644 --- a/docs/oasis/customize.md +++ b/docs/oasis/customize.md @@ -7,6 +7,7 @@ guides to learn more. - Installation specific changes (domain, path-prefix): [How to install an Oasis](install.md) - [Restricting user access](admin.md#restricting-access-to-your-oasis) +- [Configure custom apps](apps.md) - Write .yaml based [schemas](../schemas/basics.md) and [ELNs](../schemas/elns.md) - Learn how to use the [tabular parser](../schemas/tabular.md) to manage data from .xls or .csv - Develop a [schema plugin](../plugins/schemas.md) for more powerful schemas and ELNs diff --git a/docs/oasis/install.md b/docs/oasis/install.md index df78564b96e211b460c8b2b4bcb27996c96bbb17..60998a7da16bbd1bed8a7368fdb02dae85bf6810 100644 --- a/docs/oasis/install.md +++ b/docs/oasis/install.md @@ -6,6 +6,15 @@ uses NOMAD software independently is called a *NOMAD OASIS*. A *NOMAD OASIS* doe need to be fully isolated. For example, you can publish uploads from your OASIS to the central NOMAD installation. +!!! note + + **Register your oasis** + + If you installed (or even just plan to install) a NOMAD Oasis, please take + the time to register your Oasis with FAIRmat. This will help us to assist + you in an problems and keep you updated on new releases. You can register + by filling out this [simple form](https://www.fairmat-nfdi.eu/fairmat/oasis_registration). + ## Quick-start - Find a linux computer. @@ -69,23 +78,22 @@ RAM and CPU for running tools like jupyter, if you opt to use NOMAD NORTH. ### Sharing data through the logtransfer service and data privacy notice -The NOMAD software incorporates the so-called `logtransfer` service. When enabled the service automatically collects -and submits non-personalized data to our central NOMAD instance. Currently, this service is in an experimental phase -and requires to opt-in to the service. However, in an upcoming version of the NOMAD software this will transition to -an opt-out mechanism. See the instructions in the configuration below on how to enable/disable the `logtransfer` -service. +The NOMAD includes a `logtransfer` service. When enabled this service automatically collects +and transfers non-personalized log-data to us. Currently, this service is experimental +and requires opt-in. However, in upcoming versions of NOMAD Oasis, we might change to out-out. +See the instructions in the configuration below on how to enable/disable the `logtransfer`. -The collected data consists of logs as well as aggregated statistics, such as the number of users or the -number of uploaded datasets. In any case this data does not personally identify the users of the NOMAD OASIS and all -data is in an aggregated and anonymized form. +The service collects log-data and aggregated statistics, such as the number of users or the +number of uploaded datasets. In any case this data does not personally identify any users or +contains any uploaded data. All data is in an aggregated and anonymized form. -The data is solely used for internal purposes, including but not limited to: +The data is solely used by the NOMAD developers and FAIRmat, including but not limited to: * Analyzing and monitoring system performance to identify and resolve issues. * Improving our NOMAD software based on usage patterns. * Generating aggregated and anonymized reports. -We do not share any data collected through the `logtransfer` service with third parties. +We do not share any data collected through the `logtransfer` service with any third parties. We may update this data privacy notice from time to time to reflect changes in our data practices. We encourage you to review this notice periodically for any updates. @@ -160,8 +168,8 @@ Changes necessary: - The group in the value of the hub's user parameter needs to match the docker group on the host. This should ensure that the user which runs the hub, has the rights to access the host's docker. - On Windows or MacOS computers you have to run the `app` and `worker` container without `user: '1000:1000'` and the `north` container with `user: root`. -- To opt-in the `logtransfer` service - ([data notice above](#sharing-data-through-the-logtransfer-service-and-data-privacy-notice)), start `docker compose` +- To opt-in the `logtransfer` service + ([data notice above](#sharing-data-through-the-logtransfer-service-and-data-privacy-notice)), start `docker compose` with the flag `--profile with_logtransfer`. See also below for further necessary adaptations in the `nomad.yaml` file. A few things to notice: @@ -307,18 +315,26 @@ If you want to report problems with your OASIS. Please provide the logs for NOMAD uses [keycloak](https://www.keycloak.org/) for its user management. NOMAD uses keycloak in two ways. First, the user authentication uses the OpenID Connect/OAuth interfaces provided by keycloak. -Second, NOMD uses the keycloak realm-management API to get a list of existing users. +Second, NOMAD uses the keycloak realm-management API to get a list of existing users. Keycloak is highly customizable and numerous options to connect keycloak to existing identity providers exist. This tutorial assumes that you have some understanding of what keycloak is and how it works. -Start with the regular docker-compose installation above. Now you need to modify the -`docker-compose.yaml` to add a keycloak service. You need to modify the `nginx.conf` to add -another location for keycloak. You need to modify the `nomad.yaml` to tell nomad to -use your and not the official NOMAD keycloak. +The NOMAD Oasis installation with your own keyloak is very similar to the regular docker-compose +installation above. There are just a three changes. + +- The `docker-compose.yaml` has an added keycloak service. +- The `nginx.conf` is also modified to add another location for keycloak. +- The `nomad.yaml` has modifications to tell nomad to use your and not the official NOMAD keycloak. + +You can start with the regular installation above and manually adopt the config or +download the already updated configuration files: [nomad-oasis-with-keycloak.zip](../assets/nomad-oasis-with-keycloak.zip). +The download also contains an additional `configs/nomad-realm.json` that allows you +to create an initial keycloak realm that is configured for NOMAD automatically. +First, the `docker-compose.yaml`: ```yaml --8<-- "ops/docker-compose/nomad-oasis-with-keycloak/docker-compose.yaml" ``` @@ -329,6 +345,7 @@ A few notes: - The environment variables on the keycloak service allow to use keycloak behind the nginx proxy with a path prefix, e.g. `keycloak`. - By default, keycloak will use a simple H2 file database stored in the given volume. Keycloak offers many other options to connect SQL databases. - We will use keycloak with our nginx proxy here, but you can also host-bind the port `8080` to access keycloak directly. +- We mount and use the downloaded `configs/nomad-realm.json` to configure a NOMAD compatible realm on the first startup of keycloak. Second, we add a keycloak location to the nginx config: ```nginx diff --git a/docs/plugins/plugins.md b/docs/plugins/plugins.md index d6453d14df2ec91a6d955d87bb5ee742f294f5ee..f07a8fb322b37abf967cdb791acf893a3f70e021 100644 --- a/docs/plugins/plugins.md +++ b/docs/plugins/plugins.md @@ -231,12 +231,22 @@ Simply download, extract, and start like any other Oasis: unzip nomad-oasis-with-plugins.zip cd nomad-oasis-with-plugins sudo chown -R 1000 .volumes +sudo chown -R 1000 nomad-schema-plugin-example +sudo chown -R 1000 nomad-parser-plugin-example export COMPOSE_FILE=docker-compose.yaml:docker-compose.plugins.yaml docker compose pull docker compose up -d curl localhost/nomad-oasis/alive ``` +!!! attention + It is important to set up the correct user rights for your volumes and + plugins. Our default `docker-compose` setup uses the user `1000` in group + `1000` to run the services, this is the reason for the `chown` commands + above that ensure that the processes have access to the data stored in + volumes and in the plugins. If you use another user/group to run the docker + services, update the commands accordingly. + Read the [Oasis install guide](../oasis/install.md) for more details. ### Install PyPI/pip package diff --git a/docs/reference/annotations.md b/docs/reference/annotations.md index 38c2ac7ce0c3334052085e31170ae1a499a75301..fd666175f2ec6c40548eaedcfdb47d85b634bbbc 100644 --- a/docs/reference/annotations.md +++ b/docs/reference/annotations.md @@ -14,12 +14,173 @@ definitions: Many annotations control the representation of data in the GUI. This can be for plots or data entry/editing capabilities. -{{ pydantic_model('nomad.datamodel.metainfo.annotations.ELNAnnotation', heading='## eln') }} +{{ pydantic_model('nomad.datamodel.metainfo.annotations.ELNAnnotation', heading='## ELN annotations') }} +{{ pydantic_model('nomad.datamodel.metainfo.annotations.BrowserAnnotation', heading='## Browser') }} + +{{ pydantic_model('nomad.datamodel.metainfo.annotations.BrowserAnnotation', heading='## browser') }} + +### `label_quantity` + +This annotation goes in the section that we want to be filled with tabular data, not in the single quantities. +It is used to give a name to the instances that might be created by the parser. If it is not provided, the name of the section itself will be used as name. +Many times it is useful because, i. e., one might want to create a bundle of instances of, say, a "Substrate" class, each instance filename not being "Substrate_1", "Substrate_2", etc., but being named after a quantity contained in the class that is, for example, the specific ID of that sample. + + +```yaml +MySection: + more: + label_quantity: my_quantity + quantities: + my_quantity: + type: np.float64 + shape: ['*'] + description: "my quantity to be filled from the tabular data file" + unit: K + m_annotations: + tabular: + name: "Sheet1/my header" + plot: + x: timestamp + y: ./my_quantity +``` + +!!! important + The quantity designated as `label_quantity` should not be an array but a integer, float or string, to be set as the name of a file. If an array quantity is chosen, the parser would fall back to the use of the section as name. ## Tabular data -{{ pydantic_model('nomad.datamodel.metainfo.annotations.TabularParserAnnotation', heading='### tabular_parser') }} -{{ pydantic_model('nomad.datamodel.metainfo.annotations.TabularAnnotation', heading='### tabular') }} -{{ pydantic_model('nomad.datamodel.metainfo.annotations.PlotAnnotation', heading='## plot') }} +{{ pydantic_model('nomad.datamodel.metainfo.annotations.TabularAnnotation', heading='### `tabular`') }} -{{ pydantic_model('nomad.datamodel.metainfo.annotations.BrowserAnnotation', heading='## browser') }} +Each and every quantity to be filled with data from tabular data files should be annotated as the following example. +A practical example is provided in [How To](../schemas/tabular.md#preparing-the-tabular-data-file) section. + +```yaml +my_quantity: + type: np.float64 + shape: ['*'] + description: "my quantity to be filled from the tabular data file" + unit: K + m_annotations: + tabular: + name: "Sheet1/my header" + plot: + x: timestamp + y: ./my_quantity +``` + +### `tabular_parser` + +One special quantity will be dedicated to host the tabular data file. In the following examples it is called `data_file`, it contains the `tabular_parser` annotation, as shown below. + +{{ pydantic_model('nomad.datamodel.metainfo.annotations.TabularParserAnnotation', heading = '') }} + +### Available Combinations + +|Tutorial ref.|`file_mode`|`mapping_mode`|`sections`|How to ref.| +|---|---|---|---|---| +|1|`current_entry`|`column`|`root`|[HowTo](../schemas/tabular.md#1-column-mode-current-entry-parse-to-root)| +|2|`current_entry`|`column`|my path|[HowTo](../schemas/tabular.md#2-column-mode-current-entry-parse-to-my-path)| +|<span style="color:red">np1</span>|`current_entry`|`row`|`root`|<span style="color:red">Not possible</span>| +|3|`current_entry`|`row`|my path|[HowTo](../schemas/tabular.md#3-row-mode-current-entry-parse-to-my-path)| +|<span style="color:red">np2</span>|`single_new_entry`|`column`|`root`|<span style="color:red">Not possible</span>| +|4|`single_new_entry`|`column`|my path|[HowTo](../schemas/tabular.md#4-column-mode-single-new-entry-parse-to-my-path)| +|<span style="color:red">np3</span>|`single_new_entry`|`row`|`root`|<span style="color:red">Not possible</span>| +|5|`single_new_entry`|`row`|my path|[HowTo](../schemas/tabular.md#5-row-mode-single-new-entry-parse-to-my-path)| +|<span style="color:red">np4</span>|`multiple_new_entries`|`column`|`root`|<span style="color:red">Not possible</span>| +|<span style="color:red">np5</span>|`multiple_new_entries`|`column`|my path|<span style="color:red">Not possible</span>| +|6|`multiple_new_entries`|`row`|`root`|[HowTo](../schemas/tabular.md#6-row-mode-multiple-new-entries-parse-to-root)| +|7|`multiple_new_entries`|`row`|my path|[HowTo](../schemas/tabular.md#7-row-mode-multiple-new-entries-parse-to-my-path)| + +```yaml +data_file: + type: str + description: "the tabular data file containing data" + m_annotations: + tabular_parser: + parsing_options: + comment: '#' + mapping_options: + - mapping_mode: column + file_mode: single_new_entry + sections: + - my_section/my_quantity +``` + +<!-- The available options are: + +|**name**|**type**|**description**| +|---|---|---| +|`parsing_options`|group of options|some pandas `Dataframe` options.| +|`mapping_options`|list of groups of options|they allow to choose among all the possible modes of parsing data from the spreadsheet file to the NOMAD archive file. Each group of options can be repeated in a list. | --> + + +## Plot +The PlotSection base section serves as an additional functionality to your sections. +This base section is designed to simplify the process of creating various types of +plots, making it easy to use Plotly Express, Plotly Subplot, and the general Plotly graph objects. + +Features: + +- Plotly Express: Create simple and quick plots with a high-level, expressive API. +- Plotly Subplot: Organize multiple plots into subplots for more complex visualizations. +- General Plotly Graph Objects: Fine-tune your plots by working directly with Plotly's graph objects. + +Usage: + +- Inherit from this base section to leverage its plot functionality. +- Customize your plots using the annotations plotly-express, plotly-subplots, or/and plotly-graph-object. + +The PlotSection class makes it possible to define plots that are shown alongside your data. +Underneath, we use the Plotly Open Source Graphing Libraries to control the creation of the plots, +and you can find many useful examples in their documentation. + +In Python schemas, the PlotSection class gives you full freedom to define plots programmatically. +For example, you could use plotly.express and plotly.graph_objs to define plots like this: + +```python +from nomad.datamodel.metainfo.plot import PlotSection, PlotlyFigure +from nomad.datamodel.data import EntryData +import plotly.express as px +import plotly.graph_objs as go +from plotly.subplots import make_subplots + +class CustomSection(PlotSection, EntryData): + m_def = Section() + time = Quantity(type=float, shape=['*'], unit='s', a_eln=dict(component='NumberEditQuantity')) + substrate_temperature = Quantity(type=float, shape=['*'], unit='K', a_eln=dict(component='NumberEditQuantity')) + chamber_pressure = Quantity(type=float, shape=['*'], unit='Pa', a_eln=dict(component='NumberEditQuantity')) + + def normalize(self, archive, logger): + super(CustomSection, self).normalize(archive, logger) + + first_line = px.scatter(x=self.time, y=self.substrate_temperature) + second_line = px.scatter(x=self.time, y=self.chamber_pressure) + figure1 = make_subplots(rows=1, cols=2, shared_yaxes=True) + figure1.add_trace(first_line.data[0], row=1, col=1) + figure1.add_trace(second_line.data[0], row=1, col=2) + figure1.update_layout(height=400, width=716, title_text="Creating Subplots in Plotly") + self.figures.append(PlotlyFigure(label='figure 1', figure=figure1.to_plotly_json())) + + figure2 = px.scatter(x=self.substrate_temperature, y=self.chamber_pressure, color=self.chamber_pressure, title="Chamber as a function of Temperature") + self.figures.append(PlotlyFigure(label='figure 2', index=1, figure=figure2.to_plotly_json())) + + heatmap_data = [[None, None, None, 12, 13, 14, 15, 16], + [None, 1, None, 11, None, None, None, 17], + [None, 2, 6, 7, None, None, None, 18], + [None, 3, None, 8, None, None, None, 19], + [5, 4, 10, 9, None, None, None, 20], + [None, None, None, 27, None, None, None, 21], + [None, None, None, 26, 25, 24, 23, 22]] + + heatmap = go.Heatmap(z=heatmap_data, showscale=False, connectgaps=True, zsmooth='best') + figure3 = go.Figure(data=heatmap) + self.figures.append(PlotlyFigure(label='figure 3', index=0, figure=figure3.to_plotly_json())) +``` + +In YAML schemas, plots can be defined by using the PlotSection as a base class, +and additionally utilizing different flavours of plot annotations. The different annotation options are described below. + +{{ pydantic_model('nomad.datamodel.metainfo.annotations.PlotlyGraphObjectAnnotation', heading='### PlotlyGraphObjectAnnotation') }} +{{ pydantic_model('nomad.datamodel.metainfo.annotations.PlotlyExpressAnnotation', heading='### PlotlyExpressAnnotation') }} +{{ pydantic_model('nomad.datamodel.metainfo.annotations.PlotlySubplotsAnnotation', heading='### PlotlySubplotsAnnotation') }} +{{ pydantic_model('nomad.datamodel.metainfo.annotations.PlotAnnotation', heading='### PlotAnnotation (Deprecated)') }} diff --git a/docs/reference/config.md b/docs/reference/config.md index 233b2d9588e543f6ce2080535e8b6e7f9b660338..9172d0e007028b00f9bed8ddd7756d5b4bd5ef9c 100644 --- a/docs/reference/config.md +++ b/docs/reference/config.md @@ -99,6 +99,9 @@ The following is a reference of all configuration sections and attributes. {{ config_models(['process', 'reprocess', 'bundle_export', 'bundle_import', 'normalize', 'celery', 'archive'])}} ## User Interface + +These settings affect the behaviour of the user interface. Note that the configuration of apps is documented in more detail in the guide on [how to define apps](../oasis/apps.md). + {{ config_models(['ui'])}} ## Others diff --git a/docs/schemas/2col.png b/docs/schemas/2col.png new file mode 100644 index 0000000000000000000000000000000000000000..dee931828fcb2bee2d953936be58721b828e66c4 Binary files /dev/null and b/docs/schemas/2col.png differ diff --git a/docs/schemas/2col_notes.png b/docs/schemas/2col_notes.png new file mode 100644 index 0000000000000000000000000000000000000000..cc43a120f245b9aef3c3d65e91c127fdae562f09 Binary files /dev/null and b/docs/schemas/2col_notes.png differ diff --git a/docs/schemas/activity-sections.svg b/docs/schemas/activity-sections.svg new file mode 100644 index 0000000000000000000000000000000000000000..1655f99daf563e08cbdc37bea8d782424c974116 --- /dev/null +++ b/docs/schemas/activity-sections.svg @@ -0,0 +1 @@ +<svg version="1.1" viewBox="0.0 0.0 960.0 540.0" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><clipPath id="g260ca5988d4_0_319.0"><path d="m0 0l960.0 0l0 540.0l-960.0 0l0 -540.0z" clip-rule="nonzero"/></clipPath><g clip-path="url(#g260ca5988d4_0_319.0)"><path fill="#ffffff" d="m0 0l960.0 0l0 540.0l-960.0 0z" fill-rule="evenodd"/><path fill="#ffffff" d="m480.98694 264.04987l138.2992 0l0 46.393707l-138.2992 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m480.98694 264.04987l138.2992 0l0 46.393707l-138.2992 0z" fill-rule="evenodd"/><path fill="#212121" d="m496.6415 294.16672l0 -12.90625l2.59375 0l3.65625 10.90625l3.671875 -10.90625l2.578125 0l0 12.90625l-1.421875 0l0 -11.375l-0.265625 0l-3.75 10.90625l-1.609375 0l-3.75 -10.90625l-0.265625 0l0 11.375l-1.4375 0zm21.687286 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm10.155762 -1.3125l0 4.78125q0.0625 0.6875 1.09375 0.8125l-0.0625 1.109375q-1.46875 0 -2.21875 -0.75q-1.671875 0.75 -3.359375 0.75q-1.28125 0 -1.953125 -0.71875q-0.671875 -0.734375 -0.671875 -2.09375q0 -1.375 0.6875 -2.015625q0.6875 -0.640625 2.15625 -0.78125l2.9375 -0.28125l0 -0.8125q0 -0.953125 -0.421875 -1.359375q-0.40625 -0.40625 -1.109375 -0.40625q-1.5 0 -3.09375 0.1875l-0.578125 0.046875l-0.0625 -1.0625q2.0625 -0.40625 3.640625 -0.40625q1.59375 0 2.296875 0.734375q0.71875 0.71875 0.71875 2.265625zm-5.734375 3.8125q0 1.71875 1.40625 1.71875q1.28125 0 2.5 -0.4375l0.4375 -0.140625l0 -3.078125l-2.765625 0.25q-0.84375 0.078125 -1.21875 0.5q-0.359375 0.40625 -0.359375 1.1875zm11.424927 -5.5625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm11.565796 -1.0625l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm4.093933 9.328125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.612183 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm20.534119 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384277 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875z" fill-rule="nonzero"/><path fill="#ffffff" d="m634.55383 264.04987l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m634.55383 264.04987l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m664.9558 294.16672l3.546875 -12.90625l3.125 0l3.546875 12.90625l-1.421875 0l-0.921875 -3.328125l-5.53125 0l-0.9375 3.328125l-1.40625 0zm4.625 -11.671875l-1.96875 7.0625l4.890625 0l-1.953125 -7.0625l-0.96875 0zm8.790955 11.671875l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm15.190308 -6.515625l0 4.78125q0.0625 0.6875 1.09375 0.8125l-0.0625 1.109375q-1.46875 0 -2.21875 -0.75q-1.671875 0.75 -3.359375 0.75q-1.28125 0 -1.953125 -0.71875q-0.671875 -0.734375 -0.671875 -2.09375q0 -1.375 0.6875 -2.015625q0.6875 -0.640625 2.15625 -0.78125l2.9375 -0.28125l0 -0.8125q0 -0.953125 -0.421875 -1.359375q-0.40625 -0.40625 -1.109375 -0.40625q-1.5 0 -3.09375 0.1875l-0.578125 0.046875l-0.0625 -1.0625q2.0625 -0.40625 3.640625 -0.40625q1.59375 0 2.296875 0.734375q0.71875 0.71875 0.71875 2.265625zm-5.734375 3.8125q0 1.71875 1.40625 1.71875q1.28125 0 2.5 -0.4375l0.4375 -0.140625l0 -3.078125l-2.765625 0.25q-0.84375 0.078125 -1.21875 0.5q-0.359375 0.40625 -0.359375 1.1875zm8.612427 2.703125l0 -13.390625l1.40625 0l0 13.390625l-1.40625 0zm3.3251953 -9.328125l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm12.677185 1.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm5.753296 8.265625l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm7.0075684 3.171875q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m697.0578 264.04987l0 -52.981674l-224.0315 0l0 -52.971085" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m697.0578 264.04987l0 -52.98166l-224.03152 0l0 -45.4711" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m475.22397 165.5971l-2.1976929 -6.038086l-2.1976624 6.038086z" fill-rule="evenodd"/><path fill="#ffffff" d="m340.71265 264.04987l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m340.71265 264.04987l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m378.54114 289.82297l-3.296875 0l0 4.34375l-1.4375 0l0 -12.90625l4.734375 0q2.09375 0 3.09375 1.03125q1.015625 1.015625 1.015625 3.125q0 4.40625 -4.109375 4.40625zm-3.296875 -1.265625l3.265625 0q2.671875 0 2.671875 -3.140625q0 -1.5 -0.640625 -2.1875q-0.625 -0.703125 -2.03125 -0.703125l-3.265625 0l0 6.03125zm9.391296 5.609375l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm5.8621216 -4.671875q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm12.30365 -4.8125q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm10.88147 8.359375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm6.499542 -3.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm8.67514 0q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m403.21658 264.04987l0 -52.981674l69.79529 0l0 -52.971085" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m403.21658 264.04987l0 -52.98166l69.79526 0l0 -45.4711" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m475.20953 165.5971l-2.1976929 -6.038086l-2.1976624 6.038086z" fill-rule="evenodd"/><path fill="#ffffff" d="m410.5095 111.69685l125.007904 0l0 46.393692l-125.007904 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m410.5095 111.69685l125.007904 0l0 46.393692l-125.007904 0z" fill-rule="evenodd"/><path fill="#212121" d="m444.26956 141.8137l3.546875 -12.90625l3.125 0l3.546875 12.90625l-1.421875 0l-0.921875 -3.328125l-5.53125 0l-0.9375 3.328125l-1.40625 0zm4.625 -11.671875l-1.96875 7.0625l4.890625 0l-1.953125 -7.0625l-0.96875 0zm10.757111 2.15625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm9.477875 1.40625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm3.2107239 2.109375l1.484375 0l2.1875 8.109375l0.6875 0l2.265625 -8.109375l1.4375 0l-2.640625 9.328125l-2.796875 0l-2.625 -9.328125zm9.848663 9.328125l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913849 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm0.84521484 -1.21875l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125z" fill-rule="nonzero"/><path fill="#ffffff" d="m200.43575 264.09973l125.00786 0l0 46.393707l-125.00786 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m200.43575 264.09973l125.00786 0l0 46.393707l-125.00786 0z" fill-rule="evenodd"/><path fill="#212121" d="m219.48163 294.21658l0 -12.90625l7.859375 0l0 1.265625l-6.421875 0l0 4.453125l5.3125 0l0 1.25l-5.3125 0l0 4.671875l6.421875 0l0 1.265625l-7.859375 0zm9.145035 -9.328125l1.53125 0l2.28125 3.65625l2.28125 -3.65625l1.515625 0l-2.953125 4.625l2.9375 4.703125l-1.53125 0l-2.25 -3.640625l-2.28125 3.640625l-1.53125 0l2.9375 -4.671875l-2.9375 -4.65625zm9.370132 13.46875l0 -13.46875l1.375 0l0 0.671875q1.421875 -0.859375 2.796875 -0.859375q1.78125 0 2.578125 1.140625q0.8125 1.125 0.8125 3.71875q0 2.578125 -0.953125 3.71875q-0.9375 1.125 -3.125 1.125q-1.140625 0 -2.078125 -0.203125l0 4.15625l-1.40625 0zm3.96875 -12.40625q-0.5625 0 -1.203125 0.1875q-0.640625 0.1875 -1.015625 0.375l-0.34375 0.1875l0 6.28125q1.3125 0.203125 2.0 0.203125q1.515625 0 2.125 -0.859375q0.609375 -0.859375 0.609375 -2.796875q0 -1.9375 -0.5625 -2.75q-0.546875 -0.828125 -1.609375 -0.828125zm12.206848 7.109375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm3.5776672 5.203125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm6.4550476 0l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm5.491974 11.4375l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm20.53415 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384277 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m262.93967 264.09973l0 -53.002563l210.07877 0l0 -53.013184" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m262.93967 264.09973l0 -53.002563l210.07874 0l0 -45.513184" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m475.2161 165.58398l-2.1976929 -6.038086l-2.1976624 6.038086z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m550.13654 264.04987l0 -52.981674l-77.13385 0l0 -52.971085" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m550.13654 264.04987l0 -52.98166l-77.13388 0l0 -45.4711" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m475.20035 165.5971l-2.1976929 -6.038086l-2.1976624 6.038086z" fill-rule="evenodd"/><path fill="#ffffff" d="m140.2402 111.69748l138.29922 0l0 46.393692l-138.29922 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m140.2402 111.69748l138.29922 0l0 46.393692l-138.29922 0z" fill-rule="evenodd"/><path fill="#212121" d="m162.7733 141.81433l3.546875 -12.90625l3.125 0l3.546875 12.90625l-1.421875 0l-0.921875 -3.328125l-5.53125 0l-0.9375 3.328125l-1.40625 0zm4.625 -11.671875l-1.96875 7.0625l4.890625 0l-1.953125 -7.0625l-0.96875 0zm10.757111 2.15625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm9.477875 1.40625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm3.2107239 2.109375l1.484375 0l2.1875 8.109375l0.6875 0l2.265625 -8.109375l1.4375 0l-2.640625 9.328125l-2.796875 0l-2.625 -9.328125zm9.848663 9.328125l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913849 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm0.84521484 -1.21875l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm13.698471 -2.515625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm10.959305 3.734375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm3.577652 9.34375l0 -13.46875l1.375 0l0 0.671875q1.421875 -0.859375 2.796875 -0.859375q1.78125 0 2.578125 1.140625q0.8125 1.125 0.8125 3.71875q0 2.578125 -0.953125 3.71875q-0.9375 1.125 -3.125 1.125q-1.140625 0 -2.078125 -0.203125l0 4.15625l-1.40625 0zm3.96875 -12.40625q-0.5625 0 -1.203125 0.1875q-0.640625 0.1875 -1.015625 0.375l-0.34375 0.1875l0 6.28125q1.3125 0.203125 2.0 0.203125q1.515625 0 2.125 -0.859375q0.609375 -0.859375 0.609375 -2.796875q0 -1.9375 -0.5625 -2.75q-0.546875 -0.828125 -1.609375 -0.828125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m320.18146 125.19423l48.629913 0l0 19.401566l-48.629913 0z" fill-rule="evenodd"/><path fill="#212121" d="m329.64862 133.46048q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625zm9.080627 0.140625l-2.546875 0l0 3.8125q0 1.375 0.203125 1.8125q0.203125 0.4375 0.953125 0.4375l1.421875 -0.09375l0.078125 0.984375q-1.0625 0.171875 -1.625 0.171875q-1.25 0 -1.734375 -0.609375q-0.484375 -0.609375 -0.484375 -2.3125l0 -4.203125l-1.125 0l0 -1.046875l1.125 0l0 -2.453125l1.1875 0l0 2.453125l2.546875 0l0 1.046875zm6.912903 5.96875l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm3.080017 8.015625l0 -11.546875l1.1875 0l0 0.578125q1.203125 -0.734375 2.390625 -0.734375q1.515625 0 2.203125 0.96875q0.6875 0.96875 0.6875 3.1875q0 2.21875 -0.8125 3.1875q-0.796875 0.96875 -2.671875 0.96875q-0.96875 0 -1.78125 -0.171875l0 3.5625l-1.203125 0zm3.40625 -10.640625q-0.484375 0 -1.046875 0.171875q-0.546875 0.15625 -0.859375 0.3125l-0.296875 0.15625l0 5.390625q1.125 0.1875 1.71875 0.1875q1.296875 0 1.8125 -0.734375q0.53125 -0.75 0.53125 -2.40625q0 -1.671875 -0.484375 -2.375q-0.46875 -0.703125 -1.375 -0.703125zm7.525757 0q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m320.18146 134.89502l-20.820984 0l0 0.06298828l-20.816803 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m320.18146 134.89502l-20.820984 0l0 0.06298828l-20.816803 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m379.84305 104.942276l41.858276 0l0 30.015747l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m394.03055 117.945404l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.16687 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788452 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm6.9570007 -6.8125l-1.75 0l0.546875 1.671875l-0.65625 0.203125l-0.546875 -1.6875l-1.421875 1.046875l-0.421875 -0.53125l1.4375 -1.046875l-1.40625 -1.03125l0.40625 -0.5625l1.421875 1.046875l0.546875 -1.6875l0.640625 0.21875l-0.53125 1.6875l1.734375 0l0 0.671875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m270.69446 104.94348l41.858246 0l0 30.015747l-41.858246 0z" fill-rule="evenodd"/><path fill="#212121" d="m284.88196 117.94661l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.1668396 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788757 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.17572 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m368.81137 134.89502l20.849152 0l0 0.06298828l20.851654 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m368.8114 134.89502l20.849121 0l0 0.06298828l13.723389 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m403.3839 134.95801l3.1282654 2.190445l3.1282654 -2.190445l-3.1282654 -2.190445z" fill-rule="evenodd"/><path fill="#ffffff" d="m324.76117 380.25723l156.91336 0l0 46.393677l-156.91336 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m324.76117 380.25723l156.91336 0l0 46.393677l-156.91336 0z" fill-rule="evenodd"/><path fill="#212121" d="m339.59796 398.5303q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm5.2375183 2.515625l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm11.292236 9.328125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384247 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm3.1264648 8.109375l-1.40625 0l0 -13.390625l1.40625 0l0 4.578125q1.484375 -0.703125 2.859375 -0.703125q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.609375 -0.71875q-1.171875 0 -2.28125 0.4375l-0.34375 0.125l0 7.703125zm14.955902 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm6.499542 -3.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm5.7532654 8.265625l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm7.007599 3.171875q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm5.987671 8.265625l0 -12.90625l2.59375 0l3.65625 10.90625l3.671875 -10.90625l2.578125 0l0 12.90625l-1.421875 0l0 -11.375l-0.265625 0l-3.75 10.90625l-1.609375 0l-3.75 -10.90625l-0.265625 0l0 11.375l-1.4375 0zm21.687286 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm8.349762 -2.90625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm3.1264648 8.109375l-1.40625 0l0 -13.390625l1.40625 0l0 4.578125q1.484375 -0.703125 2.859375 -0.703125q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.609375 -0.71875q-1.171875 0 -2.28125 0.4375l-0.34375 0.125l0 7.703125zm8.205902 -4.671875q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm15.975525 -8.6875l0 13.390625l-1.375 0l0 -0.640625q-1.4375 0.828125 -2.828125 0.828125q-0.75 0 -1.3125 -0.1875q-0.5625 -0.1875 -1.046875 -0.671875q-1.0 -1.0 -1.0 -3.71875q0 -2.71875 0.90625 -3.921875q0.90625 -1.203125 2.984375 -1.203125q1.078125 0 2.296875 0.25l0 -4.125l1.375 0zm-5.484375 11.71875q0.3125 0.34375 0.640625 0.484375q0.34375 0.125 0.875 0.125q0.53125 0 1.1875 -0.171875q0.65625 -0.1875 1.03125 -0.34375l0.375 -0.171875l0 -6.328125q-1.1875 -0.21875 -2.21875 -0.21875q-1.421875 0 -1.984375 0.90625q-0.546875 0.890625 -0.546875 2.796875q0 2.171875 0.640625 2.921875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m403.21783 380.25723l0 -34.907104l0.0630188 0l0 -34.919678" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m403.21783 380.25723l0 -34.907135l0.0630188 0l0 -27.419647" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m405.47852 317.93045l-2.1976624 -6.0381165l-2.1976929 6.0381165z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 79.01349l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m745.61945 79.01349l192.09052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m937.70996 81.211174l6.038086 -2.1976852l-6.038086 -2.1976929z" fill-rule="evenodd"/><path fill="#ffffff" d="m799.1627 62.209972l92.50397 0l0 30.70866l-92.50397 0z" fill-rule="evenodd"/><path fill="#212121" d="m806.0565 83.804306l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm5.091675 10.625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm9.305176 0l-1.296875 0l0 -12.4375l1.296875 0l0 4.265625q1.390625 -0.671875 2.671875 -0.671875q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.296875 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.5 -0.671875q-1.078125 0 -2.109375 0.390625l-0.328125 0.125l0 7.15625zm13.898865 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm3.3287964 4.828125l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm5.9954834 0l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm8.279236 3.09375l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125zm7.7070923 1.484375l0 4.4375q0.0625 0.640625 1.015625 0.765625l-0.0625 1.015625q-1.359375 0 -2.0625 -0.6875q-1.546875 0.6875 -3.109375 0.6875q-1.203125 0 -1.828125 -0.671875q-0.625 -0.671875 -0.625 -1.9375q0 -1.265625 0.640625 -1.859375q0.640625 -0.609375 2.015625 -0.75l2.71875 -0.25l0 -0.75q0 -0.890625 -0.390625 -1.265625q-0.375 -0.375 -1.03125 -0.375q-1.390625 0 -2.875 0.171875l-0.53125 0.046875l-0.0625 -0.984375q1.90625 -0.390625 3.375 -0.390625q1.484375 0 2.140625 0.6875q0.671875 0.671875 0.671875 2.109375zm-5.328125 3.53125q0 1.59375 1.3125 1.59375q1.171875 0 2.328125 -0.390625l0.390625 -0.140625l0 -2.859375l-2.5625 0.234375q-0.78125 0.078125 -1.125 0.46875q-0.34375 0.375 -0.34375 1.09375zm9.19696 2.515625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm11.242676 -8.84375q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm10.107239 7.765625l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 53.299213l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m752.7477 53.299213l192.46228 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m752.7477 53.299213l-3.1282349 -2.190445l-3.128296 2.190445l3.128296 2.1904411z" fill-rule="evenodd"/><path fill="#ffffff" d="m794.0761 36.0506l102.677185 0l0 30.708664l-102.677185 0z" fill-rule="evenodd"/><path fill="#212121" d="m803.7546 48.801178q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm3.8260498 4.5q0 -2.375 0.84375 -3.4375q0.859375 -1.0625 2.875 -1.0625q2.03125 0 2.859375 1.0625q0.84375 1.0625 0.84375 3.4375q0 2.375 -0.796875 3.453125q-0.796875 1.0625 -2.921875 1.0625q-2.109375 0 -2.90625 -1.0625q-0.796875 -1.078125 -0.796875 -3.453125zm1.34375 -0.03125q0 1.890625 0.453125 2.65625q0.46875 0.765625 1.921875 0.765625q1.46875 0 1.921875 -0.75q0.453125 -0.75 0.453125 -2.65625q0 -1.90625 -0.515625 -2.625q-0.5 -0.734375 -1.859375 -0.734375q-1.359375 0 -1.875 0.734375q-0.5 0.71875 -0.5 2.609375zm9.49292 4.375l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm12.440674 -7.53125l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125zm7.7070923 1.484375l0 4.4375q0.0625 0.640625 1.015625 0.765625l-0.0625 1.015625q-1.359375 0 -2.0625 -0.6875q-1.546875 0.6875 -3.109375 0.6875q-1.203125 0 -1.828125 -0.671875q-0.625 -0.671875 -0.625 -1.9375q0 -1.265625 0.640625 -1.859375q0.640625 -0.609375 2.015625 -0.75l2.71875 -0.25l0 -0.75q0 -0.890625 -0.390625 -1.265625q-0.375 -0.375 -1.03125 -0.375q-1.390625 0 -2.875 0.171875l-0.53125 0.046875l-0.0625 -0.984375q1.90625 -0.390625 3.375 -0.390625q1.484375 0 2.140625 0.6875q0.671875 0.671875 0.671875 2.109375zm-5.328125 3.53125q0 1.59375 1.3125 1.59375q1.171875 0 2.328125 -0.390625l0.390625 -0.140625l0 -2.859375l-2.5625 0.234375q-0.78125 0.078125 -1.125 0.46875q-0.34375 0.375 -0.34375 1.09375zm7.9000854 2.515625l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm5.091736 10.625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm9.305115 0l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.296875 -0.78125 2.53125 -0.78125q1.609375 0 2.25 0.890625q0.578125 -0.34375 1.484375 -0.609375q0.90625 -0.28125 1.59375 -0.28125q1.734375 0 2.328125 0.9375q0.609375 0.921875 0.609375 3.328125l0 4.578125l-1.296875 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.46875 -0.671875q-0.5625 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625q0.21875 0.5625 0.21875 2.53125l0 4.5l-1.296875 0l0 -4.46875q0 -1.875 -0.34375 -2.53125q-0.328125 -0.671875 -1.46875 -0.671875q-0.5625 0 -1.140625 0.171875q-0.578125 0.15625 -0.890625 0.3125l-0.296875 0.15625l0 7.03125zm19.080017 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.6256104 4.828125l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm12.440674 -7.53125l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 26.695538l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m745.61945 26.695538l195.20935 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m940.82886 26.695538l-1.6705322 1.6705399l4.5897217 -1.6705399l-4.5897217 -1.670538z" fill-rule="evenodd"/><path fill="#ffffff" d="m805.17847 9.368585l80.47247 0l0 30.70866l-80.47247 0z" fill-rule="evenodd"/><path fill="#212121" d="m812.17334 30.962914l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm11.71283 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.9849854 -2.703125l0 7.53125l-1.296875 0l0 -7.53125l-1.09375 0l0 -1.125l1.09375 0l0 -0.78125q0 -1.84375 0.515625 -2.5q0.53125 -0.671875 1.828125 -0.671875l1.75 0.109375l-0.015625 1.078125q-0.96875 -0.03125 -1.609375 -0.03125q-0.625 0 -0.90625 0.421875q-0.265625 0.40625 -0.265625 1.609375l0 0.765625l2.515625 0l0 1.125l-2.515625 0zm9.813965 6.453125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm3.3287964 4.828125l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm11.712769 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.6256714 4.828125l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm11.242615 -8.84375q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm10.1073 7.765625l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0z" fill-rule="nonzero"/></g></svg> \ No newline at end of file diff --git a/docs/schemas/analysis-sections.svg b/docs/schemas/analysis-sections.svg new file mode 100644 index 0000000000000000000000000000000000000000..a9e2d0e8c60c148075807a0dc2afbcf6b5494fad --- /dev/null +++ b/docs/schemas/analysis-sections.svg @@ -0,0 +1 @@ +<svg version="1.1" viewBox="0.0 0.0 960.0 540.0" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><clipPath id="g260ca5988d4_0_239.0"><path d="m0 0l960.0 0l0 540.0l-960.0 0l0 -540.0z" clip-rule="nonzero"/></clipPath><g clip-path="url(#g260ca5988d4_0_239.0)"><path fill="#ffffff" d="m0 0l960.0 0l0 540.0l-960.0 0z" fill-rule="evenodd"/><path fill="#ffffff" d="m392.52917 188.30183l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m392.52917 188.30183l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m426.28925 218.41869l3.546875 -12.90625l3.125 0l3.546875 12.90625l-1.421875 0l-0.921875 -3.328125l-5.53125 0l-0.9375 3.328125l-1.40625 0zm4.625 -11.671875l-1.96875 7.0625l4.890625 0l-1.953125 -7.0625l-0.96875 0zm10.757111 2.15625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm9.477875 1.40625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm3.2107239 2.109375l1.484375 0l2.1875 8.109375l0.6875 0l2.265625 -8.109375l1.4375 0l-2.640625 9.328125l-2.796875 0l-2.625 -9.328125zm9.848663 9.328125l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913849 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm0.84521484 -1.21875l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125z" fill-rule="nonzero"/><path fill="#ffffff" d="m392.52917 96.22966l125.00787 0l0 46.393692l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m392.52917 96.22966l125.00787 0l0 46.393692l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m408.0957 113.440254l4.6875 0q1.921875 0 2.875 0.796875q0.96875 0.78125 0.96875 2.484375q0 1.21875 -0.421875 1.90625q-0.421875 0.671875 -1.234375 1.0625q2.046875 0.703125 2.046875 3.03125q0 1.953125 -1.03125 2.796875q-1.015625 0.828125 -2.953125 0.828125l-4.9375 0l0 -12.90625zm4.78125 6.96875l-3.34375 0l0 4.671875l3.4375 0q1.265625 0 1.921875 -0.53125q0.671875 -0.53125 0.671875 -1.875q0 -0.71875 -0.28125 -1.203125q-0.265625 -0.484375 -0.703125 -0.6875q-0.828125 -0.375 -1.703125 -0.375zm-0.140625 -5.703125l-3.203125 0l0 4.453125l3.328125 0q1.1875 0 1.734375 -0.5625q0.5625 -0.578125 0.5625 -1.71875q0 -1.140625 -0.59375 -1.65625q-0.578125 -0.515625 -1.828125 -0.515625zm13.195374 5.125l0 4.78125q0.0625 0.6875 1.09375 0.8125l-0.0625 1.109375q-1.46875 0 -2.21875 -0.75q-1.671875 0.75 -3.359375 0.75q-1.28125 0 -1.953125 -0.71875q-0.671875 -0.734375 -0.671875 -2.09375q0 -1.375 0.6875 -2.015625q0.6875 -0.640625 2.15625 -0.78125l2.9375 -0.28125l0 -0.8125q0 -0.953125 -0.421875 -1.359375q-0.40625 -0.40625 -1.109375 -0.40625q-1.5 0 -3.09375 0.1875l-0.578125 0.046875l-0.0625 -1.0625q2.0625 -0.40625 3.640625 -0.40625q1.59375 0 2.296875 0.734375q0.71875 0.71875 0.71875 2.265625zm-5.734375 3.8125q0 1.71875 1.40625 1.71875q1.28125 0 2.5 -0.4375l0.4375 -0.140625l0 -3.078125l-2.765625 0.25q-0.84375 0.078125 -1.21875 0.5q-0.359375 0.40625 -0.359375 1.1875zm11.424896 -5.5625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm12.097046 7.109375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.31546 -6.640625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm12.642944 10.6875l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.062042 -4.3125q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm9.477875 1.40625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm3.6794739 6.765625q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.225494 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#ffffff" d="m461.98938 301.05774l138.2992 0l0 46.393707l-138.2992 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m461.98938 301.05774l138.2992 0l0 46.393707l-138.2992 0z" fill-rule="evenodd"/><path fill="#212121" d="m477.64395 331.1746l0 -12.90625l2.59375 0l3.65625 10.90625l3.671875 -10.90625l2.578125 0l0 12.90625l-1.421875 0l0 -11.375l-0.265625 0l-3.75 10.90625l-1.609375 0l-3.75 -10.90625l-0.265625 0l0 11.375l-1.4375 0zm21.687286 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm10.155792 -1.3125l0 4.78125q0.0625 0.6875 1.09375 0.8125l-0.0625 1.109375q-1.46875 0 -2.21875 -0.75q-1.671875 0.75 -3.359375 0.75q-1.28125 0 -1.953125 -0.71875q-0.671875 -0.734375 -0.671875 -2.09375q0 -1.375 0.6875 -2.015625q0.6875 -0.640625 2.15625 -0.78125l2.9375 -0.28125l0 -0.8125q0 -0.953125 -0.421875 -1.359375q-0.40625 -0.40625 -1.109375 -0.40625q-1.5 0 -3.09375 0.1875l-0.578125 0.046875l-0.0625 -1.0625q2.0625 -0.40625 3.640625 -0.40625q1.59375 0 2.296875 0.734375q0.71875 0.71875 0.71875 2.265625zm-5.734375 3.8125q0 1.71875 1.40625 1.71875q1.28125 0 2.5 -0.4375l0.4375 -0.140625l0 -3.078125l-2.765625 0.25q-0.84375 0.078125 -1.21875 0.5q-0.359375 0.40625 -0.359375 1.1875zm11.424896 -5.5625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm11.565796 -1.0625l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm4.093933 9.328125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.612183 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm20.534119 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384277 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875z" fill-rule="nonzero"/><path fill="#ffffff" d="m615.2884 300.92032l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m615.2884 300.92032l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m645.6903 331.03717l3.546875 -12.90625l3.125 0l3.546875 12.90625l-1.421875 0l-0.921875 -3.328125l-5.53125 0l-0.9375 3.328125l-1.40625 0zm4.625 -11.671875l-1.96875 7.0625l4.890625 0l-1.953125 -7.0625l-0.96875 0zm8.791016 11.671875l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm15.190308 -6.515625l0 4.78125q0.0625 0.6875 1.09375 0.8125l-0.0625 1.109375q-1.46875 0 -2.21875 -0.75q-1.671875 0.75 -3.359375 0.75q-1.28125 0 -1.953125 -0.71875q-0.671875 -0.734375 -0.671875 -2.09375q0 -1.375 0.6875 -2.015625q0.6875 -0.640625 2.15625 -0.78125l2.9375 -0.28125l0 -0.8125q0 -0.953125 -0.421875 -1.359375q-0.40625 -0.40625 -1.109375 -0.40625q-1.5 0 -3.09375 0.1875l-0.578125 0.046875l-0.0625 -1.0625q2.0625 -0.40625 3.640625 -0.40625q1.59375 0 2.296875 0.734375q0.71875 0.71875 0.71875 2.265625zm-5.734375 3.8125q0 1.71875 1.40625 1.71875q1.28125 0 2.5 -0.4375l0.4375 -0.140625l0 -3.078125l-2.765625 0.25q-0.84375 0.078125 -1.21875 0.5q-0.359375 0.40625 -0.359375 1.1875zm8.612366 2.703125l0 -13.390625l1.40625 0l0 13.390625l-1.40625 0zm3.3252563 -9.328125l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm12.677185 1.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm5.753235 8.265625l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm7.0076294 3.171875q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m677.79236 300.92032l0 -33.112152l-222.77167 0l0 -33.12407" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m677.7923 300.92032l0 -33.112152l-222.77164 0l0 -25.62407" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m457.21835 242.1841l-2.1976929 -6.038101l-2.1976929 6.038101z" fill-rule="evenodd"/><path fill="#ffffff" d="m321.9802 301.0581l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m321.9802 301.0581l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m359.8087 326.8312l-3.296875 0l0 4.34375l-1.4375 0l0 -12.90625l4.734375 0q2.09375 0 3.09375 1.03125q1.015625 1.015625 1.015625 3.125q0 4.40625 -4.109375 4.40625zm-3.296875 -1.265625l3.265625 0q2.671875 0 2.671875 -3.140625q0 -1.5 -0.640625 -2.1875q-0.625 -0.703125 -2.03125 -0.703125l-3.265625 0l0 6.03125zm9.391266 5.609375l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm5.862152 -4.671875q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm12.303619 -4.8125q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm10.8815 8.359375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm6.4995117 -3.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm8.675171 0q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m384.48413 301.0581l0 -33.18109l70.55118 0l0 -33.181107" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m384.48413 301.0581l0 -33.18109l70.55118 0l0 -25.681107" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m457.233 242.1959l-2.1976929 -6.038101l-2.1976929 6.038101z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m455.0331 188.30183l0 -22.839203l0.0630188 0l0 -22.830078" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m455.03314 188.30183l0 -22.839203l0.06298828 0l0 -15.330078" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m457.29382 150.13255l-2.1976929 -6.038101l-2.1976929 6.038101z" fill-rule="evenodd"/><path fill="#ffffff" d="m181.97362 300.92126l125.00789 0l0 46.393707l-125.00789 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m181.97362 300.92126l125.00789 0l0 46.393707l-125.00789 0z" fill-rule="evenodd"/><path fill="#212121" d="m201.01952 331.03812l0 -12.90625l7.859375 0l0 1.265625l-6.421875 0l0 4.453125l5.3125 0l0 1.25l-5.3125 0l0 4.671875l6.421875 0l0 1.265625l-7.859375 0zm9.145035 -9.328125l1.53125 0l2.28125 3.65625l2.28125 -3.65625l1.515625 0l-2.953125 4.625l2.9375 4.703125l-1.53125 0l-2.25 -3.640625l-2.28125 3.640625l-1.53125 0l2.9375 -4.671875l-2.9375 -4.65625zm9.370132 13.46875l0 -13.46875l1.375 0l0 0.671875q1.421875 -0.859375 2.796875 -0.859375q1.78125 0 2.578125 1.140625q0.8125 1.125 0.8125 3.71875q0 2.578125 -0.953125 3.71875q-0.9375 1.125 -3.125 1.125q-1.140625 0 -2.078125 -0.203125l0 4.15625l-1.40625 0zm3.96875 -12.40625q-0.5625 0 -1.203125 0.1875q-0.640625 0.1875 -1.015625 0.375l-0.34375 0.1875l0 6.28125q1.3125 0.203125 2.0 0.203125q1.515625 0 2.125 -0.859375q0.609375 -0.859375 0.609375 -2.796875q0 -1.9375 -0.5625 -2.75q-0.546875 -0.828125 -1.609375 -0.828125zm12.206848 7.109375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm3.577652 5.203125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm6.455063 0l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm5.491974 11.4375l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.60935974 -0.375 1.5937347 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.3906097 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm20.534134 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384277 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m244.47755 300.92126l0 -33.112823l210.5512 0l0 -33.123398" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m244.47755 300.92126l0 -33.112823l210.5512 0l0 -25.623398" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m457.22644 242.18504l-2.1976929 -6.038101l-2.1976929 6.038101z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m531.139 301.05774l0 -33.18109l-76.09448 0l0 -33.181107" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m531.139 301.05774l0 -33.18109l-76.09448 0l0 -25.681107" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m457.2422 242.19554l-2.1976929 -6.038101l-2.1976929 6.038101z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m250.01312 418.28085l-42.72441 0l0 0.06298828l-42.72441 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m250.01312 418.28085l-42.72441 0l0 0.06298828l-42.72441 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m95.55643 408.61154l69.00787 0l0 19.40158l-69.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m99.36857 423.97156l0 -8.0l1.1875 0l0 1.09375q1.390625 -0.96875 2.921875 -1.265625l0 1.21875q-0.671875 0.125 -1.40625 0.40625q-0.71875 0.265625 -1.109375 0.46875l-0.390625 0.203125l0 5.875l-1.203125 0zm10.813507 -0.984375l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm4.611267 -2.484375l0 6.953125l-1.203125 0l0 -6.953125l-1.0 0l0 -1.046875l1.0 0l0 -0.71875q0 -1.703125 0.484375 -2.3125q0.484375 -0.609375 1.671875 -0.609375l1.625 0.109375l-0.015625 0.984375q-0.890625 -0.03125 -1.484375 -0.03125q-0.578125 0 -0.828125 0.390625q-0.25 0.375 -0.25 1.484375l0 0.703125l2.328125 0l0 1.046875l-2.328125 0zm9.058243 5.96875l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm3.080017 4.46875l0 -8.0l1.1875 0l0 1.09375q1.3906326 -0.96875 2.9218826 -1.265625l0 1.21875q-0.671875 0.125 -1.40625 0.40625q-0.71875 0.265625 -1.1093826 0.46875l-0.390625 0.203125l0 5.875l-1.203125 0zm10.813515 -0.984375l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm4.283142 4.46875l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.28125 -0.71875 2.46875 -0.71875q1.609375 0 2.15625 0.859375q0.546875 0.859375 0.546875 3.078125l0 4.21875l-1.171875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.328125 -0.625 -1.40625 -0.625q-0.515625 0 -1.09375 0.15625q-0.5625 0.15625 -0.859375 0.296875l-0.296875 0.140625l0 6.5zm10.3732605 -8.15625q0.53125 0 1.796875 0.1875l0.375 0.046875l-0.046875 0.984375q-1.28125 -0.15625 -1.875 -0.15625q-1.359375 0 -1.859375 0.65625q-0.484375 0.640625 -0.484375 2.40625q0 1.75 0.453125 2.4375q0.453125 0.6875 1.90625 0.6875l1.875 -0.15625l0.0625 1.0q-1.5 0.21875 -2.234375 0.21875q-1.875 0 -2.59375 -0.953125q-0.703125 -0.96875 -0.703125 -3.234375q0 -2.28125 0.765625 -3.203125q0.78125 -0.921875 2.5625 -0.921875zm9.33313 7.171875l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0z" fill-rule="nonzero"/><path fill="#ffffff" d="m250.01312 395.08398l157.38583 0l0 46.393707l-157.38583 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m250.01312 395.08398l157.38583 0l0 46.393707l-157.38583 0z" fill-rule="evenodd"/><path fill="#212121" d="m265.11423 413.3571q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm12.642944 10.6875l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.0620117 -4.3125q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm9.477875 1.40625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm3.6794739 6.765625q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.225525 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm10.284027 -4.9375l0 4.9375l-1.4375 0l0 -12.90625l4.78125 0q2.046875 0 3.078125 0.953125q1.046875 0.953125 1.046875 2.953125q0 3.0 -2.375 3.75l2.484375 5.25l-1.578125 0l-2.34375 -4.9375l-3.65625 0zm3.359375 -1.28125q2.640625 0 2.640625 -2.703125q0 -2.71875 -2.65625 -2.71875l-3.34375 0l0 5.421875l3.359375 0zm12.636719 5.0625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm5.374542 -2.90625l0 8.109375l-1.40625 0l0 -8.109375l-1.171875 0l0 -1.21875l1.171875 0l0 -0.84375q0 -1.96875 0.5625 -2.6875q0.5625 -0.71875 1.953125 -0.71875l1.890625 0.125l-0.015625 1.15625q-1.046875 -0.03125 -1.734375 -0.03125q-0.671875 0 -0.96875 0.453125q-0.28125 0.4375 -0.28125 1.71875l0 0.828125l2.703125 0l0 1.21875l-2.703125 0zm10.554077 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm3.5776367 5.203125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.612152 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm12.096527 -9.515625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm10.8815 8.359375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m95.55643 418.31235l-25.000725 0l0 -384.59845l314.2606 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m95.55643 418.31235l-25.000725 0l0 -384.59845l309.87943 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m380.43515 33.71391l-1.6705627 1.6705399l4.5897827 -1.6705399l-4.5897827 -1.670536z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m548.43176 408.58087l58.92914 0l0 19.40158l-58.92914 0z" fill-rule="evenodd"/><path fill="#212121" d="m558.0125 423.9409l0 -8.0l1.203125 0l0 8.0l-1.203125 0zm0 -9.8125l0 -1.390625l1.203125 0l0 1.390625l-1.203125 0zm4.7071533 9.8125l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.28125 -0.71875 2.46875 -0.71875q1.609375 0 2.15625 0.859375q0.546875 0.859375 0.546875 3.078125l0 4.21875l-1.171875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.328125 -0.625 -1.40625 -0.625q-0.515625 0 -1.09375 0.15625q-0.5625 0.15625 -0.859375 0.296875l-0.296875 0.140625l0 6.5zm7.388916 3.546875l0 -11.546875l1.1875 0l0 0.578125q1.203125 -0.734375 2.390625 -0.734375q1.515625 0 2.203125 0.96875q0.6875 0.96875 0.6875 3.1875q0 2.21875 -0.8125 3.1875q-0.796875 0.96875 -2.671875 0.96875q-0.96875 0 -1.78125 -0.171875l0 3.5625l-1.203125 0zm3.40625 -10.640625q-0.484375 0 -1.046875 0.171875q-0.546875 0.15625 -0.859375 0.3125l-0.296875 0.15625l0 5.390625q1.125 0.1875 1.71875 0.1875q1.296875 0 1.8125 -0.734375q0.53125 -0.75 0.53125 -2.40625q0 -1.671875 -0.484375 -2.375q-0.46875 -0.703125 -1.375 -0.703125zm10.010132 -0.90625l1.203125 0l0 8.0l-1.203125 0l0 -0.5625q-1.203125 0.71875 -2.359375 0.71875q-1.640625 0 -2.171875 -0.84375q-0.53125 -0.84375 -0.53125 -3.140625l0 -4.171875l1.1875 0l0 4.15625q0 1.75 0.296875 2.34375q0.3125 0.59375 1.390625 0.59375q0.53125 0 1.0625 -0.15625q0.546875 -0.15625 0.84375 -0.296875l0.28125 -0.140625l0 -6.5zm7.6522827 1.046875l-2.546875 0l0 3.8125q0 1.375 0.203125 1.8125q0.203125 0.4375 0.953125 0.4375l1.421875 -0.09375l0.078125 0.984375q-1.0625 0.171875 -1.625 0.171875q-1.25 0 -1.734375 -0.609375q-0.484375 -0.609375 -0.484375 -2.3125l0 -4.203125l-1.125 0l0 -1.046875l1.125 0l0 -2.453125l1.1875 0l0 2.453125l2.546875 0l0 1.046875zm3.9753418 -0.140625q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m740.29626 324.11716l25.000305 0l0 94.17322l-157.94519 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m747.42456 324.11716l17.87201 0l0 94.17325l-157.94519 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m747.42456 324.11716l-3.128296 -2.1904297l-3.128296 2.1904297l3.128296 2.1904602z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m548.43176 418.28165l-70.51688 0l0 0.0630188l-70.52249 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m548.43176 418.28165l-70.51688 0l0 0.0630188l-70.52249 0" fill-rule="evenodd"/><path fill="#ffffff" d="m384.81378 10.527559l140.44098 0l0 46.3937l-140.44098 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m384.81378 10.527559l140.44098 0l0 46.3937l-140.44098 0z" fill-rule="evenodd"/><path fill="#212121" d="m397.5132 40.644405l3.546875 -12.906248l3.125 0l3.546875 12.906248l-1.421875 0l-0.921875 -3.328125l-5.53125 0l-0.9375 3.328125l-1.40625 0zm4.625 -11.671873l-1.96875 7.062498l4.890625 0l-1.953125 -7.062498l-0.96875 0zm7.3847656 11.671873l0 -9.328123l1.375 0l0 1.2656231q1.625 -1.1093731 3.421875 -1.4687481l0 1.4218731q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm9.752747 -9.515623q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.1406231q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.0781231 2.984375 -1.0781231zm6.0559998 9.515623l-1.40625 0l0 -13.390623l1.40625 0l0 4.578125q1.484375 -0.703125 2.859375 -0.703125q1.875 0 2.515625 1.0156231q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.609375 -0.71875q-1.171875 0 -2.28125 0.4375l-0.34375 0.125l0 7.703125zm8.612152 0l0 -9.328123l1.40625 0l0 9.328123l-1.40625 0zm0 -11.437498l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm3.2107239 2.109375l1.484375 0l2.1875 8.109373l0.6875 0l2.265625 -8.109373l1.4375 0l-2.640625 9.328123l-2.796875 0l-2.625 -9.328123zm16.024414 8.171873l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.906248 3.890625 -4.906248q1.890625 0 2.8125 1.0624981q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.31546 -6.640623q-2.8125 0 -2.8125 2.109375q0 1.1718731 0.640625 1.6093731q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.468748q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm12.642944 10.687498l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.906248 3.890625 -4.906248q1.890625 0 2.8125 1.0624981q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.062042 -4.312498q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.1406231q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.0781231 2.984375 -1.0781231zm9.477875 1.4062481l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.2187481l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.2187481zm1.7202148 8.109375l0 -9.328123l1.40625 0l0 9.328123l-1.40625 0zm0 -11.437498l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm3.6794739 6.765623q0 -2.5625 0.90625 -3.703125q0.921875 -1.1406231 3.09375 -1.1406231q2.171875 0 3.078125 1.1406231q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.225494 4.703125l-1.40625 0l0 -9.328123l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.0156231q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m455.0331 96.22966l0 -39.307087" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m455.03314 96.22966l0 -31.80709" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m457.23083 64.42257l-2.1976929 -6.0380936l-2.1976929 6.0380936z" fill-rule="evenodd"/><path fill="#ffffff" d="m259.55643 454.48557l138.29922 0l0 46.393707l-138.29922 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m259.55643 454.48557l138.29922 0l0 46.393707l-138.29922 0z" fill-rule="evenodd"/><path fill="#212121" d="m271.51144 484.60242l3.546875 -12.90625l3.125 0l3.546875 12.90625l-1.421875 0l-0.921875 -3.328125l-5.53125 0l-0.9375 3.328125l-1.40625 0zm4.625 -11.671875l-1.96875 7.0625l4.890625 0l-1.953125 -7.0625l-0.96875 0zm8.790985 11.671875l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm15.190277 -6.515625l0 4.78125q0.0625 0.6875 1.09375 0.8125l-0.0625 1.109375q-1.46875 0 -2.21875 -0.75q-1.671875 0.75 -3.359375 0.75q-1.28125 0 -1.953125 -0.71875q-0.671875 -0.734375 -0.671875 -2.09375q0 -1.375 0.6875 -2.015625q0.6875 -0.640625 2.15625 -0.78125l2.9375 -0.28125l0 -0.8125q0 -0.953125 -0.421875 -1.359375q-0.40625 -0.40625 -1.109375 -0.40625q-1.5 0 -3.09375 0.1875l-0.578125 0.046875l-0.0625 -1.0625q2.0625 -0.40625 3.640625 -0.40625q1.59375 0 2.296875 0.734375q0.71875 0.71875 0.71875 2.265625zm-5.734375 3.8125q0 1.71875 1.40625 1.71875q1.28125 0 2.5 -0.4375l0.4375 -0.140625l0 -3.078125l-2.765625 0.25q-0.84375 0.078125 -1.21875 0.5q-0.359375 0.40625 -0.359375 1.1875zm8.612427 2.703125l0 -13.390625l1.40625 0l0 13.390625l-1.40625 0zm3.3252258 -9.328125l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm12.677155 1.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm5.753296 8.265625l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm7.007599 3.171875q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm7.4251404 3.328125l0 4.9375l-1.4375 0l0 -12.90625l4.78125 0q2.046875 0 3.078125 0.953125q1.046875 0.953125 1.046875 2.953125q0 3.0 -2.375 3.75l2.484375 5.25l-1.578125 0l-2.34375 -4.9375l-3.65625 0zm3.359375 -1.28125q2.640625 0 2.640625 -2.703125q0 -2.71875 -2.65625 -2.71875l-3.34375 0l0 5.421875l3.359375 0zm12.636749 5.0625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm6.4995117 -3.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm11.565796 -1.0625l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm4.2033386 9.328125l0 -13.390625l1.40625 0l0 13.390625l-1.40625 0zm9.028351 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m548.43304 467.98032l58.92914 0l0 19.40158l-58.92914 0z" fill-rule="evenodd"/><path fill="#212121" d="m552.4225 479.32468q0 -2.1875 0.78125 -3.15625q0.796875 -0.984375 2.65625 -0.984375q1.859375 0 2.625 0.984375q0.78125 0.96875 0.78125 3.15625q0 2.1875 -0.734375 3.1875q-0.734375 0.984375 -2.6875 0.984375q-1.953125 0 -2.6875 -0.984375q-0.734375 -1.0 -0.734375 -3.1875zm1.234375 -0.015625q0 1.75 0.421875 2.453125q0.421875 0.703125 1.765625 0.703125q1.359375 0 1.78125 -0.6875q0.421875 -0.703125 0.421875 -2.46875q0 -1.765625 -0.46875 -2.421875q-0.46875 -0.671875 -1.734375 -0.671875q-1.25 0 -1.71875 0.671875q-0.46875 0.65625 -0.46875 2.421875zm12.557373 -3.96875l1.203125 0l0 8.0l-1.203125 0l0 -0.5625q-1.203125 0.71875 -2.359375 0.71875q-1.640625 0 -2.171875 -0.84375q-0.53125 -0.84375 -0.53125 -3.140625l0 -4.171875l1.1875 0l0 4.15625q0 1.75 0.296875 2.34375q0.3125 0.59375 1.390625 0.59375q0.53125 0 1.0625 -0.15625q0.546875 -0.15625 0.84375 -0.296875l0.28125 -0.140625l0 -6.5zm7.6522827 1.046875l-2.546875 0l0 3.8125q0 1.375 0.203125 1.8125q0.203125 0.4375 0.953125 0.4375l1.421875 -0.09375l0.078125 0.984375q-1.0625 0.171875 -1.625 0.171875q-1.25 0 -1.734375 -0.609375q-0.484375 -0.609375 -0.484375 -2.3125l0 -4.203125l-1.125 0l0 -1.046875l1.125 0l0 -2.453125l1.1875 0l0 2.453125l2.546875 0l0 1.046875zm1.4753418 10.5l0 -11.546875l1.1875 0l0 0.578125q1.203125 -0.734375 2.390625 -0.734375q1.515625 0 2.203125 0.96875q0.6875 0.96875 0.6875 3.1875q0 2.21875 -0.8125 3.1875q-0.796875 0.96875 -2.671875 0.96875q-0.96875 0 -1.78125 -0.171875l0 3.5625l-1.203125 0zm3.40625 -10.640625q-0.484375 0 -1.046875 0.171875q-0.546875 0.15625 -0.859375 0.3125l-0.296875 0.15625l0 5.390625q1.125 0.1875 1.71875 0.1875q1.296875 0 1.8125 -0.734375q0.53125 -0.75 0.53125 -2.40625q0 -1.671875 -0.484375 -2.375q-0.46875 -0.703125 -1.375 -0.703125zm10.010193 -0.90625l1.203125 0l0 8.0l-1.203125 0l0 -0.5625q-1.203125 0.71875 -2.359375 0.71875q-1.640625 0 -2.171875 -0.84375q-0.53125 -0.84375 -0.53125 -3.140625l0 -4.171875l1.1875 0l0 4.15625q0 1.75 0.296875 2.34375q0.3125 0.59375 1.390625 0.59375q0.53125 0 1.0625 -0.15625q0.546875 -0.15625 0.84375 -0.296875l0.28125 -0.140625l0 -6.5zm7.6522217 1.046875l-2.546875 0l0 3.8125q0 1.375 0.203125 1.8125q0.203125 0.4375 0.953125 0.4375l1.421875 -0.09375l0.078125 0.984375q-1.0625 0.171875 -1.625 0.171875q-1.25 0 -1.734375 -0.609375q-0.484375 -0.609375 -0.484375 -2.3125l0 -4.203125l-1.125 0l0 -1.046875l1.125 0l0 -2.453125l1.1875 0l0 2.453125l2.546875 0l0 1.046875zm3.9754028 -0.140625q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m740.29626 324.11716l25.000305 0l0 153.5748l-157.94519 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m747.42456 324.11716l17.87201 0l0 153.5748l-157.94519 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m747.42456 324.11716l-3.128296 -2.1904297l-3.128296 2.1904297l3.128296 2.1904602z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m548.43304 477.6811l-75.2883 0l0 0.06298828l-75.29434 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m548.43304 477.6811l-75.2883 0l0 0.06298828l-75.29434 0" fill-rule="evenodd"/><path fill="#ffffff" d="m107.55517 188.30183l138.29922 0l0 46.393707l-138.29922 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m107.55517 188.30183l138.29922 0l0 46.393707l-138.29922 0z" fill-rule="evenodd"/><path fill="#212121" d="m130.08826 218.41869l3.546875 -12.90625l3.125 0l3.546875 12.90625l-1.421875 0l-0.921875 -3.328125l-5.53125 0l-0.9375 3.328125l-1.40625 0zm4.625 -11.671875l-1.96875 7.0625l4.890625 0l-1.953125 -7.0625l-0.96875 0zm10.757111 2.15625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm9.477875 1.40625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm3.2107239 2.109375l1.484375 0l2.1875 8.109375l0.6875 0l2.265625 -8.109375l1.4375 0l-2.640625 9.328125l-2.796875 0l-2.625 -9.328125zm9.848663 9.328125l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913849 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm0.84521484 -1.21875l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm13.698471 -2.515625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm10.959305 3.734375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm3.577652 9.34375l0 -13.46875l1.375 0l0 0.671875q1.421875 -0.859375 2.796875 -0.859375q1.78125 0 2.578125 1.140625q0.8125 1.125 0.8125 3.71875q0 2.578125 -0.953125 3.71875q-0.9375 1.125 -3.125 1.125q-1.140625 0 -2.078125 -0.203125l0 4.15625l-1.40625 0zm3.96875 -12.40625q-0.5625 0 -1.203125 0.1875q-0.640625 0.1875 -1.015625 0.375l-0.34375 0.1875l0 6.28125q1.3125 0.203125 2.0 0.203125q1.515625 0 2.125 -0.859375q0.609375 -0.859375 0.609375 -2.796875q0 -1.9375 -0.5625 -2.75q-0.546875 -0.828125 -1.609375 -0.828125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m292.15662 201.79826l48.629913 0l0 19.40158l-48.629913 0z" fill-rule="evenodd"/><path fill="#212121" d="m301.62378 210.06451q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625zm9.080627 0.140625l-2.546875 0l0 3.8125q0 1.375 0.203125 1.8125q0.203125 0.4375 0.953125 0.4375l1.421875 -0.09375l0.078125 0.984375q-1.0625 0.171875 -1.625 0.171875q-1.25 0 -1.734375 -0.609375q-0.484375 -0.609375 -0.484375 -2.3125l0 -4.203125l-1.125 0l0 -1.046875l1.125 0l0 -2.453125l1.1875 0l0 2.453125l2.546875 0l0 1.046875zm6.912903 5.96875l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm3.080017 8.015625l0 -11.546875l1.1875 0l0 0.578125q1.203125 -0.734375 2.390625 -0.734375q1.515625 0 2.203125 0.96875q0.6875 0.96875 0.6875 3.1875q0 2.21875 -0.8125 3.1875q-0.796875 0.96875 -2.671875 0.96875q-0.96875 0 -1.78125 -0.171875l0 3.5625l-1.203125 0zm3.40625 -10.640625q-0.484375 0 -1.046875 0.171875q-0.546875 0.15625 -0.859375 0.3125l-0.296875 0.15625l0 5.390625q1.125 0.1875 1.71875 0.1875q1.296875 0 1.8125 -0.734375q0.53125 -0.75 0.53125 -2.40625q0 -1.671875 -0.484375 -2.375q-0.46875 -0.703125 -1.375 -0.703125zm7.525757 0q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m292.15662 211.49905l-23.151001 0l0 0.06298828l-23.148224 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m292.15662 211.49905l-23.151001 0l0 0.06298828l-23.148224 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m392.52917 211.49869l-25.87143 0l0 0.06298828l-25.876587 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m385.4009 211.49869l-18.743134 0l0 0.06298828l-25.876617 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m385.4009 211.49869l3.128296 2.190445l3.1282654 -2.190445l-3.1282654 -2.190445z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m735.18555 294.1023l41.858276 0l0 30.015747l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m749.37305 307.1054l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.166809 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8789062 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm6.95697 -6.8125l-1.75 0l0.546875 1.671875l-0.65625 0.203125l-0.546875 -1.6875l-1.421875 1.046875l-0.421875 -0.53125l1.4375 -1.046875l-1.40625 -1.03125l0.40625 -0.5625l1.421875 1.046875l0.546875 -1.6875l0.640625 0.21875l-0.53125 1.6875l1.734375 0l0 0.671875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m361.30188 181.93304l41.858246 0l0 30.015747l-41.858246 0z" fill-rule="evenodd"/><path fill="#212121" d="m375.48938 194.93617l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.1668396 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788757 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm6.95697 -6.8125l-1.75 0l0.546875 1.671875l-0.65625 0.203125l-0.546875 -1.6875l-1.421875 1.046875l-0.421875 -0.53125l1.4375 -1.046875l-1.40625 -1.03125l0.40625 -0.5625l1.421875 1.046875l0.546875 -1.6875l0.640625 0.21875l-0.53125 1.6875l1.734375 0l0 0.671875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m399.83652 388.3176l41.858276 0l0 30.015747l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m414.02402 401.32074l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.16687 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788452 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.1757507 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m217.69693 388.31735l41.858276 0l0 30.015747l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m231.88443 401.32047l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.1668549 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788605 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.1757355 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m394.31238 448.07587l41.858276 0l0 30.015747l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m408.49988 461.079l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.16687 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788452 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.1757507 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m354.29724 4.133533l41.858246 0l0 30.015747l-41.858246 0z" fill-rule="evenodd"/><path fill="#212121" d="m367.016 16.996033q1.09375 0 1.765625 0.40625q1.453125 0.859375 1.453125 4.265625q0 2.40625 -0.8125 3.40625q-0.796875 1.0 -2.40625 1.0q-1.59375 0 -2.40625 -0.984375q-0.796875 -0.984375 -0.796875 -3.484375q0 -2.515625 0.796875 -3.5625q0.796875 -1.046875 2.40625 -1.046875zm0.015625 0.90625q-0.765625 0 -1.203125 0.328125q-0.9375 0.65625 -0.9375 3.453125q0 1.96875 0.515625 2.734375q0.515625 0.75 1.625 0.75q1.109375 0 1.625 -0.765625q0.515625 -0.765625 0.515625 -2.8125q0 -2.0625 -0.5 -2.875q-0.5 -0.8125 -1.640625 -0.8125zm4.6199646 8.03125l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788757 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm6.95697 -6.8125l-1.75 0l0.546875 1.671875l-0.65625 0.203125l-0.546875 -1.6875l-1.421875 1.046875l-0.421875 -0.53125l1.4375 -1.046875l-1.40625 -1.03125l0.40625 -0.5625l1.421875 1.046875l0.546875 -1.6875l0.640625 0.21875l-0.53125 1.6875l1.734375 0l0 0.671875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m238.59712 182.03218l41.85826 0l0 30.015747l-41.85826 0z" fill-rule="evenodd"/><path fill="#212121" d="m252.78462 195.0353l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.1668549 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788452 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.1757507 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 79.01349l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m745.61945 79.01349l192.09052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m937.70996 81.211174l6.038086 -2.1976852l-6.038086 -2.1976929z" fill-rule="evenodd"/><path fill="#ffffff" d="m799.1627 62.209972l92.50397 0l0 30.70866l-92.50397 0z" fill-rule="evenodd"/><path fill="#212121" d="m806.0565 83.804306l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm5.091675 10.625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm9.305176 0l-1.296875 0l0 -12.4375l1.296875 0l0 4.265625q1.390625 -0.671875 2.671875 -0.671875q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.296875 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.5 -0.671875q-1.078125 0 -2.109375 0.390625l-0.328125 0.125l0 7.15625zm13.898865 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm3.3287964 4.828125l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm5.9954834 0l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm8.279236 3.09375l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125zm7.7070923 1.484375l0 4.4375q0.0625 0.640625 1.015625 0.765625l-0.0625 1.015625q-1.359375 0 -2.0625 -0.6875q-1.546875 0.6875 -3.109375 0.6875q-1.203125 0 -1.828125 -0.671875q-0.625 -0.671875 -0.625 -1.9375q0 -1.265625 0.640625 -1.859375q0.640625 -0.609375 2.015625 -0.75l2.71875 -0.25l0 -0.75q0 -0.890625 -0.390625 -1.265625q-0.375 -0.375 -1.03125 -0.375q-1.390625 0 -2.875 0.171875l-0.53125 0.046875l-0.0625 -0.984375q1.90625 -0.390625 3.375 -0.390625q1.484375 0 2.140625 0.6875q0.671875 0.671875 0.671875 2.109375zm-5.328125 3.53125q0 1.59375 1.3125 1.59375q1.171875 0 2.328125 -0.390625l0.390625 -0.140625l0 -2.859375l-2.5625 0.234375q-0.78125 0.078125 -1.125 0.46875q-0.34375 0.375 -0.34375 1.09375zm9.19696 2.515625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm11.242676 -8.84375q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm10.107239 7.765625l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 53.299213l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m752.7477 53.299213l192.46228 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m752.7477 53.299213l-3.1282349 -2.190445l-3.128296 2.190445l3.128296 2.1904411z" fill-rule="evenodd"/><path fill="#ffffff" d="m794.0761 36.0506l102.677185 0l0 30.708664l-102.677185 0z" fill-rule="evenodd"/><path fill="#212121" d="m803.7546 48.801178q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm3.8260498 4.5q0 -2.375 0.84375 -3.4375q0.859375 -1.0625 2.875 -1.0625q2.03125 0 2.859375 1.0625q0.84375 1.0625 0.84375 3.4375q0 2.375 -0.796875 3.453125q-0.796875 1.0625 -2.921875 1.0625q-2.109375 0 -2.90625 -1.0625q-0.796875 -1.078125 -0.796875 -3.453125zm1.34375 -0.03125q0 1.890625 0.453125 2.65625q0.46875 0.765625 1.921875 0.765625q1.46875 0 1.921875 -0.75q0.453125 -0.75 0.453125 -2.65625q0 -1.90625 -0.515625 -2.625q-0.5 -0.734375 -1.859375 -0.734375q-1.359375 0 -1.875 0.734375q-0.5 0.71875 -0.5 2.609375zm9.49292 4.375l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm12.440674 -7.53125l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125zm7.7070923 1.484375l0 4.4375q0.0625 0.640625 1.015625 0.765625l-0.0625 1.015625q-1.359375 0 -2.0625 -0.6875q-1.546875 0.6875 -3.109375 0.6875q-1.203125 0 -1.828125 -0.671875q-0.625 -0.671875 -0.625 -1.9375q0 -1.265625 0.640625 -1.859375q0.640625 -0.609375 2.015625 -0.75l2.71875 -0.25l0 -0.75q0 -0.890625 -0.390625 -1.265625q-0.375 -0.375 -1.03125 -0.375q-1.390625 0 -2.875 0.171875l-0.53125 0.046875l-0.0625 -0.984375q1.90625 -0.390625 3.375 -0.390625q1.484375 0 2.140625 0.6875q0.671875 0.671875 0.671875 2.109375zm-5.328125 3.53125q0 1.59375 1.3125 1.59375q1.171875 0 2.328125 -0.390625l0.390625 -0.140625l0 -2.859375l-2.5625 0.234375q-0.78125 0.078125 -1.125 0.46875q-0.34375 0.375 -0.34375 1.09375zm7.9000854 2.515625l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm5.091736 10.625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm9.305115 0l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.296875 -0.78125 2.53125 -0.78125q1.609375 0 2.25 0.890625q0.578125 -0.34375 1.484375 -0.609375q0.90625 -0.28125 1.59375 -0.28125q1.734375 0 2.328125 0.9375q0.609375 0.921875 0.609375 3.328125l0 4.578125l-1.296875 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.46875 -0.671875q-0.5625 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625q0.21875 0.5625 0.21875 2.53125l0 4.5l-1.296875 0l0 -4.46875q0 -1.875 -0.34375 -2.53125q-0.328125 -0.671875 -1.46875 -0.671875q-0.5625 0 -1.140625 0.171875q-0.578125 0.15625 -0.890625 0.3125l-0.296875 0.15625l0 7.03125zm19.080017 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.6256104 4.828125l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm12.440674 -7.53125l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 26.695538l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m745.61945 26.695538l195.20935 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m940.82886 26.695538l-1.6705322 1.6705399l4.5897217 -1.6705399l-4.5897217 -1.670538z" fill-rule="evenodd"/><path fill="#ffffff" d="m805.17847 9.368585l80.47247 0l0 30.70866l-80.47247 0z" fill-rule="evenodd"/><path fill="#212121" d="m812.17334 30.962914l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm11.71283 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.9849854 -2.703125l0 7.53125l-1.296875 0l0 -7.53125l-1.09375 0l0 -1.125l1.09375 0l0 -0.78125q0 -1.84375 0.515625 -2.5q0.53125 -0.671875 1.828125 -0.671875l1.75 0.109375l-0.015625 1.078125q-0.96875 -0.03125 -1.609375 -0.03125q-0.625 0 -0.90625 0.421875q-0.265625 0.40625 -0.265625 1.609375l0 0.765625l2.515625 0l0 1.125l-2.515625 0zm9.813965 6.453125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm3.3287964 4.828125l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm11.712769 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.6256714 4.828125l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm11.242615 -8.84375q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm10.1073 7.765625l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0z" fill-rule="nonzero"/></g></svg> \ No newline at end of file diff --git a/docs/schemas/base-sections.svg b/docs/schemas/base-sections.svg new file mode 100644 index 0000000000000000000000000000000000000000..697c22d0950a60c0e51cfbd0581fe3903918037a --- /dev/null +++ b/docs/schemas/base-sections.svg @@ -0,0 +1 @@ +<svg version="1.1" viewBox="0.0 0.0 960.0 540.0" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><clipPath id="g260ca5988d4_0_360.0"><path d="m0 0l960.0 0l0 540.0l-960.0 0l0 -540.0z" clip-rule="nonzero"/></clipPath><g clip-path="url(#g260ca5988d4_0_360.0)"><path fill="#ffffff" d="m0 0l960.0 0l0 540.0l-960.0 0z" fill-rule="evenodd"/><path fill="#ffffff" d="m417.49606 67.12861l125.007904 0l0 46.3937l-125.007904 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m417.49606 67.12861l125.007904 0l0 46.3937l-125.007904 0z" fill-rule="evenodd"/><path fill="#212121" d="m433.06256 84.33921l4.6875 0q1.921875 0 2.875 0.796875q0.96875 0.78125 0.96875 2.484375q0 1.21875 -0.421875 1.90625q-0.421875 0.671875 -1.234375 1.0625q2.046875 0.703125 2.046875 3.03125q0 1.953125 -1.03125 2.796875q-1.015625 0.828125 -2.953125 0.828125l-4.9375 0l0 -12.90625zm4.78125 6.96875l-3.34375 0l0 4.671875l3.4375 0q1.265625 0 1.921875 -0.53125q0.671875 -0.53125 0.671875 -1.875q0 -0.71875 -0.28125 -1.203125q-0.265625 -0.484375 -0.703125 -0.6875q-0.828125 -0.375 -1.703125 -0.375zm-0.140625 -5.703125l-3.203125 0l0 4.453125l3.328125 0q1.1875 0 1.734375 -0.5625q0.5625 -0.578125 0.5625 -1.71875q0 -1.140625 -0.59375 -1.65625q-0.578125 -0.515625 -1.828125 -0.515625zm13.195374 5.125l0 4.78125q0.0625 0.6875 1.09375 0.8125l-0.0625 1.109375q-1.46875 0 -2.21875 -0.75q-1.671875 0.75 -3.359375 0.75q-1.28125 0 -1.953125 -0.71875q-0.671875 -0.734375 -0.671875 -2.09375q0 -1.375 0.6875 -2.015625q0.6875 -0.640625 2.15625 -0.78125l2.9375 -0.28125l0 -0.8125q0 -0.953125 -0.421875 -1.359375q-0.40625 -0.40625 -1.109375 -0.40625q-1.5 0 -3.09375 0.1875l-0.578125 0.046875l-0.0625 -1.0625q2.0625 -0.40625 3.640625 -0.40625q1.59375 0 2.296875 0.734375q0.71875 0.71875 0.71875 2.265625zm-5.734375 3.8125q0 1.71875 1.40625 1.71875q1.28125 0 2.5 -0.4375l0.4375 -0.140625l0 -3.078125l-2.765625 0.25q-0.84375 0.078125 -1.21875 0.5q-0.359375 0.40625 -0.359375 1.1875zm11.424927 -5.5625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm12.097015 7.109375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.3154907 -6.640625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm12.642944 10.6875l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.0620117 -4.3125q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm9.477875 1.40625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm3.6794739 6.765625q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.0937805 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.2656555 0 -3.1250305 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5000305 0.8125 2.0781555 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.0156555 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.225494 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#ffffff" d="m270.44226 284.91077l138.2992 0l0 46.393707l-138.2992 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m270.44226 284.91077l138.2992 0l0 46.393707l-138.2992 0z" fill-rule="evenodd"/><path fill="#212121" d="m286.09686 315.02762l0 -12.90625l2.59375 0l3.65625 10.90625l3.671875 -10.90625l2.578125 0l0 12.90625l-1.421875 0l0 -11.375l-0.265625 0l-3.75 10.90625l-1.609375 0l-3.75 -10.90625l-0.265625 0l0 11.375l-1.4375 0zm21.687286 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm10.155762 -1.3125l0 4.78125q0.0625 0.6875 1.09375 0.8125l-0.0625 1.109375q-1.46875 0 -2.21875 -0.75q-1.671875 0.75 -3.359375 0.75q-1.28125 0 -1.953125 -0.71875q-0.671875 -0.734375 -0.671875 -2.09375q0 -1.375 0.6875 -2.015625q0.6875 -0.640625 2.15625 -0.78125l2.9375 -0.28125l0 -0.8125q0 -0.953125 -0.421875 -1.359375q-0.40625 -0.40625 -1.109375 -0.40625q-1.5 0 -3.09375 0.1875l-0.578125 0.046875l-0.0625 -1.0625q2.0625 -0.40625 3.640625 -0.40625q1.59375 0 2.296875 0.734375q0.71875 0.71875 0.71875 2.265625zm-5.734375 3.8125q0 1.71875 1.40625 1.71875q1.28125 0 2.5 -0.4375l0.4375 -0.140625l0 -3.078125l-2.765625 0.25q-0.84375 0.078125 -1.21875 0.5q-0.359375 0.40625 -0.359375 1.1875zm11.424927 -5.5625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm11.565765 -1.0625l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm4.0939636 9.328125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.612152 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm20.53415 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384277 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875z" fill-rule="nonzero"/><path fill="#ffffff" d="m417.17847 284.91077l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m417.17847 284.91077l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m447.5804 315.02762l3.546875 -12.90625l3.125 0l3.546875 12.90625l-1.421875 0l-0.921875 -3.328125l-5.53125 0l-0.9375 3.328125l-1.40625 0zm4.625 -11.671875l-1.96875 7.0625l4.890625 0l-1.953125 -7.0625l-0.96875 0zm8.791016 11.671875l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm15.190277 -6.515625l0 4.78125q0.0625 0.6875 1.09375 0.8125l-0.0625 1.109375q-1.46875 0 -2.21875 -0.75q-1.671875 0.75 -3.359375 0.75q-1.28125 0 -1.953125 -0.71875q-0.671875 -0.734375 -0.671875 -2.09375q0 -1.375 0.6875 -2.015625q0.6875 -0.640625 2.15625 -0.78125l2.9375 -0.28125l0 -0.8125q0 -0.953125 -0.421875 -1.359375q-0.40625 -0.40625 -1.109375 -0.40625q-1.5 0 -3.09375 0.1875l-0.578125 0.046875l-0.0625 -1.0625q2.0625 -0.40625 3.640625 -0.40625q1.59375 0 2.296875 0.734375q0.71875 0.71875 0.71875 2.265625zm-5.734375 3.8125q0 1.71875 1.40625 1.71875q1.28125 0 2.5 -0.4375l0.4375 -0.140625l0 -3.078125l-2.765625 0.25q-0.84375 0.078125 -1.21875 0.5q-0.359375 0.40625 -0.359375 1.1875zm8.612396 2.703125l0 -13.390625l1.40625 0l0 13.390625l-1.40625 0zm3.3252258 -9.328125l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm12.677185 1.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm5.7532654 8.265625l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm7.007599 3.171875q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m479.6824 284.91077l0 -33.00128l-228.03148 0l0 -33.014465" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m479.6824 284.91077l0 -33.00128l-228.03148 0l0 -25.514465" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m253.8486 226.39502l-2.1976776 -6.038101l-2.1976929 6.038101z" fill-rule="evenodd"/><path fill="#ffffff" d="m137.0 284.91077l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m137.0 284.91077l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m174.82849 310.68387l-3.296875 0l0 4.34375l-1.4375 0l0 -12.90625l4.734375 0q2.09375 0 3.09375 1.03125q1.015625 1.015625 1.015625 3.125q0 4.40625 -4.109375 4.40625zm-3.296875 -1.265625l3.265625 0q2.671875 0 2.671875 -3.140625q0 -1.5 -0.640625 -2.1875q-0.625 -0.703125 -2.03125 -0.703125l-3.265625 0l0 6.03125zm9.391296 5.609375l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm5.8621216 -4.671875q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm12.30365 -4.8125q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm10.88147 8.359375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm6.499542 -3.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm8.67514 0q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m199.50394 284.91077l0 -33.00128l52.157486 0l0 -33.014465" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m199.50394 284.91077l0 -33.00128l52.157486 0l0 -25.514465" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m253.8591 226.39502l-2.1976776 -6.038101l-2.1976929 6.038101z" fill-rule="evenodd"/><path fill="#ffffff" d="m832.5827 284.91077l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m832.5827 284.91077l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m852.80396 315.02762l0 -12.90625l1.4375 0l0 12.90625l-1.4375 0zm5.7612915 0l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm11.533997 -8.265625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.581421 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.267578 -9.328125l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm5.500183 9.328125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm20.53418 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384277 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m895.0866 284.91077l0 -33.00128l-133.98425 0l0 -33.014465" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m895.0866 284.91077l0 -33.00128l-133.98425 0l0 -25.514465" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m763.30005 226.39502l-2.1976929 -6.038101l-2.1976929 6.038101z" fill-rule="evenodd"/><path fill="#ffffff" d="m780.8609 394.67453l138.2992 0l0 46.393707l-138.2992 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m780.8609 394.67453l138.2992 0l0 46.393707l-138.2992 0z" fill-rule="evenodd"/><path fill="#212121" d="m797.0989 420.44763l-3.296875 0l0 4.34375l-1.4375 0l0 -12.90625l4.734375 0q2.09375 0 3.09375 1.03125q1.015625 1.015625 1.015625 3.125q0 4.40625 -4.109375 4.40625zm-3.296875 -1.265625l3.265625 0q2.671875 0 2.671875 -3.140625q0 -1.5 -0.640625 -2.1875q-0.625 -0.703125 -2.03125 -0.703125l-3.265625 0l0 6.03125zm15.203735 -3.71875l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm4.093994 9.328125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.612122 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.3154907 -6.640625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm12.111694 2.515625l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm8.218933 -0.1875q1.875 0 2.625 1.078125q0.765625 1.0625 0.765625 3.75q0 2.6875 -0.9375 3.78125q-0.9375 1.09375 -3.46875 1.09375q-0.78125 0 -2.59375 -0.15625l-0.515625 -0.046875l0 -13.375l1.375 0l0 4.53125q1.421875 -0.65625 2.75 -0.65625zm-1.03125 8.453125q1.828125 0 2.40625 -0.828125q0.59375 -0.828125 0.59375 -2.796875q0 -1.984375 -0.46875 -2.78125q-0.453125 -0.796875 -1.65625 -0.796875q-1.078125 0 -2.21875 0.40625l-0.375 0.140625l0 6.5625q1.21875 0.09375 1.71875 0.09375zm9.641357 -7.203125q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.58136 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.29834 1.59375l0 4.78125q0.0625 0.6875 1.09375 0.8125l-0.0625 1.109375q-1.46875 0 -2.21875 -0.75q-1.671875 0.75 -3.359375 0.75q-1.28125 0 -1.953125 -0.71875q-0.671875 -0.734375 -0.671875 -2.09375q0 -1.375 0.6875 -2.015625q0.6875 -0.640625 2.15625 -0.78125l2.9375 -0.28125l0 -0.8125q0 -0.953125 -0.421875 -1.359375q-0.40625 -0.40625 -1.109375 -0.40625q-1.5 0 -3.09375 0.1875l-0.578125 0.046875l-0.0625 -1.0625q2.0625 -0.40625 3.640625 -0.40625q1.59375 0 2.296875 0.734375q0.71875 0.71875 0.71875 2.265625zm-5.734375 3.8125q0 1.71875 1.40625 1.71875q1.28125 0 2.5 -0.4375l0.4375 -0.140625l0 -3.078125l-2.765625 0.25q-0.84375 0.078125 -1.21875 0.5q-0.359375 0.40625 -0.359375 1.1875zm9.909302 2.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm12.096558 -9.515625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm10.88147 8.359375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m850.0105 394.67453l0 -31.685028l-88.91339 0l0 -31.685028" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m850.0105 394.67453l0 -31.685028l-88.91339 0l0 -24.185028" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m763.2948 338.80447l-2.1976929 -6.0381165l-2.1976929 6.0381165z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m761.09973 172.51443l0 -29.496063l-281.10236 0l0 -29.496063" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m761.09973 172.51443l0 -29.496063l-281.10236 0l0 -21.996063" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m482.19507 121.02231l-2.1976929 -6.0380936l-2.1976929 6.0380936z" fill-rule="evenodd"/><path fill="#ffffff" d="m698.5958 172.51443l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m698.5958 172.51443l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m739.4415 202.63129l0 -12.90625l7.859375 0l0 1.265625l-6.421875 0l0 4.453125l5.3125 0l0 1.25l-5.3125 0l0 4.671875l6.421875 0l0 1.265625l-7.859375 0zm11.48877 0l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384277 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913818 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm0.84521484 -1.21875l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m627.11285 284.91077l0 -33.00128l133.98425 0l0 -33.014465" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m627.11285 284.91077l0 -33.00128l133.98425 0l0 -25.514465" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m763.2948 226.39502l-2.1976929 -6.038101l-2.1976929 6.038101z" fill-rule="evenodd"/><path fill="#ffffff" d="m564.60895 284.91077l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m564.60895 284.91077l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m598.25824 314.8245q-1.921875 0.390625 -3.453125 0.390625q-1.53125 0 -2.484375 -0.421875q-0.9375 -0.421875 -1.453125 -1.296875q-0.5 -0.890625 -0.703125 -2.03125q-0.203125 -1.15625 -0.203125 -2.875q0 -1.71875 0.203125 -2.875q0.203125 -1.171875 0.703125 -2.0625q0.515625 -0.90625 1.453125 -1.3125q0.9375 -0.40625 2.421875 -0.40625q1.5 0 3.515625 0.40625l-0.0625 1.21875q-1.890625 -0.34375 -3.359375 -0.34375q-2.046875 0 -2.71875 1.234375q-0.65625 1.21875 -0.65625 4.15625q0 1.484375 0.109375 2.375q0.125 0.890625 0.484375 1.609375q0.359375 0.71875 1.03125 1.03125q0.6875 0.3125 2.0 0.3125q1.3125 0 3.109375 -0.34375l0.0625 1.234375zm1.5091553 -4.46875q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm8.92865 4.703125l0 -13.390625l1.40625 0l0 13.390625l-1.40625 0zm4.3096313 0l0 -13.390625l1.40625 0l0 13.390625l-1.40625 0zm10.543945 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.0620117 -4.3125q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm9.477905 1.40625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm3.6794434 6.765625q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.225525 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m761.09973 284.91077l0 -33.00128l0.06298828 0l0 -33.014465" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m761.09973 284.91077l0 -33.00128l0.06298828 0l0 -25.514465" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m763.3604 226.39502l-2.1976929 -6.038101l-2.1976929 6.038101z" fill-rule="evenodd"/><path fill="#ffffff" d="m698.5958 284.91077l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m698.5958 284.91077l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m736.73254 303.18387q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm5.237549 2.515625l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm12.677185 1.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.58136 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9839478 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m659.90814 394.67453l0 -31.685028l101.19684 0l0 -31.685028" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m659.90814 394.67453l0 -31.685028l101.19684 0l0 -24.185028" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m763.3027 338.80447l-2.1976929 -6.0381165l-2.1976929 6.0381165z" fill-rule="evenodd"/><path fill="#ffffff" d="m577.1365 394.67453l165.54333 0l0 46.393707l-165.54333 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m577.1365 394.67453l165.54333 0l0 46.393707l-165.54333 0z" fill-rule="evenodd"/><path fill="#212121" d="m597.9014 424.58826q-1.921875 0.390625 -3.453125 0.390625q-1.53125 0 -2.484375 -0.421875q-0.9375 -0.421875 -1.453125 -1.296875q-0.5 -0.890625 -0.703125 -2.03125q-0.203125 -1.15625 -0.203125 -2.875q0 -1.71875 0.203125 -2.875q0.203125 -1.171875 0.703125 -2.0625q0.515625 -0.90625 1.453125 -1.3125q0.9375 -0.40625 2.421875 -0.40625q1.5 0 3.515625 0.40625l-0.0625 1.21875q-1.890625 -0.34375 -3.359375 -0.34375q-2.046875 0 -2.71875 1.234375q-0.65625 1.21875 -0.65625 4.15625q0 1.484375 0.109375 2.375q0.125 0.890625 0.484375 1.609375q0.359375 0.71875 1.03125 1.03125q0.6875 0.3125 2.0 0.3125q1.3125 0 3.109375 -0.34375l0.0625 1.234375zm1.5092163 -4.46875q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.225525 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm14.190369 4.140625l0 -13.46875l1.375 0l0 0.671875q1.421875 -0.859375 2.796875 -0.859375q1.78125 0 2.578125 1.140625q0.8125 1.125 0.8125 3.71875q0 2.578125 -0.953125 3.71875q-0.9375 1.125 -3.125 1.125q-1.140625 0 -2.078125 -0.203125l0 4.15625l-1.40625 0zm3.96875 -12.40625q-0.5625 0 -1.203125 0.1875q-0.640625 0.1875 -1.015625 0.375l-0.34375 0.1875l0 6.28125q1.3125 0.203125 2.0 0.203125q1.515625 0 2.125 -0.859375q0.609375 -0.859375 0.609375 -2.796875q0 -1.9375 -0.5625 -2.75q-0.546875 -0.828125 -1.609375 -0.828125zm5.456848 3.59375q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm11.74115 -3.5625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm5.753296 8.265625l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913818 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.3154907 -6.640625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm5.237488 2.515625l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm12.677185 1.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.581421 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m251.65355 172.51443l0 -29.496063l228.34645 0l0 -29.496063" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m251.65355 172.51443l0 -29.496063l228.34645 0l0 -21.996063" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m482.1977 121.02231l-2.1976929 -6.0380936l-2.1976929 6.0380936z" fill-rule="evenodd"/><path fill="#ffffff" d="m189.14961 172.51443l125.00786 0l0 46.393707l-125.00786 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m189.14961 172.51443l125.00786 0l0 46.393707l-125.00786 0z" fill-rule="evenodd"/><path fill="#212121" d="m222.90967 202.63129l3.546875 -12.90625l3.125 0l3.546875 12.90625l-1.421875 0l-0.921875 -3.328125l-5.53125 0l-0.9375 3.328125l-1.40625 0zm4.625 -11.671875l-1.96875 7.0625l4.890625 0l-1.953125 -7.0625l-0.96875 0zm10.757111 2.15625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm9.477875 1.40625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm3.2107239 2.109375l1.484375 0l2.1875 8.109375l0.6875 0l2.265625 -8.109375l1.4375 0l-2.640625 9.328125l-2.796875 0l-2.625 -9.328125zm9.848663 9.328125l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913849 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm0.84521484 -1.21875l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125z" fill-rule="nonzero"/><path fill="#ffffff" d="m3.5564303 284.92126l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m3.5564303 284.92126l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m22.602322 315.03812l0 -12.90625l7.859375 0l0 1.265625l-6.421875 0l0 4.453125l5.3125 0l0 1.25l-5.3125 0l0 4.671875l6.421875 0l0 1.265625l-7.859375 0zm9.145035 -9.328125l1.53125 0l2.28125 3.65625l2.28125 -3.65625l1.515625 0l-2.953125 4.625l2.9375 4.703125l-1.53125 0l-2.25 -3.640625l-2.28125 3.640625l-1.53125 0l2.9375 -4.671875l-2.9375 -4.65625zm9.370132 13.46875l0 -13.46875l1.375 0l0 0.671875q1.421875 -0.859375 2.796875 -0.859375q1.78125 0 2.578125 1.140625q0.8125 1.125 0.8125 3.71875q0 2.578125 -0.953125 3.71875q-0.9375 1.125 -3.125 1.125q-1.140625 0 -2.078125 -0.203125l0 4.15625l-1.40625 0zm3.96875 -12.40625q-0.5625 0 -1.203125 0.1875q-0.640625 0.1875 -1.015625 0.375l-0.34375 0.1875l0 6.28125q1.3125 0.203125 2.0 0.203125q1.515625 0 2.125 -0.859375q0.609375 -0.859375 0.609375 -2.796875q0 -1.9375 -0.5625 -2.75q-0.546875 -0.828125 -1.609375 -0.828125zm12.206848 7.109375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm3.577652 5.203125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.4218712 -1.46875l0 1.421875q-0.78125 0.140625 -1.6406212 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm6.455059 0l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm5.491974 11.4375l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm20.534134 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.983902 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384262 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m66.06036 284.92126l0 -33.00656l185.60631 0l0 -33.009186" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m66.06036 284.92126l0 -33.00656l185.60631 0l0 -25.509186" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m253.86435 226.40552l-2.1976776 -6.038101l-2.1976929 6.038101z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m339.59186 284.91077l0 -33.00128l-87.937 0l0 -33.014465" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m339.59186 284.91077l0 -33.00128l-87.937 0l0 -25.514465" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m253.85254 226.39502l-2.1976776 -6.038101l-2.1976929 6.038101z" fill-rule="evenodd"/><path fill="#ffffff" d="m121.04724 397.3071l156.91339 0l0 46.393677l-156.91339 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m121.04724 397.3071l156.91339 0l0 46.393677l-156.91339 0z" fill-rule="evenodd"/><path fill="#212121" d="m135.88406 415.58017q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm5.2375183 2.515625l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm11.292221 9.328125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384262 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm3.1264648 8.109375l-1.40625 0l0 -13.390625l1.40625 0l0 4.578125q1.484375 -0.703125 2.859375 -0.703125q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.609375 -0.71875q-1.171875 0 -2.28125 0.4375l-0.34375 0.125l0 7.703125zm14.955902 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm6.499527 -3.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm5.7532806 8.265625l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm7.007599 3.171875q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm5.9876556 8.265625l0 -12.90625l2.59375 0l3.65625 10.90625l3.671875 -10.90625l2.578125 0l0 12.90625l-1.421875 0l0 -11.375l-0.265625 0l-3.75 10.90625l-1.609375 0l-3.75 -10.90625l-0.265625 0l0 11.375l-1.4375 0zm21.687286 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm8.349762 -2.90625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm3.1264648 8.109375l-1.40625 0l0 -13.390625l1.40625 0l0 4.578125q1.484375 -0.703125 2.859375 -0.703125q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.609375 -0.71875q-1.171875 0 -2.28125 0.4375l-0.34375 0.125l0 7.703125zm8.205887 -4.671875q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm15.975525 -8.6875l0 13.390625l-1.375 0l0 -0.640625q-1.4375 0.828125 -2.828125 0.828125q-0.75 0 -1.3125 -0.1875q-0.5625 -0.1875 -1.046875 -0.671875q-1.0 -1.0 -1.0 -3.71875q0 -2.71875 0.90625 -3.921875q0.90625 -1.203125 2.984375 -1.203125q1.078125 0 2.296875 0.25l0 -4.125l1.375 0zm-5.484375 11.71875q0.3125 0.34375 0.640625 0.484375q0.34375 0.125 0.875 0.125q0.53125 0 1.1875 -0.171875q0.65625 -0.1875 1.03125 -0.34375l0.375 -0.171875l0 -6.328125q-1.1875 -0.21875 -2.21875 -0.21875q-1.421875 0 -1.984375 0.90625q-0.546875 0.890625 -0.546875 2.796875q0 2.171875 0.640625 2.921875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m199.50394 397.3071l0 -33.00128l0.06298828 0l0 -33.014465" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m199.50394 397.3071l0 -33.00128l0.06298828 0l0 -25.514465" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m201.76462 338.79135l-2.1976929 -6.0381165l-2.1976776 6.0381165z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 79.01349l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m745.61945 79.01349l192.09052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m937.70996 81.211174l6.038086 -2.1976852l-6.038086 -2.1976929z" fill-rule="evenodd"/><path fill="#ffffff" d="m799.1627 62.209972l92.50397 0l0 30.70866l-92.50397 0z" fill-rule="evenodd"/><path fill="#212121" d="m806.0565 83.804306l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm5.091675 10.625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm9.305176 0l-1.296875 0l0 -12.4375l1.296875 0l0 4.265625q1.390625 -0.671875 2.671875 -0.671875q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.296875 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.5 -0.671875q-1.078125 0 -2.109375 0.390625l-0.328125 0.125l0 7.15625zm13.898865 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm3.3287964 4.828125l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm5.9954834 0l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm8.279236 3.09375l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125zm7.7070923 1.484375l0 4.4375q0.0625 0.640625 1.015625 0.765625l-0.0625 1.015625q-1.359375 0 -2.0625 -0.6875q-1.546875 0.6875 -3.109375 0.6875q-1.203125 0 -1.828125 -0.671875q-0.625 -0.671875 -0.625 -1.9375q0 -1.265625 0.640625 -1.859375q0.640625 -0.609375 2.015625 -0.75l2.71875 -0.25l0 -0.75q0 -0.890625 -0.390625 -1.265625q-0.375 -0.375 -1.03125 -0.375q-1.390625 0 -2.875 0.171875l-0.53125 0.046875l-0.0625 -0.984375q1.90625 -0.390625 3.375 -0.390625q1.484375 0 2.140625 0.6875q0.671875 0.671875 0.671875 2.109375zm-5.328125 3.53125q0 1.59375 1.3125 1.59375q1.171875 0 2.328125 -0.390625l0.390625 -0.140625l0 -2.859375l-2.5625 0.234375q-0.78125 0.078125 -1.125 0.46875q-0.34375 0.375 -0.34375 1.09375zm9.19696 2.515625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm11.242676 -8.84375q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm10.107239 7.765625l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 53.299213l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m752.7477 53.299213l192.46228 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m752.7477 53.299213l-3.1282349 -2.190445l-3.128296 2.190445l3.128296 2.1904411z" fill-rule="evenodd"/><path fill="#ffffff" d="m794.0761 36.0506l102.677185 0l0 30.708664l-102.677185 0z" fill-rule="evenodd"/><path fill="#212121" d="m803.7546 48.801178q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm3.8260498 4.5q0 -2.375 0.84375 -3.4375q0.859375 -1.0625 2.875 -1.0625q2.03125 0 2.859375 1.0625q0.84375 1.0625 0.84375 3.4375q0 2.375 -0.796875 3.453125q-0.796875 1.0625 -2.921875 1.0625q-2.109375 0 -2.90625 -1.0625q-0.796875 -1.078125 -0.796875 -3.453125zm1.34375 -0.03125q0 1.890625 0.453125 2.65625q0.46875 0.765625 1.921875 0.765625q1.46875 0 1.921875 -0.75q0.453125 -0.75 0.453125 -2.65625q0 -1.90625 -0.515625 -2.625q-0.5 -0.734375 -1.859375 -0.734375q-1.359375 0 -1.875 0.734375q-0.5 0.71875 -0.5 2.609375zm9.49292 4.375l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm12.440674 -7.53125l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125zm7.7070923 1.484375l0 4.4375q0.0625 0.640625 1.015625 0.765625l-0.0625 1.015625q-1.359375 0 -2.0625 -0.6875q-1.546875 0.6875 -3.109375 0.6875q-1.203125 0 -1.828125 -0.671875q-0.625 -0.671875 -0.625 -1.9375q0 -1.265625 0.640625 -1.859375q0.640625 -0.609375 2.015625 -0.75l2.71875 -0.25l0 -0.75q0 -0.890625 -0.390625 -1.265625q-0.375 -0.375 -1.03125 -0.375q-1.390625 0 -2.875 0.171875l-0.53125 0.046875l-0.0625 -0.984375q1.90625 -0.390625 3.375 -0.390625q1.484375 0 2.140625 0.6875q0.671875 0.671875 0.671875 2.109375zm-5.328125 3.53125q0 1.59375 1.3125 1.59375q1.171875 0 2.328125 -0.390625l0.390625 -0.140625l0 -2.859375l-2.5625 0.234375q-0.78125 0.078125 -1.125 0.46875q-0.34375 0.375 -0.34375 1.09375zm7.9000854 2.515625l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm5.091736 10.625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm9.305115 0l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.296875 -0.78125 2.53125 -0.78125q1.609375 0 2.25 0.890625q0.578125 -0.34375 1.484375 -0.609375q0.90625 -0.28125 1.59375 -0.28125q1.734375 0 2.328125 0.9375q0.609375 0.921875 0.609375 3.328125l0 4.578125l-1.296875 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.46875 -0.671875q-0.5625 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625q0.21875 0.5625 0.21875 2.53125l0 4.5l-1.296875 0l0 -4.46875q0 -1.875 -0.34375 -2.53125q-0.328125 -0.671875 -1.46875 -0.671875q-0.5625 0 -1.140625 0.171875q-0.578125 0.15625 -0.890625 0.3125l-0.296875 0.15625l0 7.03125zm19.080017 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.6256104 4.828125l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm12.440674 -7.53125l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 26.695538l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m745.61945 26.695538l195.20935 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m940.82886 26.695538l-1.6705322 1.6705399l4.5897217 -1.6705399l-4.5897217 -1.670538z" fill-rule="evenodd"/><path fill="#ffffff" d="m805.17847 9.368585l80.47247 0l0 30.70866l-80.47247 0z" fill-rule="evenodd"/><path fill="#212121" d="m812.17334 30.962914l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm11.71283 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.9849854 -2.703125l0 7.53125l-1.296875 0l0 -7.53125l-1.09375 0l0 -1.125l1.09375 0l0 -0.78125q0 -1.84375 0.515625 -2.5q0.53125 -0.671875 1.828125 -0.671875l1.75 0.109375l-0.015625 1.078125q-0.96875 -0.03125 -1.609375 -0.03125q-0.625 0 -0.90625 0.421875q-0.265625 0.40625 -0.265625 1.609375l0 0.765625l2.515625 0l0 1.125l-2.515625 0zm9.813965 6.453125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm3.3287964 4.828125l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm11.712769 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.6256714 4.828125l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm11.242615 -8.84375q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm10.1073 7.765625l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0z" fill-rule="nonzero"/></g></svg> \ No newline at end of file diff --git a/docs/schemas/base_sections.md b/docs/schemas/base_sections.md new file mode 100644 index 0000000000000000000000000000000000000000..5cd02e4cf3efe2c21ede3f5fdf3abc32a60d063e --- /dev/null +++ b/docs/schemas/base_sections.md @@ -0,0 +1,275 @@ +--- +title: Base sections +--- + +As previously mentioned in ["How to write a schema"](basics.md#base-sections-and-inheritance), +base sections can be used when writing custom schemas to inherit properties, and more +importantly, functionality from already defined sections. Here we explain the properties +and functionality of specific base sections and how they can be used. + +## `datamodel.metainfo.basesections` + +This built-in nomad module contains a set of base sections based on an entity-activity +model. + +!!! info + In this part of the documentation we use UML Class diagrams to illustrate the + inheritance, composition and association between the base sections. + For more information on UML Class diagrams please see + [en.wikipedia.org/wiki/Class_diagram](https://en.wikipedia.org/wiki/Class_diagram). + + + +All the base sections defined in this model are abstract in the sense that they cannot be +instantiated in NOMAD directly. +Instead, the user is expected to implement these in their own schemas by inheriting a base +section and `nomad.datamodel.EntryData`. +Furthermore, it is strongly encouraged to use the most specialized section applicable. + +!!! example + If the user is writing a schema for an instrument in their lab, they should ideally + inherit from `Instrument` (and `EntryData`) rather than directly from `Entity` or + `BaseSection`. + +All sections that are intended to eventually become entries in NOMAD by inheriting from +the entity-activity base sections inherit from `BaseSection`. +This section provides a set of global quantities that provides basic information about the +entry. +Theses are: + +- `name`: A short human readable and descriptive name. +- `datetime`: The date and time associated with this section. +- `lab_id`: An ID string that is unique at least for the lab that produced this data. +- `description`: Any information that cannot be captured in the other fields. + +### `Entity` + +!!! info + By "Entity" we mean: + + "An object that persists, endures, or continues to exist through time while maintaining + its identity." + + See [BFO_0000002](http://purl.obolibrary.org/obo/BFO_0000002) for semantic context. + +The `Entity` section is currently subclassed by `System`, `Collection` and `Instrument`. + + + +#### `Collection` + +The `Collection` section should be inherited when attempting to group entities together. + + + +!!! example + The user wants to write a data schema for a batch of substrates. + As this is grouping entities together, they should inherit from `Collection`. + +##### `EntityReference` + +The `EntityReference` section can be composed in any `Activity` (see +[`Activity`](#activity) below) to provide a reference to an `Entity`. +The section contains the following quantities: + +- `reference`: A reference to a NOMAD `Entity` entry. +- `lab_id`: The readable identifier for the entity. +- `name`: A short descriptive name for the role of this reference +(inherited from `SectionReference`). + +The normalizer for the `EntityReference` class will attempt to fill the `reference` from +the `lab_id` or vice versa. + +#### `Instrument` + +The `Instrument` section should be inherited when describing any tools used for material +creation or characterization. + + + +#### `System` + +The main `Entity` section is `System` which is intended to cover any material system from +atomic to device scale. +This section adds the property `elemental_composition` which is a repeating subsection of +`ElementalComposition` sections. +Each `elemental_composition` section keeps track of a single element and its atomic +fraction within the system. + +There are two specializations of `System` which differentiates +between the theoretical concept of a pure material, `PureSubstance`, and an actual physical +material combining several pure substances, `CompositeSystem`. + + + +##### `PubChemPureSubstanceSection` + +This is a specialization of the `PureSubstanceSection` which will automatically search the +PubChem database for additional information about the substance. +If a PubChem CID is specified the details are retrieved directly. +Otherwise a search query is made for the filled attributes in the following order: + +1. `smile` +2. `canonical_smile` +3. `inchi_key` +4. `iupac_name` +5. `name` +6. `molecular_formula` +7. `cas_number` + +### `Activity` + +!!! info + By "Activity" we mean: + + "An action that has a temporal extension and for some time depends on some entity." + + See [BFO_0000015](http://purl.obolibrary.org/obo/BFO_0000015) for semantic context. + +The `Activity` section is currently subclassed by `Process`, `Measurement`, `Analysis`, +and `Experiment`. +These subclasses are intended to cover all types of activities and should be used instead +of inheriting directly from `Activity`. + + + +#### `Experiment` + +The `Experiment` section should be inherited when attempting to group activities together. + + + +!!! example + In a sample centric view the activities are grouped together by the sample but if the + researcher is instead interested in an experiment containing activities on multiple + samples, the `Experiment` section can be inherited to group these together. + +#### `Process` + +!!! info + By "Process" we mean: + + "A planned process which results in physical changes in a specified input material. + [ obi : prs obi : mc obi : fg obi : jf obi : bp ] + + Synonyms: + + - preparative method + - sample preparation + - sample preparative method + - material transformations" + + See [OBI_0000094](http://purl.obolibrary.org/obo/OBI_0000094) for semantic context. + +The `Process` section is the base for the `SynthesisMethod` section which in turn is +specialized further in the [`nomad-material-processing`](#plugin-nomad-material-processing) +plugin detailed below. +The main feature of the `Process` section is that it adds `ProcessSteps` with a duration. + + + +!!! info + By "SynthesisMethod" we mean: + + "A method used to synthesise a sample." + + See [CHMO_0001301](http://purl.obolibrary.org/obo/CHMO_0001301) for semantic context. + +#### `Measurement` + +!!! info + By "Measurement" we mean: + + "A planned process with the objective to produce information about the material entity + that is the evaluant, by physically examining it or its proxies. [ obi : pppb ]" + + See [OBI_0000070](http://purl.obolibrary.org/obo/OBI_0000070) for semantic context. + +The `Measurement` section adds `samples` which are references to instances of (subclasses +of) `CompositeSystem`. + + + +#### `Analysis` + +!!! info + By "Analysis" we mean: + + "A planned process that produces output data from input data. + + Synonyms: + + - data processing + - data analysis" + + See [OBI_0200000](http://purl.obolibrary.org/obo/OBI_0200000) for semantic context. + +The `Analysis` section provides `inputs` which are references to any section (including +sub sections) of some archive. +In addition, it provides the `outputs` which is a repeating section of `AnalysisResult` +which are intended to be further specialized by the user. + + + +### `ReadableIdentifiers` + +This base sub section is meant to be composed into the entity-activity sections mentioned +above to provide a standardized readable identifier. + +It is in turn composed by the following quantities: + +- `institute`: Alias/short name of the home institute of the owner, i.e. *HZB*. +- `owner`: Alias for the owner of the identified thing. This should be unique within the +institute. +- `datetime`: A datetime associated with the identified thing. In case of an `Activity`, +this should be the starting time and, in case of an `Entity`, the creation time. +- `short_name`: A short name of the the identified thing (e.g. the identifier scribed on +the sample, the process number, or machine name), e.g. 4001-8, YAG-2-34. +This is to be managed and decided internally by the labs, although we recommend to avoid +the following characters in it: "_", "/", "\\" and ".". +- `lab_id`: Full readable id. Ideally a human readable id convention, which is simple, +understandable and still have chances of becoming unique. +If the `owner`, `short_name`, `ìnstitute`, and `datetime` are provided, this will +be formed automatically by joining these components by an underscore (_). +Spaces in any of the individual components will be replaced with hyphens (-). +An example would be hzb_oah_20200602_4001-08. + +If owner is not filled the field will be filled by the first two letters of +the first name joined with the first two letters of the last name of the author. +If the institute is not filled a institute abreviations will be constructed from +the author's affiliation. +If no datetime is filled, the datetime will be taken from the `datetime` +property of the parent, if it exists, otherwise the current date and time will be +used. +If no short name is filled, the name will be taken from the parent name, if it +exists, otherwise it will be taken from the archive metadata entry name, if it +exists, and finally if no other options are available it will use the name of the +mainfile. + +!!! example + The user has created a sample section by inheriting from `CompositeSystem` and `EntryData`. + Now, the user wants to automatically generate a readable `lab_id` based on the logged + in author. + This can be accomplished by composing the `ReadableIdentifiers` section into the users + sample section: + + ```python + class MySample(CompositeSystem, EntryData): + ''' + A custom sample section. + ''' + m_def = Section( + a_template=dict( + sample_identifiers=dict(), + ), + ) + sample_identifiers = SubSection( + section_def=ReadableIdentifiers, + ) + ``` + +## Plugin: `nomad-material-processing` + +This plugin contains more specialized base sections for material processing, is +maintained by FAIRmat and is currently hosted on +[https://github.com/FAIRmat-NFDI](https://github.com/FAIRmat-NFDI/AreaA-data_modeling_and_schemas). \ No newline at end of file diff --git a/docs/schemas/basics.md b/docs/schemas/basics.md index 965d74d6968b00c33b626276bc11fc8037617c2f..7f8dc4a538bfe8c8e67fe9d8ef4a0f45ac63c982 100644 --- a/docs/schemas/basics.md +++ b/docs/schemas/basics.md @@ -1,6 +1,6 @@ # Write NOMAD Schemas in YAML -This guide explains how to write and upload NOMAD schemas in our `.archive.yaml` format. For more information visit the [learn section on schemas](../learn/data.md). +This guide explains how to write and upload NOMAD schemas in our `.archive.yaml` format. For more information on how an archive file is composed, visit the [learn section on schemas](../explanation/data.md). ## Example data diff --git a/docs/schemas/collection-sections.svg b/docs/schemas/collection-sections.svg new file mode 100644 index 0000000000000000000000000000000000000000..4cb24a9b522a6ec4f5f41e964e135a04b136424c --- /dev/null +++ b/docs/schemas/collection-sections.svg @@ -0,0 +1 @@ +<svg version="1.1" viewBox="0.0 0.0 960.0 540.0" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><clipPath id="g260ca5988d4_0_408.0"><path d="m0 0l960.0 0l0 540.0l-960.0 0l0 -540.0z" clip-rule="nonzero"/></clipPath><g clip-path="url(#g260ca5988d4_0_408.0)"><path fill="#ffffff" d="m0 0l960.0 0l0 540.0l-960.0 0z" fill-rule="evenodd"/><path fill="#ffffff" d="m715.3583 251.4042l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m715.3583 251.4042l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m735.5795 281.52106l0 -12.90625l1.4375 0l0 12.90625l-1.4375 0zm5.7612915 0l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm11.534058 -8.265625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.58136 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.267578 -9.328125l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm5.500244 9.328125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm20.534119 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384277 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m777.8622 251.4042l0 -33.00128l-133.98425 0l0 -33.014465" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m777.8622 251.4042l0 -33.00128l-133.98425 0l0 -25.514465" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m646.0756 192.88846l-2.1976929 -6.038101l-2.1976929 6.038101z" fill-rule="evenodd"/><path fill="#ffffff" d="m663.6365 361.16797l143.4961 0l0 46.393707l-143.4961 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m663.6365 361.16797l143.4961 0l0 46.393707l-143.4961 0z" fill-rule="evenodd"/><path fill="#212121" d="m682.4729 386.94107l-3.296875 0l0 4.34375l-1.4375 0l0 -12.90625l4.734375 0q2.09375 0 3.09375 1.03125q1.015625 1.015625 1.015625 3.125q0 4.40625 -4.109375 4.40625zm-3.296875 -1.265625l3.265625 0q2.671875 0 2.671875 -3.140625q0 -1.5 -0.640625 -2.1875q-0.625 -0.703125 -2.03125 -0.703125l-3.265625 0l0 6.03125zm15.203735 -3.71875l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm4.093994 9.328125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.612122 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.3154907 -6.640625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm12.111694 2.515625l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm8.218933 -0.1875q1.875 0 2.625 1.078125q0.765625 1.0625 0.765625 3.75q0 2.6875 -0.9375 3.78125q-0.9375 1.09375 -3.46875 1.09375q-0.78125 0 -2.59375 -0.15625l-0.515625 -0.046875l0 -13.375l1.375 0l0 4.53125q1.421875 -0.65625 2.75 -0.65625zm-1.03125 8.453125q1.828125 0 2.40625 -0.828125q0.59375 -0.828125 0.59375 -2.796875q0 -1.984375 -0.46875 -2.78125q-0.453125 -0.796875 -1.65625 -0.796875q-1.078125 0 -2.21875 0.40625l-0.375 0.140625l0 6.5625q1.21875 0.09375 1.71875 0.09375zm9.641357 -7.203125q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.58136 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.29834 1.59375l0 4.78125q0.0625 0.6875 1.09375 0.8125l-0.0625 1.109375q-1.46875 0 -2.21875 -0.75q-1.671875 0.75 -3.359375 0.75q-1.28125 0 -1.953125 -0.71875q-0.671875 -0.734375 -0.671875 -2.09375q0 -1.375 0.6875 -2.015625q0.6875 -0.640625 2.15625 -0.78125l2.9375 -0.28125l0 -0.8125q0 -0.953125 -0.421875 -1.359375q-0.40625 -0.40625 -1.109375 -0.40625q-1.5 0 -3.09375 0.1875l-0.578125 0.046875l-0.0625 -1.0625q2.0625 -0.40625 3.640625 -0.40625q1.59375 0 2.296875 0.734375q0.71875 0.71875 0.71875 2.265625zm-5.734375 3.8125q0 1.71875 1.40625 1.71875q1.28125 0 2.5 -0.4375l0.4375 -0.140625l0 -3.078125l-2.765625 0.25q-0.84375 0.078125 -1.21875 0.5q-0.359375 0.40625 -0.359375 1.1875zm9.909302 2.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm12.096558 -9.515625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm10.88147 8.359375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m735.3845 361.16797l0 -31.685028l-91.49609 0l0 -31.685028" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m735.3845 361.16797l0 -31.685028l-91.49609 0l0 -24.185028" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m646.0861 305.2979l-2.1976929 -6.0381165l-2.1976929 6.0381165z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m509.88846 251.4042l0 -33.00128l133.98422 0l0 -33.014465" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m509.88846 251.4042l0 -33.00128l133.98422 0l0 -25.514465" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m646.0704 192.88846l-2.1976929 -6.038101l-2.1976929 6.038101z" fill-rule="evenodd"/><path fill="#ffffff" d="m447.38452 251.4042l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m447.38452 251.4042l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m481.0338 281.31793q-1.921875 0.390625 -3.453125 0.390625q-1.53125 0 -2.484375 -0.421875q-0.9375 -0.421875 -1.453125 -1.296875q-0.5 -0.890625 -0.703125 -2.03125q-0.203125 -1.15625 -0.203125 -2.875q0 -1.71875 0.203125 -2.875q0.203125 -1.171875 0.703125 -2.0625q0.515625 -0.90625 1.453125 -1.3125q0.9375 -0.40625 2.421875 -0.40625q1.5 0 3.515625 0.40625l-0.0625 1.21875q-1.890625 -0.34375 -3.359375 -0.34375q-2.046875 0 -2.71875 1.234375q-0.65625 1.21875 -0.65625 4.15625q0 1.484375 0.109375 2.375q0.125 0.890625 0.484375 1.609375q0.359375 0.71875 1.03125 1.03125q0.6875 0.3125 2.0 0.3125q1.3125 0 3.109375 -0.34375l0.0625 1.234375zm1.5091858 -4.46875q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm8.92865 4.703125l0 -13.390625l1.40625 0l0 13.390625l-1.40625 0zm4.309601 0l0 -13.390625l1.40625 0l0 13.390625l-1.40625 0zm10.543976 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.062042 -4.3125q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625305 0.75 -0.5625305 2.796875q0 2.03125 0.5312805 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.0156555 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.9062805 -1.078125 2.9844055 -1.078125zm9.477844 1.40625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm3.6795044 6.765625q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.225464 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m643.8753 251.4042l0 -33.00128l0.06298828 0l0 -33.014465" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m643.8753 251.4042l0 -33.00128l0.06298828 0l0 -25.514465" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m646.136 192.88846l-2.1976929 -6.038101l-2.1976318 6.038101z" fill-rule="evenodd"/><path fill="#ffffff" d="m581.3714 251.4042l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m581.3714 251.4042l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m619.5082 269.6773q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm5.237488 2.515625l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm12.677185 1.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.581421 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m540.5866 361.16797l0 -31.685028l103.27557 0l0 -31.685028" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m540.5866 361.16797l0 -31.685028l103.27557 0l0 -24.185028" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m646.0599 305.2979l-2.1976929 -6.0381165l-2.1976929 6.0381165z" fill-rule="evenodd"/><path fill="#ffffff" d="m455.72046 361.16797l169.7323 0l0 46.393707l-169.7323 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m455.72046 361.16797l169.7323 0l0 46.393707l-169.7323 0z" fill-rule="evenodd"/><path fill="#212121" d="m478.57993 391.0817q-1.921875 0.390625 -3.453125 0.390625q-1.53125 0 -2.484375 -0.421875q-0.9375 -0.421875 -1.453125 -1.296875q-0.5 -0.890625 -0.703125 -2.03125q-0.203125 -1.15625 -0.203125 -2.875q0 -1.71875 0.203125 -2.875q0.203125 -1.171875 0.703125 -2.0625q0.515625 -0.90625 1.453125 -1.3125q0.9375 -0.40625 2.421875 -0.40625q1.5 0 3.515625 0.40625l-0.0625 1.21875q-1.890625 -0.34375 -3.359375 -0.34375q-2.046875 0 -2.71875 1.234375q-0.65625 1.21875 -0.65625 4.15625q0 1.484375 0.109375 2.375q0.125 0.890625 0.484375 1.609375q0.359375 0.71875 1.03125 1.03125q0.6875 0.3125 2.0 0.3125q1.3125 0 3.109375 -0.34375l0.0625 1.234375zm1.5092163 -4.46875q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.225494 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm14.190399 4.140625l0 -13.46875l1.375 0l0 0.671875q1.421875 -0.859375 2.796875 -0.859375q1.78125 0 2.5780945 1.140625q0.8125 1.125 0.8125 3.71875q0 2.578125 -0.953125 3.71875q-0.9374695 1.125 -3.1249695 1.125q-1.140625 0 -2.078125 -0.203125l0 4.15625l-1.40625 0zm3.96875 -12.40625q-0.5625 0 -1.203125 0.1875q-0.640625 0.1875 -1.015625 0.375l-0.34375 0.1875l0 6.28125q1.3125 0.203125 2.0 0.203125q1.515625 0 2.125 -0.859375q0.6093445 -0.859375 0.6093445 -2.796875q0 -1.9375 -0.5624695 -2.75q-0.546875 -0.828125 -1.609375 -0.828125zm5.4568176 3.59375q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm11.74115 -3.5625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm5.753296 8.265625l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913818 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.3154907 -6.640625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm5.237549 2.515625l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm12.677124 1.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.581421 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#ffffff" d="m581.3714 139.00787l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m581.3714 139.00787l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m622.2171 169.12473l0 -12.90625l7.859375 0l0 1.265625l-6.421875 0l0 4.453125l5.3125 0l0 1.25l-5.3125 0l0 4.671875l6.421875 0l0 1.265625l-7.859375 0zm11.48877 0l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384277 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913879 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm0.84521484 -1.21875l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125z" fill-rule="nonzero"/><path fill="#ffffff" d="m156.35564 251.4147l147.74803 0l0 46.393707l-147.74803 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m156.35564 251.4147l147.74803 0l0 46.393707l-147.74803 0z" fill-rule="evenodd"/><path fill="#212121" d="m168.90848 281.53156l0 -12.90625l7.859375 0l0 1.265625l-6.421875 0l0 4.453125l5.3125 0l0 1.25l-5.3125 0l0 4.671875l6.421875 0l0 1.265625l-7.859375 0zm11.488785 0l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384262 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913849 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm0.84521484 -1.21875l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm11.557846 4.390625l0 4.9375l-1.4375 0l0 -12.90625l4.78125 0q2.046875 0 3.078125 0.953125q1.046875 0.953125 1.046875 2.953125q0 3.0 -2.375 3.75l2.484375 5.25l-1.578125 0l-2.34375 -4.9375l-3.65625 0zm3.359375 -1.28125q2.640625 0 2.640625 -2.703125q0 -2.71875 -2.65625 -2.71875l-3.34375 0l0 5.421875l3.359375 0zm12.636734 5.0625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm5.374527 -2.90625l0 8.109375l-1.40625 0l0 -8.109375l-1.171875 0l0 -1.21875l1.171875 0l0 -0.84375q0 -1.96875 0.5625 -2.6875q0.5625 -0.71875 1.953125 -0.71875l1.890625 0.125l-0.015625 1.15625q-1.046875 -0.03125 -1.734375 -0.03125q-0.671875 0 -0.96875 0.453125q-0.28125 0.4375 -0.28125 1.71875l0 0.828125l2.703125 0l0 1.21875l-2.703125 0zm10.554077 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm3.577652 5.203125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.612122 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.983917 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm12.096527 -9.515625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm10.8815 8.359375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m156.35564 274.61154l-24.999435 0l0 -112.53543l182.41678 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m156.35564 274.61154l-24.999435 0l0 -112.53543l182.41678 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m313.75723 152.36745l73.3858 0l0 19.40158l-73.3858 0z" fill-rule="evenodd"/><path fill="#212121" d="m319.75833 167.72745l0 -8.0l1.1875 0l0 1.09375q1.390625 -0.96875 2.921875 -1.265625l0 1.21875q-0.671875 0.125 -1.40625 0.40625q-0.71875 0.265625 -1.109375 0.46875l-0.390625 0.203125l0 5.875l-1.203125 0zm10.813507 -0.984375l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm4.611267 -2.484375l0 6.953125l-1.203125 0l0 -6.953125l-1.0 0l0 -1.046875l1.0 0l0 -0.71875q0 -1.703125 0.484375 -2.3125q0.484375 -0.609375 1.671875 -0.609375l1.625 0.109375l-0.015625 0.984375q-0.890625 -0.03125 -1.484375 -0.03125q-0.578125 0 -0.828125 0.390625q-0.25 0.375 -0.25 1.484375l0 0.703125l2.328125 0l0 1.046875l-2.328125 0zm9.058258 5.96875l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm3.080017 4.46875l0 -8.0l1.1875 0l0 1.09375q1.390625 -0.96875 2.921875 -1.265625l0 1.21875q-0.671875 0.125 -1.40625 0.40625q-0.71875 0.265625 -1.109375 0.46875l-0.390625 0.203125l0 5.875l-1.203125 0zm10.813507 -0.984375l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm4.283142 4.46875l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.28125 -0.71875 2.46875 -0.71875q1.609375 0 2.15625 0.859375q0.546875 0.859375 0.546875 3.078125l0 4.21875l-1.171875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.328125 -0.625 -1.40625 -0.625q-0.515625 0 -1.09375 0.15625q-0.5625 0.15625 -0.859375 0.296875l-0.296875 0.140625l0 6.5zm10.3732605 -8.15625q0.53125 0 1.796875 0.1875l0.375 0.046875l-0.046875 0.984375q-1.28125 -0.15625 -1.875 -0.15625q-1.359375 0 -1.859375 0.65625q-0.484375 0.640625 -0.484375 2.40625q0 1.75 0.453125 2.4375q0.453125 0.6875 1.90625 0.6875l1.875 -0.15625l0.0625 1.0q-1.5 0.21875 -2.234375 0.21875q-1.875 0 -2.59375 -0.953125q-0.703125 -0.96875 -0.703125 -3.234375q0 -2.28125 0.765625 -3.203125q0.78125 -0.921875 2.5625 -0.921875zm9.33313 7.171875l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m387.14304 162.06824l97.46457 0l0 -0.12597656l97.4646 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m387.14304 162.06824l97.46457 0l0 -0.12597656l93.083435 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m577.69104 161.94226l-1.6705322 1.6705322l4.5897827 -1.6705322l-4.5897827 -1.6705475z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m346.27954 264.77167l58.929108 0l0 19.40155l-58.929108 0z" fill-rule="evenodd"/><path fill="#212121" d="m357.14578 279.14728l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm4.283142 4.46875l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.28125 -0.71875 2.46875 -0.71875q1.609375 0 2.15625 0.859375q0.546875 0.859375 0.546875 3.078125l0 4.21875l-1.171875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.328125 -0.625 -1.40625 -0.625q-0.515625 0 -1.09375 0.15625q-0.5625 0.15625 -0.859375 0.296875l-0.296875 0.140625l0 6.5zm11.481506 -6.953125l-2.546875 0l0 3.8125q0 1.375 0.203125 1.8125q0.203125 0.4375 0.953125 0.4375l1.421875 -0.09375l0.078125 0.984375q-1.0625 0.171875 -1.625 0.171875q-1.25 0 -1.734375 -0.609375q-0.484375 -0.609375 -0.484375 -2.3125l0 -4.203125l-1.125 0l0 -1.046875l1.125 0l0 -2.453125l1.1875 0l0 2.453125l2.546875 0l0 1.046875zm1.4754028 6.953125l0 -8.0l1.203125 0l0 8.0l-1.203125 0zm0 -9.8125l0 -1.390625l1.203125 0l0 1.390625l-1.203125 0zm7.644623 2.859375l-2.546875 0l0 3.8125q0 1.375 0.203125 1.8125q0.203125 0.4375 0.953125 0.4375l1.421875 -0.09375l0.078125 0.984375q-1.0625 0.171875 -1.625 0.171875q-1.25 0 -1.734375 -0.609375q-0.484375 -0.609375 -0.484375 -2.3125l0 -4.203125l-1.125 0l0 -1.046875l1.125 0l0 -2.453125l1.1875 0l0 2.453125l2.546875 0l0 1.046875zm1.4754028 6.953125l0 -8.0l1.203125 0l0 8.0l-1.203125 0zm0 -9.8125l0 -1.390625l1.203125 0l0 1.390625l-1.203125 0zm8.941498 8.828125l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm5.580017 -2.625q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m447.4449 274.59842l-21.118103 0l0 -0.12597656l-21.118134 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m440.3166 274.59842l-13.989807 0l0 -0.12597656l-21.118134 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m440.31662 274.59842l3.1282654 2.1904602l3.1282654 -2.1904602l-3.1282654 -2.1904297z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m346.27954 274.47244l-21.08789 0l0 0.12597656l-21.085358 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m346.27954 274.47244l-21.08789 0l0 0.12597656l-21.085358 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m119.63259 267.78293l41.85827 0l0 30.015747l-41.85827 0z" fill-rule="evenodd"/><path fill="#212121" d="m133.8201 280.78604l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.1668549 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788605 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.1757355 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m549.0641 132.16315l41.858276 0l0 30.015747l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m561.78284 145.02563q1.09375 0 1.765625 0.40625q1.453125 0.859375 1.453125 4.265625q0 2.40625 -0.8125 3.40625q-0.796875 1.0 -2.40625 1.0q-1.59375 0 -2.40625 -0.984375q-0.796875 -0.984375 -0.796875 -3.484375q0 -2.515625 0.796875 -3.5625q0.796875 -1.046875 2.40625 -1.046875zm0.015625 0.90625q-0.765625 0 -1.203125 0.328125q-0.9375 0.65625 -0.9375 3.453125q0 1.96875 0.515625 2.734375q0.515625 0.75 1.625 0.75q1.109375 0 1.625 -0.765625q0.515625 -0.765625 0.515625 -2.8125q0 -2.0625 -0.5 -2.875q-0.5 -0.8125 -1.640625 -0.8125zm4.619995 8.03125l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788452 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm6.95697 -6.8125l-1.75 0l0.546875 1.671875l-0.65625 0.203125l-0.546875 -1.6875l-1.421875 1.046875l-0.421875 -0.53125l1.4375 -1.046875l-1.40625 -1.03125l0.40625 -0.5625l1.421875 1.046875l0.546875 -1.6875l0.640625 0.21875l-0.53125 1.6875l1.734375 0l0 0.671875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m413.86258 244.47997l41.858246 0l0 30.015732l-41.858246 0z" fill-rule="evenodd"/><path fill="#212121" d="m428.05008 257.4831l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.1668396 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788757 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm6.95697 -6.8125l-1.75 0l0.546875 1.671875l-0.65625 0.203125l-0.546875 -1.6875l-1.421875 1.046875l-0.421875 -0.53125l1.4375 -1.046875l-1.40625 -1.03125l0.40625 -0.5625l1.421875 1.046875l0.546875 -1.6875l0.640625 0.21875l-0.53125 1.6875l1.734375 0l0 0.671875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m298.83932 244.70967l41.858246 0l0 30.015732l-41.858246 0z" fill-rule="evenodd"/><path fill="#212121" d="m313.02682 257.7128l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.1668396 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788757 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.17572 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 79.01349l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m745.61945 79.01349l192.09052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m937.70996 81.211174l6.038086 -2.1976852l-6.038086 -2.1976929z" fill-rule="evenodd"/><path fill="#ffffff" d="m799.1627 62.209972l92.50397 0l0 30.70866l-92.50397 0z" fill-rule="evenodd"/><path fill="#212121" d="m806.0565 83.804306l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm5.091675 10.625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm9.305176 0l-1.296875 0l0 -12.4375l1.296875 0l0 4.265625q1.390625 -0.671875 2.671875 -0.671875q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.296875 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.5 -0.671875q-1.078125 0 -2.109375 0.390625l-0.328125 0.125l0 7.15625zm13.898865 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm3.3287964 4.828125l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm5.9954834 0l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm8.279236 3.09375l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125zm7.7070923 1.484375l0 4.4375q0.0625 0.640625 1.015625 0.765625l-0.0625 1.015625q-1.359375 0 -2.0625 -0.6875q-1.546875 0.6875 -3.109375 0.6875q-1.203125 0 -1.828125 -0.671875q-0.625 -0.671875 -0.625 -1.9375q0 -1.265625 0.640625 -1.859375q0.640625 -0.609375 2.015625 -0.75l2.71875 -0.25l0 -0.75q0 -0.890625 -0.390625 -1.265625q-0.375 -0.375 -1.03125 -0.375q-1.390625 0 -2.875 0.171875l-0.53125 0.046875l-0.0625 -0.984375q1.90625 -0.390625 3.375 -0.390625q1.484375 0 2.140625 0.6875q0.671875 0.671875 0.671875 2.109375zm-5.328125 3.53125q0 1.59375 1.3125 1.59375q1.171875 0 2.328125 -0.390625l0.390625 -0.140625l0 -2.859375l-2.5625 0.234375q-0.78125 0.078125 -1.125 0.46875q-0.34375 0.375 -0.34375 1.09375zm9.19696 2.515625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm11.242676 -8.84375q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm10.107239 7.765625l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 53.299213l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m752.7477 53.299213l192.46228 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m752.7477 53.299213l-3.1282349 -2.190445l-3.128296 2.190445l3.128296 2.1904411z" fill-rule="evenodd"/><path fill="#ffffff" d="m794.0761 36.0506l102.677185 0l0 30.708664l-102.677185 0z" fill-rule="evenodd"/><path fill="#212121" d="m803.7546 48.801178q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm3.8260498 4.5q0 -2.375 0.84375 -3.4375q0.859375 -1.0625 2.875 -1.0625q2.03125 0 2.859375 1.0625q0.84375 1.0625 0.84375 3.4375q0 2.375 -0.796875 3.453125q-0.796875 1.0625 -2.921875 1.0625q-2.109375 0 -2.90625 -1.0625q-0.796875 -1.078125 -0.796875 -3.453125zm1.34375 -0.03125q0 1.890625 0.453125 2.65625q0.46875 0.765625 1.921875 0.765625q1.46875 0 1.921875 -0.75q0.453125 -0.75 0.453125 -2.65625q0 -1.90625 -0.515625 -2.625q-0.5 -0.734375 -1.859375 -0.734375q-1.359375 0 -1.875 0.734375q-0.5 0.71875 -0.5 2.609375zm9.49292 4.375l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm12.440674 -7.53125l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125zm7.7070923 1.484375l0 4.4375q0.0625 0.640625 1.015625 0.765625l-0.0625 1.015625q-1.359375 0 -2.0625 -0.6875q-1.546875 0.6875 -3.109375 0.6875q-1.203125 0 -1.828125 -0.671875q-0.625 -0.671875 -0.625 -1.9375q0 -1.265625 0.640625 -1.859375q0.640625 -0.609375 2.015625 -0.75l2.71875 -0.25l0 -0.75q0 -0.890625 -0.390625 -1.265625q-0.375 -0.375 -1.03125 -0.375q-1.390625 0 -2.875 0.171875l-0.53125 0.046875l-0.0625 -0.984375q1.90625 -0.390625 3.375 -0.390625q1.484375 0 2.140625 0.6875q0.671875 0.671875 0.671875 2.109375zm-5.328125 3.53125q0 1.59375 1.3125 1.59375q1.171875 0 2.328125 -0.390625l0.390625 -0.140625l0 -2.859375l-2.5625 0.234375q-0.78125 0.078125 -1.125 0.46875q-0.34375 0.375 -0.34375 1.09375zm7.9000854 2.515625l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm5.091736 10.625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm9.305115 0l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.296875 -0.78125 2.53125 -0.78125q1.609375 0 2.25 0.890625q0.578125 -0.34375 1.484375 -0.609375q0.90625 -0.28125 1.59375 -0.28125q1.734375 0 2.328125 0.9375q0.609375 0.921875 0.609375 3.328125l0 4.578125l-1.296875 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.46875 -0.671875q-0.5625 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625q0.21875 0.5625 0.21875 2.53125l0 4.5l-1.296875 0l0 -4.46875q0 -1.875 -0.34375 -2.53125q-0.328125 -0.671875 -1.46875 -0.671875q-0.5625 0 -1.140625 0.171875q-0.578125 0.15625 -0.890625 0.3125l-0.296875 0.15625l0 7.03125zm19.080017 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.6256104 4.828125l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm12.440674 -7.53125l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 26.695538l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m745.61945 26.695538l195.20935 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m940.82886 26.695538l-1.6705322 1.6705399l4.5897217 -1.6705399l-4.5897217 -1.670538z" fill-rule="evenodd"/><path fill="#ffffff" d="m805.17847 9.368585l80.47247 0l0 30.70866l-80.47247 0z" fill-rule="evenodd"/><path fill="#212121" d="m812.17334 30.962914l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm11.71283 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.9849854 -2.703125l0 7.53125l-1.296875 0l0 -7.53125l-1.09375 0l0 -1.125l1.09375 0l0 -0.78125q0 -1.84375 0.515625 -2.5q0.53125 -0.671875 1.828125 -0.671875l1.75 0.109375l-0.015625 1.078125q-0.96875 -0.03125 -1.609375 -0.03125q-0.625 0 -0.90625 0.421875q-0.265625 0.40625 -0.265625 1.609375l0 0.765625l2.515625 0l0 1.125l-2.515625 0zm9.813965 6.453125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm3.3287964 4.828125l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm11.712769 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.6256714 4.828125l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm11.242615 -8.84375q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm10.1073 7.765625l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0z" fill-rule="nonzero"/></g></svg> \ No newline at end of file diff --git a/docs/schemas/columns.png b/docs/schemas/columns.png new file mode 100644 index 0000000000000000000000000000000000000000..6216c97b2727828fec4189e95af7f4db971489c0 Binary files /dev/null and b/docs/schemas/columns.png differ diff --git a/docs/schemas/entity-sections.svg b/docs/schemas/entity-sections.svg new file mode 100644 index 0000000000000000000000000000000000000000..836d4837b5ac5937a86fb6a275eeaefb33ebad43 --- /dev/null +++ b/docs/schemas/entity-sections.svg @@ -0,0 +1 @@ +<svg version="1.1" viewBox="0.0 0.0 960.0 540.0" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><clipPath id="g25a5d6e0acf_0_60.0"><path d="m0 0l960.0 0l0 540.0l-960.0 0l0 -540.0z" clip-rule="nonzero"/></clipPath><g clip-path="url(#g25a5d6e0acf_0_60.0)"><path fill="#ffffff" d="m0 0l960.0 0l0 540.0l-960.0 0z" fill-rule="evenodd"/><path fill="#ffffff" d="m551.4816 248.11942l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m551.4816 248.11942l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m571.7029 278.23627l0 -12.90625l1.4375 0l0 12.90625l-1.4375 0zm5.7612915 0l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm11.534058 -8.265625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.58136 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.267578 -9.328125l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm5.500244 9.328125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm20.534119 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384277 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m613.98553 248.11942l0 -33.001266l-133.98422 0l0 -33.01448" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m613.98553 248.11942l0 -33.001266l-133.98422 0l0 -25.51448" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m482.199 189.60367l-2.1976929 -6.038086l-2.1976929 6.038086z" fill-rule="evenodd"/><path fill="#ffffff" d="m499.75986 357.8832l143.49606 0l0 46.393707l-143.49606 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m499.75986 357.8832l143.49606 0l0 46.393707l-143.49606 0z" fill-rule="evenodd"/><path fill="#212121" d="m518.59625 383.6563l-3.296875 0l0 4.34375l-1.4375 0l0 -12.90625l4.734375 0q2.09375 0 3.09375 1.03125q1.015625 1.015625 1.015625 3.125q0 4.40625 -4.109375 4.40625zm-3.296875 -1.265625l3.265625 0q2.671875 0 2.671875 -3.140625q0 -1.5 -0.640625 -2.1875q-0.625 -0.703125 -2.03125 -0.703125l-3.265625 0l0 6.03125zm15.203796 -3.71875l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm4.093933 9.328125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.612122 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.3154907 -6.640625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm12.111694 2.515625l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm8.218994 -0.1875q1.875 0 2.625 1.078125q0.765625 1.0625 0.765625 3.75q0 2.6875 -0.9375 3.78125q-0.9375 1.09375 -3.46875 1.09375q-0.78125 0 -2.59375 -0.15625l-0.515625 -0.046875l0 -13.375l1.375 0l0 4.53125q1.421875 -0.65625 2.75 -0.65625zm-1.03125 8.453125q1.828125 0 2.40625 -0.828125q0.59375 -0.828125 0.59375 -2.796875q0 -1.984375 -0.46875 -2.78125q-0.453125 -0.796875 -1.65625 -0.796875q-1.078125 0 -2.21875 0.40625l-0.375 0.140625l0 6.5625q1.21875 0.09375 1.71875 0.09375zm9.641296 -7.203125q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.581421 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.29834 1.59375l0 4.78125q0.0625 0.6875 1.09375 0.8125l-0.0625 1.109375q-1.46875 0 -2.21875 -0.75q-1.671875 0.75 -3.359375 0.75q-1.28125 0 -1.953125 -0.71875q-0.671875 -0.734375 -0.671875 -2.09375q0 -1.375 0.6875 -2.015625q0.6875 -0.640625 2.15625 -0.78125l2.9375 -0.28125l0 -0.8125q0 -0.953125 -0.421875 -1.359375q-0.40625 -0.40625 -1.109375 -0.40625q-1.5 0 -3.09375 0.1875l-0.578125 0.046875l-0.0625 -1.0625q2.0625 -0.40625 3.640625 -0.40625q1.59375 0 2.296875 0.734375q0.71875 0.71875 0.71875 2.265625zm-5.734375 3.8125q0 1.71875 1.40625 1.71875q1.28125 0 2.5 -0.4375l0.4375 -0.140625l0 -3.078125l-2.765625 0.25q-0.84375 0.078125 -1.21875 0.5q-0.359375 0.40625 -0.359375 1.1875zm9.909241 2.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm12.096558 -9.515625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm10.88147 8.359375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m571.5079 357.8832l0 -31.685059l-91.49606 0l0 -31.685028" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m571.5079 357.8832l0 -31.685059l-91.49606 0l0 -24.185028" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m482.2095 302.01312l-2.1976929 -6.038086l-2.1976929 6.038086z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m346.0118 248.11942l0 -33.001266l133.98425 0l0 -33.01448" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m346.0118 248.11942l0 -33.001266l133.98425 0l0 -25.51448" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m482.19376 189.60367l-2.1976929 -6.038086l-2.1976929 6.038086z" fill-rule="evenodd"/><path fill="#ffffff" d="m283.50787 248.11942l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m283.50787 248.11942l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m317.15717 278.03314q-1.921875 0.390625 -3.453125 0.390625q-1.53125 0 -2.484375 -0.421875q-0.9375 -0.421875 -1.453125 -1.296875q-0.5 -0.890625 -0.703125 -2.03125q-0.203125 -1.15625 -0.203125 -2.875q0 -1.71875 0.203125 -2.875q0.203125 -1.171875 0.703125 -2.0625q0.515625 -0.90625 1.453125 -1.3125q0.9375 -0.40625 2.421875 -0.40625q1.5 0 3.515625 0.40625l-0.0625 1.21875q-1.890625 -0.34375 -3.359375 -0.34375q-2.046875 0 -2.71875 1.234375q-0.65625 1.21875 -0.65625 4.15625q0 1.484375 0.109375 2.375q0.125 0.890625 0.484375 1.609375q0.359375 0.71875 1.03125 1.03125q0.6875 0.3125 2.0 0.3125q1.3125 0 3.109375 -0.34375l0.0625 1.234375zm1.5092163 -4.46875q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm8.928619 4.703125l0 -13.390625l1.40625 0l0 13.390625l-1.40625 0zm4.309601 0l0 -13.390625l1.40625 0l0 13.390625l-1.40625 0zm10.543976 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.062042 -4.3125q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm9.477875 1.40625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm3.6794739 6.765625q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.225494 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m479.9987 248.11942l0 -33.001266l0.06298828 0l0 -33.01448" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m479.9987 248.11942l0 -33.001266l0.06298828 0l0 -25.51448" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m482.25937 189.60367l-2.1976929 -6.038086l-2.1976929 6.038086z" fill-rule="evenodd"/><path fill="#ffffff" d="m417.49475 248.11942l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m417.49475 248.11942l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m455.6315 266.39252q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm5.2375183 2.515625l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm12.677185 1.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.58139 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.983917 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m376.70996 357.8832l0 -31.685059l103.275604 0l0 -31.685028" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m376.70996 357.8832l0 -31.685059l103.275604 0l0 -24.185028" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m482.18326 302.01312l-2.1976929 -6.038086l-2.1976929 6.038086z" fill-rule="evenodd"/><path fill="#ffffff" d="m291.84384 357.8832l169.73227 0l0 46.393707l-169.73227 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m291.84384 357.8832l169.73227 0l0 46.393707l-169.73227 0z" fill-rule="evenodd"/><path fill="#212121" d="m314.70328 387.79694q-1.921875 0.390625 -3.453125 0.390625q-1.53125 0 -2.484375 -0.421875q-0.9375 -0.421875 -1.453125 -1.296875q-0.5 -0.890625 -0.703125 -2.03125q-0.203125 -1.15625 -0.203125 -2.875q0 -1.71875 0.203125 -2.875q0.203125 -1.171875 0.703125 -2.0625q0.515625 -0.90625 1.453125 -1.3125q0.9375 -0.40625 2.421875 -0.40625q1.5 0 3.515625 0.40625l-0.0625 1.21875q-1.890625 -0.34375 -3.359375 -0.34375q-2.046875 0 -2.71875 1.234375q-0.65625 1.21875 -0.65625 4.15625q0 1.484375 0.109375 2.375q0.125 0.890625 0.484375 1.609375q0.359375 0.71875 1.03125 1.03125q0.6875 0.3125 2.0 0.3125q1.3125 0 3.109375 -0.34375l0.0625 1.234375zm1.5092163 -4.46875q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.225494 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm14.190399 4.140625l0 -13.46875l1.375 0l0 0.671875q1.421875 -0.859375 2.796875 -0.859375q1.78125 0 2.578125 1.140625q0.8125 1.125 0.8125 3.71875q0 2.578125 -0.953125 3.71875q-0.9375 1.125 -3.125 1.125q-1.140625 0 -2.078125 -0.203125l0 4.15625l-1.40625 0zm3.96875 -12.40625q-0.5625 0 -1.203125 0.1875q-0.640625 0.1875 -1.015625 0.375l-0.34375 0.1875l0 6.28125q1.3125 0.203125 2.0 0.203125q1.515625 0 2.125 -0.859375q0.609375 -0.859375 0.609375 -2.796875q0 -1.9375 -0.5625 -2.75q-0.546875 -0.828125 -1.609375 -0.828125zm5.456848 3.59375q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm11.741119 -3.5625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm5.753296 8.265625l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913849 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.31546 -6.640625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm5.2375183 2.515625l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm12.677185 1.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.581421 0.15625l-2.9687805 0l0 4.453125q0 1.609375 0.23440552 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.4531555 0 -2.0156555 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.9687805 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#ffffff" d="m417.49475 135.7231l125.00787 0l0 46.393692l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m417.49475 135.7231l125.00787 0l0 46.393692l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m458.34048 165.83995l0 -12.90625l7.859375 0l0 1.265625l-6.421875 0l0 4.453125l5.3125 0l0 1.25l-5.3125 0l0 4.671875l6.421875 0l0 1.265625l-7.859375 0zm11.48877 0l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384277 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913849 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm0.84521484 -1.21875l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 79.01349l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m745.61945 79.01349l192.09052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m937.70996 81.211174l6.038086 -2.1976852l-6.038086 -2.1976929z" fill-rule="evenodd"/><path fill="#ffffff" d="m799.1627 62.209972l92.50397 0l0 30.70866l-92.50397 0z" fill-rule="evenodd"/><path fill="#212121" d="m806.0565 83.804306l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm5.091675 10.625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm9.305176 0l-1.296875 0l0 -12.4375l1.296875 0l0 4.265625q1.390625 -0.671875 2.671875 -0.671875q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.296875 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.5 -0.671875q-1.078125 0 -2.109375 0.390625l-0.328125 0.125l0 7.15625zm13.898865 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm3.3287964 4.828125l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm5.9954834 0l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm8.279236 3.09375l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125zm7.7070923 1.484375l0 4.4375q0.0625 0.640625 1.015625 0.765625l-0.0625 1.015625q-1.359375 0 -2.0625 -0.6875q-1.546875 0.6875 -3.109375 0.6875q-1.203125 0 -1.828125 -0.671875q-0.625 -0.671875 -0.625 -1.9375q0 -1.265625 0.640625 -1.859375q0.640625 -0.609375 2.015625 -0.75l2.71875 -0.25l0 -0.75q0 -0.890625 -0.390625 -1.265625q-0.375 -0.375 -1.03125 -0.375q-1.390625 0 -2.875 0.171875l-0.53125 0.046875l-0.0625 -0.984375q1.90625 -0.390625 3.375 -0.390625q1.484375 0 2.140625 0.6875q0.671875 0.671875 0.671875 2.109375zm-5.328125 3.53125q0 1.59375 1.3125 1.59375q1.171875 0 2.328125 -0.390625l0.390625 -0.140625l0 -2.859375l-2.5625 0.234375q-0.78125 0.078125 -1.125 0.46875q-0.34375 0.375 -0.34375 1.09375zm9.19696 2.515625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm11.242676 -8.84375q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm10.107239 7.765625l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 53.299213l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m752.7477 53.299213l192.46228 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m752.7477 53.299213l-3.1282349 -2.190445l-3.128296 2.190445l3.128296 2.1904411z" fill-rule="evenodd"/><path fill="#ffffff" d="m794.0761 36.0506l102.677185 0l0 30.708664l-102.677185 0z" fill-rule="evenodd"/><path fill="#212121" d="m803.7546 48.801178q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm3.8260498 4.5q0 -2.375 0.84375 -3.4375q0.859375 -1.0625 2.875 -1.0625q2.03125 0 2.859375 1.0625q0.84375 1.0625 0.84375 3.4375q0 2.375 -0.796875 3.453125q-0.796875 1.0625 -2.921875 1.0625q-2.109375 0 -2.90625 -1.0625q-0.796875 -1.078125 -0.796875 -3.453125zm1.34375 -0.03125q0 1.890625 0.453125 2.65625q0.46875 0.765625 1.921875 0.765625q1.46875 0 1.921875 -0.75q0.453125 -0.75 0.453125 -2.65625q0 -1.90625 -0.515625 -2.625q-0.5 -0.734375 -1.859375 -0.734375q-1.359375 0 -1.875 0.734375q-0.5 0.71875 -0.5 2.609375zm9.49292 4.375l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm12.440674 -7.53125l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125zm7.7070923 1.484375l0 4.4375q0.0625 0.640625 1.015625 0.765625l-0.0625 1.015625q-1.359375 0 -2.0625 -0.6875q-1.546875 0.6875 -3.109375 0.6875q-1.203125 0 -1.828125 -0.671875q-0.625 -0.671875 -0.625 -1.9375q0 -1.265625 0.640625 -1.859375q0.640625 -0.609375 2.015625 -0.75l2.71875 -0.25l0 -0.75q0 -0.890625 -0.390625 -1.265625q-0.375 -0.375 -1.03125 -0.375q-1.390625 0 -2.875 0.171875l-0.53125 0.046875l-0.0625 -0.984375q1.90625 -0.390625 3.375 -0.390625q1.484375 0 2.140625 0.6875q0.671875 0.671875 0.671875 2.109375zm-5.328125 3.53125q0 1.59375 1.3125 1.59375q1.171875 0 2.328125 -0.390625l0.390625 -0.140625l0 -2.859375l-2.5625 0.234375q-0.78125 0.078125 -1.125 0.46875q-0.34375 0.375 -0.34375 1.09375zm7.9000854 2.515625l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm5.091736 10.625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm9.305115 0l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.296875 -0.78125 2.53125 -0.78125q1.609375 0 2.25 0.890625q0.578125 -0.34375 1.484375 -0.609375q0.90625 -0.28125 1.59375 -0.28125q1.734375 0 2.328125 0.9375q0.609375 0.921875 0.609375 3.328125l0 4.578125l-1.296875 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.46875 -0.671875q-0.5625 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625q0.21875 0.5625 0.21875 2.53125l0 4.5l-1.296875 0l0 -4.46875q0 -1.875 -0.34375 -2.53125q-0.328125 -0.671875 -1.46875 -0.671875q-0.5625 0 -1.140625 0.171875q-0.578125 0.15625 -0.890625 0.3125l-0.296875 0.15625l0 7.03125zm19.080017 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.6256104 4.828125l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm12.440674 -7.53125l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 26.695538l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m745.61945 26.695538l195.20935 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m940.82886 26.695538l-1.6705322 1.6705399l4.5897217 -1.6705399l-4.5897217 -1.670538z" fill-rule="evenodd"/><path fill="#ffffff" d="m805.17847 9.368585l80.47247 0l0 30.70866l-80.47247 0z" fill-rule="evenodd"/><path fill="#212121" d="m812.17334 30.962914l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm11.71283 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.9849854 -2.703125l0 7.53125l-1.296875 0l0 -7.53125l-1.09375 0l0 -1.125l1.09375 0l0 -0.78125q0 -1.84375 0.515625 -2.5q0.53125 -0.671875 1.828125 -0.671875l1.75 0.109375l-0.015625 1.078125q-0.96875 -0.03125 -1.609375 -0.03125q-0.625 0 -0.90625 0.421875q-0.265625 0.40625 -0.265625 1.609375l0 0.765625l2.515625 0l0 1.125l-2.515625 0zm9.813965 6.453125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm3.3287964 4.828125l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm11.712769 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.6256714 4.828125l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm11.242615 -8.84375q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm10.1073 7.765625l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0z" fill-rule="nonzero"/></g></svg> \ No newline at end of file diff --git a/docs/schemas/experiment-sections.svg b/docs/schemas/experiment-sections.svg new file mode 100644 index 0000000000000000000000000000000000000000..50a346276f8cbfb8133b7160a0f108bbc66874cd --- /dev/null +++ b/docs/schemas/experiment-sections.svg @@ -0,0 +1 @@ +<svg version="1.1" viewBox="0.0 0.0 960.0 540.0" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><clipPath id="g25c4b7b2789_0_0.0"><path d="m0 0l960.0 0l0 540.0l-960.0 0l0 -540.0z" clip-rule="nonzero"/></clipPath><g clip-path="url(#g25c4b7b2789_0_0.0)"><path fill="#ffffff" d="m0 0l960.0 0l0 540.0l-960.0 0z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m494.23358 162.83464l125.00787 0l0 24.314972l-125.00787 0z" fill-rule="evenodd"/><path fill="#ffffff" d="m564.7704 292.42783l138.2992 0l0 46.393707l-138.2992 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m564.7704 292.42783l138.2992 0l0 46.393707l-138.2992 0z" fill-rule="evenodd"/><path fill="#212121" d="m580.425 322.54468l0 -12.90625l2.59375 0l3.65625 10.90625l3.671875 -10.90625l2.578125 0l0 12.90625l-1.421875 0l0 -11.375l-0.265625 0l-3.75 10.90625l-1.609375 0l-3.75 -10.90625l-0.265625 0l0 11.375l-1.4375 0zm21.687256 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm10.155823 -1.3125l0 4.78125q0.0625 0.6875 1.09375 0.8125l-0.0625 1.109375q-1.46875 0 -2.21875 -0.75q-1.671875 0.75 -3.359375 0.75q-1.28125 0 -1.953125 -0.71875q-0.671875 -0.734375 -0.671875 -2.09375q0 -1.375 0.6875 -2.015625q0.6875 -0.640625 2.15625 -0.78125l2.9375 -0.28125l0 -0.8125q0 -0.953125 -0.421875 -1.359375q-0.40625 -0.40625 -1.109375 -0.40625q-1.5 0 -3.09375 0.1875l-0.578125 0.046875l-0.0625 -1.0625q2.0625 -0.40625 3.640625 -0.40625q1.59375 0 2.296875 0.734375q0.71875 0.71875 0.71875 2.265625zm-5.734375 3.8125q0 1.71875 1.40625 1.71875q1.28125 0 2.5 -0.4375l0.4375 -0.140625l0 -3.078125l-2.765625 0.25q-0.84375 0.078125 -1.21875 0.5q-0.359375 0.40625 -0.359375 1.1875zm11.424866 -5.5625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm11.565796 -1.0625l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm4.093994 9.328125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.612122 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm20.534119 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9839478 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384216 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875z" fill-rule="nonzero"/><path fill="#ffffff" d="m718.33734 292.42783l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m718.33734 292.42783l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m748.73926 322.54468l3.546875 -12.90625l3.125 0l3.546875 12.90625l-1.421875 0l-0.921875 -3.328125l-5.53125 0l-0.9375 3.328125l-1.40625 0zm4.625 -11.671875l-1.96875 7.0625l4.890625 0l-1.953125 -7.0625l-0.96875 0zm8.791016 11.671875l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm15.190247 -6.515625l0 4.78125q0.0625 0.6875 1.09375 0.8125l-0.0625 1.109375q-1.46875 0 -2.21875 -0.75q-1.671875 0.75 -3.359375 0.75q-1.28125 0 -1.953125 -0.71875q-0.671875 -0.734375 -0.671875 -2.09375q0 -1.375 0.6875 -2.015625q0.6875 -0.640625 2.15625 -0.78125l2.9375 -0.28125l0 -0.8125q0 -0.953125 -0.421875 -1.359375q-0.40625 -0.40625 -1.109375 -0.40625q-1.5 0 -3.09375 0.1875l-0.578125 0.046875l-0.0625 -1.0625q2.0625 -0.40625 3.640625 -0.40625q1.59375 0 2.296875 0.734375q0.71875 0.71875 0.71875 2.265625zm-5.734375 3.8125q0 1.71875 1.40625 1.71875q1.28125 0 2.5 -0.4375l0.4375 -0.140625l0 -3.078125l-2.765625 0.25q-0.84375 0.078125 -1.21875 0.5q-0.359375 0.40625 -0.359375 1.1875zm8.612427 2.703125l0 -13.390625l1.40625 0l0 13.390625l-1.40625 0zm3.3252563 -9.328125l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm12.677124 1.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm5.753296 8.265625l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm7.0076294 3.171875q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m780.84125 292.42783l0 -52.981674l-224.0315 0l0 -52.971085" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m780.8413 292.42783l0 -52.981674l-224.03156 0l0 -45.471085" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m559.00745 193.97507l-2.1976929 -6.038101l-2.1976929 6.038101z" fill-rule="evenodd"/><path fill="#ffffff" d="m424.49612 292.42783l125.00784 0l0 46.393707l-125.00784 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m424.49612 292.42783l125.00784 0l0 46.393707l-125.00784 0z" fill-rule="evenodd"/><path fill="#212121" d="m462.32462 318.20093l-3.296875 0l0 4.34375l-1.4375 0l0 -12.90625l4.734375 0q2.09375 0 3.09375 1.03125q1.015625 1.015625 1.015625 3.125q0 4.40625 -4.109375 4.40625zm-3.296875 -1.265625l3.265625 0q2.671875 0 2.671875 -3.140625q0 -1.5 -0.640625 -2.1875q-0.625 -0.703125 -2.03125 -0.703125l-3.265625 0l0 6.03125zm9.391266 5.609375l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm5.862152 -4.671875q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm12.303619 -4.8125q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm10.8815 8.359375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm6.4995117 -3.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm8.67514 0q-2.0312195 0 -2.0312195 1.421875q0 0.65625 0.46871948 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.7187195 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.1249695 0.3125 3.2030945 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.6405945 -0.265625 -2.3280945 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.9687195 -0.65625 2.4062195 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m487.00006 292.42783l0 -52.981674l69.79529 0l0 -52.971085" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m487.00003 292.42783l0 -52.981674l69.79526 0l0 -45.471085" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m558.993 193.97507l-2.1976929 -6.038101l-2.1976318 6.038101z" fill-rule="evenodd"/><path fill="#ffffff" d="m494.29297 140.0748l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m494.29297 140.0748l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m528.05304 170.19165l3.546875 -12.90625l3.125 0l3.546875 12.90625l-1.421875 0l-0.921875 -3.328125l-5.53125 0l-0.9375 3.328125l-1.40625 0zm4.625 -11.671875l-1.96875 7.0625l4.890625 0l-1.953125 -7.0625l-0.96875 0zm10.75708 2.15625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm9.477905 1.40625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm3.2106934 2.109375l1.484375 0l2.1875 8.109375l0.6875 0l2.265625 -8.109375l1.4375 0l-2.640625 9.328125l-2.796875 0l-2.625 -9.328125zm9.848694 9.328125l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913818 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm0.84521484 -1.21875l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125z" fill-rule="nonzero"/><path fill="#ffffff" d="m284.2192 292.4777l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m284.2192 292.4777l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m303.2651 322.59454l0 -12.90625l7.859375 0l0 1.265625l-6.421875 0l0 4.453125l5.3125 0l0 1.25l-5.3125 0l0 4.671875l6.421875 0l0 1.265625l-7.859375 0zm9.14502 -9.328125l1.53125 0l2.28125 3.65625l2.28125 -3.65625l1.515625 0l-2.953125 4.625l2.9375 4.703125l-1.53125 0l-2.25 -3.640625l-2.28125 3.640625l-1.53125 0l2.9375 -4.671875l-2.9375 -4.65625zm9.370148 13.46875l0 -13.46875l1.375 0l0 0.671875q1.421875 -0.859375 2.796875 -0.859375q1.78125 0 2.578125 1.140625q0.8125 1.125 0.8125 3.71875q0 2.578125 -0.953125 3.71875q-0.9375 1.125 -3.125 1.125q-1.140625 0 -2.078125 -0.203125l0 4.15625l-1.40625 0zm3.96875 -12.40625q-0.5625 0 -1.203125 0.1875q-0.640625 0.1875 -1.015625 0.375l-0.34375 0.1875l0 6.28125q1.3125 0.203125 2.0 0.203125q1.515625 0 2.125 -0.859375q0.609375 -0.859375 0.609375 -2.796875q0 -1.9375 -0.5625 -2.75q-0.546875 -0.828125 -1.609375 -0.828125zm12.206848 7.109375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm3.5776367 5.203125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm6.455078 0l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm5.491974 11.4375l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm20.534119 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.983917 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384247 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m346.72314 292.4777l0 -53.00258l210.07874 0l0 -53.01317" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m346.72314 292.4777l0 -53.002563l210.07874 0l0 -45.513184" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m558.9996 193.96194l-2.1976929 -6.038101l-2.1976929 6.038101z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m633.92 292.42783l0 -52.981674l-77.13385 0l0 -52.971085" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m633.92 292.42783l0 -52.981674l-77.13385 0l0 -45.471085" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m558.9838 193.97507l-2.1976929 -6.038101l-2.1976929 6.038101z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m173.27821 305.9239l65.82677 0l0 19.40158l-65.82677 0z" fill-rule="evenodd"/><path fill="#212121" d="m183.0124 315.70575l0 4.09375q0.046875 0.59375 0.9375 0.703125l-0.046875 0.9375q-1.265625 0 -1.90625 -0.640625q-1.4375 0.640625 -2.890625 0.640625q-1.09375 0 -1.671875 -0.625q-0.578125 -0.625 -0.578125 -1.78125q0 -1.171875 0.59375 -1.71875q0.59375 -0.5625 1.859375 -0.6875l2.5 -0.234375l0 -0.6875q0 -0.828125 -0.359375 -1.171875q-0.34375 -0.359375 -0.953125 -0.359375q-1.265625 0 -2.65625 0.171875l-0.484375 0.046875l-0.046875 -0.921875q1.75 -0.34375 3.109375 -0.34375q1.359375 0 1.96875 0.625q0.625 0.625 0.625 1.953125zm-4.921875 3.265625q0 1.46875 1.21875 1.46875q1.078125 0 2.140625 -0.375l0.359375 -0.125l0 -2.640625l-2.359375 0.21875q-0.71875 0.0625 -1.046875 0.421875q-0.3125 0.359375 -0.3125 1.03125zm10.281647 -5.84375q0.53125 0 1.796875 0.1875l0.375 0.046875l-0.046875 0.984375q-1.28125 -0.15625 -1.875 -0.15625q-1.359375 0 -1.859375 0.65625q-0.484375 0.640625 -0.484375 2.40625q0 1.75 0.453125 2.4375q0.453125 0.6875 1.90625 0.6875l1.875 -0.15625l0.0625 1.0q-1.5 0.21875 -2.234375 0.21875q-1.875 0 -2.59375 -0.953125q-0.703125 -0.96875 -0.703125 -3.234375q0 -2.28125 0.765625 -3.203125q0.78125 -0.921875 2.5625 -0.921875zm8.132263 1.203125l-2.546875 0l0 3.8125q0 1.375 0.203125 1.8125q0.203125 0.4375 0.953125 0.4375l1.421875 -0.09375l0.078125 0.984375q-1.0625 0.171875 -1.625 0.171875q-1.25 0 -1.734375 -0.609375q-0.484375 -0.609375 -0.484375 -2.3125l0 -4.203125l-1.125 0l0 -1.046875l1.125 0l0 -2.453125l1.1875 0l0 2.453125l2.546875 0l0 1.046875zm1.4753876 6.953125l0 -8.0l1.203125 0l0 8.0l-1.203125 0zm0 -9.8125l0 -1.390625l1.203125 0l0 1.390625l-1.203125 0zm2.754013 1.8125l1.28125 0l1.859375 6.953125l0.59375 0l1.9375 -6.953125l1.234375 0l-2.25 8.0l-2.40625 0l-2.25 -8.0zm8.446014 8.0l0 -8.0l1.203125 0l0 8.0l-1.203125 0zm0 -9.8125l0 -1.390625l1.203125 0l0 1.390625l-1.203125 0zm7.644638 2.859375l-2.546875 0l0 3.8125q0 1.375 0.203125 1.8125q0.203125 0.4375 0.953125 0.4375l1.421875 -0.09375l0.078125 0.984375q-1.0625 0.171875 -1.625 0.171875q-1.25 0 -1.734375 -0.609375q-0.484375 -0.609375 -0.484375 -2.3125l0 -4.203125l-1.125 0l0 -1.046875l1.125 0l0 -2.453125l1.1875 0l0 2.453125l2.546875 0l0 1.046875zm1.4753876 6.953125l0 -8.0l1.203125 0l0 8.0l-1.203125 0zm0 -9.8125l0 -1.390625l1.203125 0l0 1.390625l-1.203125 0zm8.941513 8.828125l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm5.580017 -2.625q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m173.27821 315.62466l-46.7901 0l0 -76.22046l24.994827 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m173.27821 315.62466l-46.7901 0l0 -76.22046l24.994827 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m284.2192 315.67453l-22.557037 0l0 0.06298828l-22.545319 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m277.0909 315.67453l-15.428741 0l0 0.06298828l-22.545334 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m277.0909 315.67453l3.128296 2.1904602l3.1282654 -2.1904602l-3.1282654 -2.1904297z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m116.65477 209.68939l41.85826 0l0 30.015747l-41.85826 0z" fill-rule="evenodd"/><path fill="#212121" d="m130.84227 222.69252l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.1668549 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788605 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.1757355 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m252.98547 285.72144l41.858276 0l0 30.015747l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m267.17297 298.72455l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.16687 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788452 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm6.9570007 -6.8125l-1.75 0l0.546875 1.671875l-0.65625 0.203125l-0.546875 -1.6875l-1.421875 1.046875l-0.421875 -0.53125l1.4375 -1.046875l-1.40625 -1.03125l0.40625 -0.5625l1.421875 1.046875l0.546875 -1.6875l0.640625 0.21875l-0.53125 1.6875l1.734375 0l0 0.671875z" fill-rule="nonzero"/><path fill="#ffffff" d="m151.48819 216.21211l157.38583 0l0 46.393692l-157.38583 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m151.48819 216.21211l157.38583 0l0 46.393692l-157.38583 0z" fill-rule="evenodd"/><path fill="#212121" d="m168.85042 246.32895l0 -12.90625l7.859375 0l0 1.265625l-6.421875 0l0 4.453125l5.3125 0l0 1.25l-5.3125 0l0 4.671875l6.421875 0l0 1.265625l-7.859375 0zm9.145035 -9.328125l1.53125 0l2.28125 3.65625l2.28125 -3.65625l1.515625 0l-2.953125 4.625l2.9375 4.703125l-1.53125 0l-2.25 -3.640625l-2.28125 3.640625l-1.53125 0l2.9375 -4.671875l-2.9375 -4.65625zm9.370132 13.46875l0 -13.46875l1.375 0l0 0.671875q1.421875 -0.859375 2.796875 -0.859375q1.78125 0 2.578125 1.140625q0.8125 1.125 0.8125 3.71875q0 2.578125 -0.953125 3.71875q-0.9375 1.125 -3.125 1.125q-1.140625 0 -2.078125 -0.203125l0 4.15625l-1.40625 0zm3.96875 -12.40625q-0.5625 0 -1.203125 0.1875q-0.640625 0.1875 -1.015625 0.375l-0.34375 0.1875l0 6.28125q1.3125 0.203125 2.0 0.203125q1.515625 0 2.125 -0.859375q0.609375 -0.859375 0.609375 -2.796875q0 -1.9375 -0.5625 -2.75q-0.546875 -0.828125 -1.609375 -0.828125zm12.206848 7.109375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm3.577652 5.203125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm6.455063 0l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm5.491974 11.4375l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm20.534134 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.983902 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384262 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm5.532715 -3.734375q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm10.95932 3.734375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm3.5776367 9.34375l0 -13.46875l1.375 0l0 0.671875q1.421875 -0.859375 2.796875 -0.859375q1.78125 0 2.578125 1.140625q0.8125 1.125 0.8125 3.71875q0 2.578125 -0.953125 3.71875q-0.9375 1.125 -3.125 1.125q-1.140625 0 -2.078125 -0.203125l0 4.15625l-1.40625 0zm3.96875 -12.40625q-0.5625 0 -1.203125 0.1875q-0.640625 0.1875 -1.015625 0.375l-0.34375 0.1875l0 6.28125q1.3125 0.203125 2.0 0.203125q1.515625 0 2.125 -0.859375q0.609375 -0.859375 0.609375 -2.796875q0 -1.9375 -0.5625 -2.75q-0.546875 -0.828125 -1.609375 -0.828125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m357.03143 165.21281l58.92914 0l0 19.40158l-58.92914 0z" fill-rule="evenodd"/><path fill="#212121" d="m368.9648 174.99469l0 4.09375q0.046875 0.59375 0.9375 0.703125l-0.046875 0.9375q-1.265625 0 -1.90625 -0.640625q-1.4375 0.640625 -2.890625 0.640625q-1.09375 0 -1.671875 -0.625q-0.578125 -0.625 -0.578125 -1.78125q0 -1.171875 0.59375 -1.71875q0.59375 -0.5625 1.859375 -0.6875l2.5 -0.234375l0 -0.6875q0 -0.828125 -0.359375 -1.171875q-0.34375 -0.359375 -0.953125 -0.359375q-1.265625 0 -2.65625 0.171875l-0.484375 0.046875l-0.046875 -0.921875q1.75 -0.34375 3.109375 -0.34375q1.359375 0 1.96875 0.625q0.625 0.625 0.625 1.953125zm-4.921875 3.265625q0 1.46875 1.21875 1.46875q1.078125 0 2.140625 -0.375l0.359375 -0.125l0 -2.640625l-2.359375 0.21875q-0.71875 0.0625 -1.046875 0.421875q-0.3125 0.359375 -0.3125 1.03125zm10.281647 -5.84375q0.53125 0 1.796875 0.1875l0.375 0.046875l-0.046875 0.984375q-1.28125 -0.15625 -1.875 -0.15625q-1.359375 0 -1.859375 0.65625q-0.484375 0.640625 -0.484375 2.40625q0 1.75 0.453125 2.4375q0.453125 0.6875 1.90625 0.6875l1.875 -0.15625l0.0625 1.0q-1.5 0.21875 -2.234375 0.21875q-1.875 0 -2.59375 -0.953125q-0.703125 -0.96875 -0.703125 -3.234375q0 -2.28125 0.765625 -3.203125q0.78125 -0.921875 2.5625 -0.921875zm8.132263 1.203125l-2.546875 0l0 3.8125q0 1.375 0.203125 1.8125q0.203125 0.4375 0.953125 0.4375l1.421875 -0.09375l0.078125 0.984375q-1.0625 0.171875 -1.625 0.171875q-1.25 0 -1.734375 -0.609375q-0.484375 -0.609375 -0.484375 -2.3125l0 -4.203125l-1.125 0l0 -1.046875l1.125 0l0 -2.453125l1.1875 0l0 2.453125l2.546875 0l0 1.046875zm1.4753723 6.953125l0 -8.0l1.203125 0l0 8.0l-1.203125 0zm0 -9.8125l0 -1.390625l1.203125 0l0 1.390625l-1.203125 0zm2.7540283 1.8125l1.28125 0l1.859375 6.953125l0.59375 0l1.9375 -6.953125l1.234375 0l-2.25 8.0l-2.40625 0l-2.25 -8.0zm8.446014 8.0l0 -8.0l1.203125 0l0 8.0l-1.203125 0zm0 -9.8125l0 -1.390625l1.203125 0l0 1.390625l-1.203125 0zm7.6446533 2.859375l-2.546875 0l0 3.8125q0 1.375 0.203125 1.8125q0.203125 0.4375 0.953125 0.4375l1.421875 -0.09375l0.078125 0.984375q-1.0625 0.171875 -1.625 0.171875q-1.25 0 -1.734375 -0.609375q-0.484375 -0.609375 -0.484375 -2.3125l0 -4.203125l-1.125 0l0 -1.046875l1.125 0l0 -2.453125l1.1875 0l0 2.453125l2.546875 0l0 1.046875zm0.7253723 -1.046875l1.1875 0l2.0 6.953125l0.53125 0l2.015625 -6.953125l1.203125 0l-3.328125 11.546875l-1.203125 0l1.046875 -3.546875l-1.1875 0l-2.265625 -8.0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m308.87402 239.40897l24.078735 0l0 -64.50395l24.078735 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m308.87402 239.40897l24.078735 0l0 -64.50395l24.078735 0" fill-rule="evenodd"/><path fill="#ffffff" d="m161.03023 127.63973l138.29921 0l0 46.3937l-138.29921 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m161.03023 127.63973l138.29921 0l0 46.3937l-138.29921 0z" fill-rule="evenodd"/><path fill="#212121" d="m183.56332 157.75658l3.546875 -12.90625l3.125 0l3.546875 12.90625l-1.421875 0l-0.921875 -3.328125l-5.53125 0l-0.9375 3.328125l-1.40625 0zm4.625 -11.671875l-1.96875 7.0625l4.890625 0l-1.953125 -7.0625l-0.96875 0zm10.757111 2.15625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm9.477875 1.40625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm3.2107239 2.109375l1.484375 0l2.1875 8.109375l0.6875 0l2.265625 -8.109375l1.4375 0l-2.640625 9.328125l-2.796875 0l-2.625 -9.328125zm9.848663 9.328125l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913849 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm0.84521484 -1.21875l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm13.698471 -2.515625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm10.959305 3.734375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm3.5776672 9.34375l0 -13.46875l1.375 0l0 0.671875q1.421875 -0.859375 2.796875 -0.859375q1.78125 0 2.578125 1.140625q0.8125 1.125 0.8125 3.71875q0 2.578125 -0.953125 3.71875q-0.9375 1.125 -3.125 1.125q-1.140625 0 -2.078125 -0.203125l0 4.15625l-1.40625 0zm3.96875 -12.40625q-0.5625 0 -1.203125 0.1875q-0.640625 0.1875 -1.015625 0.375l-0.34375 0.1875l0 6.28125q1.3125 0.203125 2.0 0.203125q1.515625 0 2.125 -0.859375q0.609375 -0.859375 0.609375 -2.796875q0 -1.9375 -0.5625 -2.75q-0.546875 -0.828125 -1.609375 -0.828125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m362.18146 141.25722l48.629913 0l0 19.40158l-48.629913 0z" fill-rule="evenodd"/><path fill="#212121" d="m371.64862 149.52347q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625zm9.080627 0.140625l-2.546875 0l0 3.8125q0 1.375 0.203125 1.8125q0.203125 0.4375 0.953125 0.4375l1.421875 -0.09375l0.078125 0.984375q-1.0625 0.171875 -1.625 0.171875q-1.25 0 -1.734375 -0.609375q-0.484375 -0.609375 -0.484375 -2.3125l0 -4.203125l-1.125 0l0 -1.046875l1.125 0l0 -2.453125l1.1875 0l0 2.453125l2.546875 0l0 1.046875zm6.912903 5.96875l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm3.080017 8.015625l0 -11.546875l1.1875 0l0 0.578125q1.203125 -0.734375 2.390625 -0.734375q1.515625 0 2.203125 0.96875q0.6875 0.96875 0.6875 3.1875q0 2.21875 -0.8125 3.1875q-0.796875 0.96875 -2.671875 0.96875q-0.96875 0 -1.78125 -0.171875l0 3.5625l-1.203125 0zm3.40625 -10.640625q-0.484375 0 -1.046875 0.171875q-0.546875 0.15625 -0.859375 0.3125l-0.296875 0.15625l0 5.390625q1.125 0.1875 1.71875 0.1875q1.296875 0 1.8125 -0.734375q0.53125 -0.75 0.53125 -2.40625q0 -1.671875 -0.484375 -2.375q-0.46875 -0.703125 -1.375 -0.703125zm7.525757 0q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m362.18146 150.95801l-31.426147 0l0 -0.12599182l-31.440002 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m362.18146 150.95801l-31.426147 0l0 -0.12599182l-31.440002 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m463.21298 121.86354l41.858276 0l0 30.015747l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m477.40048 134.86667l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.16687 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788452 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm6.9570007 -6.8125l-1.75 0l0.546875 1.671875l-0.65625 0.203125l-0.546875 -1.6875l-1.421875 1.046875l-0.421875 -0.53125l1.4375 -1.046875l-1.40625 -1.03125l0.40625 -0.5625l1.421875 1.046875l0.546875 -1.6875l0.640625 0.21875l-0.53125 1.6875l1.734375 0l0 0.671875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m301.8262 232.44638l41.858276 0l0 30.015747l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m316.0137 245.44951l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.16687 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788452 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.1757507 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m463.21335 169.42838l41.858276 0l0 30.015747l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m475.9321 182.29088q1.09375 0 1.765625 0.40625q1.453125 0.859375 1.453125 4.265625q0 2.40625 -0.8125 3.40625q-0.796875 1.0 -2.40625 1.0q-1.59375 0 -2.40625 -0.984375q-0.796875 -0.984375 -0.796875 -3.484375q0 -2.515625 0.796875 -3.5625q0.796875 -1.046875 2.40625 -1.046875zm0.015625 0.90625q-0.765625 0 -1.203125 0.328125q-0.9375 0.65625 -0.9375 3.453125q0 1.96875 0.515625 2.734375q0.515625 0.75 1.625 0.75q1.109375 0 1.625 -0.765625q0.515625 -0.765625 0.515625 -2.8125q0 -2.0625 -0.5 -2.875q-0.5 -0.8125 -1.640625 -0.8125zm4.6199646 8.03125l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788757 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm6.95697 -6.8125l-1.75 0l0.546875 1.671875l-0.65625 0.203125l-0.546875 -1.6875l-1.421875 1.046875l-0.421875 -0.53125l1.4375 -1.046875l-1.40625 -1.03125l0.40625 -0.5625l1.421875 1.046875l0.546875 -1.6875l0.640625 0.21875l-0.53125 1.6875l1.734375 0l0 0.671875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m293.90054 120.75713l41.858246 0l0 30.015755l-41.858246 0z" fill-rule="evenodd"/><path fill="#212121" d="m308.08804 133.76025l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.1668396 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788757 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.17572 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m230.1811 216.21211l0 -21.089142l0.06298828 0l0 -21.084091" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m230.1811 216.21211l0 -21.089142l0.06298828 0l0 -13.584091" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m232.44179 181.53888l-2.1976929 -6.038101l-2.1976929 6.038101z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m494.35434 139.39633l125.00784 0l0 23.118103l-125.00784 0z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m410.81137 150.95801l41.7713 0l0 0.06298828l41.756256 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m410.8114 150.95801l41.77127 0l0 0.06298828l34.62799 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m487.21066 151.021l3.128296 2.190445l3.1282654 -2.190445l-3.1282654 -2.190445z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m415.96057 174.9136l39.1362 0l0 0.06298828l39.1315 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m415.96054 174.9136l39.13623 0l0 0.06300354l34.750336 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m489.84714 174.97661l-1.6705322 1.6705322l4.589752 -1.6705322l-4.589752 -1.6705475z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 79.01349l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m745.61945 79.01349l192.09052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m937.70996 81.211174l6.038086 -2.1976852l-6.038086 -2.1976929z" fill-rule="evenodd"/><path fill="#ffffff" d="m799.1627 62.209972l92.50397 0l0 30.70866l-92.50397 0z" fill-rule="evenodd"/><path fill="#212121" d="m806.0565 83.804306l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm5.091675 10.625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm9.305176 0l-1.296875 0l0 -12.4375l1.296875 0l0 4.265625q1.390625 -0.671875 2.671875 -0.671875q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.296875 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.5 -0.671875q-1.078125 0 -2.109375 0.390625l-0.328125 0.125l0 7.15625zm13.898865 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm3.3287964 4.828125l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm5.9954834 0l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm8.279236 3.09375l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125zm7.7070923 1.484375l0 4.4375q0.0625 0.640625 1.015625 0.765625l-0.0625 1.015625q-1.359375 0 -2.0625 -0.6875q-1.546875 0.6875 -3.109375 0.6875q-1.203125 0 -1.828125 -0.671875q-0.625 -0.671875 -0.625 -1.9375q0 -1.265625 0.640625 -1.859375q0.640625 -0.609375 2.015625 -0.75l2.71875 -0.25l0 -0.75q0 -0.890625 -0.390625 -1.265625q-0.375 -0.375 -1.03125 -0.375q-1.390625 0 -2.875 0.171875l-0.53125 0.046875l-0.0625 -0.984375q1.90625 -0.390625 3.375 -0.390625q1.484375 0 2.140625 0.6875q0.671875 0.671875 0.671875 2.109375zm-5.328125 3.53125q0 1.59375 1.3125 1.59375q1.171875 0 2.328125 -0.390625l0.390625 -0.140625l0 -2.859375l-2.5625 0.234375q-0.78125 0.078125 -1.125 0.46875q-0.34375 0.375 -0.34375 1.09375zm9.19696 2.515625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm11.242676 -8.84375q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm10.107239 7.765625l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 53.299213l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m752.7477 53.299213l192.46228 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m752.7477 53.299213l-3.1282349 -2.190445l-3.128296 2.190445l3.128296 2.1904411z" fill-rule="evenodd"/><path fill="#ffffff" d="m794.0761 36.0506l102.677185 0l0 30.708664l-102.677185 0z" fill-rule="evenodd"/><path fill="#212121" d="m803.7546 48.801178q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm3.8260498 4.5q0 -2.375 0.84375 -3.4375q0.859375 -1.0625 2.875 -1.0625q2.03125 0 2.859375 1.0625q0.84375 1.0625 0.84375 3.4375q0 2.375 -0.796875 3.453125q-0.796875 1.0625 -2.921875 1.0625q-2.109375 0 -2.90625 -1.0625q-0.796875 -1.078125 -0.796875 -3.453125zm1.34375 -0.03125q0 1.890625 0.453125 2.65625q0.46875 0.765625 1.921875 0.765625q1.46875 0 1.921875 -0.75q0.453125 -0.75 0.453125 -2.65625q0 -1.90625 -0.515625 -2.625q-0.5 -0.734375 -1.859375 -0.734375q-1.359375 0 -1.875 0.734375q-0.5 0.71875 -0.5 2.609375zm9.49292 4.375l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm12.440674 -7.53125l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125zm7.7070923 1.484375l0 4.4375q0.0625 0.640625 1.015625 0.765625l-0.0625 1.015625q-1.359375 0 -2.0625 -0.6875q-1.546875 0.6875 -3.109375 0.6875q-1.203125 0 -1.828125 -0.671875q-0.625 -0.671875 -0.625 -1.9375q0 -1.265625 0.640625 -1.859375q0.640625 -0.609375 2.015625 -0.75l2.71875 -0.25l0 -0.75q0 -0.890625 -0.390625 -1.265625q-0.375 -0.375 -1.03125 -0.375q-1.390625 0 -2.875 0.171875l-0.53125 0.046875l-0.0625 -0.984375q1.90625 -0.390625 3.375 -0.390625q1.484375 0 2.140625 0.6875q0.671875 0.671875 0.671875 2.109375zm-5.328125 3.53125q0 1.59375 1.3125 1.59375q1.171875 0 2.328125 -0.390625l0.390625 -0.140625l0 -2.859375l-2.5625 0.234375q-0.78125 0.078125 -1.125 0.46875q-0.34375 0.375 -0.34375 1.09375zm7.9000854 2.515625l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm5.091736 10.625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm9.305115 0l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.296875 -0.78125 2.53125 -0.78125q1.609375 0 2.25 0.890625q0.578125 -0.34375 1.484375 -0.609375q0.90625 -0.28125 1.59375 -0.28125q1.734375 0 2.328125 0.9375q0.609375 0.921875 0.609375 3.328125l0 4.578125l-1.296875 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.46875 -0.671875q-0.5625 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625q0.21875 0.5625 0.21875 2.53125l0 4.5l-1.296875 0l0 -4.46875q0 -1.875 -0.34375 -2.53125q-0.328125 -0.671875 -1.46875 -0.671875q-0.5625 0 -1.140625 0.171875q-0.578125 0.15625 -0.890625 0.3125l-0.296875 0.15625l0 7.03125zm19.080017 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.6256104 4.828125l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm12.440674 -7.53125l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 26.695538l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m745.61945 26.695538l195.20935 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m940.82886 26.695538l-1.6705322 1.6705399l4.5897217 -1.6705399l-4.5897217 -1.670538z" fill-rule="evenodd"/><path fill="#ffffff" d="m805.17847 9.368585l80.47247 0l0 30.70866l-80.47247 0z" fill-rule="evenodd"/><path fill="#212121" d="m812.17334 30.962914l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm11.71283 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.9849854 -2.703125l0 7.53125l-1.296875 0l0 -7.53125l-1.09375 0l0 -1.125l1.09375 0l0 -0.78125q0 -1.84375 0.515625 -2.5q0.53125 -0.671875 1.828125 -0.671875l1.75 0.109375l-0.015625 1.078125q-0.96875 -0.03125 -1.609375 -0.03125q-0.625 0 -0.90625 0.421875q-0.265625 0.40625 -0.265625 1.609375l0 0.765625l2.515625 0l0 1.125l-2.515625 0zm9.813965 6.453125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm3.3287964 4.828125l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm11.712769 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.6256714 4.828125l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm11.242615 -8.84375q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm10.1073 7.765625l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0z" fill-rule="nonzero"/></g></svg> \ No newline at end of file diff --git a/docs/schemas/instrument-sections.svg b/docs/schemas/instrument-sections.svg new file mode 100644 index 0000000000000000000000000000000000000000..f8ffa961fe4d4cb6e300e3dab36ae850f24661be --- /dev/null +++ b/docs/schemas/instrument-sections.svg @@ -0,0 +1 @@ +<svg version="1.1" viewBox="0.0 0.0 960.0 540.0" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><clipPath id="g260ca5988d4_0_595.0"><path d="m0 0l960.0 0l0 540.0l-960.0 0l0 -540.0z" clip-rule="nonzero"/></clipPath><g clip-path="url(#g260ca5988d4_0_595.0)"><path fill="#ffffff" d="m0 0l960.0 0l0 540.0l-960.0 0z" fill-rule="evenodd"/><path fill="#ffffff" d="m377.2152 248.1181l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m377.2152 248.1181l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m397.43646 278.23495l0 -12.90625l1.4375 0l0 12.90625l-1.4375 0zm5.761322 0l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm11.534027 -8.265625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.58139 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.267578 -9.328125l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm5.5002136 9.328125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm20.534119 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.983917 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384247 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m439.71915 248.1181l0 -33.001266l-133.98425 0l0 -33.01448" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m439.71915 248.1181l0 -33.001266l-133.98425 0l0 -25.51448" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m307.9326 189.60236l-2.1976929 -6.038086l-2.1976624 6.038086z" fill-rule="evenodd"/><path fill="#ffffff" d="m325.49344 357.8819l143.49606 0l0 46.393707l-143.49606 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m325.49344 357.8819l143.49606 0l0 46.393707l-143.49606 0z" fill-rule="evenodd"/><path fill="#212121" d="m344.32983 383.655l-3.296875 0l0 4.34375l-1.4375 0l0 -12.90625l4.734375 0q2.09375 0 3.09375 1.03125q1.015625 1.015625 1.015625 3.125q0 4.40625 -4.109375 4.40625zm-3.296875 -1.265625l3.265625 0q2.671875 0 2.671875 -3.140625q0 -1.5 -0.640625 -2.1875q-0.625 -0.703125 -2.03125 -0.703125l-3.265625 0l0 6.03125zm15.203766 -3.71875l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm4.0939636 9.328125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.612152 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.31546 -6.640625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm12.111694 2.515625l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm8.218964 -0.1875q1.875 0 2.625 1.078125q0.765625 1.0625 0.765625 3.75q0 2.6875 -0.9375 3.78125q-0.9375 1.09375 -3.46875 1.09375q-0.78125 0 -2.59375 -0.15625l-0.515625 -0.046875l0 -13.375l1.375 0l0 4.53125q1.421875 -0.65625 2.75 -0.65625zm-1.03125 8.453125q1.828125 0 2.40625 -0.828125q0.59375 -0.828125 0.59375 -2.796875q0 -1.984375 -0.46875 -2.78125q-0.453125 -0.796875 -1.65625 -0.796875q-1.078125 0 -2.21875 0.40625l-0.375 0.140625l0 6.5625q1.21875 0.09375 1.71875 0.09375zm9.641327 -7.203125q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.58139 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.29834 1.59375l0 4.78125q0.0625 0.6875 1.09375 0.8125l-0.0625 1.109375q-1.46875 0 -2.21875 -0.75q-1.671875 0.75 -3.359375 0.75q-1.28125 0 -1.953125 -0.71875q-0.671875 -0.734375 -0.671875 -2.09375q0 -1.375 0.6875 -2.015625q0.6875 -0.640625 2.15625 -0.78125l2.9375 -0.28125l0 -0.8125q0 -0.953125 -0.421875 -1.359375q-0.40625 -0.40625 -1.109375 -0.40625q-1.5 0 -3.09375 0.1875l-0.578125 0.046875l-0.0625 -1.0625q2.0625 -0.40625 3.640625 -0.40625q1.59375 0 2.296875 0.734375q0.71875 0.71875 0.71875 2.265625zm-5.734375 3.8125q0 1.71875 1.40625 1.71875q1.28125 0 2.5 -0.4375l0.4375 -0.140625l0 -3.078125l-2.765625 0.25q-0.84375 0.078125 -1.21875 0.5q-0.359375 0.40625 -0.359375 1.1875zm9.909302 2.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm12.096527 -9.515625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm10.88147 8.359375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m397.24146 357.8819l0 -31.685059l-91.49606 0l0 -31.685028" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m397.24146 357.8819l0 -31.685059l-91.49606 0l0 -24.185028" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m307.94308 302.0118l-2.1976929 -6.038086l-2.1976624 6.038086z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m171.7454 248.1181l0 -33.001266l133.98424 0l0 -33.01448" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m171.7454 248.1181l0 -33.001266l133.98424 0l0 -25.51448" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m307.92734 189.60236l-2.1976929 -6.038086l-2.1976624 6.038086z" fill-rule="evenodd"/><path fill="#ffffff" d="m109.24147 248.1181l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m109.24147 248.1181l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m142.89076 278.03183q-1.921875 0.390625 -3.453125 0.390625q-1.53125 0 -2.484375 -0.421875q-0.9375 -0.421875 -1.453125 -1.296875q-0.5 -0.890625 -0.703125 -2.03125q-0.203125 -1.15625 -0.203125 -2.875q0 -1.71875 0.203125 -2.875q0.203125 -1.171875 0.703125 -2.0625q0.515625 -0.90625 1.453125 -1.3125q0.9375 -0.40625 2.421875 -0.40625q1.5 0 3.515625 0.40625l-0.0625 1.21875q-1.890625 -0.34375 -3.359375 -0.34375q-2.046875 0 -2.71875 1.234375q-0.65625 1.21875 -0.65625 4.15625q0 1.484375 0.109375 2.375q0.125 0.890625 0.484375 1.609375q0.359375 0.71875 1.03125 1.03125q0.6875 0.3125 2.0 0.3125q1.3125 0 3.109375 -0.34375l0.0625 1.234375zm1.509201 -4.46875q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm8.928635 4.703125l0 -13.390625l1.40625 0l0 13.390625l-1.40625 0zm4.309601 0l0 -13.390625l1.40625 0l0 13.390625l-1.40625 0zm10.543976 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.062027 -4.3125q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm9.477875 1.40625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm3.6794739 6.765625q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.22551 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m305.73227 248.1181l0 -33.001266l0.0630188 0l0 -33.01448" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m305.73227 248.1181l0 -33.001266l0.0630188 0l0 -25.51448" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m307.99295 189.60236l-2.1976624 -6.038086l-2.1976929 6.038086z" fill-rule="evenodd"/><path fill="#ffffff" d="m243.22835 248.1181l125.00786 0l0 46.393707l-125.00786 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m243.22835 248.1181l125.00786 0l0 46.393707l-125.00786 0z" fill-rule="evenodd"/><path fill="#212121" d="m281.3651 266.3912q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm5.2375183 2.515625l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm12.677155 1.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.581421 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m202.44357 357.8819l0 -31.685059l103.27557 0l0 -31.685028" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m202.44357 357.8819l0 -31.685059l103.27557 0l0 -24.185028" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m307.91684 302.0118l-2.1976929 -6.038086l-2.1976624 6.038086z" fill-rule="evenodd"/><path fill="#ffffff" d="m117.57743 357.8819l169.7323 0l0 46.393707l-169.7323 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m117.57743 357.8819l169.7323 0l0 46.393707l-169.7323 0z" fill-rule="evenodd"/><path fill="#212121" d="m140.43689 387.79562q-1.921875 0.390625 -3.453125 0.390625q-1.53125 0 -2.484375 -0.421875q-0.9375 -0.421875 -1.453125 -1.296875q-0.5 -0.890625 -0.703125 -2.03125q-0.203125 -1.15625 -0.203125 -2.875q0 -1.71875 0.203125 -2.875q0.203125 -1.171875 0.703125 -2.0625q0.515625 -0.90625 1.453125 -1.3125q0.9375 -0.40625 2.421875 -0.40625q1.5 0 3.515625 0.40625l-0.0625 1.21875q-1.890625 -0.34375 -3.359375 -0.34375q-2.046875 0 -2.71875 1.234375q-0.65625 1.21875 -0.65625 4.15625q0 1.484375 0.109375 2.375q0.125 0.890625 0.484375 1.609375q0.359375 0.71875 1.03125 1.03125q0.6875 0.3125 2.0 0.3125q1.3125 0 3.109375 -0.34375l0.0625 1.234375zm1.509201 -4.46875q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.22551 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm14.190384 4.140625l0 -13.46875l1.375 0l0 0.671875q1.421875 -0.859375 2.796875 -0.859375q1.78125 0 2.578125 1.140625q0.8125 1.125 0.8125 3.71875q0 2.578125 -0.953125 3.71875q-0.9375 1.125 -3.125 1.125q-1.140625 0 -2.078125 -0.203125l0 4.15625l-1.40625 0zm3.96875 -12.40625q-0.5625 0 -1.203125 0.1875q-0.640625 0.1875 -1.015625 0.375l-0.34375 0.1875l0 6.28125q1.3125 0.203125 2.0 0.203125q1.515625 0 2.125 -0.859375q0.609375 -0.859375 0.609375 -2.796875q0 -1.9375 -0.5625 -2.75q-0.546875 -0.828125 -1.609375 -0.828125zm5.456848 3.59375q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm11.741135 -3.5625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm5.7532806 8.265625l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913849 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.3154755 -6.640625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm5.2375183 2.515625l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm12.67717 1.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.581406 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#ffffff" d="m243.22835 135.72179l125.00786 0l0 46.393692l-125.00786 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m243.22835 135.72179l125.00786 0l0 46.393692l-125.00786 0z" fill-rule="evenodd"/><path fill="#212121" d="m284.07407 165.83864l0 -12.90625l7.859375 0l0 1.265625l-6.421875 0l0 4.453125l5.3125 0l0 1.25l-5.3125 0l0 4.671875l6.421875 0l0 1.265625l-7.859375 0zm11.4888 0l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384247 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913849 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm0.84521484 -1.21875l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 79.01349l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m745.61945 79.01349l192.09052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m937.70996 81.211174l6.038086 -2.1976852l-6.038086 -2.1976929z" fill-rule="evenodd"/><path fill="#ffffff" d="m799.1627 62.209972l92.50397 0l0 30.70866l-92.50397 0z" fill-rule="evenodd"/><path fill="#212121" d="m806.0565 83.804306l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm5.091675 10.625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm9.305176 0l-1.296875 0l0 -12.4375l1.296875 0l0 4.265625q1.390625 -0.671875 2.671875 -0.671875q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.296875 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.5 -0.671875q-1.078125 0 -2.109375 0.390625l-0.328125 0.125l0 7.15625zm13.898865 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm3.3287964 4.828125l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm5.9954834 0l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm8.279236 3.09375l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125zm7.7070923 1.484375l0 4.4375q0.0625 0.640625 1.015625 0.765625l-0.0625 1.015625q-1.359375 0 -2.0625 -0.6875q-1.546875 0.6875 -3.109375 0.6875q-1.203125 0 -1.828125 -0.671875q-0.625 -0.671875 -0.625 -1.9375q0 -1.265625 0.640625 -1.859375q0.640625 -0.609375 2.015625 -0.75l2.71875 -0.25l0 -0.75q0 -0.890625 -0.390625 -1.265625q-0.375 -0.375 -1.03125 -0.375q-1.390625 0 -2.875 0.171875l-0.53125 0.046875l-0.0625 -0.984375q1.90625 -0.390625 3.375 -0.390625q1.484375 0 2.140625 0.6875q0.671875 0.671875 0.671875 2.109375zm-5.328125 3.53125q0 1.59375 1.3125 1.59375q1.171875 0 2.328125 -0.390625l0.390625 -0.140625l0 -2.859375l-2.5625 0.234375q-0.78125 0.078125 -1.125 0.46875q-0.34375 0.375 -0.34375 1.09375zm9.19696 2.515625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm11.242676 -8.84375q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm10.107239 7.765625l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 53.299213l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m752.7477 53.299213l192.46228 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m752.7477 53.299213l-3.1282349 -2.190445l-3.128296 2.190445l3.128296 2.1904411z" fill-rule="evenodd"/><path fill="#ffffff" d="m794.0761 36.0506l102.677185 0l0 30.708664l-102.677185 0z" fill-rule="evenodd"/><path fill="#212121" d="m803.7546 48.801178q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm3.8260498 4.5q0 -2.375 0.84375 -3.4375q0.859375 -1.0625 2.875 -1.0625q2.03125 0 2.859375 1.0625q0.84375 1.0625 0.84375 3.4375q0 2.375 -0.796875 3.453125q-0.796875 1.0625 -2.921875 1.0625q-2.109375 0 -2.90625 -1.0625q-0.796875 -1.078125 -0.796875 -3.453125zm1.34375 -0.03125q0 1.890625 0.453125 2.65625q0.46875 0.765625 1.921875 0.765625q1.46875 0 1.921875 -0.75q0.453125 -0.75 0.453125 -2.65625q0 -1.90625 -0.515625 -2.625q-0.5 -0.734375 -1.859375 -0.734375q-1.359375 0 -1.875 0.734375q-0.5 0.71875 -0.5 2.609375zm9.49292 4.375l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm12.440674 -7.53125l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125zm7.7070923 1.484375l0 4.4375q0.0625 0.640625 1.015625 0.765625l-0.0625 1.015625q-1.359375 0 -2.0625 -0.6875q-1.546875 0.6875 -3.109375 0.6875q-1.203125 0 -1.828125 -0.671875q-0.625 -0.671875 -0.625 -1.9375q0 -1.265625 0.640625 -1.859375q0.640625 -0.609375 2.015625 -0.75l2.71875 -0.25l0 -0.75q0 -0.890625 -0.390625 -1.265625q-0.375 -0.375 -1.03125 -0.375q-1.390625 0 -2.875 0.171875l-0.53125 0.046875l-0.0625 -0.984375q1.90625 -0.390625 3.375 -0.390625q1.484375 0 2.140625 0.6875q0.671875 0.671875 0.671875 2.109375zm-5.328125 3.53125q0 1.59375 1.3125 1.59375q1.171875 0 2.328125 -0.390625l0.390625 -0.140625l0 -2.859375l-2.5625 0.234375q-0.78125 0.078125 -1.125 0.46875q-0.34375 0.375 -0.34375 1.09375zm7.9000854 2.515625l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm5.091736 10.625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm9.305115 0l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.296875 -0.78125 2.53125 -0.78125q1.609375 0 2.25 0.890625q0.578125 -0.34375 1.484375 -0.609375q0.90625 -0.28125 1.59375 -0.28125q1.734375 0 2.328125 0.9375q0.609375 0.921875 0.609375 3.328125l0 4.578125l-1.296875 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.46875 -0.671875q-0.5625 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625q0.21875 0.5625 0.21875 2.53125l0 4.5l-1.296875 0l0 -4.46875q0 -1.875 -0.34375 -2.53125q-0.328125 -0.671875 -1.46875 -0.671875q-0.5625 0 -1.140625 0.171875q-0.578125 0.15625 -0.890625 0.3125l-0.296875 0.15625l0 7.03125zm19.080017 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.6256104 4.828125l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm12.440674 -7.53125l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 26.695538l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m745.61945 26.695538l195.20935 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m940.82886 26.695538l-1.6705322 1.6705399l4.5897217 -1.6705399l-4.5897217 -1.670538z" fill-rule="evenodd"/><path fill="#ffffff" d="m805.17847 9.368585l80.47247 0l0 30.70866l-80.47247 0z" fill-rule="evenodd"/><path fill="#212121" d="m812.17334 30.962914l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm11.71283 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.9849854 -2.703125l0 7.53125l-1.296875 0l0 -7.53125l-1.09375 0l0 -1.125l1.09375 0l0 -0.78125q0 -1.84375 0.515625 -2.5q0.53125 -0.671875 1.828125 -0.671875l1.75 0.109375l-0.015625 1.078125q-0.96875 -0.03125 -1.609375 -0.03125q-0.625 0 -0.90625 0.421875q-0.265625 0.40625 -0.265625 1.609375l0 0.765625l2.515625 0l0 1.125l-2.515625 0zm9.813965 6.453125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm3.3287964 4.828125l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm11.712769 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.6256714 4.828125l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm11.242615 -8.84375q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm10.1073 7.765625l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0z" fill-rule="nonzero"/><path fill="#ffffff" d="m660.23755 248.11942l190.51965 0l0 46.393707l-190.51965 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m660.23755 248.11942l190.51965 0l0 46.393707l-190.51965 0z" fill-rule="evenodd"/><path fill="#212121" d="m673.5517 278.23627l0 -12.90625l1.4375 0l0 12.90625l-1.4375 0zm5.7613525 0l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm11.533997 -8.265625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.581421 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.267578 -9.328125l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm5.500183 9.328125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm20.534119 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9839478 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384216 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm3.3920898 3.171875l0 4.9375l-1.4375 0l0 -12.90625l4.78125 0q2.046875 0 3.078125 0.953125q1.046875 0.953125 1.046875 2.953125q0 3.0 -2.375 3.75l2.484375 5.25l-1.578125 0l-2.34375 -4.9375l-3.65625 0zm3.359375 -1.28125q2.640625 0 2.640625 -2.703125q0 -2.71875 -2.65625 -2.71875l-3.34375 0l0 5.421875l3.359375 0zm12.63678 5.0625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm5.3745117 -2.90625l0 8.109375l-1.40625 0l0 -8.109375l-1.171875 0l0 -1.21875l1.171875 0l0 -0.84375q0 -1.96875 0.5625 -2.6875q0.5625 -0.71875 1.953125 -0.71875l1.890625 0.125l-0.015625 1.15625q-1.046875 -0.03125 -1.734375 -0.03125q-0.671875 0 -0.96875 0.453125q-0.28125 0.4375 -0.28125 1.71875l0 0.828125l2.703125 0l0 1.21875l-2.703125 0zm10.554077 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm3.5776367 5.203125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.612122 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9839478 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm12.096497 -9.515625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm10.88147 8.359375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0z" fill-rule="nonzero"/><path fill="#ffffff" d="m544.55383 255.96326l73.3858 0l0 30.708649l-73.3858 0z" fill-rule="evenodd"/><path fill="#212121" d="m550.55493 277.07758l0 -8.0l1.1875 0l0 1.09375q1.390625 -0.96875 2.921875 -1.265625l0 1.21875q-0.671875 0.125 -1.40625 0.40625q-0.71875 0.265625 -1.109375 0.46875l-0.390625 0.203125l0 5.875l-1.203125 0zm10.813477 -0.984375l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm4.611267 -2.484375l0 6.953125l-1.203125 0l0 -6.953125l-1.0 0l0 -1.046875l1.0 0l0 -0.71875q0 -1.703125 0.484375 -2.3125q0.484375 -0.609375 1.671875 -0.609375l1.625 0.109375l-0.015625 0.984375q-0.890625 -0.03125 -1.484375 -0.03125q-0.578125 0 -0.828125 0.390625q-0.25 0.375 -0.25 1.484375l0 0.703125l2.328125 0l0 1.046875l-2.328125 0zm9.058289 5.96875l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm3.080017 4.46875l0 -8.0l1.1875 0l0 1.09375q1.390625 -0.96875 2.921875 -1.265625l0 1.21875q-0.671875 0.125 -1.40625 0.40625q-0.71875 0.265625 -1.109375 0.46875l-0.390625 0.203125l0 5.875l-1.203125 0zm10.813477 -0.984375l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm4.283142 4.46875l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.28125 -0.71875 2.46875 -0.71875q1.609375 0 2.15625 0.859375q0.546875 0.859375 0.546875 3.078125l0 4.21875l-1.171875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.328125 -0.625 -1.40625 -0.625q-0.515625 0 -1.09375 0.15625q-0.5625 0.15625 -0.859375 0.296875l-0.296875 0.140625l0 6.5zm10.373291 -8.15625q0.53125 0 1.796875 0.1875l0.375 0.046875l-0.046875 0.984375q-1.28125 -0.15625 -1.875 -0.15625q-1.359375 0 -1.859375 0.65625q-0.484375 0.640625 -0.484375 2.40625q0 1.75 0.453125 2.4375q0.453125 0.6875 1.90625 0.6875l1.875 -0.15625l0.0625 1.0q-1.5 0.21875 -2.234375 0.21875q-1.875 0 -2.59375 -0.953125q-0.703125 -0.96875 -0.703125 -3.234375q0 -2.28125 0.765625 -3.203125q0.78125 -0.921875 2.5625 -0.921875zm9.33313 7.171875l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m660.23755 271.31628l-21.148804 0l0 0.06298828l-21.150452 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m660.23755 271.31628l-21.148804 0l0 0.06298828l-21.150452 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m544.55383 271.3176l-21.165405 0l0 0.06298828l-21.165344 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m544.55383 271.3176l-21.165405 0l0 0.06298828l-16.78418 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m506.60422 271.38058l1.6705627 -1.6705322l-4.5897827 1.6705322l4.5897827 1.6705322z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m626.3795 241.16876l41.858276 0l0 30.015747l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m640.567 254.17188l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.16687 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788452 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.17572 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m497.58868 241.32857l41.858276 0l0 30.015762l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m510.30743 254.19107q1.09375 0 1.765625 0.40625q1.453125 0.859375 1.453125 4.265625q0 2.40625 -0.8125 3.40625q-0.796875 1.0 -2.40625 1.0q-1.59375 0 -2.40625 -0.984375q-0.796875 -0.984375 -0.796875 -3.484375q0 -2.515625 0.796875 -3.5625q0.796875 -1.046875 2.40625 -1.046875zm0.015625 0.90625q-0.765625 0 -1.203125 0.328125q-0.9375 0.65625 -0.9375 3.453125q0 1.96875 0.515625 2.734375q0.515625 0.75 1.625 0.75q1.109375 0 1.625 -0.765625q0.515625 -0.765625 0.515625 -2.8125q0 -2.0625 -0.5 -2.875q-0.5 -0.8125 -1.640625 -0.8125zm4.619995 8.03125l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788452 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm6.95697 -6.8125l-1.75 0l0.546875 1.671875l-0.65625 0.203125l-0.546875 -1.6875l-1.421875 1.046875l-0.421875 -0.53125l1.4375 -1.046875l-1.40625 -1.03125l0.40625 -0.5625l1.421875 1.046875l0.546875 -1.6875l0.640625 0.21875l-0.53125 1.6875l1.734375 0l0 0.671875z" fill-rule="nonzero"/><path fill="#ffffff" d="m681.62335 135.72179l147.74805 0l0 46.393692l-147.74805 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m681.62335 135.72179l147.74805 0l0 46.393692l-147.74805 0z" fill-rule="evenodd"/><path fill="#212121" d="m694.1762 165.83864l0 -12.90625l7.859375 0l0 1.265625l-6.421875 0l0 4.453125l5.3125 0l0 1.25l-5.3125 0l0 4.671875l6.421875 0l0 1.265625l-7.859375 0zm11.48877 0l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384277 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913818 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm0.84521484 -1.21875l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm11.557861 4.390625l0 4.9375l-1.4375 0l0 -12.90625l4.78125 0q2.046875 0 3.078125 0.953125q1.046875 0.953125 1.046875 2.953125q0 3.0 -2.375 3.75l2.484375 5.25l-1.578125 0l-2.34375 -4.9375l-3.65625 0zm3.359375 -1.28125q2.640625 0 2.640625 -2.703125q0 -2.71875 -2.65625 -2.71875l-3.34375 0l0 5.421875l3.359375 0zm12.636719 5.0625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm5.3745117 -2.90625l0 8.109375l-1.40625 0l0 -8.109375l-1.171875 0l0 -1.21875l1.171875 0l0 -0.84375q0 -1.96875 0.5625 -2.6875q0.5625 -0.71875 1.953125 -0.71875l1.890625 0.125l-0.015625 1.15625q-1.046875 -0.03125 -1.734375 -0.03125q-0.671875 0 -0.96875 0.453125q-0.28125 0.4375 -0.28125 1.71875l0 0.828125l2.703125 0l0 1.21875l-2.703125 0zm10.554077 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm3.5776978 5.203125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.612122 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm12.096558 -9.515625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm10.88147 8.359375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m681.62335 158.91864l-31.850586 0l0 0.06298828l-31.865967 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m681.62335 158.91864l-31.850586 0l0 0.06298828l-31.865967 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m544.53674 149.21785l73.3858 0l0 19.401566l-73.3858 0z" fill-rule="evenodd"/><path fill="#212121" d="m550.53784 164.57785l0 -8.0l1.1875 0l0 1.09375q1.390625 -0.96875 2.921875 -1.265625l0 1.21875q-0.671875 0.125 -1.40625 0.40625q-0.71875 0.265625 -1.109375 0.46875l-0.390625 0.203125l0 5.875l-1.203125 0zm10.813538 -0.984375l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm4.611267 -2.484375l0 6.953125l-1.203125 0l0 -6.953125l-1.0 0l0 -1.046875l1.0 0l0 -0.71875q0 -1.703125 0.484375 -2.3125q0.484375 -0.609375 1.671875 -0.609375l1.625 0.109375l-0.015625 0.984375q-0.890625 -0.03125 -1.484375 -0.03125q-0.578125 0 -0.828125 0.390625q-0.25 0.375 -0.25 1.484375l0 0.703125l2.328125 0l0 1.046875l-2.328125 0zm9.058228 5.96875l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm3.080017 4.46875l0 -8.0l1.1875 0l0 1.09375q1.390625 -0.96875 2.921875 -1.265625l0 1.21875q-0.671875 0.125 -1.40625 0.40625q-0.71875 0.265625 -1.109375 0.46875l-0.390625 0.203125l0 5.875l-1.203125 0zm10.813538 -0.984375l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm4.283142 4.46875l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.28125 -0.71875 2.46875 -0.71875q1.609375 0 2.15625 0.859375q0.546875 0.859375 0.546875 3.078125l0 4.21875l-1.171875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.328125 -0.625 -1.40625 -0.625q-0.515625 0 -1.09375 0.15625q-0.5625 0.15625 -0.859375 0.296875l-0.296875 0.140625l0 6.5zm10.37323 -8.15625q0.53125 0 1.796875 0.1875l0.375 0.046875l-0.046875 0.984375q-1.28125 -0.15625 -1.875 -0.15625q-1.359375 0 -1.859375 0.65625q-0.484375 0.640625 -0.484375 2.40625q0 1.75 0.453125 2.4375q0.453125 0.6875 1.90625 0.6875l1.875 -0.15625l0.0625 1.0q-1.5 0.21875 -2.234375 0.21875q-1.875 0 -2.59375 -0.953125q-0.703125 -0.96875 -0.703125 -3.234375q0 -2.28125 0.765625 -3.203125q0.78125 -0.921875 2.5625 -0.921875zm9.33313 7.171875l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m544.53674 158.91864l-88.15042 0l0 0.06298828l-88.16455 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m544.53674 158.91864l-88.15042 0l0 0.06298828l-83.78339 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m372.6029 158.98163l1.6705627 -1.6705475l-4.5897827 1.6705475l4.5897827 1.6705322z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m648.1317 128.96666l41.858276 0l0 30.015747l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m662.3192 141.96977l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.16687 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788452 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.17572 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m363.22018 128.9663l41.858276 0l0 30.015747l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m375.93893 141.82878q1.09375 0 1.765625 0.40625q1.453125 0.859375 1.453125 4.265625q0 2.40625 -0.8125 3.40625q-0.796875 1.0 -2.40625 1.0q-1.59375 0 -2.40625 -0.984375q-0.796875 -0.984375 -0.796875 -3.484375q0 -2.515625 0.796875 -3.5625q0.796875 -1.046875 2.40625 -1.046875zm0.015625 0.90625q-0.765625 0 -1.203125 0.328125q-0.9375 0.65625 -0.9375 3.453125q0 1.96875 0.515625 2.734375q0.515625 0.75 1.625 0.75q1.109375 0 1.625 -0.765625q0.515625 -0.765625 0.515625 -2.8125q0 -2.0625 -0.5 -2.875q-0.5 -0.8125 -1.640625 -0.8125zm4.619995 8.03125l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788452 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm6.9570007 -6.8125l-1.75 0l0.546875 1.671875l-0.65625 0.203125l-0.546875 -1.6875l-1.421875 1.046875l-0.421875 -0.53125l1.4375 -1.046875l-1.40625 -1.03125l0.40625 -0.5625l1.421875 1.046875l0.546875 -1.6875l0.640625 0.21875l-0.53125 1.6875l1.734375 0l0 0.671875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m755.4974 248.11942l0 -33.001923l0.06298828 0l0 -33.013824" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m755.4974 248.11942l0 -33.001923l0.06298828 0l0 -25.513824" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m757.75806 189.60367l-2.1976929 -6.038086l-2.1976929 6.038086z" fill-rule="evenodd"/></g></svg> \ No newline at end of file diff --git a/docs/schemas/measurement-sections.svg b/docs/schemas/measurement-sections.svg new file mode 100644 index 0000000000000000000000000000000000000000..5755296d7289cd0b630dd52adc4d0441a2ce1535 --- /dev/null +++ b/docs/schemas/measurement-sections.svg @@ -0,0 +1 @@ +<svg version="1.1" viewBox="0.0 0.0 960.0 540.0" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><clipPath id="g260ca5988d4_0_166.0"><path d="m0 0l960.0 0l0 540.0l-960.0 0l0 -540.0z" clip-rule="nonzero"/></clipPath><g clip-path="url(#g260ca5988d4_0_166.0)"><path fill="#ffffff" d="m0 0l960.0 0l0 540.0l-960.0 0z" fill-rule="evenodd"/><path fill="#ffffff" d="m373.04623 29.154856l125.00787 0l0 46.3937l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m373.04623 29.154856l125.00787 0l0 46.3937l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m388.61276 46.36545l4.6875 0q1.921875 0 2.875 0.796875q0.96875 0.78125 0.96875 2.484375q0 1.21875 -0.421875 1.90625q-0.421875 0.671875 -1.234375 1.0625q2.046875 0.703125 2.046875 3.03125q0 1.953125 -1.03125 2.796875q-1.015625 0.828125 -2.953125 0.828125l-4.9375 0l0 -12.90625zm4.78125 6.96875l-3.34375 0l0 4.671875l3.4375 0q1.265625 0 1.921875 -0.53125q0.671875 -0.53125 0.671875 -1.875q0 -0.71875 -0.28125 -1.203125q-0.265625 -0.484375 -0.703125 -0.6875q-0.828125 -0.375 -1.703125 -0.375zm-0.140625 -5.703125l-3.203125 0l0 4.453125l3.328125 0q1.1875 0 1.734375 -0.5625q0.5625 -0.578125 0.5625 -1.71875q0 -1.140625 -0.59375 -1.65625q-0.578125 -0.515625 -1.828125 -0.515625zm13.195374 5.125l0 4.78125q0.0625 0.6875 1.09375 0.8125l-0.0625 1.109375q-1.46875 0 -2.21875 -0.75q-1.671875 0.75 -3.359375 0.75q-1.28125 0 -1.953125 -0.71875q-0.671875 -0.734375 -0.671875 -2.09375q0 -1.375 0.6875 -2.015625q0.6875 -0.640625 2.15625 -0.78125l2.9375 -0.28125l0 -0.8125q0 -0.953125 -0.421875 -1.359375q-0.40625 -0.40625 -1.109375 -0.40625q-1.5 0 -3.09375 0.1875l-0.578125 0.046875l-0.0625 -1.0625q2.0625 -0.40625 3.640625 -0.40625q1.59375 0 2.296875 0.734375q0.71875 0.71875 0.71875 2.265625zm-5.734375 3.8125q0 1.71875 1.40625 1.71875q1.28125 0 2.5 -0.4375l0.4375 -0.140625l0 -3.078125l-2.765625 0.25q-0.84375 0.078125 -1.21875 0.5q-0.359375 0.40625 -0.359375 1.1875zm11.424896 -5.5625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm12.097046 7.109375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.31546 -6.640625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm12.642944 10.6875l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.062042 -4.3125q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm9.477875 1.40625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm3.6794739 6.765625q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.225494 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#ffffff" d="m366.13358 247.06561l138.29922 0l0 46.393707l-138.29922 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m366.13358 247.06561l138.29922 0l0 46.393707l-138.29922 0z" fill-rule="evenodd"/><path fill="#212121" d="m381.78818 277.18246l0 -12.90625l2.59375 0l3.65625 10.90625l3.671875 -10.90625l2.578125 0l0 12.90625l-1.421875 0l0 -11.375l-0.265625 0l-3.75 10.90625l-1.609375 0l-3.75 -10.90625l-0.265625 0l0 11.375l-1.4375 0zm21.687286 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm10.155792 -1.3125l0 4.78125q0.0625 0.6875 1.09375 0.8125l-0.0625 1.109375q-1.46875 0 -2.21875 -0.75q-1.671875 0.75 -3.359375 0.75q-1.28125 0 -1.953125 -0.71875q-0.671875 -0.734375 -0.671875 -2.09375q0 -1.375 0.6875 -2.015625q0.6875 -0.640625 2.15625 -0.78125l2.9375 -0.28125l0 -0.8125q0 -0.953125 -0.421875 -1.359375q-0.40625 -0.40625 -1.109375 -0.40625q-1.5 0 -3.09375 0.1875l-0.578125 0.046875l-0.0625 -1.0625q2.0625 -0.40625 3.640625 -0.40625q1.59375 0 2.296875 0.734375q0.71875 0.71875 0.71875 2.265625zm-5.734375 3.8125q0 1.71875 1.40625 1.71875q1.28125 0 2.5 -0.4375l0.4375 -0.140625l0 -3.078125l-2.765625 0.25q-0.84375 0.078125 -1.21875 0.5q-0.359375 0.40625 -0.359375 1.1875zm11.424896 -5.5625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm11.565796 -1.0625l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm4.0939636 9.328125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.612122 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.983917 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm20.534119 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.983917 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384247 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m435.37433 134.53937l0 -29.495468l0.18896484 0l0 -29.496658" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m435.37433 134.53937l0 -29.495468l0.18899536 0l0 -21.996658" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m437.76102 83.04724l-2.1976929 -6.0380936l-2.1976929 6.0380936z" fill-rule="evenodd"/><path fill="#ffffff" d="m372.8704 134.53937l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m372.8704 134.53937l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m406.63046 164.65622l3.546875 -12.90625l3.125 0l3.546875 12.90625l-1.421875 0l-0.921875 -3.328125l-5.53125 0l-0.9375 3.328125l-1.40625 0zm4.625 -11.671875l-1.96875 7.0625l4.890625 0l-1.953125 -7.0625l-0.96875 0zm10.757111 2.15625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm9.477875 1.40625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm3.2107239 2.109375l1.484375 0l2.1875 8.109375l0.6875 0l2.265625 -8.109375l1.4375 0l-2.640625 9.328125l-2.796875 0l-2.625 -9.328125zm9.848663 9.328125l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913849 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm0.84521484 -1.21875l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m435.2832 247.06561l0 -33.06624l0.09448242 0l0 -33.075485" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m435.28317 247.06561l0 -33.066223l0.09448242 0l0 -25.5755" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m437.57535 188.42389l-2.1976929 -6.038101l-2.1976624 6.038101z" fill-rule="evenodd"/><path fill="#ffffff" d="m66.33207 134.57349l138.29922 0l0 46.393707l-138.29922 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m66.33207 134.57349l138.29922 0l0 46.393707l-138.29922 0z" fill-rule="evenodd"/><path fill="#212121" d="m88.865166 164.69034l3.546875 -12.90625l3.125 0l3.546875 12.90625l-1.421875 0l-0.921875 -3.328125l-5.53125 0l-0.9375 3.328125l-1.40625 0zm4.625 -11.671875l-1.96875 7.0625l4.890625 0l-1.953125 -7.0625l-0.96875 0zm10.757111 2.15625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm9.477875 1.40625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm3.2107239 2.109375l1.484375 0l2.1875 8.109375l0.6875 0l2.265625 -8.109375l1.4375 0l-2.640625 9.328125l-2.796875 0l-2.625 -9.328125zm9.848656 9.328125l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913849 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm0.84521484 -1.21875l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm13.698471 -2.515625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm10.959305 3.734375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm3.577652 9.34375l0 -13.46875l1.375 0l0 0.671875q1.421875 -0.859375 2.796875 -0.859375q1.78125 0 2.578125 1.140625q0.8125 1.125 0.8125 3.71875q0 2.578125 -0.953125 3.71875q-0.9375 1.125 -3.125 1.125q-1.140625 0 -2.078125 -0.203125l0 4.15625l-1.40625 0zm3.96875 -12.40625q-0.5625 0 -1.203125 0.1875q-0.640625 0.1875 -1.015625 0.375l-0.34375 0.1875l0 6.28125q1.3125 0.203125 2.0 0.203125q1.515625 0 2.125 -0.859375q0.609375 -0.859375 0.609375 -2.796875q0 -1.9375 -0.5625 -2.75q-0.546875 -0.828125 -1.609375 -0.828125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m279.19028 148.0l48.629913 0l0 19.40158l-48.629913 0z" fill-rule="evenodd"/><path fill="#212121" d="m288.65744 156.26625q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625zm9.080658 0.140625l-2.546875 0l0 3.8125q0 1.375 0.203125 1.8125q0.203125 0.4375 0.953125 0.4375l1.421875 -0.09375l0.078125 0.984375q-1.0625 0.171875 -1.625 0.171875q-1.25 0 -1.734375 -0.609375q-0.484375 -0.609375 -0.484375 -2.3125l0 -4.203125l-1.125 0l0 -1.046875l1.125 0l0 -2.453125l1.1875 0l0 2.453125l2.546875 0l0 1.046875zm6.9128723 5.96875l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm3.080017 8.015625l0 -11.546875l1.1875 0l0 0.578125q1.203125 -0.734375 2.390625 -0.734375q1.515625 0 2.203125 0.96875q0.6875 0.96875 0.6875 3.1875q0 2.21875 -0.8125 3.1875q-0.796875 0.96875 -2.671875 0.96875q-0.96875 0 -1.78125 -0.171875l0 3.5625l-1.203125 0zm3.40625 -10.640625q-0.484375 0 -1.046875 0.171875q-0.546875 0.15625 -0.859375 0.3125l-0.296875 0.15625l0 5.390625q1.125 0.1875 1.71875 0.1875q1.296875 0 1.8125 -0.734375q0.53125 -0.75 0.53125 -2.40625q0 -1.671875 -0.484375 -2.375q-0.46875 -0.703125 -1.375 -0.703125zm7.5257874 0q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m279.19028 157.70079l-37.279312 0l0 0.06298828l-37.271866 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m279.19028 157.70079l-37.279312 0l0 0.06298828l-37.271866 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m372.8704 157.73622l-22.525085 0l0 0.06298828l-22.514282 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m365.74213 157.73622l-15.39682 0l0 0.06298828l-22.514282 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m365.74213 157.73622l3.1282654 2.190445l3.128296 -2.190445l-3.128296 -2.190445z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m340.38785 127.90937l41.858246 0l0 30.015755l-41.858246 0z" fill-rule="evenodd"/><path fill="#212121" d="m354.57535 140.91249l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.1668396 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788757 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm6.95697 -6.8125l-1.75 0l0.546875 1.671875l-0.65625 0.203125l-0.546875 -1.6875l-1.421875 1.046875l-0.421875 -0.53125l1.4375 -1.046875l-1.40625 -1.03125l0.40625 -0.5625l1.421875 1.046875l0.546875 -1.6875l0.640625 0.21875l-0.53125 1.6875l1.734375 0l0 0.671875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m196.02873 127.4156l41.858276 0l0 30.015747l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m210.21623 140.41873l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.1668549 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788605 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.1757355 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#ffffff" d="m832.6412 246.94606l125.00787 0l0 46.393692l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m832.6412 246.94606l125.00787 0l0 46.393692l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m852.8624 277.0629l0 -12.90625l1.4375 0l0 12.90625l-1.4375 0zm5.7612915 0l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm11.534058 -8.265625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.581421 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.267517 -9.328125l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm5.500244 9.328125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm20.534119 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384277 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m895.14514 246.94606l0 -32.92064l-90.92914 0l0 -32.906143" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m895.1451 246.94604l0 -32.920624l-90.92914 0l0 -25.406143" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m806.41364 188.61928l-2.1976929 -6.038101l-2.1976929 6.038101z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m804.20435 134.71115l0 -29.581314l-368.66144 0l0 -29.568298" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m804.2043 134.71114l0 -29.581299l-368.66138 0l0 -22.068298" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m437.74057 83.06154l-2.1976624 -6.0380936l-2.1976929 6.0380936z" fill-rule="evenodd"/><path fill="#ffffff" d="m741.7004 134.71115l125.00787 0l0 46.393692l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m741.7004 134.71115l125.00787 0l0 46.393692l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m782.5461 164.82799l0 -12.90625l7.859375 0l0 1.265625l-6.421875 0l0 4.453125l5.3125 0l0 1.25l-5.3125 0l0 4.671875l6.421875 0l0 1.265625l-7.859375 0zm11.488831 0l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384216 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913879 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm0.84521484 -1.21875l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m713.1564 247.06154l0 -32.978363l91.055115 0l0 -32.974396" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m713.1563 247.06154l0 -32.978348l91.055115 0l0 -25.474411" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m806.4091 188.60878l-2.1976929 -6.038101l-2.1976929 6.038101z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m713.14874 392.45523l0 -49.5l0.06298828 0l0 -49.492126" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m713.1487 392.45526l0 -49.50003l0.06298828 0l0 -41.992126" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m715.40936 300.9631l-2.1976929 -6.038086l-2.1976318 6.038086z" fill-rule="evenodd"/><path fill="#ffffff" d="m630.3771 392.45523l165.54333 0l0 46.393707l-165.54333 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m630.3771 392.45523l165.54333 0l0 46.393707l-165.54333 0z" fill-rule="evenodd"/><path fill="#212121" d="m651.142 422.36896q-1.921875 0.390625 -3.453125 0.390625q-1.53125 0 -2.484375 -0.421875q-0.9375 -0.421875 -1.453125 -1.296875q-0.5 -0.890625 -0.703125 -2.03125q-0.203125 -1.15625 -0.203125 -2.875q0 -1.71875 0.203125 -2.875q0.203125 -1.171875 0.703125 -2.0625q0.515625 -0.90625 1.453125 -1.3125q0.9375 -0.40625 2.421875 -0.40625q1.5 0 3.515625 0.40625l-0.0625 1.21875q-1.890625 -0.34375 -3.359375 -0.34375q-2.046875 0 -2.71875 1.234375q-0.65625 1.21875 -0.65625 4.15625q0 1.484375 0.109375 2.375q0.125 0.890625 0.484375 1.609375q0.359375 0.71875 1.03125 1.03125q0.6875 0.3125 2.0 0.3125q1.3125 0 3.109375 -0.34375l0.0625 1.234375zm1.5092163 -4.46875q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.225525 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm14.190369 4.140625l0 -13.46875l1.375 0l0 0.671875q1.421875 -0.859375 2.796875 -0.859375q1.78125 0 2.578125 1.140625q0.8125 1.125 0.8125 3.71875q0 2.578125 -0.953125 3.71875q-0.9375 1.125 -3.125 1.125q-1.140625 0 -2.078125 -0.203125l0 4.15625l-1.40625 0zm3.96875 -12.40625q-0.5625 0 -1.203125 0.1875q-0.640625 0.1875 -1.015625 0.375l-0.34375 0.1875l0 6.28125q1.3125 0.203125 2.0 0.203125q1.515625 0 2.125 -0.859375q0.609375 -0.859375 0.609375 -2.796875q0 -1.9375 -0.5625 -2.75q-0.546875 -0.828125 -1.609375 -0.828125zm5.456848 3.59375q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm11.74115 -3.5625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm5.753296 8.265625l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913818 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.3154907 -6.640625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm5.237488 2.515625l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm12.677185 1.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.581421 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#ffffff" d="m650.6524 247.06154l125.00787 0l0 46.393692l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m650.6524 247.06154l125.00787 0l0 46.393692l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m688.7892 265.33463q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm5.237488 2.515625l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm12.677185 1.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.581421 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#ffffff" d="m279.1811 392.57742l243.93701 0l0 46.393707l-243.93701 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m279.1811 392.57742l243.93701 0l0 46.393707l-243.93701 0z" fill-rule="evenodd"/><path fill="#212121" d="m299.47995 422.49115q-1.921875 0.390625 -3.453125 0.390625q-1.53125 0 -2.484375 -0.421875q-0.9375 -0.421875 -1.453125 -1.296875q-0.5 -0.890625 -0.703125 -2.03125q-0.203125 -1.15625 -0.203125 -2.875q0 -1.71875 0.203125 -2.875q0.203125 -1.171875 0.703125 -2.0625q0.515625 -0.90625 1.453125 -1.3125q0.9375 -0.40625 2.421875 -0.40625q1.5 0 3.515625 0.40625l-0.0625 1.21875q-1.890625 -0.34375 -3.359375 -0.34375q-2.046875 0 -2.71875 1.234375q-0.65625 1.21875 -0.65625 4.15625q0 1.484375 0.109375 2.375q0.125 0.890625 0.484375 1.609375q0.359375 0.71875 1.03125 1.03125q0.6875 0.3125 2.0 0.3125q1.3125 0 3.109375 -0.34375l0.0625 1.234375zm1.5092163 -4.46875q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.225494 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm14.190399 4.140625l0 -13.46875l1.375 0l0 0.671875q1.421875 -0.859375 2.796875 -0.859375q1.78125 0 2.578125 1.140625q0.8125 1.125 0.8125 3.71875q0 2.578125 -0.953125 3.71875q-0.9375 1.125 -3.125 1.125q-1.140625 0 -2.078125 -0.203125l0 4.15625l-1.40625 0zm3.96875 -12.40625q-0.5625 0 -1.203125 0.1875q-0.640625 0.1875 -1.015625 0.375l-0.34375 0.1875l0 6.28125q1.3125 0.203125 2.0 0.203125q1.515625 0 2.125 -0.859375q0.609375 -0.859375 0.609375 -2.796875q0 -1.9375 -0.5625 -2.75q-0.546875 -0.828125 -1.609375 -0.828125zm5.456848 3.59375q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm11.741119 -3.5625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm5.753296 8.265625l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913849 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.31546 -6.640625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm5.2375183 2.515625l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm12.677185 1.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.58139 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm15.862274 -4.9375l0 4.9375l-1.4375 0l0 -12.90625l4.78125 0q2.046875 0 3.078125 0.953125q1.046875 0.953125 1.046875 2.953125q0 3.0 -2.375 3.75l2.484375 5.25l-1.578125 0l-2.34375 -4.9375l-3.65625 0zm3.359375 -1.28125q2.640625 0 2.640625 -2.703125q0 -2.71875 -2.65625 -2.71875l-3.34375 0l0 5.421875l3.359375 0zm12.636719 5.0625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm5.374542 -2.90625l0 8.109375l-1.40625 0l0 -8.109375l-1.171875 0l0 -1.21875l1.171875 0l0 -0.84375q0 -1.96875 0.5625 -2.6875q0.5625 -0.71875 1.953125 -0.71875l1.890625 0.125l-0.015625 1.15625q-1.046875 -0.03125 -1.734375 -0.03125q-0.671875 0 -0.96875 0.453125q-0.28125 0.4375 -0.28125 1.71875l0 0.828125l2.703125 0l0 1.21875l-2.703125 0zm10.554077 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm3.5776367 5.203125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.612152 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm12.096527 -9.515625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm10.8815 8.359375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m542.9516 406.02625l65.82678 0l0 19.40158l-65.82678 0z" fill-rule="evenodd"/><path fill="#212121" d="m545.17316 421.38626l0 -8.0l1.1875 0l0 1.09375q1.390625 -0.96875 2.921875 -1.265625l0 1.21875q-0.671875 0.125 -1.40625 0.40625q-0.71875 0.265625 -1.109375 0.46875l-0.390625 0.203125l0 5.875l-1.203125 0zm10.813538 -0.984375l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm4.611267 -2.484375l0 6.953125l-1.203125 0l0 -6.953125l-1.0 0l0 -1.046875l1.0 0l0 -0.71875q0 -1.703125 0.484375 -2.3125q0.484375 -0.609375 1.671875 -0.609375l1.625 0.109375l-0.015625 0.984375q-0.890625 -0.03125 -1.484375 -0.03125q-0.578125 0 -0.828125 0.390625q-0.25 0.375 -0.25 1.484375l0 0.703125l2.328125 0l0 1.046875l-2.328125 0zm9.058228 5.96875l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm3.080017 4.46875l0 -8.0l1.1875 0l0 1.09375q1.390625 -0.96875 2.921875 -1.265625l0 1.21875q-0.671875 0.125 -1.40625 0.40625q-0.71875 0.265625 -1.109375 0.46875l-0.390625 0.203125l0 5.875l-1.203125 0zm10.813538 -0.984375l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm4.283142 4.46875l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.28125 -0.71875 2.46875 -0.71875q1.609375 0 2.15625 0.859375q0.546875 0.859375 0.546875 3.078125l0 4.21875l-1.171875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.328125 -0.625 -1.40625 -0.625q-0.515625 0 -1.09375 0.15625q-0.5625 0.15625 -0.859375 0.296875l-0.296875 0.140625l0 6.5zm10.37323 -8.15625q0.53125 0 1.796875 0.1875l0.375 0.046875l-0.046875 0.984375q-1.28125 -0.15625 -1.875 -0.15625q-1.359375 0 -1.859375 0.65625q-0.484375 0.640625 -0.484375 2.40625q0 1.75 0.453125 2.4375q0.453125 0.6875 1.90625 0.6875l1.875 -0.15625l0.0625 1.0q-1.5 0.21875 -2.234375 0.21875q-1.875 0 -2.59375 -0.953125q-0.703125 -0.96875 -0.703125 -3.234375q0 -2.28125 0.765625 -3.203125q0.78125 -0.921875 2.5625 -0.921875zm9.33313 7.171875l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m200.41602 405.95013l58.92914 0l0 19.40158l-58.92914 0z" fill-rule="evenodd"/><path fill="#212121" d="m205.29677 414.21637q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625zm10.580643 1.515625l0 4.09375q0.046875 0.59375 0.9375 0.703125l-0.046875 0.9375q-1.265625 0 -1.90625 -0.640625q-1.4375 0.640625 -2.890625 0.640625q-1.09375 0 -1.671875 -0.625q-0.578125 -0.625 -0.578125 -1.78125q0 -1.171875 0.59375 -1.71875q0.59375 -0.5625 1.859375 -0.6875l2.5 -0.234375l0 -0.6875q0 -0.828125 -0.359375 -1.171875q-0.34375 -0.359375 -0.953125 -0.359375q-1.265625 0 -2.65625 0.171875l-0.484375 0.046875l-0.046875 -0.921875q1.75 -0.34375 3.109375 -0.34375q1.359375 0 1.96875 0.625q0.625 0.625 0.625 1.953125zm-4.921875 3.265625q0 1.46875 1.21875 1.46875q1.078125 0 2.140625 -0.375l0.359375 -0.125l0 -2.640625l-2.359375 0.21875q-0.71875 0.0625 -1.046875 0.421875q-0.3125 0.359375 -0.3125 1.03125zm8.500397 2.3125l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.1875 -0.71875 2.328125 -0.71875q1.484375 0 2.078125 0.8125q0.53125 -0.3125 1.359375 -0.5625q0.84375 -0.25 1.484375 -0.25q1.609375 0 2.15625 0.859375q0.546875 0.84375 0.546875 3.078125l0 4.21875l-1.1875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.3125 -0.625 -1.359375 -0.625q-0.53125 0 -1.09375 0.15625q-0.546875 0.15625 -0.859375 0.296875l-0.296875 0.140625q0.203125 0.53125 0.203125 2.34375l0 4.15625l-1.203125 0l0 -4.125q0 -1.734375 -0.3125 -2.34375q-0.3125 -0.625 -1.359375 -0.625q-0.515625 0 -1.0625 0.15625q-0.53125 0.15625 -0.8125 0.296875l-0.265625 0.140625l0 6.5zm12.172897 3.546875l0 -11.546875l1.1875 0l0 0.578125q1.203125 -0.734375 2.390625 -0.734375q1.515625 0 2.203125 0.96875q0.6875 0.96875 0.6875 3.1875q0 2.21875 -0.8125 3.1875q-0.796875 0.96875 -2.671875 0.96875q-0.96875 0 -1.78125 -0.171875l0 3.5625l-1.203125 0zm3.40625 -10.640625q-0.484375 0 -1.046875 0.171875q-0.546875 0.15625 -0.859375 0.3125l-0.296875 0.15625l0 5.390625q1.125 0.1875 1.71875 0.1875q1.296875 0 1.8125 -0.734375q0.53125 -0.75 0.53125 -2.40625q0 -1.671875 -0.484375 -2.375q-0.46875 -0.703125 -1.375 -0.703125zm5.119522 7.09375l0 -11.484375l1.203125 0l0 11.484375l-1.203125 0zm9.039764 -0.984375l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm5.580017 -2.625q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m259.34515 415.6509l9.917877 0l0 0.12600708l9.924622 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m259.34515 415.6509l9.917877 0l0 0.12600708l9.924622 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m200.41602 415.6509l-25.000519 0l0 -65.94556l354.0173 0l0 -79.44025l-24.98529 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m200.41602 415.6509l-25.000519 0l0 -65.945526l354.0173 0l0 -79.44028l-17.857025 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m511.57578 270.2651l-3.1282654 -2.1904602l-3.1282654 2.1904602l3.1282654 2.1904297z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m497.92395 239.93222l41.858276 0l0 30.015747l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m512.11145 252.93535l0 8.79689l-1.03125 0l0 -7.6562653l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.16687 8.79689l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788452 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm6.95697 -6.8125153l-1.75 0l0.546875 1.6718903l-0.65625 0.203125l-0.546875 -1.6875153l-1.421875 1.0468903l-0.421875 -0.53126526l1.4375 -1.046875l-1.40625 -1.03125l0.40625 -0.5625l1.421875 1.046875l0.546875 -1.6875l0.640625 0.21875l-0.53125 1.6875l1.734375 0l0 0.671875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m247.3876 385.70044l41.858276 0l0 30.015747l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m261.5751 398.70355l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.1668396 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788757 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.17572 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m515.71155 385.33548l41.858215 0l0 30.015747l-41.858215 0z" fill-rule="evenodd"/><path fill="#212121" d="m529.89905 398.33862l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.166809 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8789062 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.17572 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m596.5582 385.88687l41.858276 0l0 30.015747l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m609.277 398.74936q1.09375 0 1.765625 0.40625q1.453125 0.859375 1.453125 4.265625q0 2.40625 -0.8125 3.40625q-0.796875 1.0 -2.40625 1.0q-1.59375 0 -2.40625 -0.984375q-0.796875 -0.984375 -0.796875 -3.484375q0 -2.515625 0.796875 -3.5625q0.796875 -1.046875 2.40625 -1.046875zm0.015625 0.90625q-0.765625 0 -1.203125 0.328125q-0.9375 0.65625 -0.9375 3.453125q0 1.96875 0.515625 2.734375q0.515625 0.75 1.625 0.75q1.109375 0 1.625 -0.765625q0.515625 -0.765625 0.515625 -2.8125q0 -2.0625 -0.5 -2.875q-0.5 -0.8125 -1.640625 -0.8125zm4.619995 8.03125l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788452 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm6.95697 -6.8125l-1.75 0l0.546875 1.671875l-0.65625 0.203125l-0.546875 -1.6875l-1.421875 1.046875l-0.421875 -0.53125l1.4375 -1.046875l-1.40625 -1.03125l0.40625 -0.5625l1.421875 1.046875l0.546875 -1.6875l0.640625 0.21875l-0.53125 1.6875l1.734375 0l0 0.671875z" fill-rule="nonzero"/><path fill="#ffffff" d="m331.5643 461.74802l191.52756 0l0 46.393707l-191.52756 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m331.5643 461.74802l191.52756 0l0 46.393707l-191.52756 0z" fill-rule="evenodd"/><path fill="#212121" d="m345.38242 491.86487l0 -12.90625l1.4375 0l0 12.90625l-1.4375 0zm5.761322 0l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm11.534027 -8.265625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.58139 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.267578 -9.328125l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm5.5002136 9.328125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm20.534119 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.983917 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384247 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm3.3920898 3.171875l0 4.9375l-1.4375 0l0 -12.90625l4.78125 0q2.046875 0 3.078125 0.953125q1.046875 0.953125 1.046875 2.953125q0 3.0 -2.375 3.75l2.484375 5.25l-1.578125 0l-2.34375 -4.9375l-3.65625 0zm3.359375 -1.28125q2.640625 0 2.640625 -2.703125q0 -2.71875 -2.65625 -2.71875l-3.34375 0l0 5.421875l3.359375 0zm12.636749 5.0625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm5.3745117 -2.90625l0 8.109375l-1.40625 0l0 -8.109375l-1.171875 0l0 -1.21875l1.171875 0l0 -0.84375q0 -1.96875 0.5625 -2.6875q0.5625 -0.71875 1.953125 -0.71875l1.890625 0.125l-0.015625 1.15625q-1.046875 -0.03125 -1.734375 -0.03125q-0.671875 0 -0.96875 0.453125q-0.28125 0.4375 -0.28125 1.71875l0 0.828125l2.703125 0l0 1.21875l-2.703125 0zm10.554077 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm3.5776672 5.203125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.612122 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.983917 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm12.096527 -9.515625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm10.88147 8.359375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m726.9516 475.19684l65.82678 0l0 19.40158l-65.82678 0z" fill-rule="evenodd"/><path fill="#212121" d="m729.17316 490.55685l0 -8.0l1.1875 0l0 1.09375q1.390625 -0.96875 2.921875 -1.265625l0 1.21875q-0.671875 0.125 -1.40625 0.40625q-0.71875 0.265625 -1.109375 0.46875l-0.390625 0.203125l0 5.875l-1.203125 0zm10.813538 -0.984375l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm4.611267 -2.484375l0 6.953125l-1.203125 0l0 -6.953125l-1.0 0l0 -1.046875l1.0 0l0 -0.71875q0 -1.703125 0.484375 -2.3125q0.484375 -0.609375 1.671875 -0.609375l1.625 0.109375l-0.015625 0.984375q-0.890625 -0.03125 -1.484375 -0.03125q-0.578125 0 -0.828125 0.390625q-0.25 0.375 -0.25 1.484375l0 0.703125l2.328125 0l0 1.046875l-2.328125 0zm9.058228 5.96875l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm3.080017 4.46875l0 -8.0l1.1875 0l0 1.09375q1.390625 -0.96875 2.921875 -1.265625l0 1.21875q-0.671875 0.125 -1.40625 0.40625q-0.71875 0.265625 -1.109375 0.46875l-0.390625 0.203125l0 5.875l-1.203125 0zm10.813538 -0.984375l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm4.283142 4.46875l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.28125 -0.71875 2.46875 -0.71875q1.609375 0 2.15625 0.859375q0.546875 0.859375 0.546875 3.078125l0 4.21875l-1.171875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.328125 -0.625 -1.40625 -0.625q-0.515625 0 -1.09375 0.15625q-0.5625 0.15625 -0.859375 0.296875l-0.296875 0.140625l0 6.5zm10.37323 -8.15625q0.53125 0 1.796875 0.1875l0.375 0.046875l-0.046875 0.984375q-1.28125 -0.15625 -1.875 -0.15625q-1.359375 0 -1.859375 0.65625q-0.484375 0.640625 -0.484375 2.40625q0 1.75 0.453125 2.4375q0.453125 0.6875 1.90625 0.6875l1.875 -0.15625l0.0625 1.0q-1.5 0.21875 -2.234375 0.21875q-1.875 0 -2.59375 -0.953125q-0.703125 -0.96875 -0.703125 -3.234375q0 -2.28125 0.765625 -3.203125q0.78125 -0.921875 2.5625 -0.921875zm9.33313 7.171875l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m204.59576 475.12073l86.77167 0l0 19.40158l-86.77167 0z" fill-rule="evenodd"/><path fill="#212121" d="m208.01776 490.48074l0 -8.0l1.203125 0l0 8.0l-1.203125 0zm0 -9.8125l0 -1.390625l1.203125 0l0 1.390625l-1.203125 0zm4.707138 9.8125l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.28125 -0.71875 2.46875 -0.71875q1.609375 0 2.15625 0.859375q0.546875 0.859375 0.546875 3.078125l0 4.21875l-1.171875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.328125 -0.625 -1.40625 -0.625q-0.515625 0 -1.09375 0.15625q-0.5625 0.15625 -0.859375 0.296875l-0.296875 0.140625l0 6.5zm9.8888855 -7.09375q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625zm9.080643 0.140625l-2.546875 0l0 3.8125q0 1.375 0.203125 1.8125q0.203125 0.4375 0.953125 0.4375l1.421875 -0.09375l0.078125 0.984375q-1.0625 0.171875 -1.625 0.171875q-1.25 0 -1.734375 -0.609375q-0.484375 -0.609375 -0.484375 -2.3125l0 -4.203125l-1.125 0l0 -1.046875l1.125 0l0 -2.453125l1.1875 0l0 2.453125l2.546875 0l0 1.046875zm1.4753876 6.953125l0 -8.0l1.1875 0l0 1.09375q1.390625 -0.96875 2.921875 -1.265625l0 1.21875q-0.671875 0.125 -1.40625 0.40625q-0.71875 0.265625 -1.109375 0.46875l-0.390625 0.203125l0 5.875l-1.203125 0zm10.520386 -8.0l1.203125 0l0 8.0l-1.203125 0l0 -0.5625q-1.203125 0.71875 -2.359375 0.71875q-1.640625 0 -2.171875 -0.84375q-0.53125 -0.84375 -0.53125 -3.140625l0 -4.171875l1.1875 0l0 4.15625q0 1.75 0.296875 2.34375q0.3125 0.59375 1.390625 0.59375q0.53125 0 1.0625 -0.15625q0.546875 -0.15625 0.84375 -0.296875l0.28125 -0.140625l0 -6.5zm4.7147675 8.0l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.1875 -0.71875 2.328125 -0.71875q1.484375 0 2.078125 0.8125q0.53125 -0.3125 1.359375 -0.5625q0.84375 -0.25 1.484375 -0.25q1.609375 0 2.15625 0.859375q0.546875 0.84375 0.546875 3.078125l0 4.21875l-1.1875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.3125 -0.625 -1.359375 -0.625q-0.53125 0 -1.09375 0.15625q-0.546875 0.15625 -0.859375 0.296875l-0.296875 0.140625q0.203125 0.53125 0.203125 2.34375l0 4.15625l-1.203125 0l0 -4.125q0 -1.734375 -0.3125 -2.34375q-0.3125 -0.625 -1.359375 -0.625q-0.515625 0 -1.0625 0.15625q-0.53125 0.15625 -0.8125 0.296875l-0.265625 0.140625l0 6.5zm17.610413 -0.984375l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm4.283142 4.46875l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.28125 -0.71875 2.46875 -0.71875q1.609375 0 2.15625 0.859375q0.546875 0.859375 0.546875 3.078125l0 4.21875l-1.171875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.328125 -0.625 -1.40625 -0.625q-0.515625 0 -1.09375 0.15625q-0.5625 0.15625 -0.859375 0.296875l-0.296875 0.140625l0 6.5zm11.481506 -6.953125l-2.546875 0l0 3.8125q0 1.375 0.203125 1.8125q0.203125 0.4375 0.953125 0.4375l1.421875 -0.09375l0.078125 0.984375q-1.0625 0.171875 -1.625 0.171875q-1.25 0 -1.734375 -0.609375q-0.484375 -0.609375 -0.484375 -2.3125l0 -4.203125l-1.125 0l0 -1.046875l1.125 0l0 -2.453125l1.1875 0l0 2.453125l2.546875 0l0 1.046875zm3.9753723 -0.140625q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m298.34146 454.87103l41.858246 0l0 30.015747l-41.858246 0z" fill-rule="evenodd"/><path fill="#212121" d="m312.52896 467.87418l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.1668396 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788757 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.17572 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m515.71155 454.5061l41.858215 0l0 30.015747l-41.858215 0z" fill-rule="evenodd"/><path fill="#212121" d="m529.89905 467.50922l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.166809 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8789062 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.17572 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m801.35913 240.0398l41.858276 0l0 30.015747l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m814.0779 252.90228q1.09375 0 1.765625 0.40625q1.453125 0.859375 1.453125 4.265625q0 2.40625 -0.8125 3.40625q-0.796875 1.0 -2.40625 1.0q-1.59375 0 -2.40625 -0.984375q-0.796875 -0.984375 -0.796875 -3.484375q0 -2.515625 0.796875 -3.5625q0.796875 -1.046875 2.40625 -1.046875zm0.015625 0.90625q-0.765625 0 -1.203125 0.328125q-0.9375 0.65625 -0.9375 3.453125q0 1.96875 0.515625 2.734375q0.515625 0.75 1.625 0.75q1.109375 0 1.625 -0.765625q0.515625 -0.765625 0.515625 -2.8125q0 -2.0625 -0.5 -2.875q-0.5 -0.8125 -1.640625 -0.8125zm4.619995 8.03125l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788452 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm6.9570312 -6.8125l-1.75 0l0.546875 1.671875l-0.65625 0.203125l-0.546875 -1.6875l-1.421875 1.046875l-0.421875 -0.53125l1.4375 -1.046875l-1.40625 -1.03125l0.40625 -0.5625l1.421875 1.046875l0.546875 -1.6875l0.640625 0.21875l-0.53125 1.6875l1.734375 0l0 0.671875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m200.41602 415.6509l-25.00003 0l0 69.165375l29.188995 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m200.41602 415.6509l-25.00003 0l0 69.165375l29.188995 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m291.37534 484.8189l20.094482 0l0 0.12597656l20.094482 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m291.37534 484.8189l20.094482 0l0 0.12597656l20.094482 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m523.1181 415.7743l9.916687 0l0 0.06298828l9.925842 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m523.1181 415.7743l9.916687 0l0 0.06298828l9.925842 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m608.7784 415.72702l10.799255 0l0 -0.06298828l10.807007 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m608.7784 415.72702l10.799255 0l0 -0.06298828l6.4259033 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m626.00354 415.66403l-1.6705322 1.6705627l4.5897827 -1.6705627l-4.5897827 -1.6705322z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m523.09186 484.9449l101.92883 0l0 0.06298828l101.94519 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m523.09186 484.9449l101.92883 0l0 0.06298828l101.94519 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m792.7784 484.89764l19.931396 0l0 -214.74017l19.942627 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m792.7784 484.89764l19.931458 0l0 -214.74017l15.561401 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m828.27124 270.15747l-1.6705322 1.6705627l4.5897827 -1.6705627l-4.5897827 -1.6705322z" fill-rule="evenodd"/><path fill="#ffffff" d="m44.490814 246.80183l181.98425 0l0 46.393692l-181.98425 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m44.490814 246.80183l181.98425 0l0 46.393692l-181.98425 0z" fill-rule="evenodd"/><path fill="#212121" d="m56.895332 276.91867l0 -12.90625l2.59375 0l3.65625 10.90625l3.671875 -10.90625l2.578125 0l0 12.90625l-1.421875 0l0 -11.375l-0.265625 0l-3.75 10.90625l-1.609375 0l-3.75 -10.90625l-0.265625 0l0 11.375l-1.4375 0zm21.687286 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm10.155777 -1.3125l0 4.78125q0.0625 0.6875 1.09375 0.8125l-0.0625 1.109375q-1.46875 0 -2.21875 -0.75q-1.671875 0.75 -3.359375 0.75q-1.28125 0 -1.953125 -0.71875q-0.671875 -0.734375 -0.671875 -2.09375q0 -1.375 0.6875 -2.015625q0.6875 -0.640625 2.15625 -0.78125l2.9375 -0.28125l0 -0.8125q0 -0.953125 -0.421875 -1.359375q-0.40625 -0.40625 -1.109375 -0.40625q-1.5 0 -3.09375 0.1875l-0.578125 0.046875l-0.0625 -1.0625q2.0625 -0.40625 3.640625 -0.40625q1.59375 0 2.296875 0.734375q0.71875 0.71875 0.71875 2.265625zm-5.734375 3.8125q0 1.71875 1.40625 1.71875q1.28125 0 2.5 -0.4375l0.4375 -0.140625l0 -3.078125l-2.765625 0.25q-0.84375 0.078125 -1.21875 0.5q-0.359375 0.40625 -0.359375 1.1875zm11.4249115 -5.5625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm11.565781 -1.0625l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm4.0939636 9.328125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.612137 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.983902 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.4062424 -0.84375 2.7343674 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.2343674 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm20.534126 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.983902 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384262 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm3.3920898 3.171875l0 4.9375l-1.4375 0l0 -12.90625l4.78125 0q2.046875 0 3.078125 0.953125q1.046875 0.953125 1.046875 2.953125q0 3.0 -2.375 3.75l2.484375 5.25l-1.578125 0l-2.34375 -4.9375l-3.65625 0zm3.359375 -1.28125q2.640625 0 2.640625 -2.703125q0 -2.71875 -2.65625 -2.71875l-3.34375 0l0 5.421875l3.359375 0zm12.636749 5.0625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm6.4995117 -3.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm11.565796 -1.0625l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm4.2033386 9.328125l0 -13.390625l1.40625 0l0 13.390625l-1.40625 0zm9.028351 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m271.41733 260.56036l58.92914 0l0 19.40158l-58.92914 0z" fill-rule="evenodd"/><path fill="#212121" d="m275.4067 271.90475q0 -2.1875 0.78125 -3.15625q0.796875 -0.984375 2.65625 -0.984375q1.859375 0 2.625 0.984375q0.78125 0.96875 0.78125 3.15625q0 2.1875 -0.734375 3.1875q-0.734375 0.984375 -2.6875 0.984375q-1.953125 0 -2.6875 -0.984375q-0.734375 -1.0 -0.734375 -3.1875zm1.234375 -0.015625q0 1.75 0.421875 2.453125q0.421875 0.703125 1.765625 0.703125q1.359375 0 1.78125 -0.6875q0.421875 -0.703125 0.421875 -2.46875q0 -1.765625 -0.46875 -2.421875q-0.46875 -0.671875 -1.734375 -0.671875q-1.25 0 -1.71875 0.671875q-0.46875 0.65625 -0.46875 2.421875zm12.557404 -3.96875l1.203125 0l0 8.0l-1.203125 0l0 -0.5625q-1.203125 0.71875 -2.359375 0.71875q-1.640625 0 -2.171875 -0.84375q-0.53125 -0.84375 -0.53125 -3.140625l0 -4.171875l1.1875 0l0 4.15625q0 1.75 0.296875 2.34375q0.3125 0.59375 1.390625 0.59375q0.53125 0 1.0625 -0.15625q0.546875 -0.15625 0.84375 -0.296875l0.28125 -0.140625l0 -6.5zm7.652252 1.046875l-2.546875 0l0 3.8125q0 1.375 0.203125 1.8125q0.203125 0.4375 0.953125 0.4375l1.421875 -0.09375l0.078125 0.984375q-1.0625 0.171875 -1.625 0.171875q-1.25 0 -1.734375 -0.609375q-0.484375 -0.609375 -0.484375 -2.3125l0 -4.203125l-1.125 0l0 -1.046875l1.125 0l0 -2.453125l1.1875 0l0 2.453125l2.546875 0l0 1.046875zm1.4754028 10.5l0 -11.546875l1.1875 0l0 0.578125q1.203125 -0.734375 2.390625 -0.734375q1.515625 0 2.203125 0.96875q0.6875 0.96875 0.6875 3.1875q0 2.21875 -0.8125 3.1875q-0.796875 0.96875 -2.671875 0.96875q-0.96875 0 -1.78125 -0.171875l0 3.5625l-1.203125 0zm3.40625 -10.640625q-0.484375 0 -1.046875 0.171875q-0.546875 0.15625 -0.859375 0.3125l-0.296875 0.15625l0 5.390625q1.125 0.1875 1.71875 0.1875q1.296875 0 1.8125 -0.734375q0.53125 -0.75 0.53125 -2.40625q0 -1.671875 -0.484375 -2.375q-0.46875 -0.703125 -1.375 -0.703125zm10.010132 -0.90625l1.203125 0l0 8.0l-1.203125 0l0 -0.5625q-1.203125 0.71875 -2.359375 0.71875q-1.640625 0 -2.171875 -0.84375q-0.53125 -0.84375 -0.53125 -3.140625l0 -4.171875l1.1875 0l0 4.15625q0 1.75 0.296875 2.34375q0.3125 0.59375 1.390625 0.59375q0.53125 0 1.0625 -0.15625q0.546875 -0.15625 0.84375 -0.296875l0.28125 -0.140625l0 -6.5zm7.6522827 1.046875l-2.546875 0l0 3.8125q0 1.375 0.203125 1.8125q0.203125 0.4375 0.953125 0.4375l1.421875 -0.09375l0.078125 0.984375q-1.0625 0.171875 -1.625 0.171875q-1.25 0 -1.734375 -0.609375q-0.484375 -0.609375 -0.484375 -2.3125l0 -4.203125l-1.125 0l0 -1.046875l1.125 0l0 -2.453125l1.1875 0l0 2.453125l2.546875 0l0 1.046875zm3.9753723 -0.140625q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m366.13358 270.26248l-17.893677 0l0 0.06298828l-17.885834 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m359.00528 270.26248l-10.765381 0l0 0.06298828l-17.885834 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m359.00528 270.26248l3.128296 2.1904297l3.1282654 -2.1904297l-3.1282654 -2.1904602z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m271.41733 270.26117l-22.4711 0l0 -0.25198364l-22.473785 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m271.41733 270.26117l-22.4711 0l0 -0.25198364l-22.473785 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m334.6437 239.92775l41.858276 0l0 30.015732l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m348.8312 252.93086l0 8.79689l-1.03125 0l0 -7.6562653l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.16687 8.79689l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788452 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm6.9570007 -6.8125153l-1.75 0l0.546875 1.6718903l-0.65625 0.203125l-0.546875 -1.6875153l-1.421875 1.0468903l-0.421875 -0.53126526l1.4375 -1.046875l-1.40625 -1.03125l0.40625 -0.5625l1.421875 1.046875l0.546875 -1.6875l0.640625 0.21875l-0.53125 1.6875l1.734375 0l0 0.671875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m221.2163 240.28584l41.85826 0l0 30.015762l-41.85826 0z" fill-rule="evenodd"/><path fill="#212121" d="m235.4038 253.28897l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.1668549 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788605 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.1757355 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 79.01349l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m745.61945 79.01349l192.09052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m937.70996 81.211174l6.038086 -2.1976852l-6.038086 -2.1976929z" fill-rule="evenodd"/><path fill="#ffffff" d="m799.1627 62.209972l92.50397 0l0 30.70866l-92.50397 0z" fill-rule="evenodd"/><path fill="#212121" d="m806.0565 83.804306l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm5.091675 10.625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm9.305176 0l-1.296875 0l0 -12.4375l1.296875 0l0 4.265625q1.390625 -0.671875 2.671875 -0.671875q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.296875 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.5 -0.671875q-1.078125 0 -2.109375 0.390625l-0.328125 0.125l0 7.15625zm13.898865 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm3.3287964 4.828125l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm5.9954834 0l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm8.279236 3.09375l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125zm7.7070923 1.484375l0 4.4375q0.0625 0.640625 1.015625 0.765625l-0.0625 1.015625q-1.359375 0 -2.0625 -0.6875q-1.546875 0.6875 -3.109375 0.6875q-1.203125 0 -1.828125 -0.671875q-0.625 -0.671875 -0.625 -1.9375q0 -1.265625 0.640625 -1.859375q0.640625 -0.609375 2.015625 -0.75l2.71875 -0.25l0 -0.75q0 -0.890625 -0.390625 -1.265625q-0.375 -0.375 -1.03125 -0.375q-1.390625 0 -2.875 0.171875l-0.53125 0.046875l-0.0625 -0.984375q1.90625 -0.390625 3.375 -0.390625q1.484375 0 2.140625 0.6875q0.671875 0.671875 0.671875 2.109375zm-5.328125 3.53125q0 1.59375 1.3125 1.59375q1.171875 0 2.328125 -0.390625l0.390625 -0.140625l0 -2.859375l-2.5625 0.234375q-0.78125 0.078125 -1.125 0.46875q-0.34375 0.375 -0.34375 1.09375zm9.19696 2.515625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm11.242676 -8.84375q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm10.107239 7.765625l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 53.299213l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m752.7477 53.299213l192.46228 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m752.7477 53.299213l-3.1282349 -2.190445l-3.128296 2.190445l3.128296 2.1904411z" fill-rule="evenodd"/><path fill="#ffffff" d="m794.0761 36.0506l102.677185 0l0 30.708664l-102.677185 0z" fill-rule="evenodd"/><path fill="#212121" d="m803.7546 48.801178q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm3.8260498 4.5q0 -2.375 0.84375 -3.4375q0.859375 -1.0625 2.875 -1.0625q2.03125 0 2.859375 1.0625q0.84375 1.0625 0.84375 3.4375q0 2.375 -0.796875 3.453125q-0.796875 1.0625 -2.921875 1.0625q-2.109375 0 -2.90625 -1.0625q-0.796875 -1.078125 -0.796875 -3.453125zm1.34375 -0.03125q0 1.890625 0.453125 2.65625q0.46875 0.765625 1.921875 0.765625q1.46875 0 1.921875 -0.75q0.453125 -0.75 0.453125 -2.65625q0 -1.90625 -0.515625 -2.625q-0.5 -0.734375 -1.859375 -0.734375q-1.359375 0 -1.875 0.734375q-0.5 0.71875 -0.5 2.609375zm9.49292 4.375l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm12.440674 -7.53125l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125zm7.7070923 1.484375l0 4.4375q0.0625 0.640625 1.015625 0.765625l-0.0625 1.015625q-1.359375 0 -2.0625 -0.6875q-1.546875 0.6875 -3.109375 0.6875q-1.203125 0 -1.828125 -0.671875q-0.625 -0.671875 -0.625 -1.9375q0 -1.265625 0.640625 -1.859375q0.640625 -0.609375 2.015625 -0.75l2.71875 -0.25l0 -0.75q0 -0.890625 -0.390625 -1.265625q-0.375 -0.375 -1.03125 -0.375q-1.390625 0 -2.875 0.171875l-0.53125 0.046875l-0.0625 -0.984375q1.90625 -0.390625 3.375 -0.390625q1.484375 0 2.140625 0.6875q0.671875 0.671875 0.671875 2.109375zm-5.328125 3.53125q0 1.59375 1.3125 1.59375q1.171875 0 2.328125 -0.390625l0.390625 -0.140625l0 -2.859375l-2.5625 0.234375q-0.78125 0.078125 -1.125 0.46875q-0.34375 0.375 -0.34375 1.09375zm7.9000854 2.515625l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm5.091736 10.625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm9.305115 0l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.296875 -0.78125 2.53125 -0.78125q1.609375 0 2.25 0.890625q0.578125 -0.34375 1.484375 -0.609375q0.90625 -0.28125 1.59375 -0.28125q1.734375 0 2.328125 0.9375q0.609375 0.921875 0.609375 3.328125l0 4.578125l-1.296875 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.46875 -0.671875q-0.5625 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625q0.21875 0.5625 0.21875 2.53125l0 4.5l-1.296875 0l0 -4.46875q0 -1.875 -0.34375 -2.53125q-0.328125 -0.671875 -1.46875 -0.671875q-0.5625 0 -1.140625 0.171875q-0.578125 0.15625 -0.890625 0.3125l-0.296875 0.15625l0 7.03125zm19.080017 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.6256104 4.828125l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm12.440674 -7.53125l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 26.695538l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m745.61945 26.695538l195.20935 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m940.82886 26.695538l-1.6705322 1.6705399l4.5897217 -1.6705399l-4.5897217 -1.670538z" fill-rule="evenodd"/><path fill="#ffffff" d="m805.17847 9.368585l80.47247 0l0 30.70866l-80.47247 0z" fill-rule="evenodd"/><path fill="#212121" d="m812.17334 30.962914l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm11.71283 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.9849854 -2.703125l0 7.53125l-1.296875 0l0 -7.53125l-1.09375 0l0 -1.125l1.09375 0l0 -0.78125q0 -1.84375 0.515625 -2.5q0.53125 -0.671875 1.828125 -0.671875l1.75 0.109375l-0.015625 1.078125q-0.96875 -0.03125 -1.609375 -0.03125q-0.625 0 -0.90625 0.421875q-0.265625 0.40625 -0.265625 1.609375l0 0.765625l2.515625 0l0 1.125l-2.515625 0zm9.813965 6.453125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm3.3287964 4.828125l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm11.712769 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.6256714 4.828125l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm11.242615 -8.84375q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm10.1073 7.765625l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0z" fill-rule="nonzero"/></g></svg> \ No newline at end of file diff --git a/docs/schemas/process-sections.svg b/docs/schemas/process-sections.svg new file mode 100644 index 0000000000000000000000000000000000000000..ffb713f23e520aaa2fa8b85493a5837730fa4249 --- /dev/null +++ b/docs/schemas/process-sections.svg @@ -0,0 +1 @@ +<svg version="1.1" viewBox="0.0 0.0 960.0 540.0" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><clipPath id="g260ca5988d4_0_99.0"><path d="m0 0l960.0 0l0 540.0l-960.0 0l0 -540.0z" clip-rule="nonzero"/></clipPath><g clip-path="url(#g260ca5988d4_0_99.0)"><path fill="#ffffff" d="m0 0l960.0 0l0 540.0l-960.0 0z" fill-rule="evenodd"/><path fill="#ffffff" d="m357.04623 29.154856l125.00787 0l0 46.3937l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m357.04623 29.154856l125.00787 0l0 46.3937l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m372.61276 46.36545l4.6875 0q1.921875 0 2.875 0.796875q0.96875 0.78125 0.96875 2.484375q0 1.21875 -0.421875 1.90625q-0.421875 0.671875 -1.234375 1.0625q2.046875 0.703125 2.046875 3.03125q0 1.953125 -1.03125 2.796875q-1.015625 0.828125 -2.953125 0.828125l-4.9375 0l0 -12.90625zm4.78125 6.96875l-3.34375 0l0 4.671875l3.4375 0q1.265625 0 1.921875 -0.53125q0.671875 -0.53125 0.671875 -1.875q0 -0.71875 -0.28125 -1.203125q-0.265625 -0.484375 -0.703125 -0.6875q-0.828125 -0.375 -1.703125 -0.375zm-0.140625 -5.703125l-3.203125 0l0 4.453125l3.328125 0q1.1875 0 1.734375 -0.5625q0.5625 -0.578125 0.5625 -1.71875q0 -1.140625 -0.59375 -1.65625q-0.578125 -0.515625 -1.828125 -0.515625zm13.195374 5.125l0 4.78125q0.0625 0.6875 1.09375 0.8125l-0.0625 1.109375q-1.46875 0 -2.21875 -0.75q-1.671875 0.75 -3.359375 0.75q-1.28125 0 -1.953125 -0.71875q-0.671875 -0.734375 -0.671875 -2.09375q0 -1.375 0.6875 -2.015625q0.6875 -0.640625 2.15625 -0.78125l2.9375 -0.28125l0 -0.8125q0 -0.953125 -0.421875 -1.359375q-0.40625 -0.40625 -1.109375 -0.40625q-1.5 0 -3.09375 0.1875l-0.578125 0.046875l-0.0625 -1.0625q2.0625 -0.40625 3.640625 -0.40625q1.59375 0 2.296875 0.734375q0.71875 0.71875 0.71875 2.265625zm-5.734375 3.8125q0 1.71875 1.40625 1.71875q1.28125 0 2.5 -0.4375l0.4375 -0.140625l0 -3.078125l-2.765625 0.25q-0.84375 0.078125 -1.21875 0.5q-0.359375 0.40625 -0.359375 1.1875zm11.424896 -5.5625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm12.097046 7.109375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.31546 -6.640625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm12.642944 10.6875l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.062042 -4.3125q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm9.477875 1.40625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm3.6794739 6.765625q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.225494 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#ffffff" d="m357.0473 247.06561l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m357.0473 247.06561l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m394.8758 272.8387l-3.296875 0l0 4.34375l-1.4375 0l0 -12.90625l4.734375 0q2.09375 0 3.09375 1.03125q1.015625 1.015625 1.015625 3.125q0 4.40625 -4.109375 4.40625zm-3.296875 -1.265625l3.265625 0q2.671875 0 2.671875 -3.140625q0 -1.5 -0.640625 -2.1875q-0.625 -0.703125 -2.03125 -0.703125l-3.265625 0l0 6.03125zm9.391266 5.609375l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm5.862152 -4.671875q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm12.303619 -4.8125q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm10.8815 8.359375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm6.4995117 -3.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm8.675171 0q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m419.55124 247.06561l0 -25.066345l-0.18899536 0l0 -25.075378" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m419.5512 247.06561l0 -25.066345l-0.18896484 0l0 -17.575378" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m421.55994 204.42389l-2.1976929 -6.038101l-2.1976929 6.038101z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m419.37433 150.53937l0 -37.495308l0.18896484 0l0 -37.49682" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m419.37433 150.53937l0 -37.495316l0.18899536 0l0 -29.99681" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m421.76102 83.04724l-2.1976929 -6.0380936l-2.1976929 6.0380936z" fill-rule="evenodd"/><path fill="#ffffff" d="m356.8704 150.53937l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m356.8704 150.53937l125.00787 0l0 46.393707l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m390.63046 180.65622l3.546875 -12.90625l3.125 0l3.546875 12.90625l-1.421875 0l-0.921875 -3.328125l-5.53125 0l-0.9375 3.328125l-1.40625 0zm4.625 -11.671875l-1.96875 7.0625l4.890625 0l-1.953125 -7.0625l-0.96875 0zm10.757111 2.15625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm9.477875 1.40625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm3.2107239 2.109375l1.484375 0l2.1875 8.109375l0.6875 0l2.265625 -8.109375l1.4375 0l-2.640625 9.328125l-2.796875 0l-2.625 -9.328125zm9.848663 9.328125l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913849 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm0.84521484 -1.21875l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125z" fill-rule="nonzero"/><path fill="#ffffff" d="m16.741518 150.50394l138.29921 0l0 46.393707l-138.29921 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m16.741518 150.50394l138.29921 0l0 46.393707l-138.29921 0z" fill-rule="evenodd"/><path fill="#212121" d="m39.274616 180.62079l3.546875 -12.90625l3.125 0l3.546875 12.90625l-1.421875 0l-0.921875 -3.328125l-5.53125 0l-0.9375 3.328125l-1.40625 0zm4.625 -11.671875l-1.96875 7.0625l4.890625 0l-1.953125 -7.0625l-0.96875 0zm10.757111 2.15625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm9.477871 1.40625l-2.9687462 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.6718712 -0.109375l0.09375 1.15625q-1.2499962 0.203125 -1.9062462 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.9687462 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm3.2107239 2.109375l1.484375 0l2.1875 8.109375l0.6875 0l2.265625 -8.109375l1.4375 0l-2.640625 9.328125l-2.796875 0l-2.625 -9.328125zm9.848663 9.328125l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913849 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm0.84521484 -1.21875l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm13.698471 -2.515625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm10.959305 3.734375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm3.577652 9.34375l0 -13.46875l1.375 0l0 0.671875q1.421875 -0.859375 2.796875 -0.859375q1.78125 0 2.578125 1.140625q0.8125 1.125 0.8125 3.71875q0 2.578125 -0.953125 3.71875q-0.9375 1.125 -3.125 1.125q-1.140625 0 -2.078125 -0.203125l0 4.15625l-1.40625 0zm3.96875 -12.40625q-0.5625 0 -1.203125 0.1875q-0.640625 0.1875 -1.015625 0.375l-0.34375 0.1875l0 6.28125q1.3125 0.203125 2.0 0.203125q1.515625 0 2.125 -0.859375q0.609375 -0.859375 0.609375 -2.796875q0 -1.9375 -0.5625 -2.75q-0.546875 -0.828125 -1.609375 -0.828125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m223.66797 164.0l48.629913 0l0 19.40158l-48.629913 0z" fill-rule="evenodd"/><path fill="#212121" d="m233.13513 172.26625q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625zm9.080643 0.140625l-2.546875 0l0 3.8125q0 1.375 0.203125 1.8125q0.203125 0.4375 0.953125 0.4375l1.421875 -0.09375l0.078125 0.984375q-1.0625 0.171875 -1.625 0.171875q-1.25 0 -1.734375 -0.609375q-0.484375 -0.609375 -0.484375 -2.3125l0 -4.203125l-1.125 0l0 -1.046875l1.125 0l0 -2.453125l1.1875 0l0 2.453125l2.546875 0l0 1.046875zm6.9128876 5.96875l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm3.080017 8.015625l0 -11.546875l1.1875 0l0 0.578125q1.203125 -0.734375 2.390625 -0.734375q1.515625 0 2.203125 0.96875q0.6875 0.96875 0.6875 3.1875q0 2.21875 -0.8125 3.1875q-0.796875 0.96875 -2.671875 0.96875q-0.96875 0 -1.78125 -0.171875l0 3.5625l-1.203125 0zm3.40625 -10.640625q-0.484375 0 -1.046875 0.171875q-0.546875 0.15625 -0.859375 0.3125l-0.296875 0.15625l0 5.390625q1.125 0.1875 1.71875 0.1875q1.296875 0 1.8125 -0.734375q0.53125 -0.75 0.53125 -2.40625q0 -1.671875 -0.484375 -2.375q-0.46875 -0.703125 -1.375 -0.703125zm7.5257874 0q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m223.66797 173.70079l-34.313583 0l0 0.06298828l-34.316345 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m223.66797 173.70079l-34.313583 0l0 0.06298828l-34.316345 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m356.8704 173.73622l-42.28601 0l0 0.06298828l-42.280914 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m349.74213 173.73622l-35.157715 0l0 0.06298828l-42.280945 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m349.74213 173.73622l3.1282654 2.190445l3.128296 -2.190445l-3.128296 -2.190445z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m324.38785 143.90936l41.858246 0l0 30.015762l-41.858246 0z" fill-rule="evenodd"/><path fill="#212121" d="m338.57535 156.91249l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.1668396 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788757 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm6.95697 -6.8125l-1.75 0l0.546875 1.671875l-0.65625 0.203125l-0.546875 -1.6875l-1.421875 1.046875l-0.421875 -0.53125l1.4375 -1.046875l-1.40625 -1.03125l0.40625 -0.5625l1.421875 1.046875l0.546875 -1.6875l0.640625 0.21875l-0.53125 1.6875l1.734375 0l0 0.671875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m148.02873 143.4156l41.858276 0l0 30.015747l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m162.21623 156.41873l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.1668549 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788605 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.1757355 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#ffffff" d="m16.741518 246.94489l138.29921 0l0 46.393707l-138.29921 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m16.741518 246.94489l138.29921 0l0 46.393707l-138.29921 0z" fill-rule="evenodd"/><path fill="#212121" d="m43.343052 272.718l-3.296875 0l0 4.34375l-1.4375 0l0 -12.90625l4.734375 0q2.09375 0 3.09375 1.03125q1.015625 1.015625 1.015625 3.125q0 4.40625 -4.109375 4.40625zm-3.296875 -1.265625l3.265625 0q2.671875 0 2.671875 -3.140625q0 -1.5 -0.640625 -2.1875q-0.625 -0.703125 -2.03125 -0.703125l-3.265625 0l0 6.03125zm9.391281 5.609375l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm5.862137 -4.671875q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm12.303631 -4.8125q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm10.881485 8.359375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm6.499527 -3.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm8.675156 0q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm9.565781 -3.578125q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm10.959305 3.734375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm3.577652 9.34375l0 -13.46875l1.375 0l0 0.671875q1.421875 -0.859375 2.796875 -0.859375q1.78125 0 2.578125 1.140625q0.8125 1.125 0.8125 3.71875q0 2.578125 -0.953125 3.71875q-0.9375 1.125 -3.125 1.125q-1.140625 0 -2.078125 -0.203125l0 4.15625l-1.40625 0zm3.96875 -12.40625q-0.5625 0 -1.203125 0.1875q-0.640625 0.1875 -1.015625 0.375l-0.34375 0.1875l0 6.28125q1.3125 0.203125 2.0 0.203125q1.515625 0 2.125 -0.859375q0.609375 -0.859375 0.609375 -2.796875q0 -1.9375 -0.5625 -2.75q-0.546875 -0.828125 -1.609375 -0.828125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m85.89112 246.94489l0 -25.02362l0.06299591 0l0 -25.02362" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m85.89112 246.94489l0 -25.02362l0.06299591 0l0 -19.02362" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m87.60585 202.89764l-1.6517334 -4.538101l-1.6517334 4.538101z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m357.0473 270.26248l-42.374573 0l0 -0.25198364l-42.381348 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m349.919 270.26248l-35.246277 0l0 -0.25198364l-42.381348 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m349.919 270.26248l3.1282654 2.1904297l3.128296 -2.1904297l-3.128296 -2.1904602z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m223.66797 260.29922l48.629913 0l0 19.40155l-48.629913 0z" fill-rule="evenodd"/><path fill="#212121" d="m233.13513 268.56546q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625zm9.080643 0.140625l-2.546875 0l0 3.8125q0 1.375 0.203125 1.8125q0.203125 0.4375 0.953125 0.4375l1.421875 -0.09375l0.078125 0.984375q-1.0625 0.171875 -1.625 0.171875q-1.25 0 -1.734375 -0.609375q-0.484375 -0.609375 -0.484375 -2.3125l0 -4.203125l-1.125 0l0 -1.046875l1.125 0l0 -2.453125l1.1875 0l0 2.453125l2.546875 0l0 1.046875zm6.9128876 5.96875l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm3.080017 8.015625l0 -11.546875l1.1875 0l0 0.578125q1.203125 -0.734375 2.390625 -0.734375q1.515625 0 2.203125 0.96875q0.6875 0.96875 0.6875 3.1875q0 2.21875 -0.8125 3.1875q-0.796875 0.96875 -2.671875 0.96875q-0.96875 0 -1.78125 -0.171875l0 3.5625l-1.203125 0zm3.40625 -10.640625q-0.484375 0 -1.046875 0.171875q-0.546875 0.15625 -0.859375 0.3125l-0.296875 0.15625l0 5.390625q1.125 0.1875 1.71875 0.1875q1.296875 0 1.8125 -0.734375q0.53125 -0.75 0.53125 -2.40625q0 -1.671875 -0.484375 -2.375q-0.46875 -0.703125 -1.375 -0.703125zm7.5257874 0q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m223.66797 270.0l-34.313583 0l0 0.1574707l-34.316345 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m223.66797 270.0l-34.313583 0l0 0.1574707l-34.316345 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m325.63187 240.18025l41.858246 0l0 30.015762l-41.858246 0z" fill-rule="evenodd"/><path fill="#212121" d="m339.81937 253.18338l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.1668396 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788757 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm6.95697 -6.8125l-1.75 0l0.546875 1.671875l-0.65625 0.203125l-0.546875 -1.6875l-1.421875 1.046875l-0.421875 -0.53125l1.4375 -1.046875l-1.40625 -1.03125l0.40625 -0.5625l1.421875 1.046875l0.546875 -1.6875l0.640625 0.21875l-0.53125 1.6875l1.734375 0l0 0.671875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m148.02837 239.93272l41.858276 0l0 30.015732l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m162.21587 252.93585l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.1668549 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788605 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.1757355 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#ffffff" d="m7.4356956 352.57742l156.91338 0l0 46.393707l-156.91338 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m7.4356956 352.57742l156.91338 0l0 46.393707l-156.91338 0z" fill-rule="evenodd"/><path fill="#212121" d="m22.27251 370.85052q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm5.2375183 2.515625l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm11.292221 9.328125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384262 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm3.1264648 8.109375l-1.40625 0l0 -13.390625l1.40625 0l0 4.578125q1.484375 -0.703125 2.859375 -0.703125q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.609375 -0.71875q-1.171875 0 -2.28125 0.4375l-0.34375 0.125l0 7.703125zm14.955898 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.8281212 -1.171875 -0.8281212 -3.640625q0 -4.90625 3.8906212 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm6.499527 -3.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm5.7532806 8.265625l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm7.007599 3.171875q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm5.9876556 8.265625l0 -12.90625l2.59375 0l3.65625 10.90625l3.671875 -10.90625l2.578125 0l0 12.90625l-1.421875 0l0 -11.375l-0.265625 0l-3.75 10.90625l-1.609375 0l-3.75 -10.90625l-0.265625 0l0 11.375l-1.4375 0zm21.687286 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm8.349762 -2.90625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm3.1264648 8.109375l-1.40625 0l0 -13.390625l1.40625 0l0 4.578125q1.484375 -0.703125 2.859375 -0.703125q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.609375 -0.71875q-1.171875 0 -2.28125 0.4375l-0.34375 0.125l0 7.703125zm8.205902 -4.671875q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm15.975525 -8.6875l0 13.390625l-1.375 0l0 -0.640625q-1.4375 0.828125 -2.828125 0.828125q-0.75 0 -1.3125 -0.1875q-0.5625 -0.1875 -1.046875 -0.671875q-1.0 -1.0 -1.0 -3.71875q0 -2.71875 0.90625 -3.921875q0.90625 -1.203125 2.984375 -1.203125q1.078125 0 2.296875 0.25l0 -4.125l1.375 0zm-5.484375 11.71875q0.3125 0.34375 0.640625 0.484375q0.34375 0.125 0.875 0.125q0.53125 0 1.1875 -0.171875q0.65625 -0.1875 1.03125 -0.34375l0.375 -0.171875l0 -6.328125q-1.1875 -0.21875 -2.21875 -0.21875q-1.421875 0 -1.984375 0.90625q-0.546875 0.890625 -0.546875 2.796875q0 2.171875 0.640625 2.921875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m85.89239 352.57742l0 -29.559052l333.66928 0l0 -29.559052" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m85.89239 352.57742l0 -29.559052l333.66928 0l0 -22.059052" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m421.75937 300.95932l-2.1976929 -6.038086l-2.1976929 6.038086z" fill-rule="evenodd"/><path fill="#ffffff" d="m832.6412 246.94606l125.00787 0l0 46.393692l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m832.6412 246.94606l125.00787 0l0 46.393692l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m852.8624 277.0629l0 -12.90625l1.4375 0l0 12.90625l-1.4375 0zm5.7612915 0l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm11.534058 -8.265625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.581421 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.267517 -9.328125l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm5.500244 9.328125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm20.534119 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384277 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m895.14514 246.94606l0 -24.920364l-90.92914 0l0 -24.906418" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m895.1451 246.94604l0 -24.92035l-90.92914 0l0 -17.406418" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m806.41364 204.61928l-2.1976929 -6.038101l-2.1976929 6.038101z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m804.20435 150.71115l0 -37.581573l-384.66144 0l0 -37.56804" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m804.2043 150.71114l0 -37.58155l-384.66138 0l0 -30.068047" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m421.74057 83.06154l-2.1976624 -6.0380936l-2.1976929 6.0380936z" fill-rule="evenodd"/><path fill="#ffffff" d="m741.7004 150.71115l125.00787 0l0 46.393692l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m741.7004 150.71115l125.00787 0l0 46.393692l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m782.5461 180.82799l0 -12.90625l7.859375 0l0 1.265625l-6.421875 0l0 4.453125l5.3125 0l0 1.25l-5.3125 0l0 4.671875l6.421875 0l0 1.265625l-7.859375 0zm11.488831 0l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384216 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913879 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm0.84521484 -1.21875l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m713.1564 247.06154l0 -24.978378l91.055115 0l0 -24.97438" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m713.1563 247.06154l0 -24.978363l91.055115 0l0 -17.474396" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m806.4091 204.60878l-2.1976929 -6.038101l-2.1976929 6.038101z" fill-rule="evenodd"/><path fill="#ffffff" d="m650.6524 247.06154l125.00787 0l0 46.393692l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m650.6524 247.06154l125.00787 0l0 46.393692l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m688.7892 265.33463q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm5.237488 2.515625l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm12.677185 1.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.581421 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m713.14874 392.45523l0 -49.5l0.06298828 0l0 -49.492126" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m713.1487 392.45526l0 -49.50003l0.06298828 0l0 -41.992126" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m715.40936 300.9631l-2.1976929 -6.038086l-2.1976318 6.038086z" fill-rule="evenodd"/><path fill="#ffffff" d="m630.3771 392.45523l165.54333 0l0 46.393707l-165.54333 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m630.3771 392.45523l165.54333 0l0 46.393707l-165.54333 0z" fill-rule="evenodd"/><path fill="#212121" d="m651.142 422.36896q-1.921875 0.390625 -3.453125 0.390625q-1.53125 0 -2.484375 -0.421875q-0.9375 -0.421875 -1.453125 -1.296875q-0.5 -0.890625 -0.703125 -2.03125q-0.203125 -1.15625 -0.203125 -2.875q0 -1.71875 0.203125 -2.875q0.203125 -1.171875 0.703125 -2.0625q0.515625 -0.90625 1.453125 -1.3125q0.9375 -0.40625 2.421875 -0.40625q1.5 0 3.515625 0.40625l-0.0625 1.21875q-1.890625 -0.34375 -3.359375 -0.34375q-2.046875 0 -2.71875 1.234375q-0.65625 1.21875 -0.65625 4.15625q0 1.484375 0.109375 2.375q0.125 0.890625 0.484375 1.609375q0.359375 0.71875 1.03125 1.03125q0.6875 0.3125 2.0 0.3125q1.3125 0 3.109375 -0.34375l0.0625 1.234375zm1.5092163 -4.46875q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.225525 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm14.190369 4.140625l0 -13.46875l1.375 0l0 0.671875q1.421875 -0.859375 2.796875 -0.859375q1.78125 0 2.578125 1.140625q0.8125 1.125 0.8125 3.71875q0 2.578125 -0.953125 3.71875q-0.9375 1.125 -3.125 1.125q-1.140625 0 -2.078125 -0.203125l0 4.15625l-1.40625 0zm3.96875 -12.40625q-0.5625 0 -1.203125 0.1875q-0.640625 0.1875 -1.015625 0.375l-0.34375 0.1875l0 6.28125q1.3125 0.203125 2.0 0.203125q1.515625 0 2.125 -0.859375q0.609375 -0.859375 0.609375 -2.796875q0 -1.9375 -0.5625 -2.75q-0.546875 -0.828125 -1.609375 -0.828125zm5.456848 3.59375q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm11.74115 -3.5625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm5.753296 8.265625l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913818 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.3154907 -6.640625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm5.237488 2.515625l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm12.677185 1.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.581421 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#ffffff" d="m279.1811 392.57742l243.93701 0l0 46.393707l-243.93701 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m279.1811 392.57742l243.93701 0l0 46.393707l-243.93701 0z" fill-rule="evenodd"/><path fill="#212121" d="m299.47995 422.49115q-1.921875 0.390625 -3.453125 0.390625q-1.53125 0 -2.484375 -0.421875q-0.9375 -0.421875 -1.453125 -1.296875q-0.5 -0.890625 -0.703125 -2.03125q-0.203125 -1.15625 -0.203125 -2.875q0 -1.71875 0.203125 -2.875q0.203125 -1.171875 0.703125 -2.0625q0.515625 -0.90625 1.453125 -1.3125q0.9375 -0.40625 2.421875 -0.40625q1.5 0 3.515625 0.40625l-0.0625 1.21875q-1.890625 -0.34375 -3.359375 -0.34375q-2.046875 0 -2.71875 1.234375q-0.65625 1.21875 -0.65625 4.15625q0 1.484375 0.109375 2.375q0.125 0.890625 0.484375 1.609375q0.359375 0.71875 1.03125 1.03125q0.6875 0.3125 2.0 0.3125q1.3125 0 3.109375 -0.34375l0.0625 1.234375zm1.5092163 -4.46875q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.225494 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm14.190399 4.140625l0 -13.46875l1.375 0l0 0.671875q1.421875 -0.859375 2.796875 -0.859375q1.78125 0 2.578125 1.140625q0.8125 1.125 0.8125 3.71875q0 2.578125 -0.953125 3.71875q-0.9375 1.125 -3.125 1.125q-1.140625 0 -2.078125 -0.203125l0 4.15625l-1.40625 0zm3.96875 -12.40625q-0.5625 0 -1.203125 0.1875q-0.640625 0.1875 -1.015625 0.375l-0.34375 0.1875l0 6.28125q1.3125 0.203125 2.0 0.203125q1.515625 0 2.125 -0.859375q0.609375 -0.859375 0.609375 -2.796875q0 -1.9375 -0.5625 -2.75q-0.546875 -0.828125 -1.609375 -0.828125zm5.456848 3.59375q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm11.741119 -3.5625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm5.753296 8.265625l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913849 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.31546 -6.640625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm5.2375183 2.515625l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm12.677185 1.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.58139 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm15.862274 -4.9375l0 4.9375l-1.4375 0l0 -12.90625l4.78125 0q2.046875 0 3.078125 0.953125q1.046875 0.953125 1.046875 2.953125q0 3.0 -2.375 3.75l2.484375 5.25l-1.578125 0l-2.34375 -4.9375l-3.65625 0zm3.359375 -1.28125q2.640625 0 2.640625 -2.703125q0 -2.71875 -2.65625 -2.71875l-3.34375 0l0 5.421875l3.359375 0zm12.636719 5.0625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm5.374542 -2.90625l0 8.109375l-1.40625 0l0 -8.109375l-1.171875 0l0 -1.21875l1.171875 0l0 -0.84375q0 -1.96875 0.5625 -2.6875q0.5625 -0.71875 1.953125 -0.71875l1.890625 0.125l-0.015625 1.15625q-1.046875 -0.03125 -1.734375 -0.03125q-0.671875 0 -0.96875 0.453125q-0.28125 0.4375 -0.28125 1.71875l0 0.828125l2.703125 0l0 1.21875l-2.703125 0zm10.554077 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm3.5776367 5.203125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.612152 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm12.096527 -9.515625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm10.8815 8.359375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m542.9516 406.02625l65.82678 0l0 19.40158l-65.82678 0z" fill-rule="evenodd"/><path fill="#212121" d="m545.17316 421.38626l0 -8.0l1.1875 0l0 1.09375q1.390625 -0.96875 2.921875 -1.265625l0 1.21875q-0.671875 0.125 -1.40625 0.40625q-0.71875 0.265625 -1.109375 0.46875l-0.390625 0.203125l0 5.875l-1.203125 0zm10.813538 -0.984375l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm4.611267 -2.484375l0 6.953125l-1.203125 0l0 -6.953125l-1.0 0l0 -1.046875l1.0 0l0 -0.71875q0 -1.703125 0.484375 -2.3125q0.484375 -0.609375 1.671875 -0.609375l1.625 0.109375l-0.015625 0.984375q-0.890625 -0.03125 -1.484375 -0.03125q-0.578125 0 -0.828125 0.390625q-0.25 0.375 -0.25 1.484375l0 0.703125l2.328125 0l0 1.046875l-2.328125 0zm9.058228 5.96875l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm3.080017 4.46875l0 -8.0l1.1875 0l0 1.09375q1.390625 -0.96875 2.921875 -1.265625l0 1.21875q-0.671875 0.125 -1.40625 0.40625q-0.71875 0.265625 -1.109375 0.46875l-0.390625 0.203125l0 5.875l-1.203125 0zm10.813538 -0.984375l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm4.283142 4.46875l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.28125 -0.71875 2.46875 -0.71875q1.609375 0 2.15625 0.859375q0.546875 0.859375 0.546875 3.078125l0 4.21875l-1.171875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.328125 -0.625 -1.40625 -0.625q-0.515625 0 -1.09375 0.15625q-0.5625 0.15625 -0.859375 0.296875l-0.296875 0.140625l0 6.5zm10.37323 -8.15625q0.53125 0 1.796875 0.1875l0.375 0.046875l-0.046875 0.984375q-1.28125 -0.15625 -1.875 -0.15625q-1.359375 0 -1.859375 0.65625q-0.484375 0.640625 -0.484375 2.40625q0 1.75 0.453125 2.4375q0.453125 0.6875 1.90625 0.6875l1.875 -0.15625l0.0625 1.0q-1.5 0.21875 -2.234375 0.21875q-1.875 0 -2.59375 -0.953125q-0.703125 -0.96875 -0.703125 -3.234375q0 -2.28125 0.765625 -3.203125q0.78125 -0.921875 2.5625 -0.921875zm9.33313 7.171875l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m200.41602 405.95013l58.92914 0l0 19.40158l-58.92914 0z" fill-rule="evenodd"/><path fill="#212121" d="m205.29677 414.21637q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625zm10.580643 1.515625l0 4.09375q0.046875 0.59375 0.9375 0.703125l-0.046875 0.9375q-1.265625 0 -1.90625 -0.640625q-1.4375 0.640625 -2.890625 0.640625q-1.09375 0 -1.671875 -0.625q-0.578125 -0.625 -0.578125 -1.78125q0 -1.171875 0.59375 -1.71875q0.59375 -0.5625 1.859375 -0.6875l2.5 -0.234375l0 -0.6875q0 -0.828125 -0.359375 -1.171875q-0.34375 -0.359375 -0.953125 -0.359375q-1.265625 0 -2.65625 0.171875l-0.484375 0.046875l-0.046875 -0.921875q1.75 -0.34375 3.109375 -0.34375q1.359375 0 1.96875 0.625q0.625 0.625 0.625 1.953125zm-4.921875 3.265625q0 1.46875 1.21875 1.46875q1.078125 0 2.140625 -0.375l0.359375 -0.125l0 -2.640625l-2.359375 0.21875q-0.71875 0.0625 -1.046875 0.421875q-0.3125 0.359375 -0.3125 1.03125zm8.500397 2.3125l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.1875 -0.71875 2.328125 -0.71875q1.484375 0 2.078125 0.8125q0.53125 -0.3125 1.359375 -0.5625q0.84375 -0.25 1.484375 -0.25q1.609375 0 2.15625 0.859375q0.546875 0.84375 0.546875 3.078125l0 4.21875l-1.1875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.3125 -0.625 -1.359375 -0.625q-0.53125 0 -1.09375 0.15625q-0.546875 0.15625 -0.859375 0.296875l-0.296875 0.140625q0.203125 0.53125 0.203125 2.34375l0 4.15625l-1.203125 0l0 -4.125q0 -1.734375 -0.3125 -2.34375q-0.3125 -0.625 -1.359375 -0.625q-0.515625 0 -1.0625 0.15625q-0.53125 0.15625 -0.8125 0.296875l-0.265625 0.140625l0 6.5zm12.172897 3.546875l0 -11.546875l1.1875 0l0 0.578125q1.203125 -0.734375 2.390625 -0.734375q1.515625 0 2.203125 0.96875q0.6875 0.96875 0.6875 3.1875q0 2.21875 -0.8125 3.1875q-0.796875 0.96875 -2.671875 0.96875q-0.96875 0 -1.78125 -0.171875l0 3.5625l-1.203125 0zm3.40625 -10.640625q-0.484375 0 -1.046875 0.171875q-0.546875 0.15625 -0.859375 0.3125l-0.296875 0.15625l0 5.390625q1.125 0.1875 1.71875 0.1875q1.296875 0 1.8125 -0.734375q0.53125 -0.75 0.53125 -2.40625q0 -1.671875 -0.484375 -2.375q-0.46875 -0.703125 -1.375 -0.703125zm5.119522 7.09375l0 -11.484375l1.203125 0l0 11.484375l-1.203125 0zm9.039764 -0.984375l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm5.580017 -2.625q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m259.34515 415.6509l9.917877 0l0 0.12600708l9.924622 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m259.34515 415.6509l9.917877 0l0 0.12600708l9.924622 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m247.3876 385.70044l41.858276 0l0 30.015747l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m261.5751 398.70355l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.1668396 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788757 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.17572 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m515.71155 385.33548l41.858215 0l0 30.015747l-41.858215 0z" fill-rule="evenodd"/><path fill="#212121" d="m529.89905 398.33862l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.166809 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8789062 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.17572 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m596.5582 385.88687l41.858276 0l0 30.015747l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m609.277 398.74936q1.09375 0 1.765625 0.40625q1.453125 0.859375 1.453125 4.265625q0 2.40625 -0.8125 3.40625q-0.796875 1.0 -2.40625 1.0q-1.59375 0 -2.40625 -0.984375q-0.796875 -0.984375 -0.796875 -3.484375q0 -2.515625 0.796875 -3.5625q0.796875 -1.046875 2.40625 -1.046875zm0.015625 0.90625q-0.765625 0 -1.203125 0.328125q-0.9375 0.65625 -0.9375 3.453125q0 1.96875 0.515625 2.734375q0.515625 0.75 1.625 0.75q1.109375 0 1.625 -0.765625q0.515625 -0.765625 0.515625 -2.8125q0 -2.0625 -0.5 -2.875q-0.5 -0.8125 -1.640625 -0.8125zm4.619995 8.03125l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788452 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm6.95697 -6.8125l-1.75 0l0.546875 1.671875l-0.65625 0.203125l-0.546875 -1.6875l-1.421875 1.046875l-0.421875 -0.53125l1.4375 -1.046875l-1.40625 -1.03125l0.40625 -0.5625l1.421875 1.046875l0.546875 -1.6875l0.640625 0.21875l-0.53125 1.6875l1.734375 0l0 0.671875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m482.05518 270.26248l25.000977 0l0 79.44171l-331.63977 0l0 65.94409l25.000992 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m489.18344 270.26248l17.872711 0l0 79.44171l-331.63977 0l0 65.94409l25.000977 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m489.18344 270.26248l-3.128296 -2.1904602l-3.1282654 2.1904602l3.1282654 2.1904297z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m475.57892 239.97798l41.858276 0l0 30.015732l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m489.76642 252.9811l0 8.79689l-1.03125 0l0 -7.6562653l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.1668396 8.79689l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788757 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm6.95697 -6.8125153l-1.75 0l0.546875 1.6718903l-0.65625 0.203125l-0.546875 -1.6875153l-1.421875 1.0468903l-0.421875 -0.53126526l1.4375 -1.046875l-1.40625 -1.03125l0.40625 -0.5625l1.421875 1.046875l0.546875 -1.6875l0.640625 0.21875l-0.53125 1.6875l1.734375 0l0 0.671875z" fill-rule="nonzero"/><path fill="#ffffff" d="m331.5643 461.74802l191.52756 0l0 46.393707l-191.52756 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m331.5643 461.74802l191.52756 0l0 46.393707l-191.52756 0z" fill-rule="evenodd"/><path fill="#212121" d="m345.38242 491.86487l0 -12.90625l1.4375 0l0 12.90625l-1.4375 0zm5.761322 0l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm11.534027 -8.265625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.58139 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.267578 -9.328125l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm5.5002136 9.328125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm20.534119 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.983917 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384247 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm3.3920898 3.171875l0 4.9375l-1.4375 0l0 -12.90625l4.78125 0q2.046875 0 3.078125 0.953125q1.046875 0.953125 1.046875 2.953125q0 3.0 -2.375 3.75l2.484375 5.25l-1.578125 0l-2.34375 -4.9375l-3.65625 0zm3.359375 -1.28125q2.640625 0 2.640625 -2.703125q0 -2.71875 -2.65625 -2.71875l-3.34375 0l0 5.421875l3.359375 0zm12.636749 5.0625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm5.3745117 -2.90625l0 8.109375l-1.40625 0l0 -8.109375l-1.171875 0l0 -1.21875l1.171875 0l0 -0.84375q0 -1.96875 0.5625 -2.6875q0.5625 -0.71875 1.953125 -0.71875l1.890625 0.125l-0.015625 1.15625q-1.046875 -0.03125 -1.734375 -0.03125q-0.671875 0 -0.96875 0.453125q-0.28125 0.4375 -0.28125 1.71875l0 0.828125l2.703125 0l0 1.21875l-2.703125 0zm10.554077 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm3.5776672 5.203125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.612122 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.983917 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm12.096527 -9.515625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm10.88147 8.359375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m726.9516 475.19684l65.82678 0l0 19.40158l-65.82678 0z" fill-rule="evenodd"/><path fill="#212121" d="m729.17316 490.55685l0 -8.0l1.1875 0l0 1.09375q1.390625 -0.96875 2.921875 -1.265625l0 1.21875q-0.671875 0.125 -1.40625 0.40625q-0.71875 0.265625 -1.109375 0.46875l-0.390625 0.203125l0 5.875l-1.203125 0zm10.813538 -0.984375l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm4.611267 -2.484375l0 6.953125l-1.203125 0l0 -6.953125l-1.0 0l0 -1.046875l1.0 0l0 -0.71875q0 -1.703125 0.484375 -2.3125q0.484375 -0.609375 1.671875 -0.609375l1.625 0.109375l-0.015625 0.984375q-0.890625 -0.03125 -1.484375 -0.03125q-0.578125 0 -0.828125 0.390625q-0.25 0.375 -0.25 1.484375l0 0.703125l2.328125 0l0 1.046875l-2.328125 0zm9.058228 5.96875l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm3.080017 4.46875l0 -8.0l1.1875 0l0 1.09375q1.390625 -0.96875 2.921875 -1.265625l0 1.21875q-0.671875 0.125 -1.40625 0.40625q-0.71875 0.265625 -1.109375 0.46875l-0.390625 0.203125l0 5.875l-1.203125 0zm10.813538 -0.984375l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm4.283142 4.46875l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.28125 -0.71875 2.46875 -0.71875q1.609375 0 2.15625 0.859375q0.546875 0.859375 0.546875 3.078125l0 4.21875l-1.171875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.328125 -0.625 -1.40625 -0.625q-0.515625 0 -1.09375 0.15625q-0.5625 0.15625 -0.859375 0.296875l-0.296875 0.140625l0 6.5zm10.37323 -8.15625q0.53125 0 1.796875 0.1875l0.375 0.046875l-0.046875 0.984375q-1.28125 -0.15625 -1.875 -0.15625q-1.359375 0 -1.859375 0.65625q-0.484375 0.640625 -0.484375 2.40625q0 1.75 0.453125 2.4375q0.453125 0.6875 1.90625 0.6875l1.875 -0.15625l0.0625 1.0q-1.5 0.21875 -2.234375 0.21875q-1.875 0 -2.59375 -0.953125q-0.703125 -0.96875 -0.703125 -3.234375q0 -2.28125 0.765625 -3.203125q0.78125 -0.921875 2.5625 -0.921875zm9.33313 7.171875l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m204.59576 475.12073l86.77167 0l0 19.40158l-86.77167 0z" fill-rule="evenodd"/><path fill="#212121" d="m208.01776 490.48074l0 -8.0l1.203125 0l0 8.0l-1.203125 0zm0 -9.8125l0 -1.390625l1.203125 0l0 1.390625l-1.203125 0zm4.707138 9.8125l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.28125 -0.71875 2.46875 -0.71875q1.609375 0 2.15625 0.859375q0.546875 0.859375 0.546875 3.078125l0 4.21875l-1.171875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.328125 -0.625 -1.40625 -0.625q-0.515625 0 -1.09375 0.15625q-0.5625 0.15625 -0.859375 0.296875l-0.296875 0.140625l0 6.5zm9.8888855 -7.09375q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625zm9.080643 0.140625l-2.546875 0l0 3.8125q0 1.375 0.203125 1.8125q0.203125 0.4375 0.953125 0.4375l1.421875 -0.09375l0.078125 0.984375q-1.0625 0.171875 -1.625 0.171875q-1.25 0 -1.734375 -0.609375q-0.484375 -0.609375 -0.484375 -2.3125l0 -4.203125l-1.125 0l0 -1.046875l1.125 0l0 -2.453125l1.1875 0l0 2.453125l2.546875 0l0 1.046875zm1.4753876 6.953125l0 -8.0l1.1875 0l0 1.09375q1.390625 -0.96875 2.921875 -1.265625l0 1.21875q-0.671875 0.125 -1.40625 0.40625q-0.71875 0.265625 -1.109375 0.46875l-0.390625 0.203125l0 5.875l-1.203125 0zm10.520386 -8.0l1.203125 0l0 8.0l-1.203125 0l0 -0.5625q-1.203125 0.71875 -2.359375 0.71875q-1.640625 0 -2.171875 -0.84375q-0.53125 -0.84375 -0.53125 -3.140625l0 -4.171875l1.1875 0l0 4.15625q0 1.75 0.296875 2.34375q0.3125 0.59375 1.390625 0.59375q0.53125 0 1.0625 -0.15625q0.546875 -0.15625 0.84375 -0.296875l0.28125 -0.140625l0 -6.5zm4.7147675 8.0l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.1875 -0.71875 2.328125 -0.71875q1.484375 0 2.078125 0.8125q0.53125 -0.3125 1.359375 -0.5625q0.84375 -0.25 1.484375 -0.25q1.609375 0 2.15625 0.859375q0.546875 0.84375 0.546875 3.078125l0 4.21875l-1.1875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.3125 -0.625 -1.359375 -0.625q-0.53125 0 -1.09375 0.15625q-0.546875 0.15625 -0.859375 0.296875l-0.296875 0.140625q0.203125 0.53125 0.203125 2.34375l0 4.15625l-1.203125 0l0 -4.125q0 -1.734375 -0.3125 -2.34375q-0.3125 -0.625 -1.359375 -0.625q-0.515625 0 -1.0625 0.15625q-0.53125 0.15625 -0.8125 0.296875l-0.265625 0.140625l0 6.5zm17.610413 -0.984375l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm4.283142 4.46875l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.28125 -0.71875 2.46875 -0.71875q1.609375 0 2.15625 0.859375q0.546875 0.859375 0.546875 3.078125l0 4.21875l-1.171875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.328125 -0.625 -1.40625 -0.625q-0.515625 0 -1.09375 0.15625q-0.5625 0.15625 -0.859375 0.296875l-0.296875 0.140625l0 6.5zm11.481506 -6.953125l-2.546875 0l0 3.8125q0 1.375 0.203125 1.8125q0.203125 0.4375 0.953125 0.4375l1.421875 -0.09375l0.078125 0.984375q-1.0625 0.171875 -1.625 0.171875q-1.25 0 -1.734375 -0.609375q-0.484375 -0.609375 -0.484375 -2.3125l0 -4.203125l-1.125 0l0 -1.046875l1.125 0l0 -2.453125l1.1875 0l0 2.453125l2.546875 0l0 1.046875zm3.9753723 -0.140625q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m298.34146 454.87103l41.858246 0l0 30.015747l-41.858246 0z" fill-rule="evenodd"/><path fill="#212121" d="m312.52896 467.87418l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.1668396 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788757 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.17572 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m515.71155 454.5061l41.858215 0l0 30.015747l-41.858215 0z" fill-rule="evenodd"/><path fill="#212121" d="m529.89905 467.50922l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.166809 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8789062 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.17572 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m801.35913 240.0398l41.858276 0l0 30.015747l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m814.0779 252.90228q1.09375 0 1.765625 0.40625q1.453125 0.859375 1.453125 4.265625q0 2.40625 -0.8125 3.40625q-0.796875 1.0 -2.40625 1.0q-1.59375 0 -2.40625 -0.984375q-0.796875 -0.984375 -0.796875 -3.484375q0 -2.515625 0.796875 -3.5625q0.796875 -1.046875 2.40625 -1.046875zm0.015625 0.90625q-0.765625 0 -1.203125 0.328125q-0.9375 0.65625 -0.9375 3.453125q0 1.96875 0.515625 2.734375q0.515625 0.75 1.625 0.75q1.109375 0 1.625 -0.765625q0.515625 -0.765625 0.515625 -2.8125q0 -2.0625 -0.5 -2.875q-0.5 -0.8125 -1.640625 -0.8125zm4.619995 8.03125l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788452 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm6.9570312 -6.8125l-1.75 0l0.546875 1.671875l-0.65625 0.203125l-0.546875 -1.6875l-1.421875 1.046875l-0.421875 -0.53125l1.4375 -1.046875l-1.40625 -1.03125l0.40625 -0.5625l1.421875 1.046875l0.546875 -1.6875l0.640625 0.21875l-0.53125 1.6875l1.734375 0l0 0.671875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m200.41602 415.6509l-25.00003 0l0 69.165375l29.188995 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m200.41602 415.6509l-25.00003 0l0 69.165375l29.188995 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m291.37534 484.8189l20.094482 0l0 0.12597656l20.094482 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m291.37534 484.8189l20.094482 0l0 0.12597656l20.094482 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m523.1181 415.7743l9.916687 0l0 0.06298828l9.925842 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m523.1181 415.7743l9.916687 0l0 0.06298828l9.925842 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m608.7784 415.72702l10.799255 0l0 -0.06298828l10.807007 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m608.7784 415.72702l10.799255 0l0 -0.06298828l6.4259033 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m626.00354 415.66403l-1.6705322 1.6705627l4.5897827 -1.6705627l-4.5897827 -1.6705322z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m523.09186 484.9449l101.92883 0l0 0.06298828l101.94519 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m523.09186 484.9449l101.92883 0l0 0.06298828l101.94519 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m792.7784 484.89764l19.931396 0l0 -214.74017l19.942627 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m792.7784 484.89764l19.931458 0l0 -214.74017l15.561401 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m828.27124 270.15747l-1.6705322 1.6705627l4.5897827 -1.6705627l-4.5897827 -1.6705322z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 79.01349l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m745.61945 79.01349l192.09052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m937.70996 81.211174l6.038086 -2.1976852l-6.038086 -2.1976929z" fill-rule="evenodd"/><path fill="#ffffff" d="m799.1627 62.209972l92.50397 0l0 30.70866l-92.50397 0z" fill-rule="evenodd"/><path fill="#212121" d="m806.0565 83.804306l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm5.091675 10.625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm9.305176 0l-1.296875 0l0 -12.4375l1.296875 0l0 4.265625q1.390625 -0.671875 2.671875 -0.671875q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.296875 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.5 -0.671875q-1.078125 0 -2.109375 0.390625l-0.328125 0.125l0 7.15625zm13.898865 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm3.3287964 4.828125l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm5.9954834 0l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm8.279236 3.09375l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125zm7.7070923 1.484375l0 4.4375q0.0625 0.640625 1.015625 0.765625l-0.0625 1.015625q-1.359375 0 -2.0625 -0.6875q-1.546875 0.6875 -3.109375 0.6875q-1.203125 0 -1.828125 -0.671875q-0.625 -0.671875 -0.625 -1.9375q0 -1.265625 0.640625 -1.859375q0.640625 -0.609375 2.015625 -0.75l2.71875 -0.25l0 -0.75q0 -0.890625 -0.390625 -1.265625q-0.375 -0.375 -1.03125 -0.375q-1.390625 0 -2.875 0.171875l-0.53125 0.046875l-0.0625 -0.984375q1.90625 -0.390625 3.375 -0.390625q1.484375 0 2.140625 0.6875q0.671875 0.671875 0.671875 2.109375zm-5.328125 3.53125q0 1.59375 1.3125 1.59375q1.171875 0 2.328125 -0.390625l0.390625 -0.140625l0 -2.859375l-2.5625 0.234375q-0.78125 0.078125 -1.125 0.46875q-0.34375 0.375 -0.34375 1.09375zm9.19696 2.515625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm11.242676 -8.84375q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm10.107239 7.765625l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 53.299213l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m752.7477 53.299213l192.46228 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m752.7477 53.299213l-3.1282349 -2.190445l-3.128296 2.190445l3.128296 2.1904411z" fill-rule="evenodd"/><path fill="#ffffff" d="m794.0761 36.0506l102.677185 0l0 30.708664l-102.677185 0z" fill-rule="evenodd"/><path fill="#212121" d="m803.7546 48.801178q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm3.8260498 4.5q0 -2.375 0.84375 -3.4375q0.859375 -1.0625 2.875 -1.0625q2.03125 0 2.859375 1.0625q0.84375 1.0625 0.84375 3.4375q0 2.375 -0.796875 3.453125q-0.796875 1.0625 -2.921875 1.0625q-2.109375 0 -2.90625 -1.0625q-0.796875 -1.078125 -0.796875 -3.453125zm1.34375 -0.03125q0 1.890625 0.453125 2.65625q0.46875 0.765625 1.921875 0.765625q1.46875 0 1.921875 -0.75q0.453125 -0.75 0.453125 -2.65625q0 -1.90625 -0.515625 -2.625q-0.5 -0.734375 -1.859375 -0.734375q-1.359375 0 -1.875 0.734375q-0.5 0.71875 -0.5 2.609375zm9.49292 4.375l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm12.440674 -7.53125l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125zm7.7070923 1.484375l0 4.4375q0.0625 0.640625 1.015625 0.765625l-0.0625 1.015625q-1.359375 0 -2.0625 -0.6875q-1.546875 0.6875 -3.109375 0.6875q-1.203125 0 -1.828125 -0.671875q-0.625 -0.671875 -0.625 -1.9375q0 -1.265625 0.640625 -1.859375q0.640625 -0.609375 2.015625 -0.75l2.71875 -0.25l0 -0.75q0 -0.890625 -0.390625 -1.265625q-0.375 -0.375 -1.03125 -0.375q-1.390625 0 -2.875 0.171875l-0.53125 0.046875l-0.0625 -0.984375q1.90625 -0.390625 3.375 -0.390625q1.484375 0 2.140625 0.6875q0.671875 0.671875 0.671875 2.109375zm-5.328125 3.53125q0 1.59375 1.3125 1.59375q1.171875 0 2.328125 -0.390625l0.390625 -0.140625l0 -2.859375l-2.5625 0.234375q-0.78125 0.078125 -1.125 0.46875q-0.34375 0.375 -0.34375 1.09375zm7.9000854 2.515625l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm5.091736 10.625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm9.305115 0l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.296875 -0.78125 2.53125 -0.78125q1.609375 0 2.25 0.890625q0.578125 -0.34375 1.484375 -0.609375q0.90625 -0.28125 1.59375 -0.28125q1.734375 0 2.328125 0.9375q0.609375 0.921875 0.609375 3.328125l0 4.578125l-1.296875 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.46875 -0.671875q-0.5625 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625q0.21875 0.5625 0.21875 2.53125l0 4.5l-1.296875 0l0 -4.46875q0 -1.875 -0.34375 -2.53125q-0.328125 -0.671875 -1.46875 -0.671875q-0.5625 0 -1.140625 0.171875q-0.578125 0.15625 -0.890625 0.3125l-0.296875 0.15625l0 7.03125zm19.080017 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.6256104 4.828125l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm12.440674 -7.53125l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 26.695538l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m745.61945 26.695538l195.20935 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m940.82886 26.695538l-1.6705322 1.6705399l4.5897217 -1.6705399l-4.5897217 -1.670538z" fill-rule="evenodd"/><path fill="#ffffff" d="m805.17847 9.368585l80.47247 0l0 30.70866l-80.47247 0z" fill-rule="evenodd"/><path fill="#212121" d="m812.17334 30.962914l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm11.71283 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.9849854 -2.703125l0 7.53125l-1.296875 0l0 -7.53125l-1.09375 0l0 -1.125l1.09375 0l0 -0.78125q0 -1.84375 0.515625 -2.5q0.53125 -0.671875 1.828125 -0.671875l1.75 0.109375l-0.015625 1.078125q-0.96875 -0.03125 -1.609375 -0.03125q-0.625 0 -0.90625 0.421875q-0.265625 0.40625 -0.265625 1.609375l0 0.765625l2.515625 0l0 1.125l-2.515625 0zm9.813965 6.453125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm3.3287964 4.828125l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm11.712769 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.6256714 4.828125l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm11.242615 -8.84375q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm10.1073 7.765625l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0z" fill-rule="nonzero"/></g></svg> \ No newline at end of file diff --git a/docs/schemas/rows.png b/docs/schemas/rows.png new file mode 100644 index 0000000000000000000000000000000000000000..5ccb774dcb73c71195aac63203a0f0a29961d72d Binary files /dev/null and b/docs/schemas/rows.png differ diff --git a/docs/schemas/rows_subsection.png b/docs/schemas/rows_subsection.png new file mode 100644 index 0000000000000000000000000000000000000000..79195547e844de1f2f08e64bcda6c317e4d23189 Binary files /dev/null and b/docs/schemas/rows_subsection.png differ diff --git a/docs/schemas/system-sections.svg b/docs/schemas/system-sections.svg new file mode 100644 index 0000000000000000000000000000000000000000..5dcfe985718331d56a5030ced914e4bd5c3719a7 --- /dev/null +++ b/docs/schemas/system-sections.svg @@ -0,0 +1 @@ +<svg version="1.1" viewBox="0.0 0.0 960.0 540.0" fill="none" stroke="none" stroke-linecap="square" stroke-miterlimit="10" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><clipPath id="g259c0dcbce4_0_0.0"><path d="m0 0l960.0 0l0 540.0l-960.0 0l0 -540.0z" clip-rule="nonzero"/></clipPath><g clip-path="url(#g259c0dcbce4_0_0.0)"><path fill="#ffffff" d="m0 0l960.0 0l0 540.0l-960.0 0z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m717.5591 245.2336l0 -31.72847l-245.44885 0l0 -31.7361" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m717.5591 245.2336l0 -31.72847l-245.44885 0l0 -24.2361" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m474.30792 189.26903l-2.1976929 -6.038101l-2.1976929 6.038101z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m452.37796 245.15486l0 -31.688843l19.716522 0l0 -31.681244" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m452.37796 245.15486l0 -31.688843l19.716522 0l0 -24.181244" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m474.29218 189.28477l-2.1976929 -6.038101l-2.1976929 6.038101z" fill-rule="evenodd"/><path fill="#ffffff" d="m370.14172 245.15486l164.47247 0l0 46.393692l-164.47247 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m370.14172 245.15486l164.47247 0l0 46.393692l-164.47247 0z" fill-rule="evenodd"/><path fill="#212121" d="m390.37128 275.06857q-1.921875 0.390625 -3.453125 0.390625q-1.53125 0 -2.484375 -0.421875q-0.9375 -0.421875 -1.453125 -1.296875q-0.5 -0.890625 -0.703125 -2.03125q-0.203125 -1.15625 -0.203125 -2.875q0 -1.71875 0.203125 -2.875q0.203125 -1.171875 0.703125 -2.0625q0.515625 -0.90625 1.453125 -1.3125q0.9375 -0.40625 2.421875 -0.40625q1.5 0 3.515625 0.40625l-0.0625 1.21875q-1.890625 -0.34375 -3.359375 -0.34375q-2.046875 0 -2.71875 1.234375q-0.65625 1.21875 -0.65625 4.15625q0 1.484375 0.109375 2.375q0.125 0.890625 0.484375 1.609375q0.359375 0.71875 1.03125 1.03125q0.6875 0.3125 2.0 0.3125q1.3125 0 3.109375 -0.34375l0.0625 1.234375zm1.5091858 -4.46875q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.225525 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm14.190369 4.140625l0 -13.46875l1.375 0l0 0.671875q1.421875 -0.859375 2.796875 -0.859375q1.78125 0 2.578125 1.140625q0.8125 1.125 0.8125 3.71875q0 2.578125 -0.953125 3.71875q-0.9375 1.125 -3.125 1.125q-1.140625 0 -2.078125 -0.203125l0 4.15625l-1.40625 0zm3.96875 -12.40625q-0.5625 0 -1.203125 0.1875q-0.640625 0.1875 -1.015625 0.375l-0.34375 0.1875l0 6.28125q1.3125 0.203125 2.0 0.203125q1.515625 0 2.125 -0.859375q0.609375 -0.859375 0.609375 -2.796875q0 -1.9375 -0.5625 -2.75q-0.546875 -0.828125 -1.609375 -0.828125zm5.456848 3.59375q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm11.74115 -3.5625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm5.7532654 8.265625l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913849 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.3154907 -6.640625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm5.2375183 2.515625l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm12.677155 1.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.581421 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.4062805 -0.84375 2.7344055 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.6250305 0.171875 -0.9531555 0.328125l-0.3125 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#ffffff" d="m409.6063 135.38321l125.007904 0l0 46.393692l-125.007904 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m409.6063 135.38321l125.007904 0l0 46.393692l-125.007904 0z" fill-rule="evenodd"/><path fill="#212121" d="m447.74307 153.6563q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm5.2375183 2.515625l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm12.677155 1.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.581421 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#ffffff" d="m93.26752 245.35957l125.00787 0l0 46.393723l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m93.26752 245.35957l125.00787 0l0 46.393723l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m119.6409 275.27332q-1.921875 0.390625 -3.453125 0.390625q-1.53125 0 -2.484375 -0.421875q-0.9375 -0.421875 -1.453125 -1.296875q-0.5 -0.890625 -0.703125 -2.03125q-0.203125 -1.15625 -0.203125 -2.875q0 -1.71875 0.203125 -2.875q0.203125 -1.171875 0.703125 -2.0625q0.515625 -0.90625 1.453125 -1.3125q0.9375 -0.40625 2.421875 -0.40625q1.5 0 3.515625 0.40625l-0.0625 1.21875q-1.890625 -0.34375 -3.359375 -0.34375q-2.046875 0 -2.71875 1.234375q-0.65625 1.21875 -0.65625 4.15625q0 1.484375 0.109375 2.375q0.125 0.890625 0.484375 1.609375q0.359375 0.71875 1.03125 1.03125q0.6875 0.3125 2.0 0.3125q1.3125 0 3.109375 -0.34375l0.0625 1.234375zm1.509201 -4.46875q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.22551 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm14.190384 4.140625l0 -13.46875l1.375 0l0 0.671875q1.421875 -0.859375 2.796875 -0.859375q1.78125 0 2.578125 1.140625q0.8125 1.125 0.8125 3.71875q0 2.578125 -0.953125 3.71875q-0.9375 1.125 -3.125 1.125q-1.140625 0 -2.078125 -0.203125l0 4.15625l-1.40625 0zm3.96875 -12.40625q-0.5625 0 -1.203125 0.1875q-0.640625 0.1875 -1.015625 0.375l-0.34375 0.1875l0 6.28125q1.3125 0.203125 2.0 0.203125q1.515625 0 2.125 -0.859375q0.609375 -0.859375 0.609375 -2.796875q0 -1.9375 -0.5625 -2.75q-0.546875 -0.828125 -1.609375 -0.828125zm5.456848 3.59375q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.22551 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm14.955902 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.983902 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384262 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875z" fill-rule="nonzero"/><path fill="#ffffff" d="m240.92389 340.96063l230.4567 0l0 46.393707l-230.4567 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m240.92389 340.96063l230.4567 0l0 46.393707l-230.4567 0z" fill-rule="evenodd"/><path fill="#212121" d="m257.71942 366.73373l-3.296875 0l0 4.34375l-1.4375 0l0 -12.90625l4.734375 0q2.09375 0 3.09375 1.03125q1.015625 1.015625 1.015625 3.125q0 4.40625 -4.109375 4.40625zm-3.296875 -1.265625l3.265625 0q2.671875 0 2.671875 -3.140625q0 -1.5 -0.640625 -2.1875q-0.625 -0.703125 -2.03125 -0.703125l-3.265625 0l0 6.03125zm15.203766 -3.71875l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm4.0939636 9.328125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.612152 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.31546 -6.640625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm12.111694 2.515625l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm8.218964 -0.1875q1.875 0 2.625 1.078125q0.765625 1.0625 0.765625 3.75q0 2.6875 -0.9375 3.78125q-0.9375 1.09375 -3.46875 1.09375q-0.78125 0 -2.59375 -0.15625l-0.515625 -0.046875l0 -13.375l1.375 0l0 4.53125q1.421875 -0.65625 2.75 -0.65625zm-1.03125 8.453125q1.828125 0 2.40625 -0.828125q0.59375 -0.828125 0.59375 -2.796875q0 -1.984375 -0.46875 -2.78125q-0.453125 -0.796875 -1.65625 -0.796875q-1.078125 0 -2.21875 0.40625l-0.375 0.140625l0 6.5625q1.21875 0.09375 1.71875 0.09375zm9.641327 -7.203125q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.58139 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.29834 1.59375l0 4.78125q0.0625 0.6875 1.09375 0.8125l-0.0625 1.109375q-1.46875 0 -2.21875 -0.75q-1.671875 0.75 -3.359375 0.75q-1.28125 0 -1.953125 -0.71875q-0.671875 -0.734375 -0.671875 -2.09375q0 -1.375 0.6875 -2.015625q0.6875 -0.640625 2.15625 -0.78125l2.9375 -0.28125l0 -0.8125q0 -0.953125 -0.421875 -1.359375q-0.40625 -0.40625 -1.109375 -0.40625q-1.5 0 -3.09375 0.1875l-0.578125 0.046875l-0.0625 -1.0625q2.0625 -0.40625 3.640625 -0.40625q1.59375 0 2.296875 0.734375q0.71875 0.71875 0.71875 2.265625zm-5.734375 3.8125q0 1.71875 1.40625 1.71875q1.28125 0 2.5 -0.4375l0.4375 -0.140625l0 -3.078125l-2.765625 0.25q-0.84375 0.078125 -1.21875 0.5q-0.359375 0.40625 -0.359375 1.1875zm9.909302 2.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm12.096527 -9.515625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm10.88147 8.359375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm11.624542 5.0q-1.921875 0.390625 -3.453125 0.390625q-1.53125 0 -2.484375 -0.421875q-0.9375 -0.421875 -1.453125 -1.296875q-0.5 -0.890625 -0.703125 -2.03125q-0.203125 -1.15625 -0.203125 -2.875q0 -1.71875 0.203125 -2.875q0.203125 -1.171875 0.703125 -2.0625q0.515625 -0.90625 1.453125 -1.3125q0.9375 -0.40625 2.421875 -0.40625q1.5 0 3.515625 0.40625l-0.0625 1.21875q-1.890625 -0.34375 -3.359375 -0.34375q-2.046875 0 -2.71875 1.234375q-0.65625 1.21875 -0.65625 4.15625q0 1.484375 0.109375 2.375q0.125 0.890625 0.484375 1.609375q0.359375 0.71875 1.03125 1.03125q0.6875 0.3125 2.0 0.3125q1.3125 0 3.109375 -0.34375l0.0625 1.234375zm1.5091858 -4.46875q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.225525 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm14.190369 4.140625l0 -13.46875l1.375 0l0 0.671875q1.421875 -0.859375 2.796875 -0.859375q1.78125 0 2.578125 1.140625q0.8125 1.125 0.8125 3.71875q0 2.578125 -0.953125 3.71875q-0.9375 1.125 -3.125 1.125q-1.140625 0 -2.078125 -0.203125l0 4.15625l-1.40625 0zm3.96875 -12.40625q-0.5625 0 -1.203125 0.1875q-0.640625 0.1875 -1.015625 0.375l-0.34375 0.1875l0 6.28125q1.3125 0.203125 2.0 0.203125q1.515625 0 2.125 -0.859375q0.609375 -0.859375 0.609375 -2.796875q0 -1.9375 -0.5625 -2.75q-0.546875 -0.828125 -1.609375 -0.828125zm5.456848 3.59375q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.225525 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm14.955902 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384277 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m120.908134 340.96063l0 -24.603851l34.866142 0l0 -24.592987" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m120.908134 340.96063l0 -24.603851l34.866142 0l0 -17.092987" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m157.97197 299.2638l-2.1976929 -6.0381165l-2.1976929 6.0381165z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m356.15222 340.96063l0 -24.603851l-200.37794 0l0 -24.592987" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m356.15222 340.96063l0 -24.603851l-200.37794 0l0 -17.092987" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m157.97197 299.2638l-2.1976929 -6.0381165l-2.1976929 6.0381165z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m370.07614 268.61942l-16.803131 0l0 -0.06298828l-16.803162 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m362.94788 268.61942l-9.674866 0l0 -0.06298828l-16.803162 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m362.94788 268.61942l3.1282654 2.1904602l3.128296 -2.1904602l-3.128296 -2.1904297z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m471.38058 364.15747l55.637787 0l0 0.06298828l55.637817 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m478.50885 364.15747l48.50952 0l0 0.06298828l55.637817 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m478.50885 364.15747l-3.1282654 -2.1904297l-3.128296 2.1904297l3.128296 2.1904602z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m260.49606 158.5853l74.55118 0l0 0.06300354l74.55118 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m260.49606 158.5853l74.55118 0l0 0.06300354l70.170044 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m405.2173 158.6483l-1.6705322 1.6705322l4.5897827 -1.6705322l-4.5897827 -1.6705475z" fill-rule="evenodd"/><path fill="#ffffff" d="m35.459316 340.96063l170.89763 0l0 46.393707l-170.89763 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m35.459316 340.96063l170.89763 0l0 46.393707l-170.89763 0z" fill-rule="evenodd"/><path fill="#212121" d="m51.019787 359.23373q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm5.2375183 2.515625l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.4062538 0l-3.8750038 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125zm12.677174 1.0625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.581406 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.063965 6.953125l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.983902 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm22.237259 -0.203125q-1.921875 0.390625 -3.453125 0.390625q-1.53125 0 -2.484375 -0.421875q-0.9375 -0.421875 -1.453125 -1.296875q-0.5 -0.890625 -0.703125 -2.03125q-0.203125 -1.15625 -0.203125 -2.875q0 -1.71875 0.203125 -2.875q0.203125 -1.171875 0.703125 -2.0625q0.515625 -0.90625 1.453125 -1.3125q0.9375 -0.40625 2.421875 -0.40625q1.5 0 3.515625 0.40625l-0.0625 1.21875q-1.890625 -0.34375 -3.359375 -0.34375q-2.046875 0 -2.71875 1.234375q-0.65625 1.21875 -0.65625 4.15625q0 1.484375 0.109375 2.375q0.125 0.890625 0.484375 1.609375q0.359375 0.71875 1.03125 1.03125q0.6875 0.3125 2.0 0.3125q1.3125 0 3.109375 -0.34375l0.0625 1.234375zm1.509201 -4.46875q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.22551 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm14.190384 4.140625l0 -13.46875l1.375 0l0 0.671875q1.421875 -0.859375 2.796875 -0.859375q1.78125 0 2.578125 1.140625q0.8125 1.125 0.8125 3.71875q0 2.578125 -0.953125 3.71875q-0.9375 1.125 -3.125 1.125q-1.140625 0 -2.078125 -0.203125l0 4.15625l-1.40625 0zm3.96875 -12.40625q-0.5625 0 -1.203125 0.1875q-0.640625 0.1875 -1.015625 0.375l-0.34375 0.1875l0 6.28125q1.3125 0.203125 2.0 0.203125q1.515625 0 2.125 -0.859375q0.609375 -0.859375 0.609375 -2.796875q0 -1.9375 -0.5625 -2.75q-0.546875 -0.828125 -1.609375 -0.828125zm5.456848 3.59375q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.22551 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm14.955902 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.983902 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384262 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875z" fill-rule="nonzero"/><path fill="#ffffff" d="m690.86615 341.14697l199.59052 0l0 46.393707l-199.59052 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m690.86615 341.14697l199.59052 0l0 46.393707l-199.59052 0z" fill-rule="evenodd"/><path fill="#212121" d="m708.702 366.92007l-3.296875 0l0 4.34375l-1.4375 0l0 -12.90625l4.734375 0q2.09375 0 3.09375 1.03125q1.015625 1.015625 1.015625 3.125q0 4.40625 -4.109375 4.40625zm-3.296875 -1.265625l3.265625 0q2.671875 0 2.671875 -3.140625q0 -1.5 -0.640625 -2.1875q-0.625 -0.703125 -2.03125 -0.703125l-3.265625 0l0 6.03125zm15.203796 -3.71875l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm4.093933 9.328125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.612122 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.3154907 -6.640625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm12.111694 2.515625l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm8.218994 -0.1875q1.875 0 2.625 1.078125q0.765625 1.0625 0.765625 3.75q0 2.6875 -0.9375 3.78125q-0.9375 1.09375 -3.46875 1.09375q-0.78125 0 -2.59375 -0.15625l-0.515625 -0.046875l0 -13.375l1.375 0l0 4.53125q1.421875 -0.65625 2.75 -0.65625zm-1.03125 8.453125q1.828125 0 2.40625 -0.828125q0.59375 -0.828125 0.59375 -2.796875q0 -1.984375 -0.46875 -2.78125q-0.453125 -0.796875 -1.65625 -0.796875q-1.078125 0 -2.21875 0.40625l-0.375 0.140625l0 6.5625q1.21875 0.09375 1.71875 0.09375zm9.641296 -7.203125q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.581421 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.29834 1.59375l0 4.78125q0.0625 0.6875 1.09375 0.8125l-0.0625 1.109375q-1.46875 0 -2.21875 -0.75q-1.671875 0.75 -3.359375 0.75q-1.28125 0 -1.953125 -0.71875q-0.671875 -0.734375 -0.671875 -2.09375q0 -1.375 0.6875 -2.015625q0.6875 -0.640625 2.15625 -0.78125l2.9375 -0.28125l0 -0.8125q0 -0.953125 -0.421875 -1.359375q-0.40625 -0.40625 -1.109375 -0.40625q-1.5 0 -3.09375 0.1875l-0.578125 0.046875l-0.0625 -1.0625q2.0625 -0.40625 3.640625 -0.40625q1.59375 0 2.296875 0.734375q0.71875 0.71875 0.71875 2.265625zm-5.734375 3.8125q0 1.71875 1.40625 1.71875q1.28125 0 2.5 -0.4375l0.4375 -0.140625l0 -3.078125l-2.765625 0.25q-0.84375 0.078125 -1.21875 0.5q-0.359375 0.40625 -0.359375 1.1875zm9.909241 2.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm12.096558 -9.515625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm10.88147 8.359375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.3154907 -6.640625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm12.642944 10.6875l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.0620117 -4.3125q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm9.477905 1.40625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm3.6794434 6.765625q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.225525 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m644.3622 268.43045l-86.70563 0l0 95.71652l25.004883 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m637.23395 268.43045l-79.57739 0l0 95.71652l25.004883 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m637.23395 268.43045l3.1282349 2.1904297l3.128296 -2.1904297l-3.128296 -2.1904602z" fill-rule="evenodd"/><path fill="#ffffff" d="m644.3622 245.2336l146.39374 0l0 46.393692l-146.39374 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m644.3622 245.2336l146.39374 0l0 46.393692l-146.39374 0z" fill-rule="evenodd"/><path fill="#212121" d="m664.6474 271.00668l-3.296875 0l0 4.34375l-1.4375 0l0 -12.90625l4.734375 0q2.09375 0 3.09375 1.03125q1.015625 1.015625 1.015625 3.125q0 4.40625 -4.109375 4.40625zm-3.296875 -1.265625l3.265625 0q2.671875 0 2.671875 -3.140625q0 -1.5 -0.640625 -2.1875q-0.625 -0.703125 -2.03125 -0.703125l-3.265625 0l0 6.03125zm15.203796 -3.71875l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm4.093994 9.328125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.612122 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.3154907 -6.640625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm12.111694 2.515625l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm8.218933 -0.1875q1.875 0 2.625 1.078125q0.765625 1.0625 0.765625 3.75q0 2.6875 -0.9375 3.78125q-0.9375 1.09375 -3.46875 1.09375q-0.78125 0 -2.59375 -0.15625l-0.515625 -0.046875l0 -13.375l1.375 0l0 4.53125q1.421875 -0.65625 2.75 -0.65625zm-1.03125 8.453125q1.828125 0 2.40625 -0.828125q0.59375 -0.828125 0.59375 -2.796875q0 -1.984375 -0.46875 -2.78125q-0.453125 -0.796875 -1.65625 -0.796875q-1.078125 0 -2.21875 0.40625l-0.375 0.140625l0 6.5625q1.21875 0.09375 1.71875 0.09375zm9.641296 -7.203125q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.581421 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.29834 1.59375l0 4.78125q0.0625 0.6875 1.09375 0.8125l-0.0625 1.109375q-1.46875 0 -2.21875 -0.75q-1.671875 0.75 -3.359375 0.75q-1.28125 0 -1.953125 -0.71875q-0.671875 -0.734375 -0.671875 -2.09375q0 -1.375 0.6875 -2.015625q0.6875 -0.640625 2.15625 -0.78125l2.9375 -0.28125l0 -0.8125q0 -0.953125 -0.421875 -1.359375q-0.40625 -0.40625 -1.109375 -0.40625q-1.5 0 -3.09375 0.1875l-0.578125 0.046875l-0.0625 -1.0625q2.0625 -0.40625 3.640625 -0.40625q1.59375 0 2.296875 0.734375q0.71875 0.71875 0.71875 2.265625zm-5.734375 3.8125q0 1.71875 1.40625 1.71875q1.28125 0 2.5 -0.4375l0.4375 -0.140625l0 -3.078125l-2.765625 0.25q-0.84375 0.078125 -1.21875 0.5q-0.359375 0.40625 -0.359375 1.1875zm9.909302 2.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm12.096497 -9.515625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm10.881531 8.359375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m556.4095 445.042l0 -28.750732l234.2362 0l0 -28.761078" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m556.4094 445.042l0 -28.750732l234.23627 0l0 -21.261078" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m792.8434 395.03018l-2.1976929 -6.038086l-2.1976929 6.038086z" fill-rule="evenodd"/><path fill="#ffffff" d="m417.29135 445.042l278.23624 0l0 46.393707l-278.23624 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m417.29135 445.042l278.23624 0l0 46.393707l-278.23624 0z" fill-rule="evenodd"/><path fill="#212121" d="m436.46594 470.8151l-3.296875 0l0 4.34375l-1.4375 0l0 -12.90625l4.734375 0q2.09375 0 3.09375 1.03125q1.015625 1.015625 1.015625 3.125q0 4.40625 -4.109375 4.40625zm-3.296875 -1.265625l3.265625 0q2.671875 0 2.671875 -3.140625q0 -1.5 -0.640625 -2.1875q-0.625 -0.703125 -2.03125 -0.703125l-3.265625 0l0 6.03125zm15.203766 -3.71875l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm8.218964 -0.1875q1.875 0 2.625 1.078125q0.765625 1.0625 0.765625 3.75q0 2.6875 -0.9375 3.78125q-0.9375 1.09375 -3.46875 1.09375q-0.78125 0 -2.59375 -0.15625l-0.515625 -0.046875l0 -13.375l1.375 0l0 4.53125q1.421875 -0.65625 2.75 -0.65625zm-1.03125 8.453125q1.828125 0 2.40625 -0.828125q0.59375 -0.828125 0.59375 -2.796875q0 -1.984375 -0.46875 -2.78125q-0.453125 -0.796875 -1.65625 -0.796875q-1.078125 0 -2.21875 0.40625l-0.375 0.140625l0 6.5625q1.21875 0.09375 1.71875 0.09375zm14.766327 0.859375q-1.921875 0.390625 -3.453125 0.390625q-1.53125 0 -2.484375 -0.421875q-0.9375 -0.421875 -1.453125 -1.296875q-0.5 -0.890625 -0.703125 -2.03125q-0.203125 -1.15625 -0.203125 -2.875q0 -1.71875 0.203125 -2.875q0.203125 -1.171875 0.703125 -2.0625q0.515625 -0.90625 1.453125 -1.3125q0.9375 -0.40625 2.421875 -0.40625q1.5 0 3.515625 0.40625l-0.0625 1.21875q-1.890625 -0.34375 -3.359375 -0.34375q-2.046875 0 -2.71875 1.234375q-0.65625 1.21875 -0.65625 4.15625q0 1.484375 0.109375 2.375q0.125 0.890625 0.484375 1.609375q0.359375 0.71875 1.03125 1.03125q0.6875 0.3125 2.0 0.3125q1.3125 0 3.109375 -0.34375l0.0625 1.234375zm3.5083618 0.203125l-1.40625 0l0 -13.390625l1.40625 0l0 4.578125q1.484375 -0.703125 2.859375 -0.703125q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.609375 -0.71875q-1.171875 0 -2.28125 0.4375l-0.34375 0.125l0 7.703125zm14.955902 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.983917 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm19.15915 -4.34375l-3.2969055 0l0 4.34375l-1.4375 0l0 -12.90625l4.7344055 0q2.09375 0 3.09375 1.03125q1.015625 1.015625 1.015625 3.125q0 4.40625 -4.109375 4.40625zm-3.2969055 -1.265625l3.2656555 0q2.671875 0 2.671875 -3.140625q0 -1.5 -0.640625 -2.1875q-0.625 -0.703125 -2.03125 -0.703125l-3.2656555 0l0 6.03125zm15.203766 -3.71875l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm4.093994 9.328125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.612122 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.3154907 -6.640625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm12.111694 2.515625l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm8.218933 -0.1875q1.875 0 2.625 1.078125q0.765625 1.0625 0.765625 3.75q0 2.6875 -0.9375 3.78125q-0.9375 1.09375 -3.46875 1.09375q-0.78125 0 -2.59375 -0.15625l-0.515625 -0.046875l0 -13.375l1.375 0l0 4.53125q1.421875 -0.65625 2.75 -0.65625zm-1.03125 8.453125q1.828125 0 2.40625 -0.828125q0.59375 -0.828125 0.59375 -2.796875q0 -1.984375 -0.46875 -2.78125q-0.453125 -0.796875 -1.65625 -0.796875q-1.078125 0 -2.21875 0.40625l-0.375 0.140625l0 6.5625q1.21875 0.09375 1.71875 0.09375zm9.641296 -7.203125q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.581421 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.29834 1.59375l0 4.78125q0.0625 0.6875 1.09375 0.8125l-0.0625 1.109375q-1.46875 0 -2.21875 -0.75q-1.671875 0.75 -3.359375 0.75q-1.28125 0 -1.953125 -0.71875q-0.671875 -0.734375 -0.671875 -2.09375q0 -1.375 0.6875 -2.015625q0.6875 -0.640625 2.15625 -0.78125l2.9375 -0.28125l0 -0.8125q0 -0.953125 -0.421875 -1.359375q-0.40625 -0.40625 -1.109375 -0.40625q-1.5 0 -3.09375 0.1875l-0.578125 0.046875l-0.0625 -1.0625q2.0625 -0.40625 3.640625 -0.40625q1.59375 0 2.296875 0.734375q0.71875 0.71875 0.71875 2.265625zm-5.734375 3.8125q0 1.71875 1.40625 1.71875q1.28125 0 2.5 -0.4375l0.4375 -0.140625l0 -3.078125l-2.765625 0.25q-0.84375 0.078125 -1.21875 0.5q-0.359375 0.40625 -0.359375 1.1875zm9.909302 2.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm12.096497 -9.515625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm10.881531 8.359375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.3154297 -6.640625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm12.642944 10.6875l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.0620728 -4.3125q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm9.477844 1.40625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm3.6795044 6.765625q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.225464 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#ffffff" d="m726.7402 445.042l230.45667 0l0 46.393707l-230.45667 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m726.7402 445.042l230.45667 0l0 46.393707l-230.45667 0z" fill-rule="evenodd"/><path fill="#212121" d="m747.46265 474.95572q-1.921875 0.390625 -3.453125 0.390625q-1.53125 0 -2.484375 -0.421875q-0.9375 -0.421875 -1.453125 -1.296875q-0.5 -0.890625 -0.703125 -2.03125q-0.203125 -1.15625 -0.203125 -2.875q0 -1.71875 0.203125 -2.875q0.203125 -1.171875 0.703125 -2.0625q0.515625 -0.90625 1.453125 -1.3125q0.9375 -0.40625 2.421875 -0.40625q1.5 0 3.515625 0.40625l-0.0625 1.21875q-1.890625 -0.34375 -3.359375 -0.34375q-2.046875 0 -2.71875 1.234375q-0.65625 1.21875 -0.65625 4.15625q0 1.484375 0.109375 2.375q0.125 0.890625 0.484375 1.609375q0.359375 0.71875 1.03125 1.03125q0.6875 0.3125 2.0 0.3125q1.3125 0 3.109375 -0.34375l0.0625 1.234375zm1.2114868 0.203125l3.546875 -12.90625l3.125 0l3.546875 12.90625l-1.421875 0l-0.921875 -3.328125l-5.53125 0l-0.9375 3.328125l-1.40625 0zm4.625 -11.671875l-1.96875 7.0625l4.890625 0l-1.953125 -7.0625l-0.96875 0zm11.066589 -0.171875q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm11.267944 7.5l-3.296875 0l0 4.34375l-1.4375 0l0 -12.90625l4.734375 0q2.09375 0 3.09375 1.03125q1.015625 1.015625 1.015625 3.125q0 4.40625 -4.109375 4.40625zm-3.296875 -1.265625l3.265625 0q2.671875 0 2.671875 -3.140625q0 -1.5 -0.640625 -2.1875q-0.625 -0.703125 -2.03125 -0.703125l-3.265625 0l0 6.03125zm15.203796 -3.71875l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm4.093933 9.328125l0 -9.328125l1.375 0l0 1.265625q1.625 -1.109375 3.421875 -1.46875l0 1.421875q-0.78125 0.140625 -1.640625 0.46875q-0.84375 0.3125 -1.296875 0.546875l-0.453125 0.25l0 6.84375l-1.40625 0zm12.612183 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.3154297 -6.640625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm12.111694 2.515625l1.40625 0l0 9.328125l-1.40625 0l0 -0.65625q-1.390625 0.84375 -2.75 0.84375q-1.90625 0 -2.53125 -0.984375q-0.625 -1.0 -0.625 -3.65625l0 -4.875l1.40625 0l0 4.84375q0 2.046875 0.34375 2.734375q0.359375 0.6875 1.609375 0.6875q0.609375 0 1.25 -0.171875q0.640625 -0.1875 0.96875 -0.34375l0.328125 -0.171875l0 -7.578125zm8.218994 -0.1875q1.875 0 2.625 1.078125q0.765625 1.0625 0.765625 3.75q0 2.6875 -0.9375 3.78125q-0.9375 1.09375 -3.46875 1.09375q-0.78125 0 -2.59375 -0.15625l-0.515625 -0.046875l0 -13.375l1.375 0l0 4.53125q1.421875 -0.65625 2.75 -0.65625zm-1.03125 8.453125q1.828125 0 2.40625 -0.828125q0.59375 -0.828125 0.59375 -2.796875q0 -1.984375 -0.46875 -2.78125q-0.453125 -0.796875 -1.65625 -0.796875q-1.078125 0 -2.21875 0.40625l-0.375 0.140625l0 6.5625q1.21875 0.09375 1.71875 0.09375zm9.641296 -7.203125q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm10.581421 0.15625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.29834 1.59375l0 4.78125q0.0625 0.6875 1.09375 0.8125l-0.0625 1.109375q-1.46875 0 -2.21875 -0.75q-1.671875 0.75 -3.359375 0.75q-1.28125 0 -1.953125 -0.71875q-0.671875 -0.734375 -0.671875 -2.09375q0 -1.375 0.6875 -2.015625q0.6875 -0.640625 2.15625 -0.78125l2.9375 -0.28125l0 -0.8125q0 -0.953125 -0.421875 -1.359375q-0.40625 -0.40625 -1.109375 -0.40625q-1.5 0 -3.09375 0.1875l-0.578125 0.046875l-0.0625 -1.0625q2.0625 -0.40625 3.640625 -0.40625q1.59375 0 2.296875 0.734375q0.71875 0.71875 0.71875 2.265625zm-5.734375 3.8125q0 1.71875 1.40625 1.71875q1.28125 0 2.5 -0.4375l0.4375 -0.140625l0 -3.078125l-2.765625 0.25q-0.84375 0.078125 -1.21875 0.5q-0.359375 0.40625 -0.359375 1.1875zm9.909302 2.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm12.096497 -9.515625q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm10.88147 8.359375l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.3154907 -6.640625q-2.8125 0 -2.8125 2.109375q0 1.171875 0.640625 1.609375q0.65625 0.4375 2.625 0.875q1.96875 0.4375 2.78125 1.140625q0.828125 0.703125 0.828125 2.296875q0 3.984375 -4.125 3.984375q-1.359375 0 -3.421875 -0.328125l-0.671875 -0.09375l0.15625 -1.1875q2.53125 0.34375 3.859375 0.34375q2.765625 0 2.765625 -2.59375q0 -1.046875 -0.609375 -1.5q-0.609375 -0.46875 -2.265625 -0.78125q-2.1875 -0.46875 -3.109375 -1.203125q-0.90625 -0.734375 -0.90625 -2.46875q0 -3.46875 4.171875 -3.46875q1.359375 0 3.265625 0.28125l0.625 0.078125l-0.125 1.21875q-2.59375 -0.3125 -3.671875 -0.3125zm12.642944 10.6875l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm7.0620117 -4.3125q0.625 0 2.09375 0.21875l0.453125 0.0625l-0.0625 1.140625q-1.484375 -0.171875 -2.203125 -0.171875q-1.578125 0 -2.15625 0.765625q-0.5625 0.75 -0.5625 2.796875q0 2.03125 0.53125 2.84375q0.53125 0.796875 2.203125 0.796875l2.203125 -0.171875l0.0625 1.15625q-1.734375 0.265625 -2.59375 0.265625q-2.1875 0 -3.015625 -1.109375q-0.828125 -1.125 -0.828125 -3.78125q0 -2.671875 0.890625 -3.734375q0.90625 -1.078125 2.984375 -1.078125zm9.477905 1.40625l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm3.6794434 6.765625q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.225525 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m201.56693 148.88452l58.92914 0l0 19.401566l-58.92914 0z" fill-rule="evenodd"/><path fill="#212121" d="m209.96771 157.15076q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625zm4.0620117 -0.90625l1.1875 0l2.0 6.953125l0.53125 0l2.015625 -6.953125l1.203125 0l-3.328125 11.54689l-1.203125 0l1.046875 -3.5468903l-1.1875 0l-2.265625 -8.0zm10.865997 0.90625q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625zm9.080643 0.140625l-2.546875 0l0 3.8125q0 1.375 0.203125 1.8125q0.203125 0.4375 0.953125 0.4375l1.421875 -0.09375l0.078125 0.984375q-1.0625 0.171875 -1.625 0.171875q-1.25 0 -1.734375 -0.609375q-0.484375 -0.609375 -0.484375 -2.3125l0 -4.203125l-1.125 0l0 -1.046875l1.125 0l0 -2.453125l1.1875 0l0 2.453125l2.546875 0l0 1.046875zm6.9128876 5.96875l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm4.283142 4.46875l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.1875 -0.71875 2.328125 -0.71875q1.484375 0 2.078125 0.8125q0.53125 -0.3125 1.359375 -0.5625q0.84375 -0.25 1.484375 -0.25q1.609375 0 2.15625 0.859375q0.546875 0.84375 0.546875 3.078125l0 4.21875l-1.1875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.3125 -0.625 -1.359375 -0.625q-0.53125 0 -1.09375 0.15625q-0.546875 0.15625 -0.859375 0.296875l-0.296875 0.140625q0.203125 0.53125 0.203125 2.34375l0 4.15625l-1.203125 0l0 -4.125q0 -1.734375 -0.3125 -2.34375q-0.3125 -0.625 -1.359375 -0.625q-0.515625 0 -1.0625 0.15625q-0.53125 0.15625 -0.8125 0.296875l-0.265625 0.140625l0 6.5z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m35.459316 364.15747l-24.999588 0l0 -205.5748l191.10982 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m35.459316 364.15747l-24.999588 0l0 -205.5748l191.10982 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m582.6564 354.4567l77.57483 0l0 19.40158l-77.57483 0z" fill-rule="evenodd"/><path fill="#212121" d="m590.612 362.72293q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625zm9.924377 -0.90625l1.203125 0l0 8.0l-1.203125 0l0 -0.5625q-1.203125 0.71875 -2.359375 0.71875q-1.640625 0 -2.171875 -0.84375q-0.53125 -0.84375 -0.53125 -3.140625l0 -4.171875l1.1875 0l0 4.15625q0 1.75 0.296875 2.34375q0.3125 0.59375 1.390625 0.59375q0.53125 0 1.0625 -0.15625q0.546875 -0.15625 0.84375 -0.296875l0.28125 -0.140625l0 -6.5zm7.0429077 -0.15625q1.609375 0 2.25 0.921875q0.65625 0.921875 0.65625 3.21875q0 2.296875 -0.8125 3.234375q-0.796875 0.9375 -2.953125 0.9375q-0.671875 0 -2.234375 -0.125l-0.4375 -0.046875l0 -11.46875l1.1875 0l0 3.890625q1.203125 -0.5625 2.34375 -0.5625zm-0.875 7.25q1.5625 0 2.0625 -0.71875q0.515625 -0.71875 0.515625 -2.40625q0 -1.703125 -0.40625 -2.375q-0.40625 -0.6875 -1.421875 -0.6875q-0.9375 0 -1.90625 0.359375l-0.3125 0.109375l0 5.640625q1.03125 0.078125 1.46875 0.078125zm8.259766 -6.1875q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625zm9.080627 0.140625l-2.546875 0l0 3.8125q0 1.375 0.203125 1.8125q0.203125 0.4375 0.953125 0.4375l1.421875 -0.09375l0.078125 0.984375q-1.0625 0.171875 -1.625 0.171875q-1.25 0 -1.734375 -0.609375q-0.484375 -0.609375 -0.484375 -2.3125l0 -4.203125l-1.125 0l0 -1.046875l1.125 0l0 -2.453125l1.1875 0l0 2.453125l2.546875 0l0 1.046875zm7.116028 1.375l0 4.09375q0.046875 0.59375 0.9375 0.703125l-0.046875 0.9375q-1.265625 0 -1.90625 -0.640625q-1.4375 0.640625 -2.890625 0.640625q-1.09375 0 -1.671875 -0.625q-0.578125 -0.625 -0.578125 -1.78125q0 -1.171875 0.59375 -1.71875q0.59375 -0.5625 1.859375 -0.6875l2.5 -0.234375l0 -0.6875q0 -0.828125 -0.359375 -1.171875q-0.34375 -0.359375 -0.953125 -0.359375q-1.265625 0 -2.65625 0.171875l-0.484375 0.046875l-0.046875 -0.921875q1.75 -0.34375 3.109375 -0.34375q1.359375 0 1.96875 0.625q0.625 0.625 0.625 1.953125zm-4.921875 3.265625q0 1.46875 1.21875 1.46875q1.078125 0 2.140625 -0.375l0.359375 -0.125l0 -2.640625l-2.359375 0.21875q-0.71875 0.0625 -1.046875 0.421875q-0.3125 0.359375 -0.3125 1.03125zm8.500366 2.3125l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.28125 -0.71875 2.46875 -0.71875q1.609375 0 2.15625 0.859375q0.546875 0.859375 0.546875 3.078125l0 4.21875l-1.171875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.328125 -0.625 -1.40625 -0.625q-0.515625 0 -1.09375 0.15625q-0.5625 0.15625 -0.859375 0.296875l-0.296875 0.140625l0 6.5zm10.373291 -8.15625q0.53125 0 1.796875 0.1875l0.375 0.046875l-0.046875 0.984375q-1.28125 -0.15625 -1.875 -0.15625q-1.359375 0 -1.859375 0.65625q-0.484375 0.640625 -0.484375 2.40625q0 1.75 0.453125 2.4375q0.453125 0.6875 1.90625 0.6875l1.875 -0.15625l0.0625 1.0q-1.5 0.21875 -2.234375 0.21875q-1.875 0 -2.59375 -0.953125q-0.703125 -0.96875 -0.703125 -3.234375q0 -2.28125 0.765625 -3.203125q0.78125 -0.921875 2.5625 -0.921875zm9.33313 7.171875l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m660.2312 364.15747l15.317322 0l0 0.18899536l15.328369 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m660.2312 364.15747l15.317322 0l0 0.18899536l15.328369 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m247.49348 258.85565l88.976364 0l0 19.40158l-88.976364 0z" fill-rule="evenodd"/><path fill="#212121" d="m254.19423 266.0594q0.53125 0 1.796875 0.1875l0.37498474 0.046875l-0.046875 0.984375q-1.2812347 -0.15625 -1.8749847 -0.15625q-1.359375 0 -1.859375 0.65625q-0.484375 0.640625 -0.484375 2.40625q0 1.75 0.453125 2.4375q0.453125 0.6875 1.90625 0.6875l1.8749847 -0.15625l0.0625 1.0q-1.4999847 0.21875 -2.2343597 0.21875q-1.875 0 -2.59375 -0.953125q-0.703125 -0.96875 -0.703125 -3.234375q0 -2.28125 0.765625 -3.203125q0.78125 -0.921875 2.5625 -0.921875zm3.5362396 4.140625q0 -2.1875 0.78125 -3.15625q0.796875 -0.984375 2.65625 -0.984375q1.859375 0 2.625 0.984375q0.78125 0.96875 0.78125 3.15625q0 2.1875 -0.734375 3.1875q-0.734375 0.984375 -2.6875 0.984375q-1.953125 0 -2.6875 -0.984375q-0.734375 -1.0 -0.734375 -3.1875zm1.234375 -0.015625q0 1.75 0.421875 2.453125q0.421875 0.703125 1.765625 0.703125q1.359375 0 1.78125 -0.6875q0.421875 -0.703125 0.421875 -2.46875q0 -1.765625 -0.46875 -2.421875q-0.46875 -0.671875 -1.734375 -0.671875q-1.25 0 -1.71875 0.671875q-0.46875 0.65625 -0.46875 2.421875zm8.776154 4.03125l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.1875 -0.71875 2.328125 -0.71875q1.484375 0 2.078125 0.8125q0.53125 -0.3125 1.359375 -0.5625q0.84375 -0.25 1.484375 -0.25q1.609375 0 2.15625 0.859375q0.546875 0.84375 0.546875 3.078125l0 4.21875l-1.1875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.3125 -0.625 -1.359375 -0.625q-0.53125 0 -1.09375 0.15625q-0.546875 0.15625 -0.859375 0.296875l-0.296875 0.140625q0.203125 0.53125 0.203125 2.34375l0 4.15625l-1.203125 0l0 -4.125q0 -1.734375 -0.3125 -2.34375q-0.3125 -0.625 -1.359375 -0.625q-0.515625 0 -1.0625 0.15625q-0.53125 0.15625 -0.8125 0.296875l-0.265625 0.140625l0 6.5zm12.172882 3.546875l0 -11.546875l1.1875 0l0 0.578125q1.203125 -0.734375 2.390625 -0.734375q1.515625 0 2.203125 0.96875q0.6875 0.96875 0.6875 3.1875q0 2.21875 -0.8125 3.1875q-0.796875 0.96875 -2.671875 0.96875q-0.96875 0 -1.78125 -0.171875l0 3.5625l-1.203125 0zm3.40625 -10.640625q-0.484375 0 -1.046875 0.171875q-0.546875 0.15625 -0.859375 0.3125l-0.296875 0.15625l0 5.390625q1.125 0.1875 1.71875 0.1875q1.296875 0 1.8125 -0.734375q0.53125 -0.75 0.53125 -2.40625q0 -1.671875 -0.484375 -2.375q-0.46875 -0.703125 -1.375 -0.703125zm4.6664124 3.078125q0 -2.1875 0.78125 -3.15625q0.796875 -0.984375 2.65625 -0.984375q1.859375 0 2.625 0.984375q0.78125 0.96875 0.78125 3.15625q0 2.1875 -0.734375 3.1875q-0.734375 0.984375 -2.6875 0.984375q-1.953125 0 -2.6875 -0.984375q-0.734375 -1.0 -0.734375 -3.1875zm1.234375 -0.015625q0 1.75 0.421875 2.453125q0.421875 0.703125 1.765625 0.703125q1.359375 0 1.78125 -0.6875q0.421875 -0.703125 0.421875 -2.46875q0 -1.765625 -0.46875 -2.421875q-0.46875 -0.671875 -1.734375 -0.671875q-1.25 0 -1.71875 0.671875q-0.46875 0.65625 -0.46875 2.421875zm8.776123 4.03125l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.28125 -0.71875 2.46875 -0.71875q1.609375 0 2.15625 0.859375q0.546875 0.859375 0.546875 3.078125l0 4.21875l-1.171875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.328125 -0.625 -1.40625 -0.625q-0.515625 0 -1.09375 0.15625q-0.5625 0.15625 -0.859375 0.296875l-0.296875 0.140625l0 6.5zm12.8263855 -0.984375l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm4.283142 4.46875l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.28125 -0.71875 2.46875 -0.71875q1.609375 0 2.15625 0.859375q0.546875 0.859375 0.546875 3.078125l0 4.21875l-1.171875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.328125 -0.625 -1.40625 -0.625q-0.515625 0 -1.09375 0.15625q-0.5625 0.15625 -0.859375 0.296875l-0.296875 0.140625l0 6.5zm11.481506 -6.953125l-2.546875 0l0 3.8125q0 1.375 0.203125 1.8125q0.203125 0.4375 0.953125 0.4375l1.421875 -0.09375l0.078125 0.984375q-1.0625 0.171875 -1.625 0.171875q-1.25 0 -1.734375 -0.609375q-0.484375 -0.609375 -0.484375 -2.3125l0 -4.203125l-1.125 0l0 -1.046875l1.125 0l0 -2.453125l1.1875 0l0 2.453125l2.546875 0l0 1.046875zm3.9754028 -0.140625q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m247.49348 268.55643l-14.608917 0l0 0.06298828l-14.619431 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m247.49348 268.55643l-14.608917 0l0 0.06298828l-14.619431 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m-1.4829396 356.43646l41.85827 0l0 30.015747l-41.85827 0z" fill-rule="evenodd"/><path fill="#212121" d="m12.70456 369.4396l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.1668549 8.796875l0 -1.515625l1.093751 0l0 1.515625l-1.093751 0zm2.8788614 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.1757355 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m376.5176 128.56485l41.858276 0l0 30.015747l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m389.23636 141.42735q1.09375 0 1.765625 0.40625q1.453125 0.859375 1.453125 4.265625q0 2.40625 -0.8125 3.40625q-0.796875 1.0 -2.40625 1.0q-1.59375 0 -2.40625 -0.984375q-0.796875 -0.984375 -0.796875 -3.484375q0 -2.515625 0.796875 -3.5625q0.796875 -1.046875 2.40625 -1.046875zm0.015625 0.90625q-0.765625 0 -1.203125 0.328125q-0.9375 0.65625 -0.9375 3.453125q0 1.96875 0.515625 2.734375q0.515625 0.75 1.625 0.75q1.109375 0 1.625 -0.765625q0.515625 -0.765625 0.515625 -2.8125q0 -2.0625 -0.5 -2.875q-0.5 -0.8125 -1.640625 -0.8125zm4.6199646 8.03125l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788757 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm6.95697 -6.8125l-1.75 0l0.546875 1.671875l-0.65625 0.203125l-0.546875 -1.6875l-1.421875 1.046875l-0.421875 -0.53125l1.4375 -1.046875l-1.40625 -1.03125l0.40625 -0.5625l1.421875 1.046875l0.546875 -1.6875l0.640625 0.21875l-0.53125 1.6875l1.734375 0l0 0.671875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m465.2907 334.15164l41.858276 0l0 30.015747l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m479.4782 347.15475l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.1668396 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788757 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.17572 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m657.6238 334.15265l41.858215 0l0 30.015747l-41.858215 0z" fill-rule="evenodd"/><path fill="#212121" d="m671.8113 347.15576l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.166809 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8789062 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.17572 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m610.6148 238.43874l41.858215 0l0 30.015732l-41.858215 0z" fill-rule="evenodd"/><path fill="#212121" d="m624.8023 251.44185l0 8.79689l-1.03125 0l0 -7.6562653l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.166809 8.79689l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8789062 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.17572 -8.79689l0 8.79689l-1.03125 0l0 -7.6562653l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#ffffff" d="m753.8924 135.41995l199.59052 0l0 46.393692l-199.59052 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m753.8924 135.41995l199.59052 0l0 46.393692l-199.59052 0z" fill-rule="evenodd"/><path fill="#212121" d="m766.47144 165.53679l0 -12.90625l7.859375 0l0 1.265625l-6.421875 0l0 4.453125l5.3125 0l0 1.25l-5.3125 0l0 4.671875l6.421875 0l0 1.265625l-7.859375 0zm10.191895 0l0 -13.390625l1.40625 0l0 13.390625l-1.40625 0zm10.543945 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9839478 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm20.534119 -1.15625l0.546875 -0.0625l0.03125 1.109375q-2.125 0.296875 -3.640625 0.296875q-2.015625 0 -2.859375 -1.15625q-0.828125 -1.171875 -0.828125 -3.640625q0 -4.90625 3.890625 -4.90625q1.890625 0 2.8125 1.0625q0.9375 1.046875 0.9375 3.296875l-0.078125 1.078125l-6.15625 0q0 1.546875 0.5625 2.296875q0.5625 0.734375 1.953125 0.734375q1.390625 0 2.828125 -0.109375zm-0.5 -4.046875q0 -1.71875 -0.5625 -2.421875q-0.546875 -0.71875 -1.796875 -0.71875q-1.234375 0 -1.859375 0.75q-0.625 0.75 -0.640625 2.390625l4.859375 0zm4.9838867 5.203125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384277 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm8.29834 1.59375l0 4.78125q0.0625 0.6875 1.09375 0.8125l-0.0625 1.109375q-1.46875 0 -2.21875 -0.75q-1.671875 0.75 -3.359375 0.75q-1.28125 0 -1.953125 -0.71875q-0.671875 -0.734375 -0.671875 -2.09375q0 -1.375 0.6875 -2.015625q0.6875 -0.640625 2.15625 -0.78125l2.9375 -0.28125l0 -0.8125q0 -0.953125 -0.421875 -1.359375q-0.40625 -0.40625 -1.109375 -0.40625q-1.5 0 -3.09375 0.1875l-0.578125 0.046875l-0.0625 -1.0625q2.0625 -0.40625 3.640625 -0.40625q1.59375 0 2.296875 0.734375q0.71875 0.71875 0.71875 2.265625zm-5.734375 3.8125q0 1.71875 1.40625 1.71875q1.28125 0 2.5 -0.4375l0.4375 -0.140625l0 -3.078125l-2.765625 0.25q-0.84375 0.078125 -1.21875 0.5q-0.359375 0.40625 -0.359375 1.1875zm8.612427 2.703125l0 -13.390625l1.40625 0l0 13.390625l-1.40625 0zm12.24707 -0.203125q-1.921875 0.390625 -3.453125 0.390625q-1.53125 0 -2.484375 -0.421875q-0.9375 -0.421875 -1.453125 -1.296875q-0.5 -0.890625 -0.703125 -2.03125q-0.203125 -1.15625 -0.203125 -2.875q0 -1.71875 0.203125 -2.875q0.203125 -1.171875 0.703125 -2.0625q0.515625 -0.90625 1.453125 -1.3125q0.9375 -0.40625 2.421875 -0.40625q1.5 0 3.515625 0.40625l-0.0625 1.21875q-1.890625 -0.34375 -3.359375 -0.34375q-2.046875 0 -2.71875 1.234375q-0.65625 1.21875 -0.65625 4.15625q0 1.484375 0.109375 2.375q0.125 0.890625 0.484375 1.609375q0.359375 0.71875 1.03125 1.03125q0.6875 0.3125 2.0 0.3125q1.3125 0 3.109375 -0.34375l0.0625 1.234375zm1.5092163 -4.46875q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.225525 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.40625 -0.84375 2.734375 -0.84375q1.734375 0 2.421875 0.953125q0.609375 -0.375 1.59375 -0.65625q0.984375 -0.296875 1.71875 -0.296875q1.875 0 2.515625 1.0q0.640625 1.0 0.640625 3.59375l0 4.921875l-1.390625 0l0 -4.890625q0 -1.9375 -0.375 -2.65625q-0.375 -0.71875 -1.59375 -0.71875q-0.609375 0 -1.265625 0.1875q-0.65625 0.171875 -1.0 0.328125l-0.359375 0.171875q0.234375 0.625 0.234375 2.734375l0 4.84375l-1.390625 0l0 -4.8125q0 -2.015625 -0.375 -2.734375q-0.359375 -0.71875 -1.578125 -0.71875q-0.609375 0 -1.234375 0.1875q-0.625 0.171875 -0.953125 0.328125l-0.3125 0.171875l0 7.578125zm14.190369 4.140625l0 -13.46875l1.375 0l0 0.671875q1.421875 -0.859375 2.796875 -0.859375q1.78125 0 2.578125 1.140625q0.8125 1.125 0.8125 3.71875q0 2.578125 -0.953125 3.71875q-0.9375 1.125 -3.125 1.125q-1.140625 0 -2.078125 -0.203125l0 4.15625l-1.40625 0zm3.96875 -12.40625q-0.5625 0 -1.203125 0.1875q-0.640625 0.1875 -1.015625 0.375l-0.34375 0.1875l0 6.28125q1.3125 0.203125 2.0 0.203125q1.515625 0 2.125 -0.859375q0.609375 -0.859375 0.609375 -2.796875q0 -1.9375 -0.5625 -2.75q-0.546875 -0.828125 -1.609375 -0.828125zm5.456848 3.59375q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm11.74115 -3.5625q-2.03125 0 -2.03125 1.421875q0 0.65625 0.46875 0.921875q0.46875 0.265625 2.125 0.5625q1.671875 0.28125 2.359375 0.8125q0.6875 0.515625 0.6875 1.953125q0 1.4375 -0.921875 2.109375q-0.921875 0.671875 -2.703125 0.671875q-1.15625 0 -2.71875 -0.265625l-0.5625 -0.09375l0.078125 -1.203125q2.125 0.3125 3.203125 0.3125q1.078125 0 1.640625 -0.34375q0.578125 -0.34375 0.578125 -1.15625q0 -0.8125 -0.484375 -1.09375q-0.484375 -0.296875 -2.125 -0.5625q-1.640625 -0.265625 -2.328125 -0.765625q-0.6875 -0.5 -0.6875 -1.859375q0 -1.359375 0.953125 -2.015625q0.96875 -0.65625 2.40625 -0.65625q1.125 0 2.84375 0.265625l0.53125 0.09375l-0.046875 1.1875q-2.0625 -0.296875 -3.265625 -0.296875zm5.753235 8.265625l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913879 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm3.6794434 6.765625q0 -2.5625 0.90625 -3.703125q0.921875 -1.140625 3.09375 -1.140625q2.171875 0 3.078125 1.140625q0.90625 1.140625 0.90625 3.703125q0 2.546875 -0.859375 3.703125q-0.859375 1.15625 -3.140625 1.15625q-2.265625 0 -3.125 -1.15625q-0.859375 -1.15625 -0.859375 -3.703125zm1.4375 -0.03125q0 2.03125 0.484375 2.859375q0.5 0.8125 2.078125 0.8125q1.578125 0 2.0625 -0.8125q0.484375 -0.8125 0.484375 -2.859375q0 -2.046875 -0.546875 -2.8125q-0.53125 -0.78125 -2.0 -0.78125q-1.46875 0 -2.015625 0.78125q-0.546875 0.765625 -0.546875 2.8125zm10.225525 4.703125l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m560.3635 148.97226l167.77954 0l0 19.40158l-167.77954 0z" fill-rule="evenodd"/><path fill="#212121" d="m570.85486 163.34789l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm3.173767 4.46875l0 -11.484375l1.203125 0l0 11.484375l-1.203125 0zm9.039795 -0.984375l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm4.283142 4.46875l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.1875 -0.71875 2.328125 -0.71875q1.484375 0 2.078125 0.8125q0.53125 -0.3125 1.359375 -0.5625q0.84375 -0.25 1.484375 -0.25q1.609375 0 2.15625 0.859375q0.546875 0.84375 0.546875 3.078125l0 4.21875l-1.1875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.3125 -0.625 -1.359375 -0.625q-0.53125 0 -1.09375 0.15625q-0.546875 0.15625 -0.859375 0.296875l-0.296875 0.140625q0.203125 0.53125 0.203125 2.34375l0 4.15625l-1.203125 0l0 -4.125q0 -1.734375 -0.3125 -2.34375q-0.3125 -0.625 -1.359375 -0.625q-0.515625 0 -1.0625 0.15625q-0.53125 0.15625 -0.8125 0.296875l-0.265625 0.140625l0 6.5zm17.610352 -0.984375l0.46875 -0.0625l0.03125 0.953125q-1.828125 0.25 -3.125 0.25q-1.734375 0 -2.453125 -1.0q-0.71875 -1.0 -0.71875 -3.109375q0 -4.203125 3.34375 -4.203125q1.625 0 2.421875 0.90625q0.796875 0.890625 0.796875 2.828125l-0.0625 0.921875l-5.28125 0q0 1.328125 0.46875 1.96875q0.484375 0.640625 1.671875 0.640625q1.203125 0 2.4375 -0.09375zm-0.4375 -3.484375q0 -1.46875 -0.46875 -2.078125q-0.46875 -0.609375 -1.53125 -0.609375q-1.0625 0 -1.609375 0.640625q-0.53125 0.640625 -0.546875 2.046875l4.15625 0zm4.283142 4.46875l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.28125 -0.71875 2.46875 -0.71875q1.609375 0 2.15625 0.859375q0.546875 0.859375 0.546875 3.078125l0 4.21875l-1.171875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.328125 -0.625 -1.40625 -0.625q-0.515625 0 -1.09375 0.15625q-0.5625 0.15625 -0.859375 0.296875l-0.296875 0.140625l0 6.5zm11.481506 -6.953125l-2.546875 0l0 3.8125q0 1.375 0.203125 1.8125q0.203125 0.4375 0.953125 0.4375l1.421875 -0.09375l0.078125 0.984375q-1.0625 0.171875 -1.625 0.171875q-1.25 0 -1.734375 -0.609375q-0.484375 -0.609375 -0.484375 -2.3125l0 -4.203125l-1.125 0l0 -1.046875l1.125 0l0 -2.453125l1.1875 0l0 2.453125l2.546875 0l0 1.046875zm7.116028 1.375l0 4.09375q0.046875 0.59375 0.9375 0.703125l-0.046875 0.9375q-1.265625 0 -1.90625 -0.640625q-1.4375 0.640625 -2.890625 0.640625q-1.09375 0 -1.671875 -0.625q-0.578125 -0.625 -0.578125 -1.78125q0 -1.171875 0.59375 -1.71875q0.59375 -0.5625 1.859375 -0.6875l2.5 -0.234375l0 -0.6875q0 -0.828125 -0.359375 -1.171875q-0.34375 -0.359375 -0.953125 -0.359375q-1.265625 0 -2.65625 0.171875l-0.484375 0.046875l-0.046875 -0.921875q1.75 -0.34375 3.109375 -0.34375q1.359375 0 1.96875 0.625q0.625 0.625 0.625 1.953125zm-4.921875 3.265625q0 1.46875 1.21875 1.46875q1.078125 0 2.140625 -0.375l0.359375 -0.125l0 -2.640625l-2.359375 0.21875q-0.71875 0.0625 -1.046875 0.421875q-0.3125 0.359375 -0.3125 1.03125zm7.3910522 2.3125l0 -11.484375l1.203125 0l0 11.484375l-1.203125 0zm4.070984 1.46875l6.859375 0l0 1.0625l-6.859375 0l0 -1.0625zm12.6276245 -9.625q0.53125 0 1.796875 0.1875l0.375 0.046875l-0.046875 0.984375q-1.28125 -0.15625 -1.875 -0.15625q-1.359375 0 -1.859375 0.65625q-0.484375 0.640625 -0.484375 2.40625q0 1.75 0.453125 2.4375q0.453125 0.6875 1.90625 0.6875l1.875 -0.15625l0.0625 1.0q-1.5 0.21875 -2.234375 0.21875q-1.875 0 -2.59375 -0.953125q-0.703125 -0.96875 -0.703125 -3.234375q0 -2.28125 0.765625 -3.203125q0.78125 -0.921875 2.5625 -0.921875zm3.536255 4.140625q0 -2.1875 0.78125 -3.15625q0.796875 -0.984375 2.65625 -0.984375q1.859375 0 2.625 0.984375q0.78125 0.96875 0.78125 3.15625q0 2.1875 -0.734375 3.1875q-0.734375 0.984375 -2.6875 0.984375q-1.953125 0 -2.6875 -0.984375q-0.734375 -1.0 -0.734375 -3.1875zm1.234375 -0.015625q0 1.75 0.421875 2.453125q0.421875 0.703125 1.765625 0.703125q1.359375 0 1.78125 -0.6875q0.421875 -0.703125 0.421875 -2.46875q0 -1.765625 -0.46875 -2.421875q-0.46875 -0.671875 -1.734375 -0.671875q-1.25 0 -1.71875 0.671875q-0.46875 0.65625 -0.46875 2.421875zm8.776184 4.03125l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.1875 -0.71875 2.328125 -0.71875q1.484375 0 2.078125 0.8125q0.53125 -0.3125 1.359375 -0.5625q0.84375 -0.25 1.484375 -0.25q1.609375 0 2.15625 0.859375q0.546875 0.84375 0.546875 3.078125l0 4.21875l-1.1875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.3125 -0.625 -1.359375 -0.625q-0.53125 0 -1.09375 0.15625q-0.546875 0.15625 -0.859375 0.296875l-0.296875 0.140625q0.203125 0.53125 0.203125 2.34375l0 4.15625l-1.203125 0l0 -4.125q0 -1.734375 -0.3125 -2.34375q-0.3125 -0.625 -1.359375 -0.625q-0.515625 0 -1.0625 0.15625q-0.53125 0.15625 -0.8125 0.296875l-0.265625 0.140625l0 6.5zm12.172852 3.546875l0 -11.546875l1.1875 0l0 0.578125q1.203125 -0.734375 2.390625 -0.734375q1.515625 0 2.203125 0.96875q0.6875 0.96875 0.6875 3.1875q0 2.21875 -0.8125 3.1875q-0.796875 0.96875 -2.671875 0.96875q-0.96875 0 -1.78125 -0.171875l0 3.5625l-1.203125 0zm3.40625 -10.640625q-0.484375 0 -1.046875 0.171875q-0.546875 0.15625 -0.859375 0.3125l-0.296875 0.15625l0 5.390625q1.125 0.1875 1.71875 0.1875q1.296875 0 1.8125 -0.734375q0.53125 -0.75 0.53125 -2.40625q0 -1.671875 -0.484375 -2.375q-0.46875 -0.703125 -1.375 -0.703125zm4.666443 3.078125q0 -2.1875 0.78125 -3.15625q0.796875 -0.984375 2.65625 -0.984375q1.859375 0 2.625 0.984375q0.78125 0.96875 0.78125 3.15625q0 2.1875 -0.734375 3.1875q-0.734375 0.984375 -2.6875 0.984375q-1.953125 0 -2.6875 -0.984375q-0.734375 -1.0 -0.734375 -3.1875zm1.234375 -0.015625q0 1.75 0.421875 2.453125q0.421875 0.703125 1.765625 0.703125q1.359375 0 1.78125 -0.6875q0.421875 -0.703125 0.421875 -2.46875q0 -1.765625 -0.46875 -2.421875q-0.46875 -0.671875 -1.734375 -0.671875q-1.25 0 -1.71875 0.671875q-0.46875 0.65625 -0.46875 2.421875zm10.072998 -3.0625q-1.734375 0 -1.734375 1.21875q0 0.5625 0.390625 0.796875q0.40625 0.234375 1.828125 0.484375q1.421875 0.234375 2.015625 0.6875q0.59375 0.453125 0.59375 1.6875q0 1.234375 -0.796875 1.8125q-0.78125 0.5625 -2.3125 0.5625q-0.984375 0 -2.328125 -0.21875l-0.484375 -0.078125l0.0625 -1.046875q1.828125 0.28125 2.75 0.28125q0.9375 0 1.421875 -0.296875q0.484375 -0.296875 0.484375 -0.984375q0 -0.703125 -0.421875 -0.953125q-0.40625 -0.25 -1.8125 -0.46875q-1.40625 -0.234375 -2.0 -0.65625q-0.59375 -0.4375 -0.59375 -1.609375q0 -1.171875 0.828125 -1.71875q0.828125 -0.5625 2.046875 -0.5625q0.984375 0 2.453125 0.21875l0.453125 0.078125l-0.03125 1.03125q-1.78125 -0.265625 -2.8125 -0.265625zm4.9400024 7.09375l0 -8.0l1.203125 0l0 8.0l-1.203125 0zm0 -9.8125l0 -1.390625l1.203125 0l0 1.390625l-1.203125 0zm7.6446533 2.859375l-2.546875 0l0 3.8125q0 1.375 0.203125 1.8125q0.203125 0.4375 0.953125 0.4375l1.421875 -0.09375l0.078125 0.984375q-1.0625 0.171875 -1.625 0.171875q-1.25 0 -1.734375 -0.609375q-0.484375 -0.609375 -0.484375 -2.3125l0 -4.203125l-1.125 0l0 -1.046875l1.125 0l0 -2.453125l1.1875 0l0 2.453125l2.546875 0l0 1.046875zm1.4754028 6.953125l0 -8.0l1.203125 0l0 8.0l-1.203125 0zm0 -9.8125l0 -1.390625l1.203125 0l0 1.390625l-1.203125 0zm3.1445923 5.796875q0 -2.1875 0.78125 -3.15625q0.796875 -0.984375 2.65625 -0.984375q1.859375 0 2.625 0.984375q0.78125 0.96875 0.78125 3.15625q0 2.1875 -0.734375 3.1875q-0.734375 0.984375 -2.6875 0.984375q-1.953125 0 -2.6875 -0.984375q-0.734375 -1.0 -0.734375 -3.1875zm1.234375 -0.015625q0 1.75 0.421875 2.453125q0.421875 0.703125 1.765625 0.703125q1.359375 0 1.78125 -0.6875q0.421875 -0.703125 0.421875 -2.46875q0 -1.765625 -0.46875 -2.421875q-0.46875 -0.671875 -1.734375 -0.671875q-1.25 0 -1.71875 0.671875q-0.46875 0.65625 -0.46875 2.421875zm8.776184 4.03125l-1.203125 0l0 -8.0l1.1875 0l0 0.5625q1.28125 -0.71875 2.46875 -0.71875q1.609375 0 2.15625 0.859375q0.546875 0.859375 0.546875 3.078125l0 4.21875l-1.171875 0l0 -4.1875q0 -1.671875 -0.328125 -2.28125q-0.328125 -0.625 -1.40625 -0.625q-0.515625 0 -1.09375 0.15625q-0.5625 0.15625 -0.859375 0.296875l-0.296875 0.140625l0 6.5z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m534.6142 158.58005l12.874634 0l0 0.09449768l12.889099 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m541.74243 158.58005l5.746399 0l0 0.09449768l12.889099 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m541.74243 158.58005l-3.1282349 -2.190445l-3.128296 2.190445l3.128296 2.190445z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m728.14307 158.67305l12.874634 0l0 -0.06298828l12.889099 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m728.14307 158.67305l12.874634 0l0 -0.06298828l12.889099 0" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m337.4413 238.68332l41.858276 0l0 30.015747l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m351.6288 251.68645l0 8.79686l-1.03125 0l0 -7.6562347l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.1668396 8.79686l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788757 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm6.95697 -6.8124847l-1.75 0l0.546875 1.671875l-0.65625 0.203125l-0.546875 -1.6875l-1.421875 1.046875l-0.421875 -0.53125l1.4375 -1.046875l-1.40625 -1.03125l0.40625 -0.5625l1.421875 1.046875l0.546875 -1.6875l0.640625 0.21875l-0.53125 1.6875l1.734375 0l0 0.671875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m212.35909 238.69418l41.85826 0l0 30.015747l-41.85826 0z" fill-rule="evenodd"/><path fill="#212121" d="m226.54659 251.69731l0 8.79686l-1.03125 0l0 -7.6562347l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.1668549 8.79686l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788605 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.1757355 -8.79686l0 8.79686l-1.03125 0l0 -7.6562347l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m718.7395 128.61096l41.858276 0l0 30.015747l-41.858276 0z" fill-rule="evenodd"/><path fill="#212121" d="m732.927 141.61409l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0zm3.16687 8.796875l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8788452 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm7.1757812 -8.796875l0 8.796875l-1.03125 0l0 -7.65625l-2.265625 1.5l-0.46875 -0.78125l2.796875 -1.859375l0.96875 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m530.4996 128.97054l41.858215 0l0 30.015762l-41.858215 0z" fill-rule="evenodd"/><path fill="#212121" d="m543.2183 141.83304q1.09375 0 1.765625 0.40625q1.453125 0.859375 1.453125 4.265625q0 2.40625 -0.8125 3.40625q-0.796875 1.0 -2.40625 1.0q-1.59375 0 -2.40625 -0.984375q-0.796875 -0.984375 -0.796875 -3.484375q0 -2.515625 0.796875 -3.5625q0.796875 -1.046875 2.40625 -1.046875zm0.015625 0.90625q-0.765625 0 -1.203125 0.328125q-0.9375 0.65625 -0.9375 3.453125q0 1.96875 0.515625 2.734375q0.515625 0.75 1.625 0.75q1.109375 0 1.625 -0.765625q0.515625 -0.765625 0.515625 -2.8125q0 -2.0625 -0.5 -2.875q-0.5 -0.8125 -1.640625 -0.8125zm4.619934 8.03125l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm2.8789062 0l0 -1.515625l1.09375 0l0 1.515625l-1.09375 0zm6.95697 -6.8125l-1.75 0l0.546875 1.671875l-0.65625 0.203125l-0.546875 -1.6875l-1.421875 1.046875l-0.421875 -0.53125l1.4375 -1.046875l-1.40625 -1.03125l0.40625 -0.5625l1.421875 1.046875l0.546875 -1.6875l0.640625 0.21875l-0.53125 1.6875l1.734375 0l0 0.671875z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m790.66144 387.54068l0 28.750732l51.307068 0l0 28.761078" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m790.66144 395.04068l0 21.250732l51.307068 0l0 28.761078" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m792.85913 395.04068l-2.1976929 -6.038086l-2.1976929 6.038086z" fill-rule="evenodd"/><path fill="#ffffff" d="m409.60498 28.08399l125.00787 0l0 46.3937l-125.00787 0z" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m409.60498 28.08399l125.00787 0l0 46.3937l-125.00787 0z" fill-rule="evenodd"/><path fill="#212121" d="m450.4507 58.200836l0 -12.90625l7.859375 0l0 1.265625l-6.421875 0l0 4.453125l5.3125 0l0 1.25l-5.3125 0l0 4.671875l6.421875 0l0 1.265625l-7.859375 0zm11.48877 0l-1.40625 0l0 -9.328125l1.375 0l0 0.65625q1.515625 -0.84375 2.890625 -0.84375q1.875 0 2.515625 1.015625q0.640625 1.0 0.640625 3.578125l0 4.921875l-1.375 0l0 -4.890625q0 -1.9375 -0.390625 -2.65625q-0.375 -0.71875 -1.625 -0.71875q-0.59375 0 -1.265625 0.1875q-0.65625 0.171875 -1.015625 0.328125l-0.34375 0.171875l0 7.578125zm13.384277 -8.109375l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm1.7202148 8.109375l0 -9.328125l1.40625 0l0 9.328125l-1.40625 0zm0 -11.4375l0 -1.625l1.40625 0l0 1.625l-1.40625 0zm8.913849 3.328125l-2.96875 0l0 4.453125q0 1.609375 0.234375 2.109375q0.234375 0.5 1.109375 0.5l1.671875 -0.109375l0.09375 1.15625q-1.25 0.203125 -1.90625 0.203125q-1.453125 0 -2.015625 -0.703125q-0.5625 -0.71875 -0.5625 -2.703125l0 -4.90625l-1.328125 0l0 -1.21875l1.328125 0l0 -2.859375l1.375 0l0 2.859375l2.96875 0l0 1.21875zm0.84521484 -1.21875l1.390625 0l2.34375 8.109375l0.609375 0l2.34375 -8.109375l1.40625 0l-3.875 13.46875l-1.40625 0l1.21875 -4.140625l-1.390625 0l-2.640625 -9.328125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m472.11023 135.38321l0 -30.453049l0.06298828 0l0 -30.460342" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m472.11023 135.38321l0 -30.453049l0.06298828 0l0 -22.960342" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m474.3709 81.96982l-2.1976929 -6.038101l-2.1976624 6.038101z" fill-rule="evenodd"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 79.01349l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m745.61945 79.01349l193.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m939.20996 80.66522l4.538086 -1.6517334l-4.538086 -1.6517334z" fill-rule="evenodd"/><path fill="#ffffff" d="m799.1627 62.209972l92.50397 0l0 30.70866l-92.50397 0z" fill-rule="evenodd"/><path fill="#212121" d="m806.0565 83.804306l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm5.091675 10.625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm9.305176 0l-1.296875 0l0 -12.4375l1.296875 0l0 4.265625q1.390625 -0.671875 2.671875 -0.671875q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.296875 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.5 -0.671875q-1.078125 0 -2.109375 0.390625l-0.328125 0.125l0 7.15625zm13.898865 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm3.3287964 4.828125l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm5.9954834 0l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm8.279236 3.09375l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125zm7.7070923 1.484375l0 4.4375q0.0625 0.640625 1.015625 0.765625l-0.0625 1.015625q-1.359375 0 -2.0625 -0.6875q-1.546875 0.6875 -3.109375 0.6875q-1.203125 0 -1.828125 -0.671875q-0.625 -0.671875 -0.625 -1.9375q0 -1.265625 0.640625 -1.859375q0.640625 -0.609375 2.015625 -0.75l2.71875 -0.25l0 -0.75q0 -0.890625 -0.390625 -1.265625q-0.375 -0.375 -1.03125 -0.375q-1.390625 0 -2.875 0.171875l-0.53125 0.046875l-0.0625 -0.984375q1.90625 -0.390625 3.375 -0.390625q1.484375 0 2.140625 0.6875q0.671875 0.671875 0.671875 2.109375zm-5.328125 3.53125q0 1.59375 1.3125 1.59375q1.171875 0 2.328125 -0.390625l0.390625 -0.140625l0 -2.859375l-2.5625 0.234375q-0.78125 0.078125 -1.125 0.46875q-0.34375 0.375 -0.34375 1.09375zm9.19696 2.515625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm11.242676 -8.84375q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm10.107239 7.765625l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 53.299213l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m751.2477 53.299213l193.96228 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m751.2477 53.299213l-2.3782349 -1.665287l-2.378296 1.665287l2.378296 1.665287z" fill-rule="evenodd"/><path fill="#ffffff" d="m794.0761 36.0506l102.677185 0l0 30.708664l-102.677185 0z" fill-rule="evenodd"/><path fill="#212121" d="m803.7546 48.801178q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm3.8260498 4.5q0 -2.375 0.84375 -3.4375q0.859375 -1.0625 2.875 -1.0625q2.03125 0 2.859375 1.0625q0.84375 1.0625 0.84375 3.4375q0 2.375 -0.796875 3.453125q-0.796875 1.0625 -2.921875 1.0625q-2.109375 0 -2.90625 -1.0625q-0.796875 -1.078125 -0.796875 -3.453125zm1.34375 -0.03125q0 1.890625 0.453125 2.65625q0.46875 0.765625 1.921875 0.765625q1.46875 0 1.921875 -0.75q0.453125 -0.75 0.453125 -2.65625q0 -1.90625 -0.515625 -2.625q-0.5 -0.734375 -1.859375 -0.734375q-1.359375 0 -1.875 0.734375q-0.5 0.71875 -0.5 2.609375zm9.49292 4.375l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm12.440674 -7.53125l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125zm7.7070923 1.484375l0 4.4375q0.0625 0.640625 1.015625 0.765625l-0.0625 1.015625q-1.359375 0 -2.0625 -0.6875q-1.546875 0.6875 -3.109375 0.6875q-1.203125 0 -1.828125 -0.671875q-0.625 -0.671875 -0.625 -1.9375q0 -1.265625 0.640625 -1.859375q0.640625 -0.609375 2.015625 -0.75l2.71875 -0.25l0 -0.75q0 -0.890625 -0.390625 -1.265625q-0.375 -0.375 -1.03125 -0.375q-1.390625 0 -2.875 0.171875l-0.53125 0.046875l-0.0625 -0.984375q1.90625 -0.390625 3.375 -0.390625q1.484375 0 2.140625 0.6875q0.671875 0.671875 0.671875 2.109375zm-5.328125 3.53125q0 1.59375 1.3125 1.59375q1.171875 0 2.328125 -0.390625l0.390625 -0.140625l0 -2.859375l-2.5625 0.234375q-0.78125 0.078125 -1.125 0.46875q-0.34375 0.375 -0.34375 1.09375zm7.9000854 2.515625l0 -8.65625l1.296875 0l0 8.65625l-1.296875 0zm0 -10.625l0 -1.5l1.296875 0l0 1.5l-1.296875 0zm5.091736 10.625l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm9.305115 0l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.296875 -0.78125 2.53125 -0.78125q1.609375 0 2.25 0.890625q0.578125 -0.34375 1.484375 -0.609375q0.90625 -0.28125 1.59375 -0.28125q1.734375 0 2.328125 0.9375q0.609375 0.921875 0.609375 3.328125l0 4.578125l-1.296875 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.46875 -0.671875q-0.5625 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625q0.21875 0.5625 0.21875 2.53125l0 4.5l-1.296875 0l0 -4.46875q0 -1.875 -0.34375 -2.53125q-0.328125 -0.671875 -1.46875 -0.671875q-0.5625 0 -1.140625 0.171875q-0.578125 0.15625 -0.890625 0.3125l-0.296875 0.15625l0 7.03125zm19.080017 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.6256104 4.828125l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm12.440674 -7.53125l-2.75 0l0 4.140625q0 1.484375 0.203125 1.953125q0.21875 0.46875 1.046875 0.46875l1.53125 -0.109375l0.09375 1.078125q-1.15625 0.1875 -1.765625 0.1875q-1.359375 0 -1.875 -0.65625q-0.515625 -0.65625 -0.515625 -2.515625l0 -4.546875l-1.234375 0l0 -1.125l1.234375 0l0 -2.65625l1.28125 0l0 2.65625l2.75 0l0 1.125z" fill-rule="nonzero"/><path fill="#000000" fill-opacity="0.0" d="m745.61945 26.695538l199.59052 0" fill-rule="evenodd"/><path stroke="#212121" stroke-width="1.0" stroke-linejoin="round" stroke-linecap="butt" d="m745.61945 26.695538l196.16345 0" fill-rule="evenodd"/><path fill="#212121" stroke="#212121" stroke-width="1.0" stroke-linecap="butt" d="m941.7829 26.695538l-1.1245728 1.1245842l3.0897217 -1.1245842l-3.0897217 -1.1245823z" fill-rule="evenodd"/><path fill="#ffffff" d="m805.17847 9.368585l80.47247 0l0 30.70866l-80.47247 0z" fill-rule="evenodd"/><path fill="#212121" d="m812.17334 30.962914l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm11.71283 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.9849854 -2.703125l0 7.53125l-1.296875 0l0 -7.53125l-1.09375 0l0 -1.125l1.09375 0l0 -0.78125q0 -1.84375 0.515625 -2.5q0.53125 -0.671875 1.828125 -0.671875l1.75 0.109375l-0.015625 1.078125q-0.96875 -0.03125 -1.609375 -0.03125q-0.625 0 -0.90625 0.421875q-0.265625 0.40625 -0.265625 1.609375l0 0.765625l2.515625 0l0 1.125l-2.515625 0zm9.813965 6.453125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm3.3287964 4.828125l0 -8.65625l1.28125 0l0 1.171875q1.5 -1.046875 3.171875 -1.375l0 1.328125q-0.734375 0.125 -1.53125 0.421875q-0.78125 0.296875 -1.1875 0.53125l-0.4375 0.21875l0 6.359375l-1.296875 0zm11.712769 -1.078125l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0zm4.6256714 4.828125l-1.296875 0l0 -8.65625l1.28125 0l0 0.59375q1.40625 -0.78125 2.6875 -0.78125q1.734375 0 2.328125 0.9375q0.59375 0.9375 0.59375 3.328125l0 4.578125l-1.28125 0l0 -4.546875q0 -1.796875 -0.359375 -2.453125q-0.34375 -0.671875 -1.515625 -0.671875q-0.546875 0 -1.171875 0.171875q-0.609375 0.15625 -0.9375 0.3125l-0.328125 0.15625l0 7.03125zm11.242615 -8.84375q0.578125 0 1.9375 0.21875l0.421875 0.046875l-0.046875 1.0625q-1.390625 -0.15625 -2.046875 -0.15625q-1.46875 0 -2.0 0.703125q-0.53125 0.703125 -0.53125 2.59375q0 1.890625 0.484375 2.640625q0.5 0.75 2.0625 0.75l2.046875 -0.15625l0.046875 1.078125q-1.609375 0.234375 -2.40625 0.234375q-2.03125 0 -2.796875 -1.03125q-0.765625 -1.046875 -0.765625 -3.515625q0 -2.46875 0.828125 -3.46875q0.828125 -1.0 2.765625 -1.0zm10.1073 7.765625l0.5 -0.046875l0.03125 1.015625q-1.96875 0.28125 -3.375 0.28125q-1.875 0 -2.65625 -1.078125q-0.78125 -1.09375 -0.78125 -3.375q0 -4.5625 3.625 -4.5625q1.75 0 2.609375 0.984375q0.875 0.984375 0.875 3.078125l-0.0625 0.984375l-5.71875 0q0 1.4375 0.515625 2.140625q0.515625 0.6875 1.8125 0.6875q1.296875 0 2.625 -0.109375zm-0.46875 -3.75q0 -1.59375 -0.515625 -2.25q-0.5 -0.671875 -1.65625 -0.671875q-1.15625 0 -1.734375 0.703125q-0.578125 0.6875 -0.59375 2.21875l4.5 0z" fill-rule="nonzero"/></g></svg> \ No newline at end of file diff --git a/docs/schemas/tabular.md b/docs/schemas/tabular.md index 2944dc79c7b58d0624c438554fea0d320b6e1d9d..33ddeb704a98647996771454f240959b7c3daef2 100644 --- a/docs/schemas/tabular.md +++ b/docs/schemas/tabular.md @@ -1,277 +1,254 @@ -In order to import your data from a `.csv` or `Excel` file, NOMAD provides three distinct (and separate) ways, that -with each comes unique options for importing and interacting with your data. In order to better understand how to use -NOMAD tabular parser to import your data, follow three sections below. In each section you -can find a commented sample schema with a step-by-step guide on how to import your tabular data. - -Tabular parser, implicitly, parse the data into the same NOMAD entry where the datafile is loaded. Also, explicitly, -this can be defined by putting the corresponding annotations under `current_entry` (check the examples below). -In addition, tabular parser can be set to parse the data into new entry (or entries). For this, the proper annotations -should be appended to `new_entry` annotation in your schema file. - -Two main components of any tabular parser schema are: -1) implementing the correct base-section(s), and -2) providing a `data_file` `Quantity` with the correct `m_annotations`. - -Please bear in mind that the schema files should 1) follow the NOMAD naming convention -(i.e. `My_Name.archive.yaml`), and 2) be accompanied by your data file in order for NOMAD to parse them. -In the examples provided below, an `Excel` file is assumed to contain all the data, as both NOMAD and -`Excel` support multiple-sheets data manipulations and imports. Note that the `Excel` file name in each schema -should match the name of the `Excel` data file, which in case of using a `.csv` data file, it can be replaced by the -`.csv` file name. - -`TableData` (and any other section(s) that is inheriting from `TableData`) has a customizable checkbox Quantity -(i.e. `fill_archive_from_datafile`) to turn the tabular parser `on` or `off`. -If you do not want to have the parser running everytime you make a change to your archive data, it is achievable then via -unchecking the checkbox. It is customizable in the sense that if you do not wish to see this checkbox at all, -you can configure the `hide` parameter of the section's `m_annotations` to hide the checkbox. This in turn sets -the parser to run everytime you save your archive. +Refer to the [Reference guide](../reference/annotations.md) for the full list of annotations connected to this parser and to the [Tabular parser tutorial](../tutorial/custom.md#the-built-in-tabular-parser) for a detailed description of each of them. -Be cautious though! Turning on the tabular parser (or checking the box) on saving your data will cause -losing/overwriting your manually-entered data by the parser! +## Preparing the tabular data file -## Column-mode -The following sample schema creates one quantity off the entire column of an excel file (`column mode`). -For example, suppose in an excel sheet, several rows contain information of a chemical product (e.g. `purity` in one -column). In order to list all the purities under the column `purity` and import them into NOMAD, you can use the -following schema by substituting `My_Quantity` with any name of your choice (e.g. `Purity`), -`tabular-parser.data.xlsx` with the name of the `csv/excel` file where the data lies, and `My_Sheet/My_Column` with -sheet_name/column_name of your targeted data. The `Tabular_Parser` can also be changed to any arbitrary name of your -choice. +NOMAD and `Excel` support multiple-sheets data manipulations and imports. Each quantity in the schema will be annotated with a source path composed by sheet name and column header. The path to be used with the tabular data displayed below would be `Sheet1/My header 1` and it would be placed it the `tabular` annotation, see [Schema annotations](../tutorial/custom.md#to-be-an-entry-or-not-to-be-an-entry) section. -Important notes: +<p align="center" width="100%"> + <img width="30%" src="2col.png"> +</p> -- `shape: ['*']` under `My_Quantity` is essential to parse the entire column of the data file. -- The `data_file` `Quantity` can have any arbitrary name (e.g. `xlsx_file`) -- `My_Quantity` can also be defined within another subsection (see next sample schema) -- Use `current_entry` and append `column_to_sections` to specify which sub_section(s) is to be filled in -this mode. `Leaving this field empty` causes the parser to parse the entire schema under column mode. +In the case there is only one sheet in the Excel file, or when using a `.csv` file that is a single-sheet format, the sheet name is not required in the path. + +The data sheets can be stored in one or more files depending on the user needs. Each sheet can independently be organized in one of the following ways: + +1) Columns:<br /> + each column contains an array of cells that we want to parse into one quantity. Example: time and temperature arrays to be plotted as x and y. + +<p align="center" width="100%"> + <img width="30%" src="columns.png"> +</p> + +2) Rows:<br /> + each row contains a set of cells that we want to parse into a section, i. e. a set of quantities. Example: an inventory tabular data file (for substrates, precursors, or more) where each column represents a property and each row corresponds to one unit stored in the inventory. + +<p align="center" width="100%"> + <img width="30%" src="rows.png"> +</p> + +3) Rows with repeated columns:<br /> -```yaml ---8<-- "examples/data/docs/tabular-parser-col-mode.archive.yaml" -``` -<b>Step-by-step guide to import your data using column-mode:</b> +in addition to the mode 2), whenever the parser detects the presence of multiple columns (or multiple sets of columns) with same headers, these are taken as multiple instances of a subsection. More explanations will be delivered when showing the schema for such a structure. Example: a crystal growth process where each row is a step of the crystal growth and the repeated columns describe the "precursor materials", that can be more than one during such processes and they are described by the same "precursor material" section. -After writing your schema file, you can create a new upload in NOMAD (or use an existing upload), -and upload both your `schema file` and the `excel/csv` file together (or zipped) to your NOMAD project. In the -`Overview` page of your NOMAD upload, you should be able to see a new entry created and appended to the `Process data` -section. Go to the entry page, click on `DATA` tab (on top of the screen) and in the `Entry` lane, your data -is populated under the `data` sub_section. +<p align="center" width="100%"> + <img width="45%" src="rows_subsection.png"> +</p> -#### Row-mode Sample: -The sample schema provided below, creates separate instances of a repeated section from each row of an excel file -(`row mode`). For example, suppose in an excel sheet, you have the information for a chemical product -(e.g. `name` in one column), and each row contains one entry of the aforementioned chemical product. -Since each row is separate from others, in order to create instances of the same product out of all rows -and import them into NOMAD, you can use the following schema by substituting `My_Subsection`, -`My_Section` and `My_Quantity` with any appropriate name (e.g. `Substance`, `Chemical_product` -and `Name` respectively). +Furthermore, we can insert comments before our data, we can use a special character to mark one or more rows as comment rows. The special character is annotated within the schema in the [parsing options](#parsing-options) section: -Important notes: +<p align="center" width="100%"> + <img width="30%" src="2col_notes.png"> +</p> -- This schema demonstrates how to import data within a subsection of another subsection, meaning the -targeted quantity should not necessarily go into the main `quantites`. -- Setting `row_to_sections` under `current_entry` signals that for each row in the sheet_name (provided in `My_Quantity`), -one instance of the corresponding (sub-)section (in this example, `My_Subsection` sub-section as it has the `repeats` -option set to true), will be appended. Please bear in mind that if this mode is selected, then all other quantities -in this sub_section, should exist in the same sheet_name. +## Inheriting the TableData base section +`TableData` can be inherited adding the following lines in the yaml schema file:<br /> ```yaml ---8<-- "examples/data/docs/tabular-parser-row-mode.archive.yaml" +MySection: + base_sections: + - nomad.datamodel.data.EntryData + - nomad.parsing.tabular.TableData ``` -<b>Step-by-step guide to import your data using row-mode:</b> +`EntryData` is usually also necessary as we will create entries from the section we are defining.<br /> +`TableData` provides a customizable checkbox quantity, called `fill_archive_from_datafile`, to turn the tabular parser `on` or `off`.<br /> +To avoid the parser running everytime a change is made to the archive data, it is sufficient to uncheck the checkbox. It is customizable in the sense that if you do not wish to see this checkbox at all, you can configure the `hide` parameter of the section's `m_annotations` to hide the checkbox. This in turn sets the parser to run everytime you save your archive. To hide it, add the following lines: + +```yaml +MySection: + base_sections: + - nomad.datamodel.data.EntryData + - nomad.parsing.tabular.TableData + m_annotations: + eln: + hide: ['fill_archive_from_datafile'] +``` + +Be cautious though! Turning on the tabular parser (or checking the box) on saving your data will cause +losing/overwriting your manually-entered data by the parser! + +## Importing data in NOMAD + +After writing a schema file and creating a new upload in NOMAD (or using an existing upload), it is possible to upload the schema file. After creating a new Entry out of one section of the schema, the tabular data file must be dropped in the quantity designated by the `FileEditQuantity` annotation. After clicking save the parsing will start. In the Overview page of the NOMAD upload, new Entries are created and appended to the Processed data section. In the Entry page, clicking on DATA tab (on top of the screen) and in the Entry lane, the data is populated under the `data` subsection. +## Hands-on examples of all tabular parser modes + +In this section eight examples will be presented, containing all the features available in tabular parser. Refer to the [Tutorial](../tutorial/custom.md#to-be-an-entry-or-not-to-be-an-entry) for more comments on the implications of the structures generated by the following yaml files. -After writing your schema file, you can create a new upload in NOMAD (or use an existing upload), -and upload both your `schema file` and the `excel/csv` file together (or zipped) to your NOMAD project. In the -`Overview` page of your NOMAD upload, you should be able to see as many new sub-sections created and appended -to the repeating section as there are rows in your `excel/csv` file. -Go to the entry page of the new entries, click on `DATA` tab (on top of the screen) and in the `Entry` lane, -your data is populated under the `data` sub_section. -#### Entry-mode Sample: -The following sample schema creates one entry for each row of an excel file (`entry mode`). -For example, suppose in an excel sheet, you have the information for a chemical product (e.g. `name` in one column), -and each row contains one entry of the aforementioned chemical product. Since each row is separate from others, in -order to create multiple archives of the same product out of all rows and import them into NOMAD, you can use the -following schema by substituting `My_Quantity` with any appropriate name (e.g. `Name`). +### 1. Column mode, current Entry, parse to root -Important note: +<p align="center" width="100%"> + <img width="100%" src="../tutorial/tabular-1.png"> +</p> -- To create new entries based on your entire schema, set `row_to_entries` to `- root`. Otherwise, you can -provide the relative path of specific sub_section(s) in your schema to create new entries. -- Leaving `row_to_entries` empty causes the parser to parse the entire schema using <b>column mode</b>! +The first case gives rise to the simplest data archive file. Here the tabular data file is parsed by columns, directly within the Entry where the `TableData` is inherited and filling the quantities in the root level of the schema (see dedicated how-to to learn [how to inherit tabular parser in your schema](../schemas/tabular.md#inheriting-the-tabledata-base-section)). +!!! important + - `data_file` quantity, i.e. the tabular data file name, is located in the same Entry of the parsed quantities. + - double check that `mapping_options > sections` contains the right path. It should point to the (sub)section where the quantities are decorated with `tabular` annotation, i. e., the one to be filled with tabular data (`root` in this case). + - quantities parsed in `column` mode must have the `shape: ['*']` attribute, that means they are arrays and not scalars. ```yaml ---8<-- "examples/data/docs/tabular-parser-entry-mode.archive.yaml" +--8<-- "examples/data/docs/tabular-parser_1_column_current-entry_to-root.archive.yaml" ``` -<b>Step-by-step guide to import your data using entry-mode:</b> - -After writing your schema file, you can create a new upload in NOMAD (or use an existing upload), -and upload both your `schema file` and the `excel/csv` file together (or zipped) to your NOMAD project. In the -`Overview` page of your NOMAD upload, you should be able to see as many new entries created and appended -to the `Process data` section as there are rows in your `excel/csv` file. -Go to the entry page of the new entries, click on `DATA` tab (on top of the screen) and in the `Entry` lane, -your data is populated under the `data` sub_section. - -<b>Advanced options to use/set in tabular parser:</b> - -- If you want to populate your schema from multiple `excel/csv` files, you can -define multiple data_file `Quantity`s annotated with `tabular_parser` in the root level of your schema -(root level of your schema is where you inherit from `TableData` class under `base_sections`). -Each individual data_file quantity can now contain a list of sub_sections which are expected to be filled -using one- or all of the modes mentioned above. Check the `MyOverallSchema` section in -`Complex Schema` example below. It contains 2 data_file quantities that each one, contains separate instructions -to populate different parts of the schema. `data_file_1` is responsible to fill `MyColSubsection` while `data_file_2` -fills all sub_sections listed in `row_to_sections` and `entry_to_sections` under `new_entry`. - -- When using the entry mode, you can create a custom `Quantity` to hold a reference to each new entries -generated by the parser. Check the `MyEntrySubsection` section in the `Complex Schema` example below. -The `refs_quantity` is a `ReferenceEditQuantiy` with type `#/MyEntry` which tells the parser to -populate this quantity with a reference to the fresh entry of type `MyEntry`. Also, you may use -`tabular_pattern` annotation to explicitly set the name of the fresh entries. - -- If you have multiple columns with exact same name in your `excel/csv` file, you can parse them using row mode. -For this, define a repeating sub_section that handles your data in different rows and inside each row, define another -repeating sub_section that contains your repeating columns. Check `MySpecialRowSubsection` section in the -`Complex Schema` example below. `data_file_2` contains a repeating column called `row_quantity_2` and -we want to create a section out of each row and each column. This is done by -creating one row of type `MySpecialRowSubsection` and populate -`MyRowQuantity3` quantity from `row_quantity_3` column in the `csv` file, and appending each column of -`row_quantity_2` to `MyRowQuantity2`. +### 2. Column mode, current Entry, parse to my path + +<p align="center" width="100%"> + <img width="100%" src="../tutorial/tabular-2.png"> +</p> + +The parsing mode presented here only differs from the previous for the `sections` annotations. In this case the section that we want to fill with tabular data can be nested arbitrarily deep in the schema and the `sections` annotation must be filled with a forward slash path to the desired section, e. g. `my_sub_section/my_sub_sub_section`. + +!!! important + - `data_file` quantity, i.e. the tabular data file name, is located in the same Entry of the parsed quantities. + - double check that `mapping_options > sections` contains the right path. It should point to the (sub)section where the quantities are decorated with `tabular` annotation, i. e., the one to be filled with tabular data. + - the section to be parsed can be arbitrarily nested, given that the path provided in `sections` reachs it (e. g. `my_sub_sec/my_sub_sub_sec`). + - quantities parsed in `column` mode must have the `shape: ['*']` attribute, that means they are arrays and not scalars. ```yaml ---8<-- "examples/data/docs/tabular-parser-complex.archive.yaml" +--8<-- "examples/data/docs/tabular-parser_2_column_current-entry_to-path.archive.yaml" ``` -Here are all parameters for the two annotations `Tabular Parser` and `Tabular`. +### 3. Row mode, current Entry, parse to my path -{{ pydantic_model('nomad.datamodel.metainfo.annotations.TabularParserAnnotation', heading='### Tabular Parser') }} -{{ pydantic_model('nomad.datamodel.metainfo.annotations.TabularAnnotation', heading='### Tabular') }} +<p align="center" width="100%"> + <img width="100%" src="../tutorial/tabular-3.png"> +</p> -{{ pydantic_model('nomad.datamodel.metainfo.annotations.PlotAnnotation', heading='## Plot Annotation') }} +The current is the first example of parsing in row mode. This means that every row of the excel file while be placed in one instance of the section that is defined in `sections`. This section must be decorated with `repeats: true` annotation, it will allow to generate multiple instances that will be appended in a list with sequential numbers. Instead of sequential numbers, the list can show specific names if `label_quantity` annotation is appended to the repeated section. This annotation is included in the how-to example. The section is written separately in the schema and it does not need the `EntryData` inheritance because the instances will be grafted directly in the current Entry. As explained [below](#91-row-mode-current-entry-parse-to-root), it is not possible for `row` and `current_entry` to parse directly in the root because we need to create multiple instances of the selected subsection and organize them in a list. -## Built-in base sections for ELNs +!!! important + - `data_file` quantity, i.e. the tabular data file name, is located in the same Entry of the parsed quantities. + - double check that `mapping_options > sections` contains the right path. It should point to the (sub)section where the quantities are decorated with `tabular` annotation, i. e., the one to be filled with tabular data. + - the section to be parsed can be arbitrarily nested, given that the path provided in `sections` reachs it (e. g. `my_sub_sec/my_sub_sub_sec`). + - quantities parsed in `row` mode are scalars. + - make use of `repeats: true` in the subsection within the parent section `MySection`. + - `label_quantity` annotation uses a quantity as name of the repeated section. If it is not provided, a sequential number will be used for each instance. -Coming soon ... +```yaml +--8<-- "examples/data/docs/tabular-parser_3_row_current-entry_to-path.archive.yaml" +``` -## Custom normalizers +### 4. Column mode, single new Entry, parse to my path -For custom schemas, you might want to add custom normalizers. All files are parsed -and normalized when they are uploaded or changed. The NOMAD metainfo Python interface -allows you to add functions that are called when your data is normalized. +<p align="center" width="100%"> + <img width="100%" src="../tutorial/tabular-4.png"> +</p> -Here is an example: +One more step of complexity is added here: the parsing is not performed in the current Entry, but a new Entry it automatically generated and filled. +This structure foresees a parent Entry where we collect one or more tabular data files and possibly other info while we want to separate a specific entity of our data structure in another searchable Entry in NOMAD, e. g. a substrate Entry or a measurement Entry that would be collected inside a parent experiment Entry. We need to inherit `SubSect` class from `EntryData` because these will be standalone archive files in NOMAD. Parent and children Entries are connected by means of the `ReferenceEditQuantity` annotation in the parent Entry schema. This annotation is attached to a quantity that becomes a hook to the other ones, It is a powerful tool that allows to list in the overview of each Entry all the other referenced ones, allowing to build paths of referencing available at a glance. -```python ---8<-- "examples/archive/custom_schema.py" +!!! important + - `data_file` quantity, i.e. the tabular data file name, is located in the parent Entry, the data is parsed in the child Entry. + - double check that `mapping_options > sections` contains the right path. It should point to the (sub)section where the quantities are decorated with `tabular` annotation, i. e., the one to be filled with tabular data. + - the section to be parsed can be arbitrarily nested, given that the path provided in `sections` reachs it (e. g. `my_sub_sec/my_sub_sub_sec`) + - quantities parsed in `column` mode must have the `shape: ['*']` attribute, that means they are arrays and not scalars. + - inherit also the subsection from `EntryData` as it must be a NOMAD Entry archive file. + +```yaml +--8<-- "examples/data/docs/tabular-parser_4_column_single-new-entry_to-path.archive.yaml" ``` -To add a `normalize` function, your section has to inherit from `ArchiveSection` which -provides the base for this functionality. Now you can overwrite the `normalize` function -and add you own behavior. Make sure to call the `super` implementation properly to -support schemas with multiple inheritance. +### 5. Row mode, single new Entry, parse to my path + +<p align="center" width="100%"> + <img width="100%" src="../tutorial/tabular-5.png"> +</p> + +Example analogous to the previous, where the new created Entry contains now a repeated subsection with a list of instances made from each line of the tabular data file, as show in the [Row mode, current Entry, parse to my path](#3-row-mode-current-entry-parse-to-my-path) case. -If we parse an archive like this: +!!! important + - `data_file` quantity, i.e. the tabular data file name, is located in the parent Entry, the data is parsed in the child Entry. + - double check that `mapping_options > sections` contains the right path. It should point to the (sub)section where the quantities are decorated with `tabular` annotation, i. e., the one to be filled with tabular data. + - the section to be parsed can be arbitrarily nested, given that the path provided in `sections` reachs it (e. g. `my_sub_sec/my_sub_sub_sec`) + - quantities parsed in `row` mode are scalars. + - inherit also the subsection from `EntryData` as it must be a NOMAD Entry archive file. + - make use of `repeats: true` in the subsection within the parent section `MySection`. + - `label_quantity` annotation uses a quantity as name of the repeated section. If it is not provided, a sequential number will be used for each instance. ```yaml ---8<-- "examples/archive/custom_data.archive.yaml" +--8<-- "examples/data/docs/tabular-parser_5_row_single-new-entry_to-path.archive.yaml" ``` -we will get a final normalized archive that contains our data like this: - -```json -{ - "data": { - "m_def": "examples.archive.custom_schema.SampleDatabase", - "samples": [ - { - "added_date": "2022-06-18T00:00:00+00:00", - "formula": "NaCl", - "sample_id": "2022-06-18 00:00:00+00:00--NaCl" - } - ] - } -} +### 6. Row mode, multiple new entries, parse to root + +<p align="center" width="100%"> + <img width="100%" src="../tutorial/tabular-6.png"> +</p> + +The last feature available for tabular parser is now introduced: `multiple_new_entries`. It is only meaningful for `row` mode because each row of the tabular data file will be placed in a new Entry that is an instance of a class defined in the schema, this would not make sense for columns, though, as they usually need to be parsed all together in one class of the schema, for example the "timestamp" and "temperature" columns in a spreadsheet file would need to lie in the same class as they belong to the same part of experiment. +A further comment is needed to explain the combination of this feature with `root`. As mentioned before, using `root` foresees to graft data directly in the present Entry. In this case, this means that a manyfold of Entries will be generated based on the only class available in the schema. These Entries will not be bundled together by a parent Entry but just live in our NOMAD Upload as a spare list. They might be referenced manually by the user with `ReferenceEditQuantity` in other archive files. Bundling them together in one overarching Entry already at the parsing stage would require the next and last example to be introduced. + +!!!important + - `data_file` quantity, i.e. the tabular data file name, is located in the parent Entry, the data is parsed in the children Entries. + - double check that `mapping_options > sections` contains the right path. It should point to the (sub)section where the quantities are decorated with `tabular` annotation, i. e., the one to be filled with tabular data. + - quantities parsed in `row` mode are scalars. + - inherit also the subsection from `EntryData` as it must be a NOMAD Entry archive file. + - make use of `repeats: true` in the subsection within the parent section `MySection`. + - `label_quantity` annotation uses a quantity as name of the repeated section. If it is not provided, a sequential number will be used for each instance. + +```yaml +--8<-- "examples/data/docs/tabular-parser_6_row_multiple-new-entries_to-root.archive.yaml" ``` -## Third-party integration +### 7. Row mode, multiple new entries, parse to my path -NOMAD offers integration with third-party ELN providers, simplifying the process of connecting -and interacting with external platforms. Three main external ELN solutions that are integrated into NOMAD -are: [elabFTW](https://www.elabftw.net/), [Labfolder](https://labfolder.com/) and [chemotion](https://chemotion.net/). -The process of data retrieval and data mapping onto NOMAD's schema -varies for each of these third-party ELN provider as they inherently allow for certain ways of communicating with their -database. Below you can find a <b>How-to</b> guide on importing your data from each of these external -repositories. +<p align="center" width="100%"> + <img width="100%" src="../tutorial/tabular-7.png"> +</p> +As anticipated in the previous example, `row` mode in connection to `multiple_new_entries` will produce a manyfold of instances of a specific class, each of them being a new Entry. In the present case, each instance will also automatically be placed in a `ReferenceEditQuantity` quantity lying in a subsection defined within the parent Entry, coloured in plum in the following example image. -### elabFTW integration +!!!important + - `data_file` quantity, i.e. the tabular data file name, is located in the same Entry, the data is parsed in the children Entries. + - double check that `mapping_options > sections` contains the right path. It should point to the (sub)section where the quantities are decorated with `tabular` annotation, i. e., the one to be filled with tabular data. + - the section to be parsed can be arbitrarily nested, given that the path provided in `sections` reachs it (e. g. `my_sub_sec/my_sub_sub_sec`) + - quantities parsed in `row` mode are scalars. + - inherit also the subsection from `EntryData` as it must be a standalone NOMAD archive file. + - make use of `repeats: true` in the subsection within the parent section `MySection`. + - `label_quantity` annotation uses a quantity as name of the repeated section. If it is not provided, a sequential number will be used for each instance. -elabFTW is part of [the ELN Consortium](https://github.com/TheELNConsortium) -and supports exporting experimental data in ELN file format. ELNFileFormat is a zipped file -that contains <b>metadata</b> of your elabFTW project along with all other associated data of -your experiments. +```yaml +--8<-- "examples/data/docs/tabular-parser_7_row_multiple-new-entries_to-path.archive.yaml" +``` -<b>How to import elabFTW data into NOMAD:</b> +### 8. The Sub-Subsection nesting schema -Go to your elabFTW experiment and export your project as `ELN Archive`. Save the file to your filesystem under -your preferred name and location (keep the `.eln` extension intact). -To parse your ebalFTW data into NOMAD, -go to the upload page of NOMAD and create a new upload. In the `overview` page, upload your exported file (either by -drag-dropping it into the <i>click or drop files</i> box or by navigating to the path where you stored the file). -This causes triggering NOMAD's parser to create as many new entries in this upload as there are experiments in your -elabFTW project. +<p align="center" width="100%"> + <img width="100%" src="../tutorial/tabular-8.png"> +</p> -You can inspect the parsed data of each of your entries (experiments) by going to the <b>DATA</b> -tab of each entry page. Under <i>Entry</i> column, click on <i>data</i> section. Now a new lane titled -`ElabFTW Project Import` should be visible. Under this section, (some of) the metadata of your project is listed. -There two sub-sections: 1) <b>experiment_data</b>, and 2) <b>experiment_files</b>. +If the tabular data file contains multiple columns with exact same name, there is a way to parse them using `row` mode. As explained in previous examples, this mode creates an instance of a subsection of the schema for each row of the file. Whenever column with same name are found they are interpreted as multiple instances of a sub-subsection nested inside the subsection. To build a schema with such a feature it is enough to have two nested classes, each of them bearing a `repeats: true` annotation. This structure can be applied to each and every of the cases above with `row` mode parsing. -<b>experiment_data</b> section contains detailed information of the given elabFTW experiment, such as -links to external resources and extra fields. <b>experiment_files</b> section is a list of sub-sections -containing metadata and additional info of the files associated with the experiment. +!!!important + - make use of `repeats: true` in the subsection within the parent section `MySection` and also in the sub-subsection within `MySubSect`. + - `label_quantity` annotation uses a quantity as name of the repeated section. If it is not provided, a sequential number will be used for each instance. +```yaml +--8<-- "examples/data/docs/tabular-parser_8_row_current-entry_to-path_subsubsection.archive.yaml" +``` -### Labfolder integration +### 9. Not possible implementations -Labfolder provides API endpoints to interact with your ELN data. NOMAD makes API calls to -retrieve, parse and map the data from your Labfolder instacne/database to a NOMAD's schema. -To do so, the necessary information are listed in the table below: +Some combinations of `mapping_options`, namely `file_mode`, `mapping_mode`, and `sections`, can give rise to not interpretable instructions or not useful data structure. For the sake of completeness, a brief explanation of the five not possible cases will be provided. +#### 9.1 Row mode, current Entry, parse to root -<i>project_url</i>: - The URL address to the Labfolder project. it should follow this pattern: - 'https://your-labfolder-server/eln/notebook#?projectIds=your-project-id'. This is used to setup - the server and initialize the NOMAD schema. +`row` mode always requires a section instance to be populated with one row of cells from the tabular data file. Multiple instances are hence generated from the rows available in the file. The instances are organized in a list and the list must be necessarily hosted as a subsection in some parent section. That's why, within the parent section, a path in `sections` must be provided different from `root`. -<i>labfolder_email</i>: - The email (user credential) to authenticate and login the user. <b>Important Note</b>: this - information <b>is discarded</b> once the authentication process is finished. +#### 9.2 Column mode, single new Entry, parse to root -<i>password</i>: - The password (user credential) to authenticate and login the user. <b>Important Note</b>: this - information <b>is discarded</b> once the authentication process is finished. +This would create a redundant Entry with the very same structure of the one where the `data_file` quantity is placed, the structure would furthermore miss a reference between the two Entries. A better result is achieved using a path in `sections` that would create a new Entry and reference it in the parent one. +#### 9.3 Row mode, single new Entry, parse to root -<b>How to import Labfolder data into NOMAD:</b> +As explained in the first section of not possible cases, when parsing in row mode we create multiple instances that cannot remain as standalone floating objects. They must be organized as a list in a subsection of the parent Entry. -To get your data transferred to NOMAD, first go to NOMAD's upload page and create a new upload. -Then click on `CREATE ENTRY` button. Select a name for your entry and pick `Labfolder Project Import` from -the `Built-in schema` dropdown menu. Then click on `CREATE`. This creates an entry where you can -insert your user information. Fill the `Project url`, `Labfolder email` and `password` fields. Once completed, -click on the `save icon` in the -top-right corner of the screen. This triggers NOMAD's parser to populate the schema of current ELN. -Now the metadata and all files of your Labfolder project should be populated in this entry. +#### 9.4 Column mode, multiple new entries, parse to root -The `elements` section lists all the data and files in your projects. There are 6 main data types -returned by Labfolder's API: `DATA`, `FILE`, `IMAGE`, `TABLE`, `TEXT` and `WELLPLATE`. `DATA` element is -a special Labfolder element where the data is structured in JSON format. Every data element in NOMAD has a special -`Quantity` called `labfolder_data` which is a flattened and aggregated version of the data content. -`IMAGE` element contains information of any image stored in your Labfolder project. `TEXT` element -contains data of any text field in your Labfodler project. +This case would create a useless set of Entries containing one array quantity each. Usually, when parsing in column mode we want to parse together all the columns in the same section. -### Chemotion integration +#### 9.5 Column mode, multiple new entries, parse to my path -Coming soon +This case would create a useless set of Entries containing one array quantity each. Usually, when parsing in column mode we want to parse together all the columns in the same section. diff --git a/docs/tutorial.md b/docs/tutorial.md deleted file mode 100644 index e8e4945ebff94551ea6e7526297c340ecf092cb2..0000000000000000000000000000000000000000 --- a/docs/tutorial.md +++ /dev/null @@ -1,43 +0,0 @@ -This is a series of short videos that guide you through the main functionality of NOMAD. -It covers the whole data-life cycle: starting with data on your hard drive, -you will learn how to prepare, upload, publish data, and reference them with a DOI. -Furthermore, you will learn how to explore, download, and use data that were published on NOMAD before. -We will perform these steps with NOMAD's graphical user interface and its APIs. - -- [Example data and exercises](https://www.fairmat-nfdi.eu/events/fairmat-tutorial-1/tutorial-1-materials) -- [More videos and tutorials](https://youtube.com/playlist?list=PLrRaxjvn6FDW-_DzZ4OShfMPcTtnFoynT) - -!!! note - The NOMAD seen in the tutorials is an older version with a different color theme, - but all the demonstrated functionality is still available on the current version. - You'll find the NOMAD test installation mentioned in the first video - [here](https://nomad-lab.eu/prod/v1/test/gui/search/entries). - -## Uploading and publishing data - -This tutorial guides you through the basics of going from files on your computer -to a published dataset with DOI. - -<div class="youtube"> -<iframe src="https://www.youtube.com/embed/3rVvfYoUbO0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> -</div> - -## Exploring data on - -This tutorial shows how to use NOMAD's search interface and structured data browsing to explore available data. - -<div class="youtube"> -<iframe src="https://www.youtube.com/embed/38S2U-TIvxE" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> -</div> - - -## Access data via API - -This video tutorial explains the basics of API and shows how to do simple requests -against the NOMAD api. - -<div class="youtube"> -<iframe src="https://www.youtube.com/embed/G1frBCrxC0g" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> -</div> - - diff --git a/docs/tutorial/access_api.md b/docs/tutorial/access_api.md new file mode 100644 index 0000000000000000000000000000000000000000..2330e9c1ae58bd6a725377ada71d469ad0d6c502 --- /dev/null +++ b/docs/tutorial/access_api.md @@ -0,0 +1,13 @@ +This video tutorial explains the basics of API and shows how to do simple requests +against the NOMAD API. + +!!! note + The NOMAD seen in the tutorials is an older version with a different color theme, + but all the demonstrated functionality is still available on the current version. + You'll find the NOMAD test installation mentioned in the first video + [here](https://nomad-lab.eu/prod/v1/test/gui/search/entries). + +<div class="youtube"> +<iframe src="https://www.youtube.com/embed/G1frBCrxC0g" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> +</div> + diff --git a/docs/tutorial/builtin.md b/docs/tutorial/builtin.md new file mode 100644 index 0000000000000000000000000000000000000000..d0ff3d97ff0f06bb885954d14b2af9ac9f46206a --- /dev/null +++ b/docs/tutorial/builtin.md @@ -0,0 +1,3 @@ +!!! attention + + This part of the documentation is still work in progress. diff --git a/docs/tutorial/custom.md b/docs/tutorial/custom.md new file mode 100644 index 0000000000000000000000000000000000000000..964dcdaf97ff32c7c250a47a2e79be0c004ec120 --- /dev/null +++ b/docs/tutorial/custom.md @@ -0,0 +1,176 @@ +## What is a custom schema + +!!! attention + + This part of the documentation is still work in progress. + +An example of custom schema written in YAML language. + +```yaml +definitions: + name: 'My test ELN' + sections: + MySection: + base_sections: + - nomad.datamodel.data.EntryData + m_annotations: + eln: + quantities: + my_array_quantity_1: + type: str + shape: ['*'] + my_array_quantity_2: + type: str + shape: ['*'] +``` + +## The base sections + +!!! attention + + This part of the documentation is still work in progress. + +## Use of YAML files + +!!! attention + + This part of the documentation is still work in progress. + +## The built-in tabular parser + +NOMAD provides a standard parser to import your data from a spreadsheet file (`Excel` file with .xlsx extension) or from a CSV file (a Comma-Separated Values file with .csv extension). There are several ways to parse a tabular data file into a structured [data file](../explanation/data.md#data), depending on which structure we want to give our data. Therefore, the tabular parser can be set very flexibly, directly from the [schema file](../explanation/data.md#schema) through [annotations](../schemas/elns.md#annotations). +In this tutorial we will focus on most common modes of the tabular parser. A complete description of all modes is given in the [Reference](../reference/annotations.md#tabular_parser) section. You can also follow the dedicated [How To](../schemas/tabular.md) to see practical examples of the NOMAD tabular parser, in each section you can find a commented sample schema with a step-by-step guide on how to set it to obtain the desired final structure of your parsed data. +We will make use of the tabular parser in a custom yaml schema. To obtain some structured data in NOMAD with this parser:<br /> + +1) the schema files should follow the NOMAD [archive files](../explanation/data.md#archive-files-a-shared-entry-structure) naming convention (i.e. `.archive.json` or `.archive.yaml` extension)<br /> +2) a data file must be instantiated from the schema file<br /> + + [comment]: <> (--> a link to the part upload etc should be inserted) + +3) a tabular data file must be dragged in the annotated [quantity](../schemas/basics.md#quantities) in order for NOMAD to parse it (the quantity is called `data_file` in the following examples) + +### To be an Entry or not to be an Entry + +To use this parser, three kinds of annotation must be included in the schema: `tabular`, `tabular_parser`, `label_quantity`. Refer to the dedicated [Reference](../reference/annotations.md#tabular-data) section for the full list of options. + +!!! important + The ranges of the three `mapping_options`, namely `file_mode`, `mapping_mode`, and `sections` can give rise to twelve different combinations (see table in [Reference](../reference/annotations.md#available-combinations)). It is worth to analyze each of them to understand which is the best choice to pursue from case to case. + Some of them give rise to "not possible" data structures but are still listed for completeness, a brief explanation of why it is not possible to implement them is also provided. + The main bring-home message is that a tabular data file can be parsed in one or more entries in NOMAD, giving rise to diverse and arbitrarily complex structures. + +In the following sections, two examples will be illustrated. A [tabular data file](../schemas/tabular.md#preparing-the-tabular-data-file) is parsed into one or more [data archive files](../explanation/data.md#data), their structure is based on a [schema archive file](../explanation/data.md#schema). NOMAD archive files are denoted as Entries. + +!!! note + From the NOMAD point of view, a schema file and a data file are the same kind of file where different sections have been filled (see [archive files description](../explanation/data.md#archive-files-a-shared-entry-structure)). Specifically, a schema file has its `definitions` section filled while a data file will have its `data` section filled. See [How to write a schema](../schemas/basics.md#uploading-schemas) for a more complete description of an archive file. + +### Example 1 + +We want instantiate an object created from the schema already shown in the first [Tutorial section](#what-is-a-custom-schema) and populate it with the data contained in the following excel file. + +<p align="center" width="100%"> + <img width="30%" src="../schemas/2col.png"> +</p> + +The two columns in the file will be stored in a NOMAD Entry archive within two array quantities, as shown in the image below. In the case where the section to be filled is not in the root level of our schema but nested inside, it is useful to check the dedicated [How-to](../schemas/tabular.md#2-column-mode-current-entry-parse-to-my-path). + +<p align="center" width="100%"> + <img width="100%" src="../tutorial/tabular-1.png"> +</p> + +The schema will be decorated by the annotations mentioned at the beginning of this section and will look like this: + +```yaml +definitions: + name: 'My test ELN' + sections: + MySection: + base_sections: + - nomad.datamodel.data.EntryData + - nomad.parsing.tabular.TableData + m_annotations: + eln: + quantities: + data_file: + type: str + default: test.xlsx + m_annotations: + tabular_parser: + parsing_options: + comment: '#' + mapping_options: + - mapping_mode: column + file_mode: current_entry + sections: + - '#root' + browser: + adaptor: RawFileAdaptor + eln: + component: FileEditQuantity + my_array_quantity_1: + type: str + shape: ['*'] + m_annotations: + tabular: + name: "My header 1" + my_array_quantity_2: + type: str + shape: ['*'] + m_annotations: + tabular: + name: "My header 2" +``` + +Here the tabular data file is parsed by columns, directly within the Entry where the `TableData` is inherited and filling the quantities in the root level of the schema (see dedicated how-to to learn [how to inherit tabular parser in your schema](../schemas/tabular.md#inheriting-the-tabledata-base-section)). + +!!! note + In yaml files a dash character indicates a list element. `mapping_options` is a list because it is possible to parse multiple tabular sheets from the same schema with different parsing options. `sections` in turn is a list because multiple sections of the schema can be parsed with same parsing options. + +### Example 2 + +<p align="center" width="100%"> + <img width="100%" src="../tutorial/tabular-6.png"> +</p> + +In this example, each row of the tabular data file will be placed in a new Entry that is an instance of a class defined in the schema. This would make sense for, say, an inventory spreadsheet where each row can be a separate entity such as a sample, a substrate, etc. +In this case, a manyfold of Entries will be generated based on the only class available in the schema. These Entries will not be bundled together by a parent Entry but just live in our NOMAD Upload as a spare list, to bundle them together it is useful to check the dedicated [How-to](../schemas/tabular.md#7-row-mode-multiple-new-entries-parse-to-my-path). They might still be referenced manually inside an overarching Entry, such as an experiment Entry, from the ELN with `ReferenceEditQuantity`. + +```yaml +definitions: + name: 'My test ELN' + sections: + MySection: + base_sections: + - nomad.datamodel.data.EntryData + - nomad.parsing.tabular.TableData + m_annotations: + eln: + more: + label_quantity: my_quantity_1 + quantities: + data_file: + type: str + default: test.xlsx + m_annotations: + tabular_parser: + parsing_options: + comment: '#' + mapping_options: + - mapping_mode: row + file_mode: multiple_new_entries + sections: + - '#root' + browser: + adaptor: RawFileAdaptor + eln: + component: FileEditQuantity + my_quantity_1: + type: str + m_annotations: + tabular: + name: "My header 1" + my_quantity_2: + type: str + m_annotations: + tabular: + name: "My header 2" +``` \ No newline at end of file diff --git a/docs/tutorial/explore.md b/docs/tutorial/explore.md new file mode 100644 index 0000000000000000000000000000000000000000..c5225f98ac04467b1d57f889fbd337f74f189b0f --- /dev/null +++ b/docs/tutorial/explore.md @@ -0,0 +1,11 @@ +This tutorial shows how to use NOMAD's search interface and structured data browsing to explore available data. + +!!! note + The NOMAD seen in the tutorials is an older version with a different color theme, + but all the demonstrated functionality is still available on the current version. + You'll find the NOMAD test installation mentioned in the first video + [here](https://nomad-lab.eu/prod/v1/test/gui/search/entries). + +<div class="youtube"> +<iframe src="https://www.youtube.com/embed/38S2U-TIvxE" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> +</div> diff --git a/docs/tutorial/plugins.md b/docs/tutorial/plugins.md new file mode 100644 index 0000000000000000000000000000000000000000..ff9ce6b1fdefac1dd73830d8d8701d3b85ded7e9 --- /dev/null +++ b/docs/tutorial/plugins.md @@ -0,0 +1,45 @@ +!!! attention + + This part of the documentation is still work in progress. + + + +## Custom normalizers + +For custom schemas, you might want to add custom normalizers. All files are parsed +and normalized when they are uploaded or changed. The NOMAD metainfo Python interface +allows you to add functions that are called when your data is normalized. + +Here is an example: + +```python +--8<-- "examples/archive/custom_schema.py" +``` + +To add a `normalize` function, your section has to inherit from `ArchiveSection` which +provides the base for this functionality. Now you can overwrite the `normalize` function +and add you own behavior. Make sure to call the `super` implementation properly to +support schemas with multiple inheritance. + +If we parse an archive like this: + +```yaml +--8<-- "examples/archive/custom_data.archive.yaml" +``` + +we will get a final normalized archive that contains our data like this: + +```json +{ + "data": { + "m_def": "examples.archive.custom_schema.SampleDatabase", + "samples": [ + { + "added_date": "2022-06-18T00:00:00+00:00", + "formula": "NaCl", + "sample_id": "2022-06-18 00:00:00+00:00--NaCl" + } + ] + } +} +``` \ No newline at end of file diff --git a/docs/tutorial/tabular-0.png b/docs/tutorial/tabular-0.png new file mode 100644 index 0000000000000000000000000000000000000000..bf1c71c47e5b64a71c01804f1b3dc0162a9f465d Binary files /dev/null and b/docs/tutorial/tabular-0.png differ diff --git a/docs/tutorial/tabular-1.png b/docs/tutorial/tabular-1.png new file mode 100644 index 0000000000000000000000000000000000000000..fbb6f0612a3488c79503596bb43cae019e433711 Binary files /dev/null and b/docs/tutorial/tabular-1.png differ diff --git a/docs/tutorial/tabular-2.png b/docs/tutorial/tabular-2.png new file mode 100644 index 0000000000000000000000000000000000000000..113161dc7012132d6bc110b2cda6e1807b06cd06 Binary files /dev/null and b/docs/tutorial/tabular-2.png differ diff --git a/docs/tutorial/tabular-3.png b/docs/tutorial/tabular-3.png new file mode 100644 index 0000000000000000000000000000000000000000..2633afded1d20249e4c3b22a7951a4b90e2bc3f7 Binary files /dev/null and b/docs/tutorial/tabular-3.png differ diff --git a/docs/tutorial/tabular-4.png b/docs/tutorial/tabular-4.png new file mode 100644 index 0000000000000000000000000000000000000000..11cb2e9b21a857e2afbcb0e2d934746c793a5eba Binary files /dev/null and b/docs/tutorial/tabular-4.png differ diff --git a/docs/tutorial/tabular-5.png b/docs/tutorial/tabular-5.png new file mode 100644 index 0000000000000000000000000000000000000000..c7833d18df3e5eee7b00ecf6ee1dc988031717fe Binary files /dev/null and b/docs/tutorial/tabular-5.png differ diff --git a/docs/tutorial/tabular-6.png b/docs/tutorial/tabular-6.png new file mode 100644 index 0000000000000000000000000000000000000000..573c788ff69b029c63625bd0b6c170794a8cbc91 Binary files /dev/null and b/docs/tutorial/tabular-6.png differ diff --git a/docs/tutorial/tabular-7.png b/docs/tutorial/tabular-7.png new file mode 100644 index 0000000000000000000000000000000000000000..1cd77800d7ca1797214c0f3c39f92d09aa8133df Binary files /dev/null and b/docs/tutorial/tabular-7.png differ diff --git a/docs/tutorial/tabular-8.png b/docs/tutorial/tabular-8.png new file mode 100644 index 0000000000000000000000000000000000000000..7ce3e9240aee97f8c3f6f066bde7743de1ffeb4f Binary files /dev/null and b/docs/tutorial/tabular-8.png differ diff --git a/docs/tutorial/third_party.md b/docs/tutorial/third_party.md new file mode 100644 index 0000000000000000000000000000000000000000..7d6598a572cd978dadf13a32d513d7c444fbb35a --- /dev/null +++ b/docs/tutorial/third_party.md @@ -0,0 +1,99 @@ +!!! attention + + This part of the documentation is still work in progress. + + +NOMAD offers integration with third-party ELN providers, simplifying the process of connecting +and interacting with external platforms. Three main external ELN solutions that are integrated into NOMAD +are: [elabFTW](https://www.elabftw.net/), [Labfolder](https://labfolder.com/) and [chemotion](https://chemotion.net/). +The process of data retrieval and data mapping onto NOMAD's schema +varies for each of these third-party ELN provider as they inherently allow for certain ways of communicating with their +database. Below you can find a <b>How-to</b> guide on importing your data from each of these external +repositories. + + +## elabFTW integration + +elabFTW is part of [the ELN Consortium](https://github.com/TheELNConsortium) +and supports exporting experimental data in ELN file format. ELNFileFormat is a zipped file +that contains <b>metadata</b> of your elabFTW project along with all other associated data of +your experiments. + +<b>How to import elabFTW data into NOMAD:</b> + +Go to your elabFTW experiment and export your project as `ELN Archive`. Save the file to your filesystem under +your preferred name and location (keep the `.eln` extension intact). +To parse your ebalFTW data into NOMAD, +go to the upload page of NOMAD and create a new upload. In the `overview` page, upload your exported file (either by +drag-dropping it into the <i>click or drop files</i> box or by navigating to the path where you stored the file). +This causes triggering NOMAD's parser to create as many new entries in this upload as there are experiments in your +elabFTW project. + +You can inspect the parsed data of each of your entries (experiments) by going to the <b>DATA</b> +tab of each Entry page. Under <i>Entry</i> column, click on <i>data</i> section. Now a new lane titled +`ElabFTW Project Import` should be visible. Under this section, (some of) the metadata of your project is listed. +There two sub-sections: 1) <b>experiment_data</b>, and 2) <b>experiment_files</b>. + +<b>experiment_data</b> section contains detailed information of the given elabFTW experiment, such as +links to external resources and extra fields. <b>experiment_files</b> section is a list of sub-sections +containing metadata and additional info of the files associated with the experiment. + + +## Labfolder integration + +Labfolder provides API endpoints to interact with your ELN data. NOMAD makes API calls to +retrieve, parse and map the data from your Labfolder instance/database to a NOMAD's schema. +To do so, the necessary information are listed in the table below: + +<i>project_url</i>: + The URL address to the Labfolder project. it should follow this pattern: + 'https://your-labfolder-server/eln/notebook#?projectIds=your-project-id'. This is used to setup + the server and initialize the NOMAD schema. + +<i>labfolder_email</i>: + The email (user credential) to authenticate and login the user. <b>Important Note</b>: this + information <b>is discarded</b> once the authentication process is finished. + +<i>password</i>: + The password (user credential) to authenticate and login the user. <b>Important Note</b>: this + information <b>is discarded</b> once the authentication process is finished. + +<b>How to import Labfolder data into NOMAD:</b> + +To get your data transferred to NOMAD, first go to NOMAD's upload page and create a new upload. +Then click on `CREATE ENTRY` button. Select a name for your Entry and pick `Labfolder Project Import` from +the `Built-in schema` dropdown menu. Then click on `CREATE`. This creates an Entry where you can +insert your user information. Fill the `Project url`, `Labfolder email` and `password` fields. Once completed, +click on the `save icon` in the +top-right corner of the screen. This triggers NOMAD's parser to populate the schema of current ELN. +Now the metadata and all files of your Labfolder project should be populated in this Entry. + +The `elements` section lists all the data and files in your projects. There are 6 main data types +returned by Labfolder's API: `DATA`, `FILE`, `IMAGE`, `TABLE`, `TEXT` and `WELLPLATE`. `DATA` element is +a special Labfolder element where the data is structured in JSON format. Every data element in NOMAD has a special +`Quantity` called `labfolder_data` which is a flattened and aggregated version of the data content. +`IMAGE` element contains information of any image stored in your Labfolder project. `TEXT` element +contains data of any text field in your Labfodler project. + +## Chemotion integration + +NOMAD supports importing your data from Chemotion repository via `chemotion` parser. The parser maps +your data that is structured under chemotion schema, into a predefined NOMAD schema. From your Chemotion +repo, you can export your entire data as a zip file which then is used to populate NOMAD schema. + +<b>How to import Chemotion data into NOMAD:</b> + +Go to your Chemotion repository and export your project. Save the file to your filesystem under +your preferred name and location (`your_file_name.zip`). +To get your data parsed into NOMAD, +go to the upload page of NOMAD and create a new upload. In the `overview` page, upload your exported file (either by +drag-dropping it into the <i>click or drop files</i> box or by navigating to the path where you stored the file). +This causes triggering NOMAD's parser to create one new Entry in this upload. + +You can inspect the parsed data of each of this new Entry by navigating to the <b>DATA</b> +tab of the current Entry page. Under <i>Entry</i> column, click on <i>data</i> section. Now a new lane titled +`Chemotion Project Import` should be visible. Under this section, (some of) the metadata of your project is listed. +Also, there are various (sub)sections which are either filled depending on whether your datafile +contains information on them. + +If a section contains an image (or attachment) it is appended to the same section under `file` Quantity. diff --git a/docs/tutorial/upload_publish.md b/docs/tutorial/upload_publish.md new file mode 100644 index 0000000000000000000000000000000000000000..08b18fb28f9a2567d4b3f2a0cd079a4c925157a4 --- /dev/null +++ b/docs/tutorial/upload_publish.md @@ -0,0 +1,17 @@ +This tutorial guides you through the basics of going from files on your computer +to a published dataset with DOI. + +It covers the whole data-life cycle: starting with data on your hard drive, +you will learn how to prepare, upload, publish data, and reference them with a DOI. +Furthermore, you will learn how to explore, download, and use data that were published on NOMAD before. +We will perform these steps with NOMAD's graphical user interface and its APIs. + +!!! note + The NOMAD seen in the tutorials is an older version with a different color theme, + but all the demonstrated functionality is still available on the current version. + You'll find the NOMAD test installation mentioned in the first video + [here](https://nomad-lab.eu/prod/v1/test/gui/search/entries). + +<div class="youtube"> +<iframe src="https://www.youtube.com/embed/3rVvfYoUbO0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> +</div> \ No newline at end of file diff --git a/examples/archive/required.py b/examples/archive/required.py index e9ca7ce7aea7f56b5c57fab611661ee764e6d9e5..9a066a635e58d9f24d3972f0cbbb34392da30d70 100644 --- a/examples/archive/required.py +++ b/examples/archive/required.py @@ -1,6 +1,6 @@ import json -from nomad.archive.query_reader import ArchiveReader +from nomad.graph.graph_reader import ArchiveReader # assume this is our archive archive = { @@ -56,7 +56,7 @@ query = { print(json.dumps(ArchiveReader.read_required(archive, query))) # { -# "m_archive":{ +# "archive":{ # "results":{ # "properties":{ # "electronic":{ @@ -98,7 +98,7 @@ query = { print(json.dumps(ArchiveReader.read_required(archive, query))) # { -# "m_archive":{ +# "archive":{ # "workflow":[ # { # "calculation_result_ref":{ @@ -142,7 +142,7 @@ query = { print(json.dumps(ArchiveReader.read_required(archive, query))) # { -# "m_archive": { +# "archive": { # "workflow": [ # { # "calculation_result_ref": { @@ -193,7 +193,7 @@ query = { print(json.dumps(ArchiveReader.read_required(archive, query))) # { -# "m_archive":{ +# "archive":{ # "workflow":[ # { # "calculation_result_ref":{ @@ -235,7 +235,7 @@ query = { with ArchiveReader(query) as reader: print(json.dumps(reader.read(archive))) # { -# "m_archive":{ +# "archive":{ # "workflow":[ # { # "calculation_result_ref":{ diff --git a/examples/data/apm/README.md b/examples/data/apm/README.md index fb7c80f4591a562d3736f03733b17d5c46e0abb4..95fd7af42544702b2d4c708e36cf069a87d72708 100644 --- a/examples/data/apm/README.md +++ b/examples/data/apm/README.md @@ -1,110 +1,105 @@ -# An Electronic Lab Notebook (ELN) Example for Atom Probe Microscopy (APM) - -## Introduction - -This example shows how the NOMAD ELN functionalities can be used to collect -required metadata for groups, fields, and attributes for creating a dataset -which is compliant with the NeXus NXapm application definition. - -The NeXus NXapm data model is documented here [NXapm](https://fairmat-experimental.github.io/nexus-fairmat-proposal) - -Specifically, this example works together with vendor/community file formats -(POS, ePOS, APT, and RNG or RRNG, respectively) which contain the tomographic -reconstruction and associated ranging data to interpret ion species from -mass-to-charge-state ratio values. This ELN can be used to collect metadata which -are currently not stored in vendor or community files including details about the -specimen, the instrument, users, and post-processing steps. - +# Tutorial for parsing data from atom probe microscopy + +## Scope +This example combines a set of configured components of NOMAD +to collect metadata specific for atom probe and combine these with +reconstructed and ranged atom probe datasets available in different +domain-specific file formats. Specifically, the tutorial shows how +functionalities of a NOMAD electronic lab notebook (ELN) instance +customized for atom probe, the `apm` dataconverter offered through +the `pynxtools` NeXus parser, the `NXapm` NeXus data schema, and +several NOMAD core functionalities work together to create +atom-probe-domain-specific NOMAD entries with respective default +plots for `h5web`. + +## Getting started +1. Click the respective button to execute the example. +2. Wait for NOMAD to instantiate the example for you. +3. Check that you are in the `Uploads` section (menu bar). +4. Select the generated upload. +5. Explore its content by clicking on the arrow keys (to the right side of a file). +6. Modify the input file in the NOMAD ELN to match your dataset. + You can also use the drag-and-drop functionality to drop your + reconstruction and ranging definition file inside the ELN and remove + the example reconstruction and ranging file. +7. Click `save` to trigger a reprocessing of your upload which will + update and reprocess the NeXus/HDF5 NXapm entries for you. +8. Explore its content via e.g. the preview or via the `Entries` + (select from the menu bar). + +## Which input is supported by this example? +This example works with the following community file formats (POS, ePOS, APT as +from AP Suite, and RNG, RRNG) which contain the tomographic reconstruction and +associated ranging definitions for interpreting ion species from mass-to-charge-state +ratio values respectively. Furthermore, there is support for simple text file based +ranging definitions to make also ranging definitions of e.g. Matlab figures parsable. +Matlab figure have to be converted into a text file representation of the ranging +definitions because a Matlab figure file cannot right now be interpreted by NOMAD). + +The ELN is used to collect metadata which are currently not stored typically in +the reconstruction and ranging definitions. The ELN is configured in this example +to collect details about the specimen, the instrument, users, and some +post-processing steps. The `apm` reader analyses the charge states of the +iontypes. + +## Which data artefacts should I expect to find? This example upload contains the following entries: - A schema in NOMAD's *archive.yaml* format: *nxapm.schema.archive.yaml* -- A schema instance file used by NOMAD *nxapm.archive.json* which is filled for educational purpose with values for the example. -- The primary consumer of this json file is NOMAD and its internal data management system. -- Another schema instance file used by the nomad-parser-nexus *eln_data.yaml*. This file contains all entered -quantities from the ELN GUI (after the save button was stored). -The example is also filled for educational purpose with values matching those in nxapm.archive.json. -This file stores metadata with value and units. The file is updated each time the save button in the ELN GUI is clicked. -The file is used by the [NOMAD-PARSER-NEXUS](https://github.com/nomad-coe/nomad-parser-nexus) which creates -NeXus files, like those for atom probe matching the NXapm application definition. - -This example is configured to take an example dataset and call the nomad-parser-nexus dataconverter -which creates a NeXus file that is compliant with NXapm. Once completed, this file is available -in the upload section/staging area. This makes also these files explorable with H5Web visualization -through the files menu. - -This example comes with a measured dataset which is meant for testing and exploration of the ELN and -NORTH container functionalities. The scientific dataset is a tomographic reconstruction of an -ODS steel specimen which was measured and characterized by [J. Wang and coworkers](https://doi.org/10.1017/S1431927618015386) -- R31_06365-v02.pos (the reconstruction) -- R31_06365-v02.rrng (the range file) - -## Creating NeXus files - -When you modify the content inside the ELN and click the save button, the data from the ELN will -be parsed and combined with the POS and RRNG file to create the NXS file. You can replace -these files with your own and accordingly use the ELN to enter metadata for your own datasets. -Upon saving, a NeXus/HDF5 file will be created for your specific dataset. - -The drag-and-drop functionality of the upload section can be used to pass your reconstruction -and range file onto the respective file upload fields of the ELN. After clicking the save button, -the newly entered metadata and files will be processed on-the-fly and a NeXus file, -compliant with NXapm will be generated. - -Currently, the implementation supports reconstructions in POS, ePOS and APT file format -(the one generated by APSuite from AMETEK/Cameca). Range files are accepted in -RNG or RRNG format. - -## Where to go from now - -With an example in your upload **you should go to the Analytics tab in the** NOMAD OASIS menu bar -and **start up the apmtools container**. The container connects your upload with a set of -containerized software tools for post-processing and exploring atom probe data in substantial more detail. - -These tools contain currently the -- [Leoben APT_analyzer](https://github.com/areichm/APT_analyzer) by Alexander Reichmann et al. (Lorenz Romaner's team at Montanuniversität Leoben) -- The [paraprobe-toolbox](https://gitlab.com/paraprobe/paraprobe-toolbox) by Markus Kühbach et al. (developed mainly at his time with the Max-Planck-Institut für Eisenforschung GmbH) - -**Once running, the apmtools container offers a jupyter lab server in which the tools are installed.** -**Further examples are available in the container. To access these you can start with the Cheatsheet.ipynb** -inside the **/home/atom_probe_tools directory.** - -Once you have explored the example datasets you should also explore and realize that the -containers are mounted with your uploads section. The respective directory in the apmtools container -is the **/config** directory. The key benefit of this container design is that you can use a simple -command in a jupyter notebook cell after your analyses - -``` -! mv *.png /config -``` - -This will move for example all generated figures (replace the file extension with a specific -name or file type) from the working directory in the container into your upload section. -H5Web can be used to display the content of HDF5 files, such as results and config files -of the paraprobe-toolbox. Please keep in mind that the config files for the tools of the -paraprobe-toolbox are already fully described with NeXus. You can find the respective schema descriptions here -[NXapm_paraprobe](https://fairmat-experimental.github.io/nexus-fairmat-proposal) - -The result files of these tools however are not yet fully described with NeXus, so no default plots will -be available here but you can still conveniently explore all the data as they are HDF5 files -which H5Web can present to you. - -## Summary - -The example is meant as a starting point. You can download the schema file and extend it to collect -further metadata (e. g. for adding optional quantities defined in NXapm) based on what is relevant for -your laboratory and use case. Also you can explore the implementation of the example to customize it for -your own needs. We would be happy if you could support us with improving this example and the associated -schemes by leaving us comments via the nexus-fairmat-proposal pages or by contacting us via -the various channels. We are also very happy to guide you on how to customize these functionalities -for your own laboratory and needs. - -Consult our [documentation on the NOMAD Archive and Metainfo](https://nomad-lab.eu/prod/v1/docs/archive.html) -to learn more about schemes. - -## Questions, comments, suggestions? - -For general questions regarding the APM tools and if you're interested in building one for your -own research workflow or your colleagues and group, you are very welcome -[Markus Kühbach](https://www.fair-di.eu/fairmat/fairmat_/fairmatteam) from the FAIRmat consortium. - -## Known bugs - +- A schema instance file as used and generated by NOMAD *nxapm.archive.json*. + For educational purposes this file is filled with values but it is the + user's responsibility to check that these metadata match their dataset. +- Another schema instance file *eln_data.yaml*. This file contains a plain + view of all entered/modified quantities including their units. This file is + updated with clicking the `save` button. This file should not be edited + manually. Instead, edit the schema instance using the NOMAD GUI. +- Another schema instance file *apm.oasis.specific.yaml*. This file contains + metadata that for specific local NOMAD OASIS installations should become + overwritten to reduce the complexity of ELN templates. + +## Which data schema is used? +Specifically the ELN template is configured such that its terminology matches to +the [NXapm](https://fairmat-nfdi.github.io/nexus-fairmat-proposal) NeXus data schema. + +## Acknowledgements +This example comes with real world dataset which were measured and characterized +by members of the international atom probe community. +[Details can be found here:](https://www.zenodo.org/record/7908429#.ZFt6Ds5By38) + +## Where to raise questions, comments, and suggestions? +You are very welcome to approach us with all sorts of questions, and +feature requests. [Markus Kühbach](https://www.fairmat-nfdi.eu/fairmat/about-fairmat/team-fairmat) +is the respective contact person within the FAIRmat consortium. +Feel free and [create a GitHub issue](https://github.com/FAIRmat-NFDI/pynxtools) to point us to +specific questions, experiences, or problems. + +## Where to go from now? +Provided the upload was successful and your NOMAD OASIS is using a working JupyterHub +configuration, you can also work, i.e. analyze your atom probe data using NOMAD via the +apmtools container. For this your NOMAD OASIS instance needs a working JupyterHub and +has to be configured to include the NOMAD Remote Tools Hub `north`. + +For this you should go to `Analytics` (menu bar) and select the `NOMAD Remote Tools Hub` +(NORTH). This service and toolset of NOMAD offers a set of preconfigured containers. +As a first example of the possibilities, we have configured the `apmtools` container. + +Currently, `apmtools` is a specific docker container with a graphical user interface +which is accessible via your browser. The container includes three data analysis tools: +- [aptyzer](https://github.com/areichm/APTyzer) by Alexander Reichmann et al. +- [paraprobe-toolbox](https://gitlab.com/paraprobe/paraprobe-toolbox) by Markus Kühbach et al. +- [apav](https://gitlab.com/jesseds/apav) by Jesse Smith et al. + +The container is configured such that the data in your uploads are available via the +`/config/uploads` sub-directory from within the container. Thereby, you can move data +in between the container and the upload section to enrich your upload with specific +post-processing results generated by any of the tools in the container. + +The `apmtools` container comes with a collection of getting started tutorials +via a `Cheatsheet` jupyter notebook which you can access from the `/home/atom_probe_tools` +sub-directory. + +Details dependent on the specific configuration of your NOMAD OASIS. + +## Where to find examples for data schemas of post-processing atom probe data? +Specifically the tutorials for the paraprobe-toolbox inside the `apmtools` +container show you how post-processing of atom probe data can also be documented +using NeXus. [For this we refer to the NXapm_paraprobe-specific examples.](https://fairmat-nfdi.github.io/nexus-fairmat-proposal/) diff --git a/examples/data/apm/apm.archive.json b/examples/data/apm/apm.archive.json index 6a501c4cb7f105e294d4cd1f503ea22da379a895..f619d8d5a32e66f010d980702edd55090f28cb30 100644 --- a/examples/data/apm/apm.archive.json +++ b/examples/data/apm/apm.archive.json @@ -1,88 +1 @@ -{ - "data": { - "m_def": "../upload/raw/nxapm.schema.archive.yaml#/definitions/section_definitions/0", - "reader": "apm", - "nxdl": "NXapm.nxdl", - "input_files": [ - "eln_data.yaml", - "R31_06365-v02.pos", - "R31_06365-v02.rrng" - ], - "entry": { - "attr_version": "nexus-fairmat-proposal successor of 50433d9039b3f33299bab338998acb5335cd8951", - "definition": "NXapm", - "experiment_identifier": "R31-06365-v02", - "experiment_description": "some details for nomad, ODS steel precipitates for testing a developmental clustering algorithm called OPTICS.", - "start_time": "2022-09-20T20:00:00+00:00", - "end_time": "2022-09-22T20:00:00+00:00", - "program": "IVAS", - "program__attr_version": "3.6.4", - "run_number": "6365", - "operation_mode": "apt" - }, - "user": [ - { - "name": "Jing Wang" - }, - { - "name": "Daniel Schreiber" - } - ], - "specimen": { - "name": "ODS-Specimen 1", - "sample_history": "undocumented", - "preparation_date": "2022-09-12T20:01:00+00:00", - "short_title": "ODS", - "atom_types": [ - "Fe", - "Cr", - "Y", - "O" - ], - "description": "ODS steel, i.e. material with Y2O3 dispersoids" - }, - "atom_probe": { - "instrument_name": "LEAP 3000", - "flight_path_length": 0.9, - "fabrication_vendor": "AMETEK/Camcca", - "fabrication_model": "LEAP3000", - "fabrication_identifier": "n/a", - "fabrication_capabilities": "n/a", - "reflectron_applied": true, - "local_electrode_name": "electrode 1", - "ion_detector_type": "mcp_dld", - "ion_detector_name": "none", - "ion_detector_model": "cameca", - "ion_detector_serial_number": "n/a", - "stage_lab_base_temperature": 30, - "analysis_chamber_pressure": 1e-10, - "specimen_monitoring_initial_radius": 30, - "specimen_monitoring_shank_angle": 5, - "specimen_monitoring_detection_rate": 0.6, - "control_software_program": "IVAS", - "control_software_program__attr_version": "3.6.4", - "pulser": { - "pulse_mode": "laser", - "pulse_frequency": 250, - "pulse_fraction": 0.1, - "laser_gun_name": "laser", - "laser_gun_wavelength": 4.8e-7, - "laser_gun_power": 2e-8, - "laser_gun_pulse_energy": 1.2e-11 - } - }, - "reconstruction": { - "program": "IVAS", - "program__attr_version": "3.6.4", - "protocol_name": "cameca", - "parameter": "kf = 1.8, ICF = 1.02, Vat = 60 at/nm^3", - "crystallographic_calibration": "n/a" - }, - "ranging": { - "program": "IVAS", - "program__attr_version": "3.6.4" - }, - "output": "output.nxs" - }, - "m_ref_archives": {} -} \ No newline at end of file +{"data":{"m_def":"../upload/raw/nxapm.schema.archive.yaml#/definitions/section_definitions/0","reader":"apm","nxdl":"NXapm.nxdl","input_files":["eln_data.yaml","Si.apt","Si.RRNG","apm.oasis.specific.yaml"],"output":"apm.nxs","entry":{"experiment_identifier":"Si test","experiment_description":"<p>Normal</p>\n<p><strong>Bold</strong></p>\n<p><em>Italics</em></p>","start_time":"2023-06-12T13:57:00+00:00","end_time":"2023-06-12T13:57:00+00:00","run_number":"2121","operation_mode":"apt"},"sample":{"composition":["Si","Cr 2 +- 0.5","C 50 ppm +- 12"],"grain_diameter":200,"grain_diameter_error":50,"heat_treatment_temperature":600,"heat_treatment_temperature_error":20,"heat_treatment_quenching_rate":150,"heat_treatment_quenching_rate_error":10},"specimen":{"name":"Si","preparation_date":"2023-06-12T13:59:00+00:00","is_polycrystalline":false,"alias":"Si"},"user":[{"name":"MarkusK"},{"name":"Jesse Smith"}],"atom_probe":{"status":"success","instrument_name":"LEAP","location":"Denton","flight_path_length":1.2,"field_of_view":20,"fabrication_vendor":"Cameca","fabrication_model":"LEAP3000","fabrication_identifier":"12","fabrication_capabilities":"n/a","reflectron_applied":true,"ion_detector_type":"mcp_dld","ion_detector_name":"n/a","ion_detector_model":"n/a","ion_detector_serial_number":"n/a","stage_lab_base_temperature":20,"analysis_chamber_pressure":2e-10,"specimen_monitoring_initial_radius":20,"specimen_monitoring_shank_angle":5,"specimen_monitoring_detection_rate":0.8,"control_software_program":"IVAS","control_software_program__attr_version":"3.6.8","pulser":{"pulse_mode":"laser","pulse_frequency":250,"pulse_fraction":0.8,"laser_source":[{"name":"laser1","wavelength":254,"power":12,"pulse_energy":20},{"name":"laser2","wavelength":355,"power":24,"pulse_energy":40}]},"local_electrode_name":"L1"},"reconstruction":{"program":"IVAS","program__attr_version":"3.6.8","protocol_name":"bas","parameter":"kf = 1.8, icf = 3.3","crystallographic_calibration":"n/a"},"ranging":{"program":"IVAS","program__attr_version":"3.6.8"}}} \ No newline at end of file diff --git a/examples/data/apm/apm.oasis.specific.yaml b/examples/data/apm/apm.oasis.specific.yaml new file mode 100644 index 0000000000000000000000000000000000000000..82394f07eb8c93b77409e6e17b02af9a8d8c417d --- /dev/null +++ b/examples/data/apm/apm.oasis.specific.yaml @@ -0,0 +1 @@ +location: Leoben diff --git a/examples/data/apm/downloads.archive.yaml b/examples/data/apm/downloads.archive.yaml index f1fc960c656162cf75d8694642c1f1256857200d..013831effa7e6d58cb62f6a4514d64e619f81c91 100644 --- a/examples/data/apm/downloads.archive.yaml +++ b/examples/data/apm/downloads.archive.yaml @@ -3,6 +3,12 @@ data: mainfiles: - apm.archive.json downloads: - - url: https://zenodo.org/record/6808516/files/R31_06365-v02.tar.gz?download=1 - output: R31_06365-v02.tar.gz - extract: true \ No newline at end of file + - url: https://zenodo.org/record/7908429/files/usa_denton_smith_apav_si.zip?download=1 + output: usa_denton_smith_apav_si.zip + extract: true + # - url: https://zenodo.org/record/7908429/files/usa_portland_wang.zip?download=1 + # output: usa_portland_wang.zip + # extract: true + # - url: https://www.zenodo.org/record/7885531/files/apm_sprint14_apav_usa_denton_smith.zip?download=1 + # output: apm_sprint14_apav_usa_denton_smith.zip + # extract: true \ No newline at end of file diff --git a/examples/data/apm/eln_data.yaml b/examples/data/apm/eln_data.yaml index 5eea73472718d094ecc038098fe6a1fcd9d26cac..5e324df03e304aeb6da2fe11b91b39783c0cedec 100644 --- a/examples/data/apm/eln_data.yaml +++ b/examples/data/apm/eln_data.yaml @@ -1,81 +1,113 @@ atom_probe: analysis_chamber_pressure: unit: torr - value: 1.0e-10 + value: 2.0e-10 control_software_program: IVAS - control_software_program__attr_version: 3.6.4 + control_software_program__attr_version: 3.6.8 fabrication_capabilities: n/a - fabrication_identifier: n/a + fabrication_identifier: '12' fabrication_model: LEAP3000 - fabrication_vendor: AMETEK/Camcca + fabrication_vendor: Cameca + field_of_view: + unit: nm + value: 20.0 flight_path_length: unit: m - value: 0.9 - instrument_name: LEAP 3000 - ion_detector_model: cameca - ion_detector_name: none + value: 1.2 + instrument_name: LEAP + ion_detector_model: n/a + ion_detector_name: n/a ion_detector_serial_number: n/a ion_detector_type: mcp_dld - local_electrode_name: electrode 1 + local_electrode_name: L1 + location: Denton pulser: - laser_gun_name: laser - laser_gun_power: - unit: W - value: 2.0e-08 - laser_gun_pulse_energy: - unit: J - value: 1.2e-11 - laser_gun_wavelength: - unit: m - value: 4.8e-07 - pulse_fraction: 0.1 + laser_source: + - name: laser1 + power: + unit: nW + value: 12.0 + pulse_energy: + unit: pJ + value: 20.0 + wavelength: + unit: nm + value: 254.0 + - name: laser2 + power: + unit: nW + value: 24.0 + pulse_energy: + unit: pJ + value: 40.0 + wavelength: + unit: nm + value: 355.0 + pulse_fraction: 0.8 pulse_frequency: unit: kHz - value: 250 + value: 250.0 pulse_mode: laser reflectron_applied: true - specimen_monitoring_detection_rate: 0.6 + specimen_monitoring_detection_rate: 0.8 specimen_monitoring_initial_radius: unit: nm - value: 30 + value: 20.0 specimen_monitoring_shank_angle: unit: ° - value: 5 + value: 5.0 stage_lab_base_temperature: unit: K - value: 30 + value: 20.0 + status: success entry: - attr_version: nexus-fairmat-proposal successor of 50433d9039b3f33299bab338998acb5335cd8951 - definition: NXapm - end_time: '2022-09-22T20:00:00+00:00' - experiment_description: some details for nomad, ODS steel precipitates for testing - a developmental clustering algorithm called OPTICS. - experiment_identifier: R31-06365-v02 + end_time: '2023-06-12T13:57:00+00:00' + experiment_description: '<p>Normal</p> + + <p><strong>Bold</strong></p> + + <p><em>Italics</em></p>' + experiment_identifier: Si test operation_mode: apt - program: IVAS - program__attr_version: 3.6.4 - run_number: '6365' - start_time: '2022-09-20T20:00:00+00:00' + run_number: '2121' + start_time: '2023-06-12T13:57:00+00:00' ranging: program: IVAS - program__attr_version: 3.6.4 + program__attr_version: 3.6.8 reconstruction: crystallographic_calibration: n/a - parameter: kf = 1.8, ICF = 1.02, Vat = 60 at/nm^3 + parameter: kf = 1.8, icf = 3.3 program: IVAS - program__attr_version: 3.6.4 - protocol_name: cameca + program__attr_version: 3.6.8 + protocol_name: bas +sample: + composition: + - Si + - Cr 2 +- 0.5 + - C 50 ppm +- 12 + grain_diameter: + unit: µm + value: 200.0 + grain_diameter_error: + unit: µm + value: 50.0 + heat_treatment_quenching_rate: + unit: K / s + value: 150.0 + heat_treatment_quenching_rate_error: + unit: K / s + value: 10.0 + heat_treatment_temperature: + unit: K + value: 600.0 + heat_treatment_temperature_error: + unit: K + value: 20.0 specimen: - atom_types: - - Fe - - Cr - - Y - - O - description: ODS steel, i.e. material with Y2O3 dispersoids - name: ODS-Specimen 1 - preparation_date: '2022-09-12T20:01:00+00:00' - sample_history: undocumented - short_title: ODS + alias: Si + is_polycrystalline: false + name: Si + preparation_date: '2023-06-12T13:59:00+00:00' user: -- name: Jing Wang -- name: Daniel Schreiber +- name: MarkusK +- name: Jesse Smith diff --git a/examples/data/apm/nxapm.schema.archive.yaml b/examples/data/apm/nxapm.schema.archive.yaml index 958a17c66b8a0813613018e925856a3856c9da68..0a45451dc66385f3d30987dd89a2a7a5589ddc32 100644 --- a/examples/data/apm/nxapm.schema.archive.yaml +++ b/examples/data/apm/nxapm.schema.archive.yaml @@ -3,16 +3,12 @@ # quantity in NXapm definitions: name: 'apm' - # 'ELN/application definition schema for atom probe microscopy (APM) experiments.' - sections: # section definitions what were back in the old days msection base classes - # Operator: - # Specimen: + # 'ELN/matching NXapm NeXus appdef data schema for atom probe' + sections: # section definitions what were back in the old days msections AtomProbeMicroscopy: # the actual schema - # nomad.datamodel.metainfo.eln.NexusParser base_sections: - 'nomad.datamodel.metainfo.eln.NexusDataConverter' - 'nomad.datamodel.data.EntryData' - # base_section: nomad.datamodel.data.EntryData m_annotations: # Here you can set your default values for the reader and nxdl. template: @@ -22,8 +18,7 @@ definitions: # This would be useful to make the default values set in `template` fixed. # Leave the hide key even if you want to pass an empty list like in this example. eln: - # hide: ['nxdl', 'reader'] - hide: [] + hide: ['nxdl', 'reader'] sub_sections: entry: section: @@ -33,24 +28,6 @@ definitions: eln: overview: true quantities: - attr_version: - type: - type_kind: Enum - type_data: - - 'nexus-fairmat-proposal successor of 50433d9039b3f33299bab338998acb5335cd8951' - description: Hashvalue of the NeXus application definition file - m_annotations: - eln: - component: RadioEnumEditQuantity - definition: - type: - type_kind: Enum - type_data: - - NXapm - description: NeXus NXDL schema to which this file conforms - m_annotations: - eln: - component: RadioEnumEditQuantity experiment_identifier: type: str description: GUID of the experiment @@ -62,40 +39,31 @@ definitions: description: Free text details about the experiment m_annotations: eln: - component: StringEditQuantity + component: RichTextEditQuantity start_time: type: Datetime - description: ISO 8601 time code with local time zone offset to UTC when the experiment started. + description: | + ISO 8601 time code with local time zone offset + to UTC when the experiment started. m_annotations: eln: component: DateTimeEditQuantity end_time: type: Datetime - description: ISO 8601 time code with local time zone offset to UTC when the experiment ended. + description: | + ISO 8601 time code with local time zone offset + to UTC when the experiment ended. m_annotations: eln: component: DateTimeEditQuantity - program: - type: str - description: Name of the program used to create this file. - m_annotations: - eln: - component: StringEditQuantity - program__attr_version: - type: str - description: Version plus build number, commit hash, or description of the program to support reproducibility. - m_annotations: - eln: - component: StringEditQuantity run_number: type: str - description: Identifier in the instrument control software given for this experiment. + description: | + Identifier in the instrument control software + given for this experiment. m_annotations: eln: component: StringEditQuantity - # experiment_documentation(NXnote): - # thumbnail(NXnote): - # attr_type: operation_mode: type: type_kind: Enum @@ -128,6 +96,185 @@ definitions: # m_annotations: # eln: # component: FileEditQuantity + + sample: + section: + description: | + Description of the sample from which the specimen was prepared or + site-specifically cut out using e.g. a focused-ion beam instrument. + m_annotations: + eln: + quantities: + composition: + type: str + shape: ['*'] + description: | + Chemical composition of the sample. The composition from e.g. + a composition table can be added as individual strings. + One string for each element with statements separated via a + single space. The string is expected to have the following format: + Symbol value unit +- stdev + + An example: B 1. +- 0.2, means + composition of boron 1. at.-% +- 0.2 at.%. + If a string contains only a symbol this is interpreted + that the symbol specifies the matrix or remainder element + for the composition table. + + If unit is omitted or named % this is interpreted as at.-%. + Unit can be at% or wt% but all strings have to use either atom + or weight percent but no mixtures. + No unit for stdev should be repeated as it has to be the + same unit as is used for the composition value. + m_annotations: + eln: + component: StringEditQuantity + grain_diameter: + type: np.float64 + unit: micrometer + description: | + Qualitative information about the grain size, here specifically + described as the equivalent spherical diameter of an assumed + average grain size for the crystal ensemble. + m_annotations: + eln: + component: NumberEditQuantity + minValue: 0.0 + defaultDisplayUnit: micrometer + grain_diameter_error: + type: np.float64 + unit: micrometer + description: | + Magnitude of the standard deviation to the grain_diameter. + m_annotations: + eln: + component: NumberEditQuantity + minValue: 0.0 + defaultDisplayUnit: micrometer + heat_treatment_temperature: + type: np.float64 + unit: kelvin + description: | + The temperature of the last heat treatment step before quenching. + m_annotations: + eln: + component: NumberEditQuantity + minValue: 0.0 + defaultDisplayUnit: kelvin + heat_treatment_temperature_error: + type: np.float64 + unit: kelvin + description: | + Magnitude of the standard deviation of the heat_treatment_temperature. + m_annotations: + eln: + component: NumberEditQuantity + minValue: 0.0 + defaultDisplayUnit: kelvin + heat_treatment_quenching_rate: + type: np.float64 + unit: kelvin/second + description: | + Rate of the last quenching step. + m_annotations: + eln: + component: NumberEditQuantity + minValue: 0.0 + defaultDisplayUnit: kelvin/second + heat_treatment_quenching_rate_error: + type: np.float64 + unit: K/s + description: | + Magnitude of the standard deviation of the heat_treatment_quenching_rate. + m_annotations: + eln: + component: NumberEditQuantity + minValue: 0.0 + defaultDisplayUnit: K/s + description: + type: str + description: | + Discouraged free text field which only exists to learn which + additional metadata users would like to enter to support + making improvements to this atom probe example in the future. + m_annotations: + eln: + component: RichTextEditQuantity + specimen: + section: + description: | + Details about the specimen and its immediate environment. + m_annotations: + eln: + quantities: + name: + type: str + description: | + GUID which distinguishes the specimen from all others and especially + the predecessor/origin from where the specimen was cut. + In cases where the specimen was e.g. site-specifically cut from + samples or in cases of an instrument session during which multiple + specimens are loaded, the name has to be descriptive enough to + resolve which specimen on e.g. the microtip array was taken. + This field must not be used for an alias of the specimen. + Instead, use short_title. + m_annotations: + eln: + component: StringEditQuantity + # sample_history: + # type: str + # description: | + # Reference to the location of or a GUID providing as many details + # as possible of the material, its microstructure, and its + # thermo-chemo-mechanical processing/preparation history. + # m_annotations: + # eln: + # component: StringEditQuantity + preparation_date: + type: Datetime + description: | + ISO 8601 time code with local time zone offset to UTC + when the measured specimen surface was prepared last time. + m_annotations: + eln: + component: DateTimeEditQuantity + is_polycrystalline: + type: bool + description: | + Is the specimen, i.e. the tip, polycrystalline, i.e. does + it includes a grain or phase boundary? + m_annotations: + eln: + component: BoolEditQuantity + alias: + type: str + description: | + Possibility to give an abbreviation of the specimen name field. + m_annotations: + eln: + component: StringEditQuantity + # atom_types should be a list of strings + # atom_types: + # type: str + # shape: ['*'] + # description: | + # Use Hill's system for listing elements of the periodic table which + # are inside or attached to the surface of the specimen and thus + # relevant from a scientific point of view. + # m_annotations: + # eln: + # component: StringEditQuantity + description: + type: str + description: | + Discouraged free text field to be used in the case when properly + designed records for the sample_history are not available. + Using this field we can learn which additional metadata users + would like to enter to support making improvements to this + atom probe example in the future. + m_annotations: + eln: + component: RichTextEditQuantity user: repeats: true section: @@ -197,118 +344,40 @@ definitions: m_annotations: eln: component: StringEditQuantity - specimen: + atom_probe: section: description: | - Details about the specimen and its immediate environment. + The instrument and the lab in which it stands. m_annotations: eln: quantities: - name: - type: str - description: | - GUID which distinguishes the specimen from all others and especially - the predecessor/origin from where the specimen was cut. - In cases where the specimen was e.g. site-specifically cut from - samples or in cases of an instrument session during which multiple - specimens are loaded, the name has to be descriptive enough to - resolve which specimen on e.g. the microtip array was taken. - This field must not be used for an alias of the specimen. - Instead, use short_title. - m_annotations: - eln: - component: StringEditQuantity - sample_history: - type: str - description: | - Reference to the location of or a GUID providing as many details - as possible of the material, its microstructure, and its - thermo-chemo-mechanical processing/preparation history. - m_annotations: - eln: - component: StringEditQuantity - preparation_date: - type: Datetime + status: + type: + type_kind: Enum + type_data: + - success + - failure + - unknown description: | - ISO 8601 time code with local time zone offset to UTC information when - the measured specimen surface was actively prepared. - m_annotations: - eln: - component: DateTimeEditQuantity - short_title: - type: str - description: Possibility to give an abbreviation of the specimen name field. + A statement whether the measurement was + successful or failed prematurely. m_annotations: eln: - component: StringEditQuantity - # atom_types should be a list of strings - atom_types: + component: RadioEnumEditQuantity + instrument_name: type: str - shape: ['*'] - description: | - Use Hill's system for listing elements of the periodic table which - are inside or attached to the surface of the specimen and thus - relevant from a scientific point of view. + description: Given name of the atom probe at the hosting institution. m_annotations: eln: component: StringEditQuantity - description: + location: type: str description: | - Discouraged free text field to be used in the case when properly - designed records for the sample_history are not available. - m_annotations: - eln: - component: StringEditQuantity - # composition_element_symbol: - # type: str - # shape: ['*'] - # description: | - # Chemical symbol. - # m_annotations: - # eln: - # component: StringEditQuantity - # composition_mass_fraction: - # type: np.float64 - # shape: ['*'] - # description: | - # Composition but this can be atomic or mass fraction. - # Best is you specify which you want. Under the hood oasis uses pint - # /nomad/nomad/units is the place where you can predefine exotic - # constants and units for a local oasis instance - # m_annotations: - # eln: - # component: NumberEditQuantity - # minValue: 0. - # maxValue: 1. - # composition_mass_fraction_error: - # type: np.float64 - # shape: ['*'] - # description: | - # Composition but this can be atomic or mass fraction. - # Also here best to be specific. If people write at.-% but mean wt.-% you - # cannot guard yourself against this - # m_annotations: - # eln: - # component: NumberEditQuantity - # minValue: 0. - # maxValue: 1. - atom_probe: - section: - description: | - The instrument and the lab in which it stands. - m_annotations: - eln: - quantities: - instrument_name: - type: str - description: Given name of the atom probe at the hosting institution. + Location of the lab or place where the instrument is installed. + Using GEOREF is preferred. m_annotations: eln: component: StringEditQuantity - location: - type: str - description: Location of the lab or place where the instrument is installed. Using GEOREF is preferred. # (NXfabrication): flight_path_length: type: np.float64 @@ -322,13 +391,18 @@ definitions: defaultDisplayUnit: meter minValue: 0.0 maxValue: 10.0 - field_of_view(NX_FLOAT): + field_of_view: type: np.float64 - unit: meter + unit: nanometer description: | The nominal diameter of the specimen ROI which is measured in the experiment. Physically, the specimen cannot be measured completely because ions may launch but not become detected or hit elsewhere. + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: nanometer + minValue: 0.0 fabrication_vendor: type: str description: Name of the manufacturer/company, i.e. AMETEK/Cameca. @@ -417,7 +491,7 @@ definitions: component: NumberEditQuantity defaultDisplayUnit: kelvin minValue: 0.0 - maxValue: 273.15 + maxValue: 300.0 analysis_chamber_pressure: type: np.float64 unit: torr @@ -487,8 +561,8 @@ definitions: type_kind: Enum type_data: - laser - - high_voltage - - laser_and_high_voltage + - voltage + - laser_and_voltage description: | Which pulsing mode was used? m_annotations: @@ -512,41 +586,53 @@ definitions: component: NumberEditQuantity minValue: 0.0 maxValue: 1.0 - laser_gun_name: - type: str - description: Given name/alias. - m_annotations: - eln: - component: StringEditQuantity - laser_gun_wavelength: - type: np.float64 - unit: meter - description: Nominal wavelength of the laser radiation. - m_annotations: - eln: - component: NumberEditQuantity - defaultDisplayUnit: nanometer - minValue: 0.0 - laser_gun_power: - type: np.float64 - unit: watt - description: | - Nominal power of the laser source while - illuminating the specimen. - m_annotations: - eln: - component: NumberEditQuantity - defaultDisplayUnit: nanowatt - minValue: 0.0 - laser_gun_pulse_energy: - type: np.float64 - unit: joule - description: Average energy of the laser at peak of each pulse. - m_annotations: - eln: - component: NumberEditQuantity - defaultDisplayUnit: picojoule - minValue: 0.0 + # LEAP 6000 instrument has up to two lasers + sub_sections: + laser_source: + repeats: True + section: + description: | + Details about each laser pulsing unit. + LEAP6000 instruments can use up to two lasers. + m_annotations: + eln: + quantities: + name: + type: str + description: Given name/alias. + m_annotations: + eln: + component: StringEditQuantity + wavelength: + type: np.float64 + unit: nanometer + description: Nominal wavelength of the laser radiation. + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: nanometer + minValue: 0.0 + power: + type: np.float64 + unit: nanowatt + description: | + Nominal power of the laser source while + illuminating the specimen. + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: nanowatt + minValue: 0.0 + pulse_energy: + type: np.float64 + unit: picojoule + description: | + Average energy of the laser at peak of each pulse. + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: picojoule + minValue: 0.0 # control_software: # section: # description: Which control software was used e.g. IVAS/APSuite diff --git a/examples/data/docs/tabular-parser-col-mode.archive.yaml b/examples/data/docs/tabular-parser-col-mode.archive.yaml index 292f57c0dcd85ac53f905f62b2b77eaf49e8dd04..0ed8c7eb10ee9d29574d1644301ca4aada0925b2 100644 --- a/examples/data/docs/tabular-parser-col-mode.archive.yaml +++ b/examples/data/docs/tabular-parser-col-mode.archive.yaml @@ -15,10 +15,11 @@ definitions: # quantity as files. It will try to interpret the files and fill # quantities in this section (and sub_sections) with the column # data of .csv or .xlsx files. - comment: '#' # Skipping lines in csv or excel file that start with the sign `#` - # column_sections: # Here the relative path to the sub_sections that are supposed to be filled - # from the given excel/csv file. Leaving this empty causes the normalizer to - # parse the entire schema under column mode. + parsing_options: + comment: '#' # Skipping lines in csv or excel file that start with the sign `#` + # column_sections: # Here the relative path to the sub_sections that are supposed to be filled + # from the given excel/csv file. Leaving this empty causes the normalizer to + # parse the entire schema under column mode. My_Quantity: type: str shape: ['*'] diff --git a/examples/data/docs/tabular-parser-complex.archive.yaml b/examples/data/docs/tabular-parser-complex.archive.yaml index 26251323587d9a530c6d5053ea42218d33b6c0e4..bdcc59f2d0b7c0275362dc70fc172fe54ac4d7e8 100644 --- a/examples/data/docs/tabular-parser-complex.archive.yaml +++ b/examples/data/docs/tabular-parser-complex.archive.yaml @@ -38,30 +38,36 @@ definitions: type: str m_annotations: tabular_parser: - sep: ',' - comment: '#' - column_sections: # list of subsections to be parsed by data_file_1 in column mode - - MyColSubsection + parsing_options: + sep: ',' + comment: '#' + mapping_options: + - mapping_mode: column + file_mode: current_entry + sections: # list of subsections to be parsed by data_file_1 in column mode + - MyColSubsection data_file_2: # This data file quantity is responsible to fill the `MyRowSubsection`, # `MySpecialRowSubsection`, and `MyEntrySubsection` subsections as # denoted by both entry_sections and row_sections. type: str m_annotations: tabular_parser: - current_entry: - row_to_sections: - - MyRowSubsection/MyRowCollection - - MySpecialRowSubsection - new_entry: - - row_to_entries: - - MyEntrySubsection - sep: ',' - comment: '#' - target_sub_section: # list of subsections to be parsed by data_file_2 in row mode - - MyRowSubsection/MyRowCollection - - MySpecialRowSubsection - entry_sections: # list of subsections to be parsed by data_file_2 in entry mode - - MyEntrySubsection + parsing_options: + sep: ',' + comment: '#' + mapping_options: + - mapping_mode: row + file_mode: current_entry + sections: # list of subsections to be parsed by data_file_1 in row mode + - MyRowSubsection/MyRowCollection + - mapping_mode: row + file_mode: current_entry + sections: # list of subsections to be parsed by data_file_1 in row mode + - MySpecialRowSubsection + - mapping_mode: row + file_mode: multiple_new_entries + sections: # list of subsections to be parsed by data_file_1 in row mode + - MyEntrySubsection MyRootQuantity: # This quantity lives in the root level which is parsed in the column mode type: str shape: ['*'] diff --git a/examples/data/docs/tabular-parser-entry-mode.archive.yaml b/examples/data/docs/tabular-parser-entry-mode.archive.yaml index d17fc555a6451aa272f98527773de239a08d15e2..0482385a72b08c59e85fced6cc2de06d10f8068f 100644 --- a/examples/data/docs/tabular-parser-entry-mode.archive.yaml +++ b/examples/data/docs/tabular-parser-entry-mode.archive.yaml @@ -13,10 +13,13 @@ definitions: type: str m_annotations: tabular_parser: - new_entry: - - row_to_entries: # This is the reference to where the targeted (sub-)section lies within this example schema file - - root - comment: '#' # Skipping lines in csv or excel file that start with the sign `#` + parsing_options: + comment: '#' # Skipping lines in csv or excel file that start with the sign `#` + mapping_options: + - mapping_mode: row + file_mode: multiple_new_entries + sections: + - '#root' My_quantity: type: str m_annotations: diff --git a/examples/data/docs/tabular-parser-row-mode.archive.yaml b/examples/data/docs/tabular-parser-row-mode.archive.yaml index 522931d6dd2d467ffed7ce6ed1d30bef3ac645b5..30107b51c6517e2c081d5f57b19abd9cd462f916 100644 --- a/examples/data/docs/tabular-parser-row-mode.archive.yaml +++ b/examples/data/docs/tabular-parser-row-mode.archive.yaml @@ -12,10 +12,13 @@ definitions: type: str m_annotations: tabular_parser: - current_entry: - row_to_sections: # This is the reference to where the targeted (sub-)section lies within this example schema file - - My_Subsection/My_Section - comment: '#' # Skipping lines in csv or excel file that start with the sign `#` + parsing_options: + comment: '#' # Skipping lines in csv or excel file that start with the sign `#` + mapping_options: + - mapping_mode: row + file_mode: current_entry + sections: + - My_Subsection/My_Section sub_sections: My_Subsection: section: diff --git a/examples/data/docs/tabular-parser_1_column_current-entry_to-root.archive.yaml b/examples/data/docs/tabular-parser_1_column_current-entry_to-root.archive.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1b7d929074ef6fcbeb6199d5953718119581c23a --- /dev/null +++ b/examples/data/docs/tabular-parser_1_column_current-entry_to-root.archive.yaml @@ -0,0 +1,38 @@ +definitions: + name: 'My test ELN 1' + sections: + MySection1: + base_sections: + - nomad.datamodel.data.EntryData + - nomad.parsing.tabular.TableData + m_annotations: + eln: + quantities: + data_file: + type: str + default: test.xlsx + m_annotations: + tabular_parser: + parsing_options: + comment: '#' + mapping_options: + - mapping_mode: column + file_mode: current_entry + sections: + - '#root' + browser: + adaptor: RawFileAdaptor + eln: + component: FileEditQuantity + my_array_quantity_1: + type: str + shape: ['*'] + m_annotations: + tabular: + name: "My header 1" + my_array_quantity_2: + type: str + shape: ['*'] + m_annotations: + tabular: + name: "My header 2" \ No newline at end of file diff --git a/examples/data/docs/tabular-parser_2_column_current-entry_to-path.archive.yaml b/examples/data/docs/tabular-parser_2_column_current-entry_to-path.archive.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9bac77f80a6892b9af7dae7170139c7af89a1786 --- /dev/null +++ b/examples/data/docs/tabular-parser_2_column_current-entry_to-path.archive.yaml @@ -0,0 +1,45 @@ +definitions: + name: 'My test ELN 2' + sections: + MySection2: + base_sections: + - nomad.datamodel.data.EntryData + - nomad.parsing.tabular.TableData + m_annotations: + eln: + quantities: + data_file: + type: str + default: test.xlsx + m_annotations: + tabular_parser: + parsing_options: + comment: '#' + mapping_options: + - mapping_mode: column + file_mode: current_entry + sections: + - my_sub_section_2 + browser: + adaptor: RawFileAdaptor + eln: + component: FileEditQuantity + sub_sections: + my_sub_section_2: + section: '#/MySubSection2' + MySubSection2: + m_annotations: + eln: + quantities: + my_array_quantity_1: + type: str + shape: ['*'] + m_annotations: + tabular: + name: "My header 1" + my_array_quantity_2: + type: str + shape: ['*'] + m_annotations: + tabular: + name: "My header 2" \ No newline at end of file diff --git a/examples/data/docs/tabular-parser_3_row_current-entry_to-path.archive.yaml b/examples/data/docs/tabular-parser_3_row_current-entry_to-path.archive.yaml new file mode 100644 index 0000000000000000000000000000000000000000..6fe345133787b42a5a262dd9fedfcdaca38c9531 --- /dev/null +++ b/examples/data/docs/tabular-parser_3_row_current-entry_to-path.archive.yaml @@ -0,0 +1,46 @@ +definitions: + name: 'My test ELN 3' + sections: + MySection3: + base_sections: + - nomad.datamodel.data.EntryData + - nomad.parsing.tabular.TableData + m_annotations: + eln: + quantities: + data_file: + type: str + default: test.xlsx + m_annotations: + tabular_parser: + parsing_options: + comment: '#' + mapping_options: + - mapping_mode: row + file_mode: current_entry + sections: + - my_repeated_sub_section_3 + browser: + adaptor: RawFileAdaptor + eln: + component: FileEditQuantity + sub_sections: + my_repeated_sub_section_3: + repeats: true + section: '#/MySubSection3' + MySubSection3: + m_annotations: + eln: + more: + label_quantity: my_quantity_1 + quantities: + my_quantity_1: + type: str + m_annotations: + tabular: + name: "My header 1" + my_quantity_2: + type: str + m_annotations: + tabular: + name: "My header 2" \ No newline at end of file diff --git a/examples/data/docs/tabular-parser_4_column_single-new-entry_to-path.archive.yaml b/examples/data/docs/tabular-parser_4_column_single-new-entry_to-path.archive.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2acd3991a678be8bd651095b2acd4eee94417f03 --- /dev/null +++ b/examples/data/docs/tabular-parser_4_column_single-new-entry_to-path.archive.yaml @@ -0,0 +1,55 @@ +definitions: + name: 'My test ELN 4' + sections: + MySection4: + base_sections: + - nomad.datamodel.data.EntryData + - nomad.parsing.tabular.TableData + m_annotations: + eln: + quantities: + data_file: + type: str + default: test.xlsx + m_annotations: + tabular_parser: + parsing_options: + comment: '#' + mapping_options: + - mapping_mode: column + file_mode: single_new_entry + sections: + - my_subsection_4 + browser: + adaptor: RawFileAdaptor + eln: + component: FileEditQuantity + sub_sections: + my_subsection_4: + section: + m_annotations: + eln: + quantities: + my_ref_quantity: + type: '#/MySubSection4' + m_annotations: + eln: + component: ReferenceEditQuantity + MySubSection4: + base_sections: + - nomad.datamodel.data.EntryData + m_annotations: + eln: + quantities: + my_array_quantity_1: + type: str + shape: ['*'] + m_annotations: + tabular: + name: "My header 1" + my_array_quantity_2: + type: str + shape: ['*'] + m_annotations: + tabular: + name: "My header 2" \ No newline at end of file diff --git a/examples/data/docs/tabular-parser_5_row_single-new-entry_to-path.archive.yaml b/examples/data/docs/tabular-parser_5_row_single-new-entry_to-path.archive.yaml new file mode 100644 index 0000000000000000000000000000000000000000..bd5f910dd3d5be679c8e22ba8a83eb2095eff8ad --- /dev/null +++ b/examples/data/docs/tabular-parser_5_row_single-new-entry_to-path.archive.yaml @@ -0,0 +1,59 @@ +definitions: + name: 'My test ELN 5' + sections: + MySection5: + base_sections: + - nomad.datamodel.data.EntryData + - nomad.parsing.tabular.TableData + m_annotations: + eln: + quantities: + data_file: + type: str + default: test.xlsx + m_annotations: + tabular_parser: + parsing_options: + comment: '#' + mapping_options: + - mapping_mode: row + file_mode: single_new_entry + sections: + - my_subsection_5/my_repeated_sub_section + browser: + adaptor: RawFileAdaptor + eln: + component: FileEditQuantity + sub_sections: + my_subsection_5: + section: + m_annotations: + eln: + quantities: + my_ref_quantity: + type: '#/MySubSection5' + m_annotations: + eln: + component: ReferenceEditQuantity + MySubSection5: + base_sections: + - nomad.datamodel.data.EntryData + m_annotations: + eln: + more: + label_quantity: my_quantity_1 + sub_sections: + my_repeated_sub_section: + repeats: true + section: + quantities: + my_quantity_1: + type: str + m_annotations: + tabular: + name: "My header 1" + my_quantity_2: + type: str + m_annotations: + tabular: + name: "My header 2" \ No newline at end of file diff --git a/examples/data/docs/tabular-parser_6_row_multiple-new-entries_to-root.archive.yaml b/examples/data/docs/tabular-parser_6_row_multiple-new-entries_to-root.archive.yaml new file mode 100644 index 0000000000000000000000000000000000000000..d90e5a3910383e4579047a59e3443a36bbec429e --- /dev/null +++ b/examples/data/docs/tabular-parser_6_row_multiple-new-entries_to-root.archive.yaml @@ -0,0 +1,38 @@ +definitions: + name: 'My test ELN 6' + sections: + MySection6: + base_sections: + - nomad.datamodel.data.EntryData + - nomad.parsing.tabular.TableData + m_annotations: + eln: + more: + label_quantity: my_quantity_1 + quantities: + data_file: + type: str + default: test.xlsx + m_annotations: + tabular_parser: + parsing_options: + comment: '#' + mapping_options: + - mapping_mode: row + file_mode: multiple_new_entries + sections: + - '#root' + browser: + adaptor: RawFileAdaptor + eln: + component: FileEditQuantity + my_quantity_1: + type: str + m_annotations: + tabular: + name: "My header 1" + my_quantity_2: + type: str + m_annotations: + tabular: + name: "My header 2" \ No newline at end of file diff --git a/examples/data/docs/tabular-parser_7_row_multiple-new-entries_to-path.archive.yaml b/examples/data/docs/tabular-parser_7_row_multiple-new-entries_to-path.archive.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4fa7ac96f330584dc9754ef31c19ce5123e5416c --- /dev/null +++ b/examples/data/docs/tabular-parser_7_row_multiple-new-entries_to-path.archive.yaml @@ -0,0 +1,56 @@ +definitions: + name: 'My test ELN 7' + sections: + MySection7: + base_sections: + - nomad.datamodel.data.EntryData + - nomad.parsing.tabular.TableData + m_annotations: + eln: + quantities: + data_file: + type: str + default: test.xlsx + m_annotations: + tabular_parser: + parsing_options: + comment: '#' + mapping_options: + - mapping_mode: row + file_mode: multiple_new_entries + sections: + - my_repeated_sub_section_7 + browser: + adaptor: RawFileAdaptor + eln: + component: FileEditQuantity + sub_sections: + my_repeated_sub_section_7: + repeats: true + section: + m_annotations: + eln: + quantities: + my_ref_quantity: + type: '#/MySubSection7' + m_annotations: + eln: + component: ReferenceEditQuantity + MySubSection7: + base_sections: + - nomad.datamodel.data.EntryData + m_annotations: + eln: + more: + label_quantity: my_quantity_1 + quantities: + my_quantity_1: + type: str + m_annotations: + tabular: + name: "My header 1" + my_quantity_2: + type: str + m_annotations: + tabular: + name: "My header 2" \ No newline at end of file diff --git a/examples/data/docs/tabular-parser_8_row_current-entry_to-path_subsubsection.archive.yaml b/examples/data/docs/tabular-parser_8_row_current-entry_to-path_subsubsection.archive.yaml new file mode 100644 index 0000000000000000000000000000000000000000..23b7b67891f593a833bdcbb311e6c3e5fee0971f --- /dev/null +++ b/examples/data/docs/tabular-parser_8_row_current-entry_to-path_subsubsection.archive.yaml @@ -0,0 +1,53 @@ +definitions: + name: 'My test ELN 8' + sections: + MySection8: + base_sections: + - nomad.datamodel.data.EntryData + - nomad.parsing.tabular.TableData + m_annotations: + eln: + quantities: + data_file: + type: str + default: test.xlsx + m_annotations: + tabular_parser: + parsing_options: + comment: '#' + mapping_options: + - mapping_mode: row + file_mode: current_entry + sections: + - my_repeated_sub_section_8 + browser: + adaptor: RawFileAdaptor + eln: + component: FileEditQuantity + sub_sections: + my_repeated_sub_section_8: + repeats: true + section: '#/MySubSection8' + MySubSection8: + m_annotations: + eln: + more: + label_quantity: my_quantity_1 + quantities: + my_quantity_1: + type: str + m_annotations: + tabular: + name: "My header 1" + sub_sections: + my_repeated_sub_sub_section: + repeats: true + section: + more: + label_quantity: my_quantity_2 + quantities: + my_quantity_2: + type: str + m_annotations: + tabular: + name: "My header 2" \ No newline at end of file diff --git a/examples/data/docs/tabular-parser_np1_row_current-entry_to-root.archive.yaml b/examples/data/docs/tabular-parser_np1_row_current-entry_to-root.archive.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2d75bbb9f074e844291c654597b885521077a261 --- /dev/null +++ b/examples/data/docs/tabular-parser_np1_row_current-entry_to-root.archive.yaml @@ -0,0 +1,40 @@ +definitions: + name: 'My test ELN np1' + sections: + MySection: + base_sections: + - nomad.datamodel.data.EntryData + - nomad.parsing.tabular.TableData + m_annotations: + eln: + quantities: + data_file: + type: str + default: test.xlsx + m_annotations: + tabular_parser: + parsing_options: + comment: '#' + mapping_options: + - mapping_mode: row + file_mode: current_entry + sections: + - '#root' + browser: + adaptor: RawFileAdaptor + eln: + component: FileEditQuantity + my_array_quantity_1: + type: str + shape: ['*'] + m_annotations: + tabular: + name: "My header 1" + my_array_quantity_2: + type: str + shape: ['*'] + m_annotations: + tabular: + name: "My header 2" +data: + m_def: MySection \ No newline at end of file diff --git a/examples/data/docs/tabular-parser_np2_column_single-new-entry_to-root.archive.yaml b/examples/data/docs/tabular-parser_np2_column_single-new-entry_to-root.archive.yaml new file mode 100644 index 0000000000000000000000000000000000000000..a4221f146c2f312b9a1735a891b48034cb36ad27 --- /dev/null +++ b/examples/data/docs/tabular-parser_np2_column_single-new-entry_to-root.archive.yaml @@ -0,0 +1,38 @@ +definitions: + name: 'My test ELN np2' + sections: + MySection: + base_sections: + - nomad.datamodel.data.EntryData + - nomad.parsing.tabular.TableData + m_annotations: + eln: + quantities: + data_file: + type: str + default: test.xlsx + m_annotations: + tabular_parser: + parsing_options: + comment: '#' + mapping_options: + - mapping_mode: column + file_mode: single_new_entry + sections: + - '#root' + browser: + adaptor: RawFileAdaptor + eln: + component: FileEditQuantity + my_array_quantity_1: + type: str + shape: ['*'] + m_annotations: + tabular: + name: "My header 1" + my_array_quantity_2: + type: str + shape: ['*'] + m_annotations: + tabular: + name: "My header 2" \ No newline at end of file diff --git a/examples/data/docs/tabular-parser_np3_row_single-new-entry_to-root.archive.yaml b/examples/data/docs/tabular-parser_np3_row_single-new-entry_to-root.archive.yaml new file mode 100644 index 0000000000000000000000000000000000000000..26c7c14431c3e5f456ac894816540d7044f1153c --- /dev/null +++ b/examples/data/docs/tabular-parser_np3_row_single-new-entry_to-root.archive.yaml @@ -0,0 +1,36 @@ +definitions: + name: 'My test ELN np3' + sections: + MySection: + base_sections: + - nomad.datamodel.data.EntryData + - nomad.parsing.tabular.TableData + m_annotations: + eln: + quantities: + data_file: + type: str + default: test.xlsx + m_annotations: + tabular_parser: + parsing_options: + comment: '#' + mapping_options: + - mapping_mode: row + file_mode: single_new_entry + sections: + - '#root' + browser: + adaptor: RawFileAdaptor + eln: + component: FileEditQuantity + my_quantity_1: + type: str + m_annotations: + tabular: + name: "My header 1" + my_quantity_2: + type: str + m_annotations: + tabular: + name: "My header 2" \ No newline at end of file diff --git a/examples/data/docs/tabular-parser_np4_column_multiple-new-entries_to-root.archive.yaml b/examples/data/docs/tabular-parser_np4_column_multiple-new-entries_to-root.archive.yaml new file mode 100644 index 0000000000000000000000000000000000000000..25b08d0ec343ba2946e5a6c7a1c58324aae600db --- /dev/null +++ b/examples/data/docs/tabular-parser_np4_column_multiple-new-entries_to-root.archive.yaml @@ -0,0 +1,38 @@ +definitions: + name: 'My test ELN np4' + sections: + MySection: + base_sections: + - nomad.datamodel.data.EntryData + - nomad.parsing.tabular.TableData + m_annotations: + eln: + quantities: + data_file: + type: str + default: test.xlsx + m_annotations: + tabular_parser: + parsing_options: + comment: '#' + mapping_options: + - mapping_mode: column + file_mode: multiple_new_entries + sections: + - '#root' + browser: + adaptor: RawFileAdaptor + eln: + component: FileEditQuantity + my_array_quantity_1: + type: str + shape: ['*'] + m_annotations: + tabular: + name: "My header 1" + my_array_quantity_2: + type: str + shape: ['*'] + m_annotations: + tabular: + name: "My header 2" \ No newline at end of file diff --git a/examples/data/docs/tabular-parser_np5_column_multiple-new-entries_to-path.archive.yaml b/examples/data/docs/tabular-parser_np5_column_multiple-new-entries_to-path.archive.yaml new file mode 100644 index 0000000000000000000000000000000000000000..61a111b700eecdee11a95f268e45c1680f4a9387 --- /dev/null +++ b/examples/data/docs/tabular-parser_np5_column_multiple-new-entries_to-path.archive.yaml @@ -0,0 +1,56 @@ +definitions: + name: 'My test ELN np5' + sections: + MySection: + base_sections: + - nomad.datamodel.data.EntryData + - nomad.parsing.tabular.TableData + m_annotations: + eln: + quantities: + data_file: + type: str + default: test.xlsx + m_annotations: + tabular_parser: + parsing_options: + comment: '#' + mapping_options: + - mapping_mode: column + file_mode: multiple_new_entries + sections: + - my_repeated_sub_section + browser: + adaptor: RawFileAdaptor + eln: + component: FileEditQuantity + sub_sections: + my_repeated_sub_section: + repeats: true + section: + m_annotations: + eln: + quantities: + my_ref_quantity: + type: '#/MySubSect' + m_annotations: + eln: + component: ReferenceEditQuantity + MySubSect: + base_sections: + - nomad.datamodel.data.EntryData + m_annotations: + eln: + quantities: + my_array_quantity_1: + type: str + shape: ['*'] + m_annotations: + tabular: + name: "My header 1" + my_array_quantity_2: + type: str + shape: ['*'] + m_annotations: + tabular: + name: "My header 2" \ No newline at end of file diff --git a/examples/data/docs/test.xlsx b/examples/data/docs/test.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..9d5e536a3181ec30673abbaaa08c7e7ca8e8da74 Binary files /dev/null and b/examples/data/docs/test.xlsx differ diff --git a/examples/data/eln/schema.archive.yaml b/examples/data/eln/schema.archive.yaml index 09514f70a578a7a09c165d461f91bbf4de3fed6d..e6c5cb5ca63ff4485c96e46ecfc6ba28d0b072a2 100644 --- a/examples/data/eln/schema.archive.yaml +++ b/examples/data/eln/schema.archive.yaml @@ -127,7 +127,7 @@ definitions: sub_sections: pvd_evaporation: section: - base_sections: ['Process', 'nomad.parsing.tabular.TableData'] + base_sections: ['Process', 'nomad.parsing.tabular.TableData', 'nomad.datamodel.metainfo.plot.PlotSection'] m_annotations: # We can use the eln annotations to put the section to the overview # page, and hide unwanted inherited quantities. @@ -136,12 +136,25 @@ definitions: hide: ['name', 'lab_id', 'description', 'method'] # Plots are shown in the eln. Currently we only support simple x,y # line plots - plot: - title: Pressure and Temperature over Time - x: time - y: - - chamber_pressure - - substrate_temperature + plotly_graph_object: + - data: + - x: "#time" + y: "#chamber_pressure" + - x: "#time" + y: "#substrate_temperature" + yaxis: y2 + layout: + title: + text: Pressure and Temperature over Time + yaxis2: + overlaying: y + side: right + - data: + x: "#time" + y: "#chamber_pressure" + - data: + x: "#time" + y: "#substrate_temperature" quantities: data_file: type: str @@ -154,8 +167,9 @@ definitions: # quantities in this section (and sub_section) with the column # data of .csv or .xlsx files. There is also a mode option that by default, is set to column. tabular_parser: - sep: '\t' - comment: '#' + parsing_options: + sep: '\t' + comment: '#' browser: adaptor: RawFileAdaptor # Allows to navigate to files in the data browser eln: @@ -174,11 +188,10 @@ definitions: shape: ['*'] unit: mbar m_annotations: + eln: + defaultDisplayUnit: mbar tabular: name: Vacuum Pressure1 - plot: - x: time - y: chamber_pressure substrate_temperature: type: np.float64 shape: ['*'] @@ -187,9 +200,6 @@ definitions: tabular: name: Substrate PV unit: degC - plot: - x: time - y: substrate_temperature hotplate_annealing: section: base_section: Process diff --git a/examples/data/em_nion/README.md b/examples/data/em_nion/README.md new file mode 100644 index 0000000000000000000000000000000000000000..82c4093ec15e62ed3495f9f4a66ad1891e66df06 --- /dev/null +++ b/examples/data/em_nion/README.md @@ -0,0 +1,78 @@ +# Tutorial for parsing nionswift projects for electron microscopy + +## Scope +This is a draft example which combines a set of configured components of +NOMAD to collect metadata specific for electron microscopy and combine these with +images and spectrum data processed using the electron-microscopy-centric image +processing software nionswift. This software is used to control electron +microscopes from the Nion Co. Specifically, the tutorial shows how +functionalities of a NOMAD electronic lab notebook (ELN) instance +customized for electron microscopy (currently using NXem as the guiding application +definition), the `em_nion` dataconverter offered through the `pynxtools` NeXus +parser, the `NXem` NeXus data schema, and several NOMAD core functionalities +work together to create nionswift-specific NOMAD entries with respective default +plots for `h5web`. + +## Getting started +1. Click the respective button to execute the example. +2. Wait for NOMAD to instantiate the example for you. +3. Check that you are in the `Uploads` section (menu bar). +4. Select the generated upload. +5. Explore its content by clicking on the arrow keys (to the right side of a file). +6. Modify the input file in the NOMAD ELN to match your dataset. + You can also use the drag-and-drop functionality to drop your + reconstruction and ranging definition file inside the ELN and remove + the example reconstruction and ranging file. + Please note that this is a draft version of the nionswift parser + and thus it is expected that many specific examples may not work out-of-the + box. +7. Click `save` to trigger a reprocessing of your upload which will + update and reprocess the NeXus/HDF5 NXem entries for you. +8. Explore its content via e.g. the preview or via the `Entries` + (select from the menu bar). + +## Which input is supported by this example? +This example works with a ZIP file of the nionswift project directory. +This project dump which can be generated with nionswift (we tested this with +version 0.16.8 of nionswift) contains a guiding nsproj file which resolves +individual locations of files in sub-ordinary directories. These can be nionswift +specific data files, so called ndata files or HDF5 files with the ending h5. +The ZIP file of the project dump can easily be created by just zipping the +entire location with the nsproj file at the top. + +The ELN is used to collect metadata which are currently not stored typically in +nionswift. The ELN is configured in this example to collect details about the +specimen, some exemplar additional metadata about the instrument, and users. + +## Which data artefacts should I expect to find? +This example upload contains the following entries: +- A schema in NOMAD's *archive.yaml* format: *nxem.schema.archive.yaml* +- A schema instance file as used and generated by NOMAD *emnion.archive.json*. + For educational purposes this file is filled with values but it is the + user's responsibility to check that these metadata match their dataset. +- Another schema instance file *eln_data.yaml*. This file contains a plain + view of all entered/modified quantities including their units. This file is + updated with clicking the `save` button. This file should not be edited + manually. Instead, edit the schema instance using the NOMAD GUI. + +## Which data schema is used? +Specifically the ELN template is configured such that its terminology matches to +the [NXem](https://fairmat-nfdi.github.io/nexus-fairmat-proposal) NeXus data schema. + +## Acknowledgements +This example comes with a real world dataset collected by Benedikt Haas which +contains data and metadata collected for different imaging modes. +[Details can be found here:](https://www.zenodo.org/record/7986279#.ZHh5HKVBxro) + +## Where to raise questions, comments, and suggestions? +You are very welcome to approach us with all sorts of questions, and +feature requests. [Markus Kühbach](https://www.fairmat-nfdi.eu/fairmat/about-fairmat/team-fairmat) +is the respective contact person within the FAIRmat consortium. +Feel free and [create a GitHub issue](https://github.com/FAIRmat-NFDI/pynxtools) to point us to +specific questions, experiences, or problems. + +## Where to go from now? +Users of nionswift might be interested in our exemplary docker container for +running `nionswift` inside NOMAD using the NOMAD Remote Tools Hub `north`. +There are currently no specific containers for the em_om example. +Details dependent on the specific configuration of your NOMAD OASIS. diff --git a/examples/data/em_nion/downloads.archive.yaml b/examples/data/em_nion/downloads.archive.yaml new file mode 100644 index 0000000000000000000000000000000000000000..22a847f890aeeae422c5aec06ec812ab4a764903 --- /dev/null +++ b/examples/data/em_nion/downloads.archive.yaml @@ -0,0 +1,8 @@ +data: + m_def: nomad.datamodel.metainfo.downloads.Downloads + mainfiles: + - emnion.archive.json + downloads: + - url: https://zenodo.org/record/7986279/files/ger_berlin_haas_nionswift_multimodal.zip?download=1 + output: ger_berlin_haas_nionswift_multimodal.zip + extract: true diff --git a/examples/data/em_nion/eln_data.yaml b/examples/data/em_nion/eln_data.yaml new file mode 100644 index 0000000000000000000000000000000000000000..94767c25dfbbe6a5f43e822e3e0f069e3b63f686 --- /dev/null +++ b/examples/data/em_nion/eln_data.yaml @@ -0,0 +1,52 @@ +em_lab: + detector: + - local_name: idk + ebeam_column: + aberration_correction: + applied: true + aperture_em: + - name: ap1 + value: 5.0 + electron_source: + emitter_type: field_emission + name: unknown + voltage: + unit: kV + value: 60.0 + fabrication: + capabilities: n/a + identifier: '0' + model: Nion Hermes + vendor: Nion + instrument_name: Nion Hermes + location: Berlin + optical_system_em: {} + stage_lab: + description: nionstage + name: nion +entry: + attr_version: nexus-fairmat-proposal successor of 9636feecb79bb32b828b1a9804269573256d7696 + definition: NXem + end_time: '2023-05-28T19:30:00+00:00' + experiment_description: nion test + experiment_identifier: nion + program: nionswift + program__attr_version: nionswift from eln + start_time: '2023-05-28T19:30:00+00:00' +sample: + atom_types: + - U + description: idk + method: simulation + name: n/a + preparation_date: '2023-05-28T19:31:00+00:00' + sample_history: n/a + short_title: n/a + thickness: + unit: nm + value: 9.999999999999998 +user: +- affiliation: FAIRmat + name: MarkusK +- name: Benedikt Haas +- name: Sherjeel Shabih diff --git a/examples/data/em_nion/emnion.archive.json b/examples/data/em_nion/emnion.archive.json new file mode 100644 index 0000000000000000000000000000000000000000..14250560ce39625dfa5f6e95d825c9f783cab79f --- /dev/null +++ b/examples/data/em_nion/emnion.archive.json @@ -0,0 +1 @@ +{"data":{"m_def":"../upload/raw/nxem.schema.archive.yaml#/definitions/section_definitions/0","reader":"em_nion","nxdl":"NXem.nxdl","input_files":["2022-02-18_Metadata_Kuehbach.zip.nionswift"],"output":"nion.nxs","entry":{"attr_version":"nexus-fairmat-proposal successor of 9636feecb79bb32b828b1a9804269573256d7696","definition":"NXem","experiment_identifier":"nion","experiment_description":"nion test","start_time":"2023-05-28T19:30:00.000Z","end_time":"2023-05-28T19:30:00.000Z","program":"nionswift","program__attr_version":"nionswift from eln"},"user":[{"name":"MarkusK","affiliation":"FAIRmat"},{"name":"Benedikt Haas"},{"name":"Sherjeel Shabih"}],"sample":{"method":"simulation","name":"n/a","sample_history":"n/a","preparation_date":"2023-05-28T19:31:00.000Z","short_title":"n/a","atom_types":["U"],"thickness":1e-8,"description":"idk"},"em_lab":{"instrument_name":"Nion Hermes","location":"Berlin","fabrication":{"vendor":"Nion","model":"Nion Hermes","identifier":"0","capabilities":"n/a"},"ebeam_column":{"electron_source":{"name":"unknown","voltage":60000,"emitter_type":"field_emission"},"aperture_em":[{"name":"ap1","value":5}],"aberration_correction":{"applied":true}},"optical_system_em":{},"detector":[{"local_name":"idk"}],"stage_lab":{"name":"nion","description":"nionstage"}}},"m_ref_archives":{}} \ No newline at end of file diff --git a/examples/data/em_nion/nxem.schema.archive.yaml b/examples/data/em_nion/nxem.schema.archive.yaml new file mode 100644 index 0000000000000000000000000000000000000000..71ed0ebcf2cec2c098680d416c24e22ba212874c --- /dev/null +++ b/examples/data/em_nion/nxem.schema.archive.yaml @@ -0,0 +1,503 @@ +# group, field, and attribute names match to NXem, for further details +# what each field should contain consult the respective docstring of the +# quantity in NXem +definitions: + name: 'em' + # 'ELN/application definition schema for electron microscopy (EM) experiments.' + sections: # section definitions what were back in the old days msection base classes + ElectronMicroscopy: # the actual schema + base_sections: + - 'nomad.datamodel.metainfo.eln.NexusDataConverter' + - 'nomad.datamodel.data.EntryData' + m_annotations: + # Here you can set your default values for the reader and nxdl. + template: + reader: em_nion + nxdl: NXem.nxdl + # Listing quantities in the hide component will not show them in the ELN. + # This would be useful to make the default values set in `template` fixed. + # Leave the hide key even if you want to pass an empty list like in this example. + eln: + # hide: ['nxdl', 'reader'] + hide: [] + sub_sections: + entry: + section: + description: | + Generic details about an experiment. + m_annotations: + eln: + overview: true + quantities: + attr_version: + type: + type_kind: Enum + type_data: + - 'nexus-fairmat-proposal successor of 9636feecb79bb32b828b1a9804269573256d7696' + description: Hashvalue of the NeXus application definition file + m_annotations: + eln: + component: RadioEnumEditQuantity + definition: + type: + type_kind: Enum + type_data: + - NXem + description: NeXus NXDL schema to which this file conforms + m_annotations: + eln: + component: RadioEnumEditQuantity + experiment_identifier: + type: str + description: GUID of the experiment + m_annotations: + eln: + component: StringEditQuantity + experiment_description: + type: str + description: Free text details about the experiment + m_annotations: + eln: + component: StringEditQuantity + start_time: + type: Datetime + description: | + ISO 8601 time code with local time zone offset to UTC + when the microscope session started. + m_annotations: + eln: + component: DateTimeEditQuantity + end_time: + type: Datetime + description: | + ISO 8601 time code with local time zone offset to UTC + when the microscope session ended. + m_annotations: + eln: + component: DateTimeEditQuantity + program: + type: str + description: Name of the program used to create this file. + m_annotations: + eln: + component: StringEditQuantity + program__attr_version: + type: str + description: Version plus build number, commit hash, or description of the program to support reproducibility. + m_annotations: + eln: + component: StringEditQuantity + # experiment_documentation(NXnote): + # thumbnail(NXnote): + # attr_type: + # inputfile: + # type: str + # description: not used + # m_annotations: + # eln: + # component: FileEditQuantity + user: + repeats: true + section: + description: | + Contact information and eventually details of at least one person + involved in the taking of the microscope session. + m_annotations: + eln: + quantities: + name: + type: str + description: Given (first) name and surname. + m_annotations: + eln: + component: StringEditQuantity + email: + type: str + description: Email address of the user at the point in time when the experiment was performed. + m_annotations: + eln: + component: StringEditQuantity + affiliation: + type: str + description: Name of the affiliation of the user at the point in time when the experiment was performed. + m_annotations: + eln: + component: StringEditQuantity + address: + type: str + description: Postal address of the affiliation. + m_annotations: + eln: + component: StringEditQuantity + orcid: + type: str + description: Globally unique identifier of the user as offered by services like OrcID or ResearcherID. + m_annotations: + eln: + component: StringEditQuantity + orcid_platform: + type: str + description: Name of the OrcID or ResearcherID where the account under orcid is registered. + m_annotations: + eln: + component: StringEditQuantity + telephone_number: + type: str + description: (Business) (tele)phone number of the user at the point in time when the experiment was performed. + m_annotations: + eln: + component: StringEditQuantity + role: + type: str + description: Which role does the user have in the place and at the point in time when the experiment was performed? Technician operating the microscope. Student, postdoc, principle investigator, guest are common examples. + m_annotations: + eln: + component: StringEditQuantity + social_media_name: + type: str + description: Account name that is associated with the user in social media platforms. + m_annotations: + eln: + component: StringEditQuantity + social_media_platform: + type: str + description: Name of the social media platform where the account under social_media_name is registered. + m_annotations: + eln: + component: StringEditQuantity + sample: + section: + description: | + Details about the sample and its immediate environment. + m_annotations: + eln: + quantities: + method: + type: + type_kind: Enum + type_data: + - experiment + - simulation + m_annotations: + eln: + component: RadioEnumEditQuantity + name: + type: str + description: | + GUID which distinguishes the specimen from all others and especially + the predecessor/origin from where the specimen was cut. + In cases where the specimen was e.g. site-specifically cut from + samples or in cases of an instrument session during which multiple + specimens are loaded, the name has to be descriptive enough to + resolve which specimen was taken. This field must not be used for an + alias of the specimen. Instead, use short_title. + + In cases where multiple specimens have been loaded into the microscope + the name has to identify the specific one, whose results are stored + by this NXentry, because a single NXentry should be used only for + the characterization of a single specimen. + Details about the specimen preparation should be stored in the + sample history. + m_annotations: + eln: + component: StringEditQuantity + sample_history: + type: str + description: | + Reference to the location of or a GUID providing as many details + as possible of the material, its microstructure, and its + thermo-chemo-mechanical processing/preparation history. + m_annotations: + eln: + component: StringEditQuantity + preparation_date: + type: Datetime + description: | + ISO 8601 time code with local time zone offset to UTC information when + the measured specimen surface was last actively prepared before + loading the sample into the microscope. + m_annotations: + eln: + component: DateTimeEditQuantity + short_title: + type: str + description: Possibility to give an abbreviation or alias of the specimen name field. + m_annotations: + eln: + component: StringEditQuantity + # atom_types should be a list of strings + atom_types: + type: str + shape: ['*'] + description: | + Use Hill's system for listing elements of the periodic table which + are inside or attached to the surface of the specimen and thus + relevant from a scientific point of view. + m_annotations: + eln: + component: StringEditQuantity + description: + type: str + description: | + Discouraged free text field to be used in the case when properly + designed records for the sample_history are not available. + m_annotations: + eln: + component: StringEditQuantity + thickness: + type: np.float64 + unit: meter + description: | + (Measured) sample thickness. The information is recorded to qualify + if the beam used was likely able to shine through the specimen. + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: nanometer + minValue: 0.0 + # density: + # type: np.float64 + # unit: g/cm^3 # how to do? + # description: | + # (Measured) density of the specimen. For multi-layered specimens + # this field should only be used to describe the density of the excited volume. + # For scanning electron microscopy the usage of this field is discouraged + # and instead an instance of an NXinteraction_volume_em for individual + # NXevent_data_em instances can provide a much better description of + # the relevant details why one would otherwise ask to store the + # density of the specimen. + # m_annotations: + # eln: + # component: NumberEditQuantity + # defaultDisplayUnit: g/cm^3 + # minValue: 0.0 + em_lab: + section: + description: | + Metadata of the microscope and the lab in which it stands. + m_annotations: + eln: + quantities: + instrument_name: + type: str + description: Given name of the atom probe at the hosting institution. + m_annotations: + eln: + component: StringEditQuantity + location: + type: str + description: Location of the lab or place where the instrument is installed. Using GEOREF is preferred. + m_annotations: + eln: + component: StringEditQuantity + sub_sections: + fabrication: + section: + description: Details about the microscope fabrication. + m_annotations: + eln: + quantities: + # sub_sections: + vendor: + type: str + description: Company name of the manufacturer. + m_annotations: + eln: + component: StringEditQuantity + model: + type: str + description: Version or model of the component named by the manufacturer. + m_annotations: + eln: + component: StringEditQuantity + identifier: + type: str + description: Ideally, (globally) unique persistent identifier, i.e. a serial number or hash identifier of the component. + m_annotations: + eln: + component: StringEditQuantity + capabilities: + type: str + description: Free-text list with eventually multiple terms of functionalities which the component offers. + m_annotations: + eln: + component: StringEditQuantity + ebeam_column: + section: + description: Components to form a controlled electron beam + m_annotations: + eln: + # quantities: + sub_sections: + electron_source: + section: + description: The source which creates the electron beam + m_annotations: + eln: + quantities: + name: + type: str + description: Given name/alias + m_annotations: + eln: + component: StringEditQuantity + voltage: + type: np.float64 + description: | + Voltage relevant to compute the energy of the + electrons immediately after they left the gun. + unit: volt + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: kV + minValue: 0.0 + maxValue: 1.1e6 + emitter_type: + type: + type_kind: Enum + type_data: + - thermionic + - schottky + - field_emission + description: | + Emitter type used to create the beam. + m_annotations: + eln: + component: RadioEnumEditQuantity + # emitter_material: + # type: str + # description: Material of which the emitter is build, e.g. the filament material. + # m_annotations: + # eln: + # component: StringEditQuantity + aperture_em: + repeats: true + section: + description: Used apertures. + m_annotations: + eln: + quantities: + name: + type: str + description: Given name/alias of the aperture. + m_annotations: + eln: + component: StringEditQuantity + value: + type: np.float64 + description: Relevant value from the control software. + m_annotations: + eln: + component: NumberEditQuantity + # NXlens_em + aberration_correction: + section: + description: Aberration corrector details. + m_annotations: + eln: + quantities: + applied: + type: bool + description: Was the corrector used? + m_annotations: + eln: + component: BoolEditQuantity + # ibeam_column: + # ebeam_deflector: + # ibeam_deflector: + # stage_lab: + optical_system_em: + section: + description: Qualifying the electron optical system + m_annotations: + eln: + quantities: + camera_length: + type: np.float64 + unit: meter + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: m + minValue: 0.0 + magnification: + type: np.float64 + m_annotations: + eln: + component: NumberEditQuantity + minValue: 1.0 + defocus: + type: np.float64 + unit: meter + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: nm + semi_convergence_angle: + type: np.float64 + unit: radian + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: radian + # field_of_view: + # type: np.float64 + # unit: meter + # m_annotations: + # eln: + # component: NumberEditQuantity + # defaultDisplayUnit: nm + working_distance: + type: np.float64 + unit: meter + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: mm + beam_current: + type: np.float64 + unit: ampere + m_annotations: + eln: + component: NumberEditQuantity + defaultDisplayUnit: picoampere + minValue: 0.0 + beam_current_description: + type: str + m_annotations: + eln: + component: StringEditQuantity + detector: + repeats: true + section: + description: | + Description of the type of detector. + m_annotations: + eln: + quantities: + local_name: + type: str + description: Instrument-specific alias/name + m_annotations: + eln: + component: StringEditQuantity + # (NXpump) + stage_lab: + section: + description: A stage lab which can hold, align, orient, and prepare a specimen. + m_annotations: + eln: + quantities: + name: + type: str + description: Given name/alias for the stage. + m_annotations: + eln: + component: StringEditQuantity + description: + type: str + description: Ideally, a (globally) unique persistent identifier, link, or text to a resource which gives further details. + m_annotations: + eln: + component: StringEditQuantity diff --git a/examples/data/em_om/README.md b/examples/data/em_om/README.md new file mode 100644 index 0000000000000000000000000000000000000000..79d77f764a381c3c20a7543d03621aca86ff34a2 --- /dev/null +++ b/examples/data/em_om/README.md @@ -0,0 +1,73 @@ +# Tutorial for parsing orientation microscopy data from electron microscopy + +## Scope +This example combines a set of configured components of NOMAD to collect metadata +specific for electron microscopy and combine these with datasets collected in +different domain-specific file formats. Specifically, the tutorial shows how +functionalities can work together in NOMAD: A NOMAD electronic lab notebook (ELN) +instance customized for electron microscopy, the `em_om` dataconverter +offered through the `pynxtools` NeXus parser, the `NXem_ebsd` NeXus data schema, and +several NOMAD core functionalities work together to create EBSD-specific +NOMAD entries with respective default plots (inverse pole figure mappings) +for `h5web`. + +## Getting started +1. Click the respective button to execute the example. +2. Wait for NOMAD to instantiate the example for you. +3. Go to the `Uploads` section (menu bar). +4. Select the generated upload. +5. Explore its content by clicking on the arrow keys (to the right side of a file). +6. Modify the input file in the NOMAD ELN to match your dataset. + You can also use the drag-and-drop functionality to drop your file inside the ELN. +7. Click `save` to trigger a reprocessing of your upload. +8. Explore its content via e.g. the preview or via the `Entries` + (select from the menu bar). + +## Which input is supported by this example? +This example works with the following community file formats (H5OINA, HDF5 files +transcoded from EBSD-specific file formats using Matlab/MTex, and DREAM.3D). +The example is in a very early state of development. We invite users of +techniques like EBSD to contact us to improve the example and extent the +descriptive capabilities which are offered by this implementation. + +The ELN is used to collect metadata which are typically not openly documented +or stored in files used by the EBSD community including foremost the specific rotation +and coordinate system conventions used, details about the specimen, the instrument, +users, calibration, and some post-processing steps. +The example and specifically its ELN template is very detailed mainly to show +the number of coordinate systems which have to be mastered for every EBSD +measurement. Users should be aware though that it is possible to store many +of the choices which are currently collected via the ELN through a predefined +file or mapping table whereby frequently used but infrequently changing metadata +could be conveniently loaded straightaway. We are looking forward to feedback +from the EBSD community also on this matter. + +## Which data artefacts should I expect to find? +This example upload contains the following entries: +- A schema in NOMAD's *archive.yaml* format: *nxem_ebsd.schema.archive.yaml* +- A schema instance file as used and generated by NOMAD *em_om.archive.json*. + For educational purposes this file is filled with values but it is the + user's responsibility to check that these metadata match their dataset. +- Another schema instance file *eln_data.yaml*. This file contains a plain + view of all entered/modified quantities including their units. This file is + updated with clicking the `save` button. This file should not be edited + manually. Instead, edit the schema instance using the NOMAD GUI. + +## Which data schema is used? +Specifically the ELN template is configured such that its terminology matches to +the [NXem_ebsd](https://fairmat-nfdi.github.io/nexus-fairmat-proposal) NeXus data schema. + +## Would like to participate, raise questions, comments, and suggestions? +You are very welcome to approach us with all sorts of questions, and +feature requests. [Markus Kühbach](https://www.fairmat-nfdi.eu/fairmat/about-fairmat/team-fairmat) +is the respective contact person within the FAIRmat consortium. +Feel free and [create a GitHub issue](https://github.com/FAIRmat-NFDI/pynxtools) to point us to +specific questions, experiences, or problems. + +## Where to go from now? +Provided the upload was successful and your NOMAD OASIS is using a working JupyterHub +configuration, you can also work, i.e. analyze your data using NOMAD. +There are currently no specific containers for the em_om example. +For this you should go to `Analytics` (menu bar) and select the NOMAD Remote Tools Hub +called `north`. This service and toolset of NOMAD offers a set of preconfigured containers. +Details dependent on the specific configuration of your NOMAD OASIS. diff --git a/examples/data/em_om/downloads.archive.yaml b/examples/data/em_om/downloads.archive.yaml new file mode 100644 index 0000000000000000000000000000000000000000..50af757c5545ed7dbad468a4964492711adb8fc6 --- /dev/null +++ b/examples/data/em_om/downloads.archive.yaml @@ -0,0 +1,11 @@ +data: + m_def: nomad.datamodel.metainfo.downloads.Downloads + mainfiles: + - em_om.archive.json + downloads: + - url: https://www.zenodo.org/record/7885531/files/em_om_sprint14_01.zip?download=1 + output: em_om_sprint14_01.zip + extract: true + - url: https://www.zenodo.org/record/7885531/files/em_om_sprint14_02.zip?download=1 + output: em_om_sprint14_02.zip + extract: true \ No newline at end of file diff --git a/examples/data/em_om/eln_data.yaml b/examples/data/em_om/eln_data.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2787d765fc8c2ded428b4fcce77e7a58ab3c6cb5 --- /dev/null +++ b/examples/data/em_om/eln_data.yaml @@ -0,0 +1,65 @@ +calibration: + origin: unknown.vendorfile + path: unknown +commercial_on_the_fly_indexing: + program: unknown + program__attr_version: unknown + results_file: unknown.vendorfile +detector_reference_frame: + origin: front_top_left + reference_frame_type: right_handed_cartesian + xaxis_direction: east + yaxis_direction: in + zaxis_direction: north +entry: + attr_version: nexus-fairmat-proposal successor of 9636feecb79bb32b828b1a9804269573256d7696 + definition: NXem_ebsd + end_time: '2023-05-28T19:01:00+00:00' + program: nexusutils/dataconverter/readers/em_om.py + program__attr_version: undefined + start_time: '2023-05-28T19:01:00+00:00' + workflow_description: em_ebsd example forsterite + workflow_identifier: emebsd +gnomonic_projection: + gnomonic_projection_reference_frame: + origin: in_the_pattern_centre + reference_frame_type: right_handed_cartesian + xaxis_direction: east + yaxis_direction: in + zaxis_direction: north + method: backscatter + pattern_centre: + xaxis_boundary_convention: top + xaxis_normalization_direction: east + yaxis_boundary_convention: top + yaxis_normalization_direction: south +indexing: + method: hough_transform +measurement: + origin: unknown.vendorfile + path: unknown +processing_reference_frame: + origin: front_top_left + reference_frame_type: right_handed_cartesian + xaxis_alias: rolling direction + xaxis_direction: east + yaxis_alias: transverse direction + yaxis_direction: in + zaxis_alias: normal direction + zaxis_direction: north +rotation_conventions: + axis_angle_convention: rotation_angle_on_interval_zero_to_pi + euler_angle_convention: zxz + rotation_convention: passive + sign_convention: p_plus_one + three_dimensional_rotation_handedness: counter_clockwise +sample_reference_frame: + origin: front_top_left + reference_frame_type: right_handed_cartesian + xaxis_direction: east + yaxis_direction: in + zaxis_direction: north +user: +- affiliation: FAIRmat + name: MarkusK +- name: Ralf Hielscher diff --git a/examples/data/em_om/em_om.archive.json b/examples/data/em_om/em_om.archive.json new file mode 100644 index 0000000000000000000000000000000000000000..66f5c8d8a5337654813ae0cbb8552a24ed79c3f1 --- /dev/null +++ b/examples/data/em_om/em_om.archive.json @@ -0,0 +1 @@ +{"data":{"m_def":"../upload/raw/nxem_ebsd.schema.archive.yaml#/definitions/section_definitions/0","reader":"em_om","nxdl":"NXem_ebsd","input_files":["Forsterite.ctf.mtex","eln_data.yaml"],"output":"emom.nxs","entry":{"attr_version":"nexus-fairmat-proposal successor of 9636feecb79bb32b828b1a9804269573256d7696","definition":"NXem_ebsd","workflow_identifier":"emebsd","workflow_description":"em_ebsd example forsterite","start_time":"2023-05-28T19:01:00+00:00","end_time":"2023-05-28T19:01:00+00:00","program":"nexusutils/dataconverter/readers/em_om.py","program__attr_version":"undefined"},"user":[{"name":"MarkusK","affiliation":"FAIRmat"},{"name":"Ralf Hielscher"}],"commercial_on_the_fly_indexing":{"program":"unknown","program__attr_version":"unknown","results_file":"unknown.vendorfile"},"measurement":{"origin":"unknown.vendorfile","path":"unknown"},"calibration":{"origin":"unknown.vendorfile","path":"unknown"},"rotation_conventions":{"three_dimensional_rotation_handedness":"counter_clockwise","rotation_convention":"passive","euler_angle_convention":"zxz","axis_angle_convention":"rotation_angle_on_interval_zero_to_pi","sign_convention":"p_plus_one"},"processing_reference_frame":{"reference_frame_type":"right_handed_cartesian","xaxis_direction":"east","xaxis_alias":"rolling direction","yaxis_direction":"in","yaxis_alias":"transverse direction","zaxis_direction":"north","zaxis_alias":"normal direction","origin":"front_top_left"},"sample_reference_frame":{"reference_frame_type":"right_handed_cartesian","xaxis_direction":"east","yaxis_direction":"in","zaxis_direction":"north","origin":"front_top_left"},"detector_reference_frame":{"reference_frame_type":"right_handed_cartesian","xaxis_direction":"east","yaxis_direction":"in","zaxis_direction":"north","origin":"front_top_left"},"gnomonic_projection":{"method":"backscatter","gnomonic_projection_reference_frame":{"reference_frame_type":"right_handed_cartesian","xaxis_direction":"east","yaxis_direction":"in","zaxis_direction":"north","origin":"in_the_pattern_centre"},"pattern_centre":{"xaxis_boundary_convention":"top","xaxis_normalization_direction":"east","yaxis_boundary_convention":"top","yaxis_normalization_direction":"south"}},"indexing":{"method":"hough_transform"}},"m_ref_archives":{}} \ No newline at end of file diff --git a/examples/data/em_om/nxem_ebsd.schema.archive.yaml b/examples/data/em_om/nxem_ebsd.schema.archive.yaml new file mode 100644 index 0000000000000000000000000000000000000000..449567df469be7bc58010e38e351c9284d468c4f --- /dev/null +++ b/examples/data/em_om/nxem_ebsd.schema.archive.yaml @@ -0,0 +1,1105 @@ +# https://kikuchipy.org/en/stable/tutorials/reference_frames.html#Reference-frames + +definitions: + name: 'em_om' + # 'ELN for collecting conventions relevant for interpreting orientation microscopy data.' + sections: # section definitions what were back in the old days msection base classes + ElectronBackscatterDiffraction: # the actual schema´ + base_sections: + - 'nomad.datamodel.metainfo.eln.NexusDataConverter' + - 'nomad.datamodel.data.EntryData' + m_annotations: + # Here you can set your default values for the reader and nxdl. + template: + reader: em_om + nxdl: NXem_ebsd.nxdl + # Listing quantities in the hide component will not show them in the ELN. + # This would be useful to make the default values set in `template` fixed. + # Leave the hide key even if you want to pass an empty list like in this example. + eln: + # hide: ['nxdl', 'reader'] + hide: [] + sub_sections: + entry: + section: + description: | + Conventions and definitions which make orientation microscopy data interpretable. + m_annotations: + eln: + overview: true + quantities: + attr_version: + type: + type_kind: Enum + type_data: + - 'nexus-fairmat-proposal successor of 9636feecb79bb32b828b1a9804269573256d7696' + description: Hashvalue of the NeXus application definition file + m_annotations: + eln: + component: RadioEnumEditQuantity + definition: + type: + type_kind: Enum + type_data: + - NXem_ebsd + description: NeXus NXDL schema to which this file conforms + m_annotations: + eln: + component: RadioEnumEditQuantity + workflow_identifier: + type: str + description: GUID of the workflow + m_annotations: + eln: + component: StringEditQuantity + workflow_description: + type: str + description: | + Free text details about this particular workflow. + m_annotations: + eln: + component: StringEditQuantity + start_time: + type: Datetime + description: | + ISO 8601 time code with local time zone offset to UTC + when the experiment started. + m_annotations: + eln: + component: DateTimeEditQuantity + end_time: + type: Datetime + description: | + ISO 8601 time code with local time zone offset to UTC + when the experiment ended. + m_annotations: + eln: + component: DateTimeEditQuantity + program: + type: str + default: nexusutils/dataconverter/readers/em_om.py + description: | + Name of the program used to parse this file. + m_annotations: + eln: + component: StringEditQuantity + program__attr_version: + type: str + default: undefined + description: | + Version plus build number, commit hash, or description + of the program to support reproducibility. + m_annotations: + eln: + component: StringEditQuantity + + # inputfile_reconstruction: + # type: str + # description: | + # Place to drag-and-drop the file containing the result of the measurement. + # This result has to be the tomographic reconstruction. + # Accepted file formats are POS, ePOS, and APT (from APSuite). + # m_annotations: + # eln: + # component: FileEditQuantity + # inputfile_range_file: + # type: str + # description: | + # Place to drag-and-drop a file which contains the result of a ranging of + # the mass-to-charge-state ratio values to assigned ion labels. + # Accepted file formats are RNG, and RRNG. + # m_annotations: + # eln: + # component: FileEditQuantity + + user: + repeats: true + section: + description: | + Optional contact information and eventually details of at least + one person involved in performing the workflow. This can be the + principle investigator who implemented the workflow. + Adding multiple users if relevant is recommended. + m_annotations: + eln: + quantities: + name: + type: str + description: Given (first) name and surname. + m_annotations: + eln: + component: StringEditQuantity + email: + type: str + description: Email address of the user at the point in time when the experiment was performed. + m_annotations: + eln: + component: StringEditQuantity + affiliation: + type: str + description: Name of the affiliation of the user at the point in time when the experiment was performed. + m_annotations: + eln: + component: StringEditQuantity + address: + type: str + description: Postal address of the affiliation. + m_annotations: + eln: + component: StringEditQuantity + orcid: + type: str + description: Globally unique identifier of the user as offered by services like OrcID or ResearcherID. + m_annotations: + eln: + component: StringEditQuantity + orcid_platform: + type: str + description: Name of the OrcID or ResearcherID where the account under orcid is registered. + m_annotations: + eln: + component: StringEditQuantity + telephone_number: + type: str + description: (Business) (tele)phone number of the user at the point in time when the experiment was performed. + m_annotations: + eln: + component: StringEditQuantity + role: + type: str + description: Which role does the user have in the place and at the point in time when the experiment was performed? Technician operating the microscope. Student, postdoc, principle investigator, guest are common examples. + m_annotations: + eln: + component: StringEditQuantity + social_media_name: + type: str + description: Account name that is associated with the user in social media platforms. + m_annotations: + eln: + component: StringEditQuantity + social_media_platform: + type: str + description: Name of the social media platform where the account under social_media_name is registered. + m_annotations: + eln: + component: StringEditQuantity + + commercial_on_the_fly_indexing: + section: + description: | + An inspection of available EBSD datasets with an open-source + license stored on public archive services like Zenodo revealed, + inspected during the implementation of a generic parser for + EBSD data that such data are in most cases stored in two ways: + Case one is via a file in a format defined by technology partners. + Typically this file contains results of an on-the-fly executed indexing, + i.e. scan point positions, indexing solutions per scan point, + and some quality descriptors of the solutions, + as well as crystal structure and phase metadata. + Case two is pattern in some custom format sometimes supported + with custom metadata and descriptions of the individual fields + and data arrays most frequently just pointing to the publication. + + Therefore, we first need to collect how these on_the_fly indexed + results have been generated and in which file they ended up. + Ideally one would do so by creating a complete set of data + using e.g. NXem. This would allow reading all the above-mentioned + data directly from file referred to in the measurement group. + However, in most cases this is not available. + + Therefore, we store here key metadata about which results file + contain the EBSD mapping and which software was used (software name + and version with build number) to create it. These pieces of information + support the interpretation of specific metadata + in these results file which currently cannot be interpreted completely + or reliably conceptually. + m_annotations: + eln: + quantities: + program: + type: str + description: | + Commercial program which was used to index the EBSD data + incrementally after they have been captured and while the + microscope was capturing. This is the usual production workflow + how scanning electron microscopes are used when collecting + EBSD data. + m_annotations: + eln: + component: StringEditQuantity + program__attr_version: + type: str + description: | + Program version plus build number, commit hash, or other description of an ever persistent resource where the source + code of the program and build instructions can be found or at least more information about the program in this version can be found. If all such information is not available, like for commercial software, here the version number and build number should be written. Use semantic versioning if possible. + m_annotations: + eln: + component: StringEditQuantity + results_file: + type: str + description: | + Name of the results file. + m_annotations: + eln: + component: FileEditQuantity + # results_file__attr_version: + # type: str + # description: | + # Hash of that file. + # m_annotations: + # eln: + # component: StringEditQuantity + + measurement: + # repeats: true + section: + description: | + Connection between the measurement of the Kikuchi pattern and + the processing of these into an orientation microscopy image. + m_annotations: + eln: + quantities: + origin: + type: str + description: | + Name or link to an existent instance of an EBSD raw dataset + inside an NXem which has at least one NXimage_set_em_kikuchi + instance. The path to this instance in the origin has to be + specified under path. + + When NXem is not used or the aim is to rather explore first + how community specific files with EBSD data, such as ANG, CPR, + or HDF5-based formats can be parsed from, inject here the name + of that file. + + The em_om parser will currently not interpret the majority of + the many system and technique-specific metadata which come + with the files from e.g. technology partners. This is because + the current culture in the field in the EBSD community is that + many metadata fields are not in all cases fully documented. + + In addition, it is common practice in EBSD that users transcode + their raw data files into other formats so that these data can be + interpreted by specific software tools including commercial + software from technology partners other than the one which + delivered the system that was e.g. used when for collecting + the raw data. + As many of the file formats are not designed to communicate + also these specifically and eventually differently contextualized + metadata, we have opted for the first iteration of the implementation + to discard these metadata. Currently, this is also not problematic + as the file pointed to will be kept but as it uses information + alien to most research data management systems certain data have + to be extracted and transformed for the RDMS to serve them. + + Another reason for this choice was also to emphasize that in + fact such challenges do exist in the community. Hence, pointing + them out may support the discussion to arrive at eventually more + complete solutions. As developing these solutions though should + not be our own authority and necessarily demands feedback from + technology partners and acceptance by the EBSD community we have + opted for this intermediate approach. + m_annotations: + eln: + component: FileEditQuantity + # origin__attr_version: + # type: str + # description: | + # Hash of the file referred to. + # m_annotations: + # eln: + # component: StringEditQuantity + path: + type: str + description: | + Path which resolves which specific NXimage_set_em_kikuchi instance + was used as the raw data to this EBSD data (post)-processing workflow. + m_annotations: + eln: + component: StringEditQuantity + + calibration: + # repeats: true + section: + description: | + The EBSD system, that is the electron gun, pole-piece, stage + tilting, and EBSD detector, as well as the gnomonic projection + have to be calibrated to achieve reliable results. + Here a connection can be made to inform about another measurement + during which these calibrations were made. + m_annotations: + eln: + quantities: + origin: + type: str + description: | + Drag-and-drop a file which is ideally an instance of NXebsd with + an associated instance of NXem detailed under measurement + which informs about the calibration procedures. + If such a file is not available the file can also remain empty + but keep in mind then that it is unclear in which calibration + state your microscope was used. + m_annotations: + eln: + component: FileEditQuantity + # origin__attr_version: + # type: str + # description: | + # Hash of the file referred to. + # m_annotations: + # eln: + # component: StringEditQuantity + path: + type: str + description: | + Path which resolves which specific NXimage_set_em_kikuchi instance + was used as the raw data to this EBSD data (post)-processing workflow + when performing the calibration. + m_annotations: + eln: + component: StringEditQuantity + rotation_conventions: + section: + description: | + Mathematical conventions and materials-science-specific conventions + required for interpreting every collection of orientation data. + m_annotations: + eln: + quantities: + three_dimensional_rotation_handedness: + type: + type_kind: Enum + type_data: + - undefined + - counter_clockwise + - clockwise + default: undefined + description: | + Convention how a positive rotation angle is defined when viewing + from the end of the rotation unit vector towards its origin, + i.e. in accordance with convention 2 of DOI: 10.1088/0965-0393/23/8/083501. + Counter_clockwise is equivalent to a right-handed choice. + Clockwise is equivalent to a left-handed choice. + m_annotations: + eln: + component: RadioEnumEditQuantity + rotation_convention: + type: + type_kind: Enum + type_data: + - undefined + - passive + - active + default: undefined + description: | + How are rotations interpreted into an orientation + according to convention 3 of DOI: 10.1088/0965-0393/23/8/083501. + m_annotations: + eln: + component: RadioEnumEditQuantity + euler_angle_convention: + type: str + default: undefined + description: | + How are Euler angles interpreted given that there are several + choices (e.g. ZXZ, XYZ, etc.) according to convention 4 of + DOI: 10.1088/0965-0393/23/8/083501. + The most frequently used convention is ZXZ which is based on + the work of H.-J. Bunge but other conventions are possible. + m_annotations: + eln: + component: StringEditQuantity + axis_angle_convention: + type: + type_kind: Enum + type_data: + - undefined + - rotation_angle_on_interval_zero_to_pi + default: undefined + description: | + To which angular range is the rotation angle argument of an + axis-angle pair parameterization constrained according to + convention 5 of DOI: 10.1088/0965-0393/23/8/083501. + m_annotations: + eln: + component: RadioEnumEditQuantity + sign_convention: + type: + type_kind: Enum + type_data: + - undefined + - p_plus_one + - p_minus_one + default: undefined + description: | + Which sign convention is followed when converting orientations + between different parameterizations/representations according + to convention 6 of DOI: 10.1088/0965-0393/23/8/083501. + m_annotations: + eln: + component: RadioEnumEditQuantity + + processing_reference_frame: + section: + description: | + Details about eventually relevant named directions that may + give reasons for anisotropies. The classical example is cold-rolling + where one has to specify which directions (rolling, transverse, and normal) + align how with the direction of the base vectors of the sample_reference_frame. + m_annotations: + eln: + quantities: + reference_frame_type: + type: + type_kind: Enum + type_data: + - undefined + - right_handed_cartesian + - left_handed_cartesian + default: undefined + description: | + Type of coordinate system and reference frame according to + convention 1 of DOI: 10.1088/0965-0393/23/8/083501. + m_annotations: + eln: + component: RadioEnumEditQuantity + xaxis_direction: + type: + type_kind: Enum + type_data: + - undefined + - north + - east + - south + - west + - in + - out + default: undefined + description: | + Direction of the positively pointing x-axis base vector of + the processing_reference_frame. We assume the configuration + is inspected by looking towards the sample surface from a position + that is located behind the detector. + m_annotations: + eln: + component: RadioEnumEditQuantity + xaxis_alias: + type: str + default: undefined + description: | + Name or alias assigned to the x-axis base vector, + e.g. rolling direction. + m_annotations: + eln: + component: StringEditQuantity + yaxis_direction: + type: + type_kind: Enum + type_data: + - undefined + - north + - east + - south + - west + - in + - out + default: undefined + description: | + Direction of the positively pointing y-axis base vector of + the processing_reference_frame. We assume the configuration + is inspected by looking towards the sample surface from a position + that is located behind the detector. For further information consult + also the help info for the xaxis_direction field. + m_annotations: + eln: + component: RadioEnumEditQuantity + yaxis_alias: + type: str + default: undefined + description: | + Name or alias assigned to the y-axis base vector, + e.g. transverse direction. + m_annotations: + eln: + component: StringEditQuantity + zaxis_direction: + type: + type_kind: Enum + type_data: + - undefined + - north + - east + - south + - west + - in + - out + default: undefined + description: | + Direction of the positively pointing z-axis base vector of + the processing_reference frame. We assume the configuration + is inspected by looking towards the sample surface from a position + that is located behind the detector. For further information consult + also the help info for the xaxis_direction field. + m_annotations: + eln: + component: RadioEnumEditQuantity + zaxis_alias: + type: str + default: undefined + description: | + Name or alias assigned to the z-axis base vector, + e.g. normal direction. + m_annotations: + eln: + component: StringEditQuantity + origin: + type: + type_kind: Enum + type_data: + - undefined + - front_top_left + - front_top_right + - front_bottom_right + - front_bottom_left + - back_top_left + - back_top_right + - back_bottom_right + - back_bottom_left + default: undefined + description: | + Location of the origin of the sample surface reference frame. + This specifies the location Xs = 0, Ys = 0, Zs = 0. + Assume regions-of-interest in this reference frame form a + rectangle or cuboid. + Edges are interpreted by inspecting the direction of their + outer unit normals (which point either parallel or antiparallel) + along respective base vector direction of the reference frame. + m_annotations: + eln: + component: RadioEnumEditQuantity + + sample_reference_frame: + section: + description: | + Details about the sample/specimen (surface) reference frame. + m_annotations: + eln: + quantities: + reference_frame_type: + type: + type_kind: Enum + type_data: + - undefined + - right_handed_cartesian + - left_handed_cartesian + default: undefined + description: | + Type of coordinate system and reference frame according to + convention 1 of DOI: 10.1088/0965-0393/23/8/083501. + The reference frame for the sample surface reference is used for + identifying positions on a (virtual) image which is formed by + information collected from an electron beam scanning the + sample surface. We assume the configuration is inspected by + looking towards the sample surface from a position that is + located behind the detector. + Reference DOI: 10.1016/j.matchar.2016.04.008 + The sample surface reference frame has coordinates Xs, Ys, Zs. + In three dimensions these coordinates are not necessarily + located on the surface of the sample as there are multiple + faces/sides of the sample. Most frequently though the coordinate + system here is used to define the surface which the electron + beam scans. + m_annotations: + eln: + component: RadioEnumEditQuantity + xaxis_direction: + type: + type_kind: Enum + type_data: + - undefined + - north + - east + - south + - west + - in + - out + default: undefined + description: | + Direction of the positively pointing x-axis base vector of + the sample surface reference frame. We assume the configuration + is inspected by looking towards the sample surface from a position + that is located behind the detector. + Different tools assume that different strategies can be used + and are perceived as differently convenient to enter + details about coordinate system definitions. In this ELN users + have to possibility to fill in what they assume is sufficient to + define the coordinate system directions unambiguously. + Software which works with this user input needs to offer parsing + capabilities which detect conflicting input and warn accordingly. + m_annotations: + eln: + component: RadioEnumEditQuantity + yaxis_direction: + type: + type_kind: Enum + type_data: + - undefined + - north + - east + - south + - west + - in + - out + default: undefined + description: | + Direction of the positively pointing y-axis base vector of + the sample surface reference frame. We assume the configuration + is inspected by looking towards the sample surface from a position + that is located behind the detector. + For further information consult also the help info for the + xaxis_direction field. + m_annotations: + eln: + component: RadioEnumEditQuantity + zaxis_direction: + type: + type_kind: Enum + type_data: + - undefined + - north + - east + - south + - west + - in + - out + default: undefined + description: | + Direction of the positively pointing z-axis base vector of + the sample surface reference frame. We assume the configuration + is inspected by looking towards the sample surface from a position + that is located behind the detector. + For further information consult also the help info for the + xaxis_direction field. + m_annotations: + eln: + component: RadioEnumEditQuantity + origin: + type: + type_kind: Enum + type_data: + - undefined + - front_top_left + - front_top_right + - front_bottom_right + - front_bottom_left + - back_top_left + - back_top_right + - back_bottom_right + - back_bottom_left + default: undefined + description: | + Location of the origin of the sample surface reference frame. + This specifies the location Xs = 0, Ys = 0, Zs = 0. + Assume regions-of-interest in this reference frame form a + rectangle or cuboid. + Edges are interpreted by inspecting the direction of their + outer unit normals (which point either parallel or antiparallel) + along respective base vector direction of the reference frame. + m_annotations: + eln: + component: RadioEnumEditQuantity + + detector_reference_frame: + section: + description: | + Details about the detector reference frame. + m_annotations: + eln: + quantities: + reference_frame_type: + type: + type_kind: Enum + type_data: + - undefined + - right_handed_cartesian + - left_handed_cartesian + default: undefined + description: | + Type of coordinate system/reference frame used for + identifying positions in detector space Xd, Yd, Zd, + according to DOI: 10.1016/j.matchar.2016.04.008. + m_annotations: + eln: + component: RadioEnumEditQuantity + xaxis_direction: + type: + type_kind: Enum + type_data: + - undefined + - north + - east + - south + - west + - in + - out + default: undefined + description: | + Direction of the positively pointing x-axis base vector of + the detector space reference frame. We assume the configuration + is inspected by looking towards the sample surface from a + position that is located behind the detector. + Different tools assume that different strategies can be used + and are perceived as differently convenient to enter + details about coordinate system definitions. In this ELN users + have to possibility to fill in what they assume is sufficient to + define the coordinate system directions unambiguously. + Software which works with this user input needs to offer parsing + capabilities which detect conflicting input and warn accordingly. + m_annotations: + eln: + component: RadioEnumEditQuantity + yaxis_direction: + type: + type_kind: Enum + type_data: + - undefined + - north + - east + - south + - west + - in + - out + default: undefined + description: | + Direction of the positively pointing y-axis base vector of + the detector space reference frame. We assume the configuration + is inspected by looking towards the sample surface from a + position that is located behind the detector. + For further information consult also the help info for the + xaxis_direction field. + m_annotations: + eln: + component: RadioEnumEditQuantity + zaxis_direction: + type: + type_kind: Enum + type_data: + - undefined + - north + - east + - south + - west + - in + - out + default: undefined + description: | + Direction of the positively pointing z-axis base vector of + the detector space reference frame. We assume the configuration + is inspected by looking towards the sample surface from a + position that is located behind the detector. + For further information consult also the help info for the + xaxis_direction field. + m_annotations: + eln: + component: RadioEnumEditQuantity + origin: + type: + type_kind: Enum + type_data: + - undefined + - front_top_left + - front_top_right + - front_bottom_right + - front_bottom_left + - back_top_left + - back_top_right + - back_bottom_right + - back_bottom_left + default: undefined + description: | + Where is the origin of the detector space reference + frame located. This is the location of Xd = 0, Yd = 0, Zd = 0. + Assume regions-of-interest in this reference frame form a + rectangle or cuboid. + Edges are interpreted by inspecting the direction of their + outer unit normals (which point either parallel or antiparallel) + along respective base vector direction of the reference frame. + m_annotations: + eln: + component: RadioEnumEditQuantity + + gnomonic_projection: + section: + description: | + Specific conventions for electron backscatter diffraction (EBSD) for + interpreting data and eventually applied post-processing tasks. + m_annotations: + eln: + quantities: + method: + type: + type_kind: Enum + type_data: + - undefined + - backscatter + - other + default: backscatter + description: Which type of electron diffraction method used. + m_annotations: + eln: + component: RadioEnumEditQuantity + sub_sections: + # useful for all diffraction techniques + # specific for EBSD + gnomonic_projection_reference_frame: + section: + description: | + Details about the gnomonic projection reference frame. + m_annotations: + eln: + quantities: + reference_frame_type: + type: + type_kind: Enum + type_data: + - undefined + - right_handed_cartesian + - left_handed_cartesian + default: undefined + description: | + Type of coordinate system/reference frame used for + identifying positions in the gnomonic projection space + Xg, Yg, Zg. + according to DOI: 10.1016/j.matchar.2016.04.008. + m_annotations: + eln: + component: RadioEnumEditQuantity + xaxis_direction: + type: + type_kind: Enum + type_data: + - undefined + - north + - east + - south + - west + - in + - out + default: undefined + description: | + Direction of the positively pointing "gnomomic" x-axis base + vector when viewing how the diffraction pattern looks on the + detector screen. We assume the configuration is inspected by + looking towards the sample surface from a position + that is located behind the detector. + Different tools assume that different strategies can be used + and are perceived as differently convenient to enter + details about coordinate system definitions. In this ELN users + have to possibility to fill in what they assume is sufficient to + define the coordinate system directions unambiguously. + Software which works with this user input needs to offer parsing + capabilities which detect conflicting input and warn accordingly. + m_annotations: + eln: + component: RadioEnumEditQuantity + yaxis_direction: + type: + type_kind: Enum + type_data: + - undefined + - north + - east + - south + - west + - in + - out + default: undefined + description: | + Direction of the positively pointing "gnomomic" y-axis base + vector when viewing how the diffraction pattern looks on the + detector screen. We assume the configuration is inspected by + looking towards the sample surface from a position + that is located behind the detector. + For further information consult also the help info for the + xaxis_direction field. + m_annotations: + eln: + component: RadioEnumEditQuantity + zaxis_direction: + type: + type_kind: Enum + type_data: + - undefined + - north + - east + - south + - west + - in + - out + default: undefined + description: | + Direction of the positively pointing "gnomomic" z-axis base + vector when viewing how the diffraction pattern looks on the + detector screen. We assume the configuration is inspected by + looking towards the sample surface from a position + that is located behind the detector. + For further information consult also the help info for the + xaxis_direction field. + m_annotations: + eln: + component: RadioEnumEditQuantity + origin: + type: + type_kind: Enum + type_data: + - undefined + - in_the_pattern_centre + # just stating in the pattern_centre is not necessarily sufficient + default: undefined + description: | + Is the origin of the gnomonic coordinate system located + where we assume the location of the pattern centre. + This is the location Xg = 0, Yg = 0, Zg = 0 according to + reference DOI: 10.1016/j.matchar.2016.04.008. + m_annotations: + eln: + component: RadioEnumEditQuantity + pattern_centre: + section: + description: | + Details about the definition and location of the pattern centre + which is a point in the gnomonic projection space Xg, Yg, Zg. + m_annotations: + eln: + quantities: + xaxis_boundary_convention: + type: + type_kind: Enum + type_data: + - undefined + - top + - right + - bottom + - left + default: undefined + description: | + From which border of the EBSP (in the detector reference frame) + is the pattern centre's x-position (PCx) measured? + Keywords assume the region-of-interest is defined by + a rectangle. We observe this rectangle and inspect the + direction of the outer-unit normals to the edges of + this rectangle. + m_annotations: + eln: + component: RadioEnumEditQuantity + xaxis_normalization_direction: + type: + type_kind: Enum + type_data: + - undefined + - north + - east + - south + - west + default: undefined + description: | + In which direction are positive values for PCx measured from + the specified boundary. Keep in mind that the gnomonic space + is in virtually all cases embedded in the detector space. + Specifically, the XgYg plane is defined such that it is + embedded/laying inside the XdYd plane (of the detector + reference frame). + When the normalization direction is the same as e.g. the + detector x-axis direction, we state that we effectively + normalize in fractions of the width of the detector. + The issue with terms like width and height is that these + degenerate if the detector region-of-interest is square-shaped. + This is why we should better avoid talking about width and height but programmatically state how we would measure distances practically with a ruler and how we then measure positive + distances. + m_annotations: + eln: + component: RadioEnumEditQuantity + yaxis_boundary_convention: + type: + type_kind: Enum + type_data: + - undefined + - top + - right + - bottom + - left + default: undefined + description: | + From which border of the EBSP (in the detector reference + frame) is the pattern centre's y-position (PCy) measured? + For further details inspect the help button of + xaxis_boundary_convention. + m_annotations: + eln: + component: RadioEnumEditQuantity + yaxis_normalization_direction: + type: + type_kind: Enum + type_data: + - undefined + - north + - east + - south + - west + default: undefined + description: | + In which direction are positive values for PCy measured from + the specified boundary. + For further details inspect the help button of + xaxis_normalization_direction. + m_annotations: + eln: + component: RadioEnumEditQuantity + # pattern_centre_distance_convention: + # type: + # type_kind: Enum + # type_data: + # - undefined + # - Bruker + # - JEOL + # - FEI + # - Oxford + # description: | + # How is the third of the three pattern centre parameter values, + # the (distance) parameter DD, normalized. Which convention + # is followed. We are aware that specifying one of the options here + # also implicitly comes with conventions for some of the parameter + # requested in this ELN. For now we would rather like to ask + # the users though to be specific also to learn how such an ELN + # will be used in practice. + # m_annotations: + # eln: + # component: RadioEnumEditQuantity + # Reference DOI: 10.1016/j.matchar.2016.04.008 + # Other packages describe the PC position starting from the bottom left + # of the EBSP instead of the top left as used here. These packages may record + # this with respect to a square/circular EBSP, illustrating that care must be + # taken when using rectangular screens, as the aspect ratio of the EBSP is + # important when converting pattern fractions into effective pixels or mm. + indexing: + section: + description: | + Details about the indexing algorithm(s) used. + m_annotations: + eln: + quantities: + method: + type: + type_kind: Enum + type_data: + - undefined + - hough_transform + - dictionary + - radon_transform + - other + default: backscatter + description: | + Principal algorithm used for indexing. + m_annotations: + eln: + component: RadioEnumEditQuantity diff --git a/examples/data/em_spctrscpy/README.md b/examples/data/em_spctrscpy/README.md index 699b1f5a07e730e9ac0a54183e88874848692b90..255fca3e5a45ca466f22af1e334bc2c0b0789503 100644 --- a/examples/data/em_spctrscpy/README.md +++ b/examples/data/em_spctrscpy/README.md @@ -1,92 +1,65 @@ -# An Electronic Lab Notebook (ELN) Example for Electron Microscopy (EM) - -## Introduction - -This example shows how the NOMAD ELN functionalities can be used to collect -required metadata for groups, fields, and attributes for creating a dataset -which is compliant with the NeXus NXem application definition. - -Specifically, this example shows how I/O functionalities of hyperspy can be used -to load data of spectroscopy experiments from three exemplar file formats, namely -Bruker BCF, Velox EMD, and DigitalMicrograph DM3 into NOMAD OASIS. The implementation -shows how instances of NeXus base classes like NXspectrum_set_em_xray, -NXspectrum_set_em_eels, and NXimage_set_em_adf can be created and registered inside -instances of NXevent_data_em. The example shows how all these base classes can be -composed and stored inside a NeXus/HDF5 file. - -This makes the example relevant for researchers who work within the fields of -scanning electron microscopy (SEM) EDS/EDX, transmission electron microscopy -(EDS/STEM), and electron energy loss spectroscopy (EELS). - -The NeXus NXem data model is documented here [NXem](https://fairmat-experimental.github.io/nexus-fairmat-proposal) - -This example also shows how the NOMAD OASIS ELN functionalities can be used -to supplement a NeXus file with metadata which are currently or usually not stored -in vendor or community files including details about the specimen, the instrument, -users, and post-processing steps. - +# Tutorial for parsing spectroscopy data from electron microscopy + +## Scope +This example combines a set of configured components of NOMAD to collect metadata +specific for electron microscopy and combine these with datasets collected in +different domain-specific file formats. Specifically, the tutorial shows how +functionalities can work together in NOMAD: A NOMAD electronic lab notebook (ELN) +instance customized for electron microscopy, the `em_spctrscpy` dataconverter +offered through the `pynxtools` NeXus parser, the `NXem` NeXus data schema, and +several NOMAD core functionalities work together to create electron-microscopy- +domain-specific NOMAD entries with respective default plots for `h5web`. + +## Getting started +1. Click the respective button to execute the example. +2. Wait for NOMAD to instantiate the example for you. +3. Go to the `Uploads` section (menu bar). +4. Select the generated upload. +5. Explore its content by clicking on the arrow keys (to the right side of a file). +6. Modify the input file in the NOMAD ELN to match your dataset. + You can also use the drag-and-drop functionality to drop your + reconstruction and ranging definition file inside the ELN. +7. Click `save` to trigger a reprocessing of your upload. +8. Explore its content via e.g. the preview or via the `Entries` + (select from the menu bar). + +## Which input is supported by this example? +This example works with the following community file formats (BCF, EMD, DM3). +The example guides how individual data sources like signals from different detectors +can be collected and organized as `NXevent_data_em` instances using the `NXem` +NeXus data schema. + +The ELN is used to collect metadata which are currently not stored in these +files including details about the specimen, the instrument, users, and some +post-processing steps. + +## Which data artefacts should I expect to find? This example upload contains the following entries: - A schema in NOMAD's *archive.yaml* format: *nxem.schema.archive.yaml* -- A schema instance file used by NOMAD *nxem.archive.json* which is filled for educational purpose with values for the example. -- The primary consumer of this json file is NOMAD and its internal data management system. -- Another schema instance file used by the nomad-parser-nexus *eln_data.yaml*. This file contains all entered -quantities from the ELN GUI (after the save button was stored). The example is also filled for educational purposes -with values matching those in nxem.archive.json. -Files are updated each time the save button in the ELN GUI is clicked. -The eln_data.yaml file is used by the [NOMAD-PARSER-NEXUS](https://github.com/nomad-coe/nomad-parser-nexus). - -This example is configured to take an example dataset and call the nomad-parser-nexus dataconverter -which creates a NeXus file compliant with NXem. Once completed, this file is available in the -upload section/staging area. This makes also these files explorable with H5Web visualization -through the files menu. - -This example comes with a measured datasets which are meant for testing and exploring. -The datasets include two examples kindly shared by Adrien Teurtrie and Cécile Hebert at EPFL -(Bruker BCF, Velox EMD), and a Digital Micrograph DM3 file with EELS data measured and kindly -shared by Hannah Nerl and Christoph Koch. - -## Creating NeXus files - -When you modify the ELN and click the save button, the data from the ELN will be -parsed and combined with the content from the vendor file to create the NXS file. -You can replace these files with your own and accordingly use the ELN to enter your -own metadata. Upon saving, a NeXus/HDF5 file in NXapm format will be created for your specific dataset. - -With this functionality, you can use this example as a template to translate your own -datasets into NeXus. The drag-and-drop functionality of the upload section can be -used to pass your vendor file onto the respective file upload fields of the ELN. -After clicking the save button, the newly entered metadata and files will be processed -on-the-fly and a new NeXus file, compliant with NXem will be generated. - -## Where to go from now - -With an example in your upload **you can explore** the content in H5Web. -Furthermore, you can work with the data by starting for instance -a generic jupyterlab container via the **Analytics tab in the** NOMAD OASIS -menu bar. This container is a part of the Nomad Remote Tools Hub (NORTH) service. - -**Once running, the container offers a jupyter-lab server and notebook.** - -## Summary - -The example is meant as a starting point. You can download the schema file and extend the -schema to collect further metadata (e. g. for adding optional quantities defined in NXem) based -on what is relevant for your laboratory and use case. Also you can explore the implementation -of the example to customize it for your own needs. We would be happy if you could support us -with improving this example and the associated schemes by leaving us comments via the -nexus-fairmat-proposal pages or by contacting us via the various channels. -We are also very happy to guide you on how to customize these functionalities -for your own laboratory and needs. - -Consult our [documentation on the NOMAD Archive and Metainfo](https://nomad-lab.eu/prod/v1/docs/archive.html) -to learn more about schemes. - +- A schema instance file as used and generated by NOMAD *emspctrscpy.archive.json*. + For educational purposes this file is filled with values but it is the + user's responsibility to check that these metadata match their dataset. +- Another schema instance file *eln_data.yaml*. This file contains a plain + view of all entered/modified quantities including their units. This file is + updated with clicking the `save` button. This file should not be edited + manually. Instead, edit the schema instance using the NOMAD GUI. + +## Which data schema is used? +Specifically the ELN template is configured such that its terminology matches to +the [NXem](https://fairmat-nfdi.github.io/nexus-fairmat-proposal) NeXus data schema. + +## Acknowledgements +This example comes with real world datasets which were measured and characterized +by members the international electron microscopy community. +[Details can be found here:](https://www.zenodo.org/record/7908429#.ZFt6Ds5By38) ## Questions, comments, suggestions? - -For general questions regarding the EM tools and if you're interested in building one for your -own research workflow or your colleagues and group you are very welcome to contact -[Markus Kühbach](https://www.fair-di.eu/fairmat/fairmat_/fairmatteam) from the FAIRmat consortium. - - -## Known bugs - +You are very welcome to approach us with all sorts of questions, and +feature requests. [Markus Kühbach](https://www.fairmat-nfdi.eu/fairmat/about-fairmat/team-fairmat) +is the respective contact person within the FAIRmat consortium. + +## Where to go from now? +Provided the upload was successful and your NOMAD OASIS is using a working JupyterHub +configuration, you can also work, i.e. analyze your data using NOMAD. +For this you should go to `Analytics` (menu bar) and select the NOMAD Remote Tools Hub +called `north`. This service and toolset of NOMAD offers a set of preconfigured containers. +Details dependent on the specific configuration of your NOMAD OASIS. diff --git a/examples/data/em_spctrscpy/downloads.archive.yaml b/examples/data/em_spctrscpy/downloads.archive.yaml index 3b9a6bf5a20d73acdd1f078804bf1c64e12ce233..78411e90702b2ff330fbdaa287927bc0aa0f6a8c 100644 --- a/examples/data/em_spctrscpy/downloads.archive.yaml +++ b/examples/data/em_spctrscpy/downloads.archive.yaml @@ -1,8 +1,8 @@ data: m_def: nomad.datamodel.metainfo.downloads.Downloads mainfiles: - - em.archive.json + - emspctrscpy.archive.json downloads: - - url: https://www.zenodo.org/record/7050774/files/em-spctrscpy-sprint9-example.zip?download=1 - output: em-spctrscpy-sprint9-example.zip + - url: https://www.zenodo.org/record/7908429/files/EM.Various.Datasets.1.zip?download=1 + output: EM.Various.Datasets.1.zip extract: true \ No newline at end of file diff --git a/examples/data/em_spctrscpy/eln_data.yaml b/examples/data/em_spctrscpy/eln_data.yaml index e9683551f27a80fb5b69258890b4f77ba7e2887b..43d18ed5d3350248de0f7486c7af4d3a5d96799d 100644 --- a/examples/data/em_spctrscpy/eln_data.yaml +++ b/examples/data/em_spctrscpy/eln_data.yaml @@ -1,61 +1,55 @@ em_lab: detector: - - type: EDS detector + - local_name: superscan ebeam_column: aberration_correction: applied: true aperture_em: - - name: C1 - value: 4 - electron_gun: - emitter_type: cold_cathode_field_emitter + - name: ap1 + value: 2.0 + electron_source: + emitter_type: field_emission + name: mysource voltage: - unit: V - value: 200000 + unit: kV + value: 60.0 fabrication: - capabilities: '---' - identifier: talos - model: TALOS - vendor: FEI - instrument_name: TALOS - location: fEPFL + capabilities: irrelevant for this example + identifier: n/a + model: Nion Hermes + vendor: Nion Co. + instrument_name: Nion + location: Berlin optical_system_em: beam_current: - unit: A - value: 1.2e-11 + unit: pA + value: 12.0 beam_current_description: estimated - magnification: 610000 - semi_convergence_angle: - unit: rad - value: 0.2 stage_lab: - description: double tilt - name: nothing + description: some stage + name: kleindiek entry: - attr_version: nexus-fairmat-proposal successor of 50433d9039b3f33299bab338998acb5335cd8951 + attr_version: nexus-fairmat-proposal successor of 9636feecb79bb32b828b1a9804269573256d7696 definition: NXem - end_time: '2022-09-21T19:16:00+00:00' - experiment_description: 1613_si - experiment_identifier: 1613_si - program: Velox - program__attr_version: v6.8 - start_time: '2022-09-20T19:16:00+00:00' + end_time: '2023-05-28T19:10:00+00:00' + experiment_description: DigitalMicrograph Test + experiment_identifier: Benedikt + program: DigitalMicrograph + program__attr_version: '1.0' + start_time: '2023-05-28T19:10:00+00:00' sample: atom_types: - - Al - - Nd - - O - description: test + - Gd + description: nothing method: experiment - name: 1613_Si - preparation_date: '2022-09-15T19:15:00+00:00' + name: DM + preparation_date: '2023-05-15T19:12:00+00:00' sample_history: unknown - short_title: '1613' + short_title: unknown thickness: - unit: m - value: 2.0e-08 + unit: nm + value: 200000000.0 user: -- name: MarkusK - orcid: '0000' -- email: '----' - name: MarkusS +- affiliation: FAIRmat + name: MarkusK +- name: Benedikt Haas diff --git a/examples/data/em_spctrscpy/em.archive.json b/examples/data/em_spctrscpy/em.archive.json deleted file mode 100644 index 960d9d3a91e14189e9264ee312778fe432d52167..0000000000000000000000000000000000000000 --- a/examples/data/em_spctrscpy/em.archive.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "data": { - "m_def": "../upload/raw/nxem.schema.archive.yaml#/definitions/section_definitions/0", - "reader": "em_spctrscpy", - "nxdl": "NXem.nxdl", - "input_files": [ - "eln_data.yaml", - "EELS_map_2_ROI_1_location_4.dm3" - ], - "output": "output.nxs", - "entry": { - "attr_version": "nexus-fairmat-proposal successor of 50433d9039b3f33299bab338998acb5335cd8951", - "definition": "NXem", - "experiment_identifier": "1613_si", - "experiment_description": "1613_si", - "start_time": "2022-09-20T19:16:00+00:00", - "end_time": "2022-09-21T19:16:00+00:00", - "program": "Velox", - "program__attr_version": "v6.8" - }, - "user": [ - { - "name": "MarkusK", - "orcid": "0000" - }, - { - "name": "MarkusS", - "email": "----" - } - ], - "sample": { - "method": "experiment", - "name": "1613_Si", - "sample_history": "unknown", - "preparation_date": "2022-09-15T19:15:00+00:00", - "short_title": "1613", - "atom_types": [ - "Al", - "Nd", - "O" - ], - "description": "test", - "thickness": 2e-8 - }, - "em_lab": { - "instrument_name": "TALOS", - "location": "fEPFL", - "fabrication": { - "vendor": "FEI", - "model": "TALOS", - "identifier": "talos", - "capabilities": "---" - }, - "ebeam_column": { - "electron_gun": { - "voltage": 200000, - "emitter_type": "cold_cathode_field_emitter" - }, - "aperture_em": [ - { - "name": "C1", - "value": 4 - } - ], - "aberration_correction": { - "applied": true - } - }, - "optical_system_em": { - "magnification": 610000, - "semi_convergence_angle": 0.2, - "beam_current": 1.2e-11, - "beam_current_description": "estimated" - }, - "detector": [ - { - "type": "EDS detector" - } - ], - "stage_lab": { - "name": "nothing", - "description": "double tilt" - } - } - }, - "m_ref_archives": {} -} \ No newline at end of file diff --git a/examples/data/em_spctrscpy/emspctrscpy.archive.json b/examples/data/em_spctrscpy/emspctrscpy.archive.json new file mode 100644 index 0000000000000000000000000000000000000000..3212abfefdb1abecd1d26fde9eb9a637271a4f9d --- /dev/null +++ b/examples/data/em_spctrscpy/emspctrscpy.archive.json @@ -0,0 +1 @@ +{"data":{"m_def":"../upload/raw/nxem.schema.archive.yaml#/definitions/section_definitions/0","reader":"em_spctrscpy","nxdl":"NXem.nxdl","input_files":["EELS_map_2_ROI_1_location_4.dm3"],"output":"em.nxs","entry":{"attr_version":"nexus-fairmat-proposal successor of 9636feecb79bb32b828b1a9804269573256d7696","definition":"NXem","experiment_identifier":"Benedikt","experiment_description":"DigitalMicrograph Test","start_time":"2023-05-28T19:10:00.000Z","end_time":"2023-05-28T19:10:00.000Z","program":"DigitalMicrograph","program__attr_version":"1.0"},"user":[{"name":"MarkusK","affiliation":"FAIRmat"},{"name":"Benedikt Haas"}],"sample":{"method":"experiment","name":"DM","sample_history":"unknown","preparation_date":"2023-05-15T19:12:00.000Z","short_title":"unknown","atom_types":["Gd"],"description":"nothing","thickness":0.2},"em_lab":{"instrument_name":"Nion","location":"Berlin","fabrication":{"vendor":"Nion Co.","model":"Nion Hermes","identifier":"n/a","capabilities":"irrelevant for this example"},"ebeam_column":{"electron_source":{"name":"mysource","voltage":60000,"emitter_type":"field_emission"},"aperture_em":[{"name":"ap1","value":2}],"aberration_correction":{"applied":true}},"optical_system_em":{"beam_current":1.2e-11,"beam_current_description":"estimated"},"detector":[{"local_name":"superscan"}],"stage_lab":{"name":"kleindiek","description":"some stage"}}},"m_ref_archives":{}} \ No newline at end of file diff --git a/examples/data/em_spctrscpy/nxem.schema.archive.yaml b/examples/data/em_spctrscpy/nxem.schema.archive.yaml index 199d47a3b73241fd778bee2c97564e471a617997..55cbdaaa27139832b55fb1ea45bc9358ee306abc 100644 --- a/examples/data/em_spctrscpy/nxem.schema.archive.yaml +++ b/examples/data/em_spctrscpy/nxem.schema.archive.yaml @@ -5,10 +5,7 @@ definitions: name: 'em' # 'ELN/application definition schema for electron microscopy (EM) experiments.' sections: # section definitions what were back in the old days msection base classes - # Operator: - # Specimen: ElectronMicroscopy: # the actual schema - # nomad.datamodel.metainfo.eln.NexusParser base_sections: - 'nomad.datamodel.metainfo.eln.NexusDataConverter' - 'nomad.datamodel.data.EntryData' @@ -37,7 +34,7 @@ definitions: type: type_kind: Enum type_data: - - 'nexus-fairmat-proposal successor of 50433d9039b3f33299bab338998acb5335cd8951' + - 'nexus-fairmat-proposal successor of 9636feecb79bb32b828b1a9804269573256d7696' description: Hashvalue of the NeXus application definition file m_annotations: eln: @@ -333,7 +330,7 @@ definitions: eln: # quantities: sub_sections: - electron_gun: + electron_source: section: description: The source which creates the electron beam m_annotations: @@ -354,17 +351,16 @@ definitions: m_annotations: eln: component: NumberEditQuantity - defaultDisplayUnit: kilovolt + defaultDisplayUnit: kV minValue: 0.0 maxValue: 1.1e6 emitter_type: type: type_kind: Enum type_data: - - filament + - thermionic - schottky - - cold_cathode_field_emitter - - other + - field_emission description: | Emitter type used to create the beam. m_annotations: @@ -481,9 +477,9 @@ definitions: m_annotations: eln: quantities: - type: + local_name: type: str - description: Free text option to write further details about the detector. + description: Instrument-specific alias/name m_annotations: eln: component: StringEditQuantity diff --git a/examples/data/iv_temp/IV_temp.mapping.json b/examples/data/iv_temp/IV_temp.mapping.json index 4cc60cf857a872e5b33661f7fa95aa116f1b85ed..e33c9a43ab9b3f6ac3826a15a4687bef15037e9f 100644 --- a/examples/data/iv_temp/IV_temp.mapping.json +++ b/examples/data/iv_temp/IV_temp.mapping.json @@ -34,6 +34,7 @@ "/ENTRY[entry]/PROCESS[process]/program": "Bluesky", "/ENTRY[entry]/PROCESS[process]/program/@version": "/metadata_start/versions/bluesky", "/ENTRY[entry]/SAMPLE[sample]/name": "/metadata_start/sample/Name", + "/ENTRY[entry]/SAMPLE[sample]/atom_types": "Si, C", "/ENTRY[entry]/USER[user]/email": "/metadata_start/user/E-Mail", "/ENTRY[entry]/USER[user]/name": "/metadata_start/user/Name", "/ENTRY[entry]/definition": "NXiv_temp", diff --git a/examples/data/light_eln/schema.archive.yaml b/examples/data/light_eln/schema.archive.yaml index 6214e83cab43d7f79b49325b8cb9102d6ac58bed..21c37b11a364ee73c999a98e725b2efcf2c80867 100644 --- a/examples/data/light_eln/schema.archive.yaml +++ b/examples/data/light_eln/schema.archive.yaml @@ -54,7 +54,7 @@ definitions: base_section: nomad.datamodel.metainfo.eln.Process quantities: instrument: - type: Instrument + type: '#/Instrument' m_annotations: eln: component: ReferenceEditQuantity @@ -65,8 +65,9 @@ definitions: template: processes: pvd_evaporation: {} + eln: base_sections: - - 'nomad.datamodel.metainfo.eln.Sample' + - 'nomad.datamodel.metainfo.basesections.CompositeSystem' - 'nomad.datamodel.data.EntryData' quantities: name: @@ -88,7 +89,7 @@ definitions: eln: component: AutocompleteEditQuantity # Allows to edit enums with an auto complete text form field chemicals: - type: Chemical # Types can also be other sections. This allows to reference a different section. + type: '#/Chemical' # Types can also be other sections. This allows to reference a different section. shape: ['*'] m_annotations: eln: @@ -127,7 +128,7 @@ definitions: sub_sections: pvd_evaporation: section: - base_sections: ['Process', 'nomad.parsing.tabular.TableData'] + base_sections: ['Process', 'nomad.parsing.tabular.TableData', 'nomad.datamodel.metainfo.plot.PlotSection'] m_annotations: # We can use the eln annotations to put the section to the overview # page, and hide unwanted inherited quantities. @@ -136,12 +137,25 @@ definitions: hide: ['name', 'lab_id', 'description', 'method'] # Plots are shown in the eln. Currently we only support simple x,y # line plots - plot: - title: Pressure and Temperature over Time - x: time - y: - - chamber_pressure - - substrate_temperature + plotly_graph_object: + - data: + - x: "#time" + y: "#chamber_pressure" + - x: "#time" + y: "#substrate_temperature" + yaxis: y2 + layout: + title: + text: Pressure and Temperature over Time + yaxis2: + overlaying: y + side: right + - data: + x: "#time" + y: "#chamber_pressure" + - data: + x: "#time" + y: "#substrate_temperature" quantities: data_file: type: str @@ -154,8 +168,14 @@ definitions: # quantities in this section (and sub_section) with the column # data of .csv or .xlsx files. There is also a mode option that by default, is set to column. tabular_parser: - sep: '\t' - comment: '#' + parsing_options: + comment: '#' + sep: '\t' + mapping_options: + - mapping_mode: column + file_mode: current_entry + sections: + - '#root' browser: adaptor: RawFileAdaptor # Allows to navigate to files in the data browser eln: @@ -175,12 +195,10 @@ definitions: unit: mbar m_annotations: eln: - defaultDisplayUnit: mbar + # component: NumberEditQuantity + # defaultDisplayUnit: mbar ## MUST NOT BE AN ARRAY FOR THIS https://gitlab.mpcdf.mpg.de/nomad-lab/nomad-FAIR/-/issues/932 tabular: name: Vacuum Pressure1 - plot: - x: time - y: chamber_pressure substrate_temperature: type: np.float64 shape: ['*'] @@ -189,9 +207,6 @@ definitions: tabular: name: Substrate PV unit: degC - plot: - x: time - y: substrate_temperature hotplate_annealing: section: base_section: Process diff --git a/examples/data/uploads/example_uploads.yml b/examples/data/uploads/example_uploads.yml index 35a420327eb05a94de3a07184083cd73ffebda25..0ddbba037a7e4ec283a2d485b55e01bc1e025048 100644 --- a/examples/data/uploads/example_uploads.yml +++ b/examples/data/uploads/example_uploads.yml @@ -49,33 +49,71 @@ FAIRmat examples: It shows the generation of a NeXus file according to the [NXmpes](https://manual.nexusformat.org/classes/contributed_definitions/NXmpes.html#nxmpes) application definition and a successive analysis of an example data set. + sts: + path: examples/data/uploads/sts.zip + title: STS + description: | + AT this moment, the reader works for two types of experiments Scanning Tunneling Microscopy (STM) and Scanning Tunneling Spectroscopy (STS) from Scanning Probe Microscopy. + It can only transform the data from Nanonis machine generate files into standarized nexus application definition NXsts. In this zip file, the data file are collected from + two specific software versions generic 5e and genric 4.5. apm: path: examples/data/uploads/apm.zip - title: Electronic Lab Notebook for Atom Probe Microscopy (APM) + title: Atom Probe Microscopy description: | - This is an example for atom probe microscopy. - The example contains a custom NOMAD *schema* to create an **Electronic - Lab Notebook (ELN)** with which users can enter metadata that are usually - not stored in vendor or community file formats. The example serves two - purposes. On the one hand it shows how custom NOMAD *schema* can be - created for a research community, here atom probe. On the other hand it - shows how all required data in a NeXus NXapm file can be added to supplement - content from vendor and community files. + This is an example for atom probe microscopy offering + an atom-probe-specific custom schema for an ELN and aligned NeXus data schema + (NXapm) supporting standardization, parsing capabilities for the most frequently + used file formats (POS, ePOS, APT) for storing reconstruction and ranging + definitions (RNG, RRNG), real world example data, and a docker container apmtools + which contains configured open-source tools for analyzing atom probe dataset + for exploring composition and microstructural features described using methods + from the research fields of computational geometry and materials engineering. em_spctrscpy: path: examples/data/uploads/em_spctrscpy.zip - title: Electronic Lab Notebook for Electron Microscopy (EM) + title: Spectroscopy Experiments with Electron Microscopy + description: | + This is an example for scanning and/or transmission electron microscopy offering + examples how NOMAD can be customized to support spectroscopy methods like + energy-dispersive X-ray (EDXS/EDS) and electron energy loss spectroscopy (EELS). + The example offers a domain-specific custom schema for an ELN and aligned NeXus + data schema (NXem) supporting standardization, parsing capabilities for some + examples of file formats supported via hyperspy and third-party tools. + Examples implement how to parse data from DM3, Velox EMD and Bruker BCF files. + em_om: + path: examples/data/uploads/em_om.zip + title: Orientation Microscopy with Electron Microscopy + description: | + This is an example for scanning and/or transmission electron microscopy offering + a proof-of-concept how NOMAD can be customized to support orientation microscopy + methods and thus one large group of diffraction-based methods in an electron + microscope. + Specifically, the example shows how electron backscatter diffraction as a + technique can be conceptually represented in a research data management system. + The example offers a domain-specific custom schema for storing EBSD data and + related practical steps and mathematical conventions assumed including an aligned + NeXus data schema (NXem_ebsd) as a draft proposal for convincing why more + standardization in the research field of orientation microscopy is useful. + Furthermore, the example comes with real world data from multiple sources + different tools/analysis strategies used. The example includes a set of parsers + using the pynxtools library which implements proof-of-concepts how EBSD data + in different representation can be loaded (HDF5-based files from technology + partners exemplified for H5OINA, analysis results from third-party community + software like MTex, how to interface with an use the pyxem/orix/kikuchipy library, + and an example of correlative studies where a set of serial-sectioning + orientation maps is processed into a three-dimensionally reconstructed + microstructure using the popular community tool DREAM.3D. + Feedback from the EBSD community is welcome to substantially enhance + the capabilities of the underlying tools, specifically pynxtools to + offer a library that can be used in research data management systems + such as but not exclusively NOMAD OASIS. + em_nion: + path: examples/data/uploads/em_nion.zip + title: Reading electron microscopy data from compressed nionswift project files description: | - This is an example for electron microscopy. - Specifically for spectroscopy methods in the SEM and TEM, exemplified - for energy-dispersive X-ray (EDXS/EDS) spectroscopy and - electron energy loss spectroscopy (EELS). - The example contains a custom NOMAD *schema* to create an **Electronic - Lab Notebook (ELN)** with which users can enter metadata that are usually - not stored in vendor or community file formats. The example serves two - purposes. On the one hand it shows how custom NOMAD *schema* can be - created for a research community, here electron microscopy. On the other hand - it shows how required data in a NeXus NXem file can be added to supplement - content from vendor and community files. + This is an initial implementation and draft example using the pynxtools + library capabilities and em_nion reader to show how data can be read + directly from nionswift project files and then mapped using mapping + tables on an instance of the NeXus NXem application definition. iv_temp: path: examples/data/uploads/iv_temp.zip title: Sensor Scan - IV Temperature Curve diff --git a/examples/metainfo/metainfo_metrics.py b/examples/metainfo/metainfo_metrics.py index 2bdb6844fbbca0c710bdd77b2cf27fe028c1f9ea..c63ff4615466f2d461b172a27a4017fc059c586c 100644 --- a/examples/metainfo/metainfo_metrics.py +++ b/examples/metainfo/metainfo_metrics.py @@ -14,7 +14,7 @@ quantities = dict() definitions = set() metainfo = _all_metainfo_packages() -for definition, _, _ in metainfo.m_traverse(): +for definition, _, _, _ in metainfo.m_traverse(): if definition in definitions: continue definitions.add(definition) diff --git a/examples/plugins/parser b/examples/plugins/parser index 6ebe255cce45b02d907bc8c4c17f0e3a7db1c131..3b246145b21484b72c67c6d4fb12207c1f869b0d 160000 --- a/examples/plugins/parser +++ b/examples/plugins/parser @@ -1 +1 @@ -Subproject commit 6ebe255cce45b02d907bc8c4c17f0e3a7db1c131 +Subproject commit 3b246145b21484b72c67c6d4fb12207c1f869b0d diff --git a/gui/.eslintrc.js b/gui/.eslintrc.js index 4a55118f35aff054e029858a5ba14ec143e39fb0..71e9815b415119adbba5a5b4ac2a27ec4fd256c4 100644 --- a/gui/.eslintrc.js +++ b/gui/.eslintrc.js @@ -12,7 +12,8 @@ module.exports = { }, "globals": { "fetch": false, - "browser": true + "browser": true, + "File": true }, "plugins": [ "react", "react-hooks", "testing-library", "jest" diff --git a/gui/package.json b/gui/package.json index 3d81a7fad2af54328e59bd0b18feb3e60c10599d..3ae43b4ccf3d06c872097b5de65d5d9bafc28df9 100644 --- a/gui/package.json +++ b/gui/package.json @@ -9,8 +9,8 @@ "@date-io/date-fns": "^1.3.13", "@fontsource/material-icons": "^4.2.1", "@fontsource/titillium-web": "^4.2.2", - "@h5web/app": "6.2.0", - "@h5web/lib": "6.2.0", + "@h5web/app": "8.0.0", + "@h5web/lib": "8.0.0", "@material-ui/core": "^4.12.4", "@material-ui/icons": "^4.11.3", "@material-ui/lab": "^4.0.0-alpha.61", @@ -54,7 +54,7 @@ "react-markdown": "^8.0.3", "react-mathjax": "^1.0.1", "react-pdf": "^5.7.2", - "react-resize-detector": "^7.1.2", + "react-resize-detector": "^9.1.0", "react-router-cache-route": "^1.12.11", "react-router-dom": "^5.1.2", "react-scripts": "4.0.3", @@ -126,7 +126,9 @@ "not IE <= 11", "not Android <= 4.4" ], + "//": "Note for @himanel1: The extra >0.2% added below is to help transpile @react-hookz which is a dependency for @h5web/app.", "development": [ + ">0.2%", "last 1 chrome version", "last 1 firefox version", "last 1 safari version" diff --git a/gui/src/components/APIs.js b/gui/src/components/APIs.js index 3a2699f63bdcc021255a1194ad2f9f1df5b64e3d..d44de09eea88106672f20f76c9570262e5eb1d69 100644 --- a/gui/src/components/APIs.js +++ b/gui/src/components/APIs.js @@ -19,6 +19,7 @@ import { makeStyles } from '@material-ui/core' import React from 'react' import { apiBase, appBase } from '../config' import Markdown from './Markdown' +import AppTokenForm from './AppTokenForm' const useStyles = makeStyles(theme => ({ root: { @@ -55,6 +56,19 @@ export default function About() { The [NOMAD Analytics Toolkit](https://nomad-lab.eu/AIToolkit) allows to use this without installation and directly on NOMAD servers. + ### App token + + Next to the usual access token based on OpenID Connect, we provide an + [app token](${appBase}/docs/apis/api.html#app-token) with custom expiration date. + You may request one via the [API](${apiBase}/v1/extensions/docs) or the following form: + `}</Markdown> + + <AppTokenForm /> + + <Markdown>{` + + ### Old API + You can still use NOMAD's old REST API. The data it provides might miss the most recent contributions: diff --git a/gui/src/components/App.js b/gui/src/components/App.js index f18a262c0c8fd7b92ded7a290f287b322fd37ec8..834c0b8306d6970e4f9c3ce7bad761fbbd31fc67 100644 --- a/gui/src/components/App.js +++ b/gui/src/components/App.js @@ -29,7 +29,6 @@ import Keycloak from 'keycloak-js' import { ReactKeycloakProvider } from '@react-keycloak/web' import { MuiThemeProvider } from '@material-ui/core/styles' import { ErrorSnacks, ErrorBoundary } from './errors' -import { PWAProvider } from './PWA' import Navigation from './nav/Navigation' import GUIMenu from './GUIMenu' import { APIProvider, GlobalLoginRequired, onKeycloakEvent } from './api' @@ -55,29 +54,27 @@ export default function App() { > <RecoilRoot> <APIProvider> - <PWAProvider> - <MuiPickersUtilsProvider utils={DateFnsUtils}> - <ErrorSnacks> - <ErrorBoundary> - <DataStore> - <GlobalMetainfo> - <Router history={history}> - <QueryParamProvider ReactRouterRoute={Route}> - <MuiThemeProvider theme={nomadTheme}> - <CssBaseline /> - <GlobalLoginRequired> - <Navigation /> - <GUIMenu/> - </GlobalLoginRequired> - </MuiThemeProvider> - </QueryParamProvider> - </Router> - </GlobalMetainfo> - </DataStore> - </ErrorBoundary> - </ErrorSnacks> - </MuiPickersUtilsProvider> - </PWAProvider> + <MuiPickersUtilsProvider utils={DateFnsUtils}> + <ErrorSnacks> + <ErrorBoundary> + <DataStore> + <GlobalMetainfo> + <Router history={history}> + <QueryParamProvider ReactRouterRoute={Route}> + <MuiThemeProvider theme={nomadTheme}> + <CssBaseline /> + <GlobalLoginRequired> + <Navigation /> + <GUIMenu/> + </GlobalLoginRequired> + </MuiThemeProvider> + </QueryParamProvider> + </Router> + </GlobalMetainfo> + </DataStore> + </ErrorBoundary> + </ErrorSnacks> + </MuiPickersUtilsProvider> </APIProvider> </RecoilRoot> </ReactKeycloakProvider> diff --git a/gui/src/components/AppTokenForm.js b/gui/src/components/AppTokenForm.js new file mode 100644 index 0000000000000000000000000000000000000000..de29503f29109726e57fb50dd0abf684f029e465 --- /dev/null +++ b/gui/src/components/AppTokenForm.js @@ -0,0 +1,108 @@ +/* + * Copyright The NOMAD Authors. + * + * This file is part of NOMAD. See https://nomad-lab.eu for further info. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { React, useEffect, useState } from 'react' + +import { addSeconds, endOfDay, format, formatDistanceToNow, getUnixTime, isValid, + subDays } from "date-fns" +import { Box, IconButton, Tooltip, makeStyles } from '@material-ui/core' +import ClipboardIcon from '@material-ui/icons/Assignment' +import { DatePicker } from '@material-ui/pickers' +import { CopyToClipboard } from 'react-copy-to-clipboard' +import { useKeycloak } from '@react-keycloak/web' +import { LoginRequired, useApi } from './api' +import { appTokenMaxExpiresIn } from '../config' +import { useErrors } from './errors' + +const useStyles = makeStyles({ + root: { + padding: 0 + } +}) + +export default function AppTokenForm() { + const classes = useStyles() + const {keycloak} = useKeycloak() + const {api} = useApi() + const errors = useErrors() + + const [error, setError] = useState() + const [dateValue, setDateValue] = useState(new Date()) + const [token, setToken] = useState() + + let maxDate = subDays(addSeconds(new Date(), appTokenMaxExpiresIn), 1) + if (!isValid(maxDate)) maxDate = undefined + + useEffect(() => { + if (error) setError(undefined) + + const expiresAt = endOfDay(dateValue) + const expiresInS = getUnixTime(expiresAt) - getUnixTime(new Date()) + api.get(`/auth/app_token?expires_in=${expiresInS}`) + .then((response) => { + setToken(response.app_token) + }) + .catch((exception) => { + setToken(undefined) + + if (exception.status !== 422) { + if (exception.status !== 401) { + errors.raiseError(exception) + } + return + } + + const limitExpiresInS = exception.apiMessage[0].ctx.limit_value + const limitExpiresAt = subDays(addSeconds(new Date(), limitExpiresInS), 1) + setError(`Choose not later than ${format(limitExpiresAt, 'yyyy-MM-dd')} ` + + `(in ${formatDistanceToNow(limitExpiresAt)}).`) + }) + }, [dateValue, api, setToken, error, errors]) + + const handleDateChange = value => setDateValue(value) + + return ( + <LoginRequired classes={{root: classes.root}}> + <Box display="flex" marginTop={1}> + <DatePicker + autoOk + error={error} + helperText={error} + disabled={!keycloak.authenticated} + disablePast + maxDate={maxDate} + size='small' + variant='inline' + inputVariant='filled' + label='App token expires after' + onChange={handleDateChange} + format='yyyy-MM-dd' + value={dateValue} + /> + <Box marginLeft={1}> + <CopyToClipboard text={token} > + <Tooltip title="Copy token to clipboard"> + <IconButton disabled={!token}> + <ClipboardIcon /> + </IconButton> + </Tooltip> + </CopyToClipboard> + </Box> + </Box> + </LoginRequired> + ) +} diff --git a/gui/src/components/DataStore.js b/gui/src/components/DataStore.js index 7c6608572703da50bbaeae682b61f022bb037c51..8f7048f33f4eab15a9747bbd52ab24840fe2f3d1 100644 --- a/gui/src/components/DataStore.js +++ b/gui/src/components/DataStore.js @@ -441,25 +441,30 @@ const DataStore = React.memo(({children}) => { const isJson = fileName.endsWith('json') if (isYaml || isJson) { const path = `/uploads/${archive.metadata.upload_id}/raw/${fileName}` - const content = await api.get(path, + let content + try { + content = await api.get(path, {decompress: true, ignore_mime_type: true}, {transformResponse: []}) - let rawArchive = {} - if (isYaml) { - try { - rawArchive = YAML.parse(content) - } catch (error) { - throw Error(`Could not parse YAML Schema defined here: ${path}. Failed with the following parsing error: ${error.message}`) + } catch (e) {} + if (content) { + let rawArchive = {} + if (isYaml) { + try { + rawArchive = YAML.parse(content) + } catch (error) { + throw Error(`Could not parse YAML Schema defined here: ${path}. Failed with the following parsing error: ${error.message}`) + } + } else if (isJson) { + try { + rawArchive = JSON.parse(content) + } catch (error) { + throw Error(`Could not parse JSON Schema defined here: ${path}. Failed with the following parsing error: ${error.message}`) + } } - } else if (isJson) { - try { - rawArchive = JSON.parse(content) - } catch (error) { - throw Error(`Could not parse JSON Schema defined here: ${path}. Failed with the following parsing error: ${error.message}`) + if ('definitions' in rawArchive) { + dataToUpdate.originalDefinition = rawArchive.definitions } } - if ('definitions' in rawArchive) { - dataToUpdate.originalDefinition = rawArchive.definitions - } } archive.processing_logs = undefined if (archive.metadata?.upload_id) { diff --git a/gui/src/components/PWA.js b/gui/src/components/PWA.js deleted file mode 100644 index c1ca1c4bbdc6db98a0e9791143104b90752d87e5..0000000000000000000000000000000000000000 --- a/gui/src/components/PWA.js +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Copyright The NOMAD Authors. - * - * This file is part of NOMAD. See https://nomad-lab.eu for further info. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import React, { useState, useEffect, useCallback, useMemo, useContext } from "react" -import PropTypes from 'prop-types' - -// A reference used by class components that cannot use hooks or multiple -// contexts. -export const pwaRegistrationRef = {current: null} - -/** - * React context that provides access to the PWA (Progressive Web App) service - * worker and its status. Only one singleton instance should be used. - */ -export const pwaContext = React.createContext() -export const PWAProvider = React.memo(({ - children -}) => { - const [waitingWorker, setWaitingWorker] = useState() - const [showReload, setShowReload] = useState(false) - - // Callback for service worker updates - const onUpdate = useCallback((registration) => { - setShowReload(true) - setWaitingWorker(registration.waiting) - }, [setShowReload, setWaitingWorker]) - - // Callback for service worker registration - const onSuccess = useCallback((registration) => { - pwaRegistrationRef.current = registration - setInterval(() => { - registration.update() - console.log('Periodic check for service worker update...') - }, (1000 * 60) * 30) - }, []) - - // Register the service worker once - useEffect(() => { - register({onUpdate, onSuccess}) - }, [onUpdate, onSuccess]) - - // Tells the service worker to skip the waiting phase and then reloads the - // page. - const reloadPage = useCallback(() => { - waitingWorker?.postMessage({ type: "SKIP_WAITING" }) - setShowReload(false) - window.location.reload() - }, [setShowReload, waitingWorker]) - - const value = useMemo(() => ({ - showReload, reloadPage - }), [reloadPage, showReload]) - - return <pwaContext.Provider value={value}> - {children} - </pwaContext.Provider> -}) -PWAProvider.propTypes = { - children: PropTypes.node -} - -/** - * Hook for using the PWA context. -*/ -export function usePWA() { - return useContext(pwaContext) -} - -const isLocalhost = Boolean( - window.location.hostname === 'localhost' || - // [::1] is the IPv6 localhost address. - window.location.hostname === '[::1]' || - // 127.0.0.0/8 are considered localhost for IPv4. - window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/) -) - -export function register(config) { - if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { - // The URL constructor is available in all browsers that support SW. - const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href) - if (publicUrl.origin !== window.location.origin) { - // Our service worker won't work if PUBLIC_URL is on a different origin - // from what our page is served on. This might happen if a CDN is used to - // serve assets; see https://github.com/facebook/create-react-app/issues/2374 - console.log( - 'Service worker disabled due to mismatch in public url and the site origin.' - ) - return - } - - window.addEventListener('load', () => { - const swUrl = `${process.env.PUBLIC_URL}/service-worker.js` - - if (isLocalhost) { - // This is running on localhost. Let's check if a service worker still exists or not. - checkValidServiceWorker(swUrl, config) - - // Add some additional logging to localhost, pointing developers to the - // service worker/PWA documentation. - navigator.serviceWorker.ready.then(() => { - console.log( - 'This web app is being served cache-first by a service ' + - 'worker. To learn more, visit https://cra.link/PWA' - ) - }) - } else { - // Is not localhost. Just register service worker - registerValidSW(swUrl, config) - } - }) - } -} - -function registerValidSW(swUrl, config) { - navigator.serviceWorker - .register(swUrl) - .then((registration) => { - registration.onupdatefound = () => { - const installingWorker = registration.installing - if (installingWorker == null) { - return - } - installingWorker.onstatechange = () => { - if (installingWorker.state === 'installed') { - if (navigator.serviceWorker.controller) { - // At this point, the updated precached content has been fetched, - // but the previous service worker will still serve the older - // content until all client tabs are closed. - console.log( - 'New content is available and will be used when all ' + - 'tabs for this page are closed. See https://cra.link/PWA.' - ) - - // Execute callback - if (config && config.onUpdate) { - config.onUpdate(registration) - } - } else { - // At this point, everything has been precached. - // It's the perfect time to display a - // "Content is cached for offline use." message. - console.log('Content is cached for offline use.') - - // Execute callback - if (config && config.onSuccess) { - config.onSuccess(registration) - } - } - } - } - } - }) - .catch((error) => { - console.error('Error during service worker registration:', error) - }) -} - -function checkValidServiceWorker(swUrl, config) { - // Check if the service worker can be found. If it can't reload the page. - fetch(swUrl, { - headers: { 'Service-Worker': 'script' } - }) - .then((response) => { - // Ensure service worker exists, and that we really are getting a JS file. - const contentType = response.headers.get('content-type') - if ( - response.status === 404 || - (contentType != null && contentType.indexOf('javascript') === -1) - ) { - // No service worker found. Probably a different app. Reload the page. - navigator.serviceWorker.ready.then((registration) => { - registration.unregister().then(() => { - window.location.reload() - }) - }) - } else { - // Service worker found. Proceed as normal. - registerValidSW(swUrl, config) - } - }) - .catch(() => { - console.log('No internet connection found. App is running in offline mode.') - }) -} - -export function unregister() { - if ('serviceWorker' in navigator) { - navigator.serviceWorker.ready - .then((registration) => { - registration.unregister() - }) - .catch((error) => { - console.error(error.message) - }) - } -} diff --git a/gui/src/components/Quantity.js b/gui/src/components/Quantity.js index 8c5ac1b46aed4cda405e57609568009570fb4e32..c50365480e81548d1db0de7e32f61f40cdda8bf8 100644 --- a/gui/src/components/Quantity.js +++ b/gui/src/components/Quantity.js @@ -38,10 +38,11 @@ import { CopyToClipboard } from 'react-copy-to-clipboard' import { get, isNil, isString, isNumber } from 'lodash' import { searchQuantities } from '../config' import Placeholder from './visualization/Placeholder' +import Ellipsis from './visualization/Ellipsis' import NoData from './visualization/NoData' import { formatNumber, formatTimestamp, authorList, serializeMetainfo } from '../utils' import { Quantity as Q, Unit, useUnits } from '../units' -import { filterData } from './search/FilterRegistry' +import { defaultFilterData } from './search/FilterRegistry' import { MaterialLink, RouteLink } from './nav/Routes' /** @@ -61,15 +62,6 @@ const useQuantityStyles = makeStyles(theme => ({ value: { flexGrow: 1 }, - ellipsis: { - whiteSpace: 'nowrap', - overflow: 'hidden', - textOverflow: 'ellipsis' - }, - ellipsisFront: { - direction: 'rtl', - textAlign: 'left' - }, valueAction: {}, valueActionButton: { padding: 4 @@ -169,11 +161,6 @@ const Quantity = React.memo((props) => { let content = null let clipboardContent = null - let valueClassName = styles.value - if (noWrap && ellipsisFront) { - valueClassName = `${valueClassName} ${styles.ellipsisFront}` - } - const isQuantityString = isString(quantity) const def = isQuantityString ? (searchQuantities[quantity]) @@ -184,8 +171,8 @@ const Quantity = React.memo((props) => { let useLabel = label if (!useLabel) { // Primarily use a lowercase 'pretty' label if one is defined in FilterRegistry - if (isQuantityString && filterData?.[quantity]?.label) { - useLabel = filterData?.[quantity]?.label.toLowerCase() + if (isQuantityString && defaultFilterData?.[quantity]?.label) { + useLabel = defaultFilterData?.[quantity]?.label.toLowerCase() // Alternatively use the original name in metainfo, underscores replaced by spaces } else if (def?.name) { useLabel = def.name.replace(/_/g, ' ') @@ -240,11 +227,14 @@ const Quantity = React.memo((props) => { if (children && children.length !== 0) { content = children } else if (finalValue || finalValue === 0) { - content = <Typography noWrap={noWrap} variant={typography} className={valueClassName}> - {finalValue} + content = <Typography noWrap={noWrap} variant={typography} className={styles.value}> + {(noWrap && ellipsisFront) + ? <Ellipsis front={ellipsisFront}>{finalValue}</Ellipsis> + : finalValue + } </Typography> } else { - content = <Typography noWrap={noWrap} variant={typography} className={valueClassName}> + content = <Typography noWrap={noWrap} variant={typography} className={styles.value}> <i>{placeholder || 'unavailable'}</i> </Typography> } @@ -262,7 +252,7 @@ const Quantity = React.memo((props) => { >{useLabel}</Typography> : ''} <div className={styles.valueContainer}> {loading - ? <Typography noWrap={noWrap} variant={typography} className={valueClassName}> + ? <Typography noWrap={noWrap} variant={typography} className={styles.value}> <i>loading ...</i> </Typography> // The tooltip portal is disabled for custom contents that may @@ -668,7 +658,7 @@ export const SectionTable = React.memo(({ </TableCell>} {Object.keys(quantities).map((key, index) => { const defCustom = quantities[key] - const def = filterData[`${section}.${key}`] + const def = defaultFilterData[`${section}.${key}`] const unitName = defCustom.unit || def?.unit const unit = unitName && new Unit(unitName) const unitLabel = unit && unit.toSystem(units).label() @@ -718,7 +708,7 @@ export const SectionTable = React.memo(({ <TableRow key={i}> {data.data.map((row, j) => { const defCustom = quantities[key] - const def = filterData[`${section}.${key}`] + const def = defaultFilterData[`${section}.${key}`] const unitName = defCustom.unit || def?.unit const unit = unitName && new Unit(unitName) const unitLabel = unit ? ` ${unit.toSystem(units).label()}` : '' diff --git a/gui/src/components/UserdataPage.js b/gui/src/components/UserdataPage.js index 250acce78a8d1c774a42e964d24b3ca27065f49d..0b0d3b012acf19fd16cf09e44d70dfeab93f2334 100644 --- a/gui/src/components/UserdataPage.js +++ b/gui/src/components/UserdataPage.js @@ -78,6 +78,7 @@ const initialFiltersLocked = { const UserdataPage = React.memo(() => { return <SearchContext resource={context?.resource} + initialSchemas={context?.schemas} initialPagination={context?.pagination} initialColumns={context?.columns} initialRows={context?.rows} diff --git a/gui/src/components/api.js b/gui/src/components/api.js index d8edc924ed98f24ab77a3993fa01dd04d4424151..59c0987d50017fed172a944a2fa3f4b85833cde4 100644 --- a/gui/src/components/api.js +++ b/gui/src/components/api.js @@ -25,7 +25,7 @@ import { import PropTypes from 'prop-types' import Cookies from 'universal-cookie' import { apiBase, globalLoginRequired, appBase, searchQuantities } from '../config' -import { Box, makeStyles, Typography } from '@material-ui/core' +import { Box, Typography, withStyles } from '@material-ui/core' import LoginLogout from './LoginLogout' import { useKeycloak } from '@react-keycloak/web' import axios from 'axios' @@ -507,7 +507,7 @@ GlobalLoginRequired.propTypes = { ]).isRequired } -const useLoginRequiredStyles = makeStyles(theme => ({ +export const LoginRequired = withStyles(theme => ({ root: { padding: theme.spacing(2), display: 'flex', @@ -516,10 +516,7 @@ const useLoginRequiredStyles = makeStyles(theme => ({ marginRight: theme.spacing(1) } } -})) - -export function LoginRequired({message, children}) { - const classes = useLoginRequiredStyles() +}))(({classes, message, children}) => { const {api} = useApi() if (api.keycloak.authenticated) { return <React.Fragment> @@ -533,7 +530,7 @@ export function LoginRequired({message, children}) { <LoginLogout color="primary" /> </div> } -} +}) LoginRequired.propTypes = { message: PropTypes.string, children: PropTypes.oneOfType([ diff --git a/gui/src/components/archive/ArchiveBrowser.js b/gui/src/components/archive/ArchiveBrowser.js index 0898f7d9f71e2cf9d9f8a7a9eb00ee97d6b77a5e..866f70ab90e2119c8a737929f1db15421d942e25 100644 --- a/gui/src/components/archive/ArchiveBrowser.js +++ b/gui/src/components/archive/ArchiveBrowser.js @@ -51,7 +51,7 @@ import { SourceApiCall, SourceApiDialogButton, SourceJsonDialogButton } from '.. import { Download } from '../entry/Download' import Pagination from '../visualization/Pagination' import SectionEditor from './SectionEditor' -import XYPlot from './XYPlot' +import PlotlyFigure from './PlotlyFigure' import { appendDataUrl, createEntryUrl, createUploadUrl, formatTimestamp, parseNomadUrl, refType, resolveInternalRef, resolveNomadUrl, systemMetainfoUrl, titleCase, isWaitingForUpdateTestId, resolveNomadUrlNoThrow @@ -64,11 +64,12 @@ import { apiBase } from '../../config' import { Alert } from '@material-ui/lab' import { complex, format } from 'mathjs' import ReactJson from 'react-json-view' -import { range } from 'lodash' +import { range, isNaN, partition } from 'lodash' import { useDataStore, useEntryStoreObj } from '../DataStore' import { useEntryStore } from '../entry/EntryContext' import ArchiveSearchBar from './ArchiveSearchBar' import DOMPurify from 'dompurify' +import XYPlot from "./XYPlot" export const configState = atom({ key: 'config', @@ -497,7 +498,9 @@ class SectionAdaptor extends ArchiveAdaptor { let urlSuffix = index ? `${name}/${index}` : name const property = this.def._properties[name] || (name === 'm_attributes' && this.def.attributes.find(attr => attr.name === index)) let value = this.obj[name] === undefined || this.obj[name] === null ? property?.default : this.obj[name] + const text_index = index index = parseInt(index) + index = isNaN(index) ? text_index : index if (index < 0) index = index + value.length if (property.m_def === QuantityMDef && quantityUsesFullStorage(property)) { value = value[index] @@ -509,7 +512,7 @@ class SectionAdaptor extends ArchiveAdaptor { let subSectionAdaptor let subSectionIndex = -1 if (property.repeats) { - subSectionIndex = parseInt(index || 0) + subSectionIndex = index || 0 subSectionAdaptor = await this.adaptorFactory( appendDataUrl(this.parsedObjUrl, `${name}/${subSectionIndex}`), value[subSectionIndex], sectionDef) } else { @@ -941,6 +944,8 @@ function Section({section, def, parentRelation, sectionIsEditable, sectionIsInEl tooltip={`Show section data as JSON`} title={`Underlying section data as JSON`} data={section} + maxWidth="sm" + fullWidth={true} /> </Grid> ) : ( @@ -1068,7 +1073,7 @@ function Section({section, def, parentRelation, sectionIsEditable, sectionIsInEl </Compartment> )} {subSectionCompartment} - {def.m_annotations?.plot && <SectionPlots sectionDef={def} section={section}/>} + {(def.m_annotations?.plot || def._allBaseSections.map(section => section.name).includes('PlotSection')) && <SectionPlots sectionDef={def} section={section}/>} </React.Fragment> } else { const attributes = section?.m_attributes || {} @@ -1086,7 +1091,7 @@ function Section({section, def, parentRelation, sectionIsEditable, sectionIsInEl <Item key={key} itemKey={`m_attributes:${key}`}>{key}</Item> ))} </Compartment>} - {def.m_annotations?.plot && <SectionPlots sectionDef={def} section={section}/>} + {(def.m_annotations?.plot || def._allBaseSections.map(section => section.name).includes('PlotSection')) && <SectionPlots sectionDef={def} section={section}/>} </React.Fragment> } const eln = def?.m_annotations?.eln @@ -1435,19 +1440,36 @@ FoldableList.defaultProps = ({ }) export const SectionPlots = React.memo(function SectionPlots({section, sectionDef}) { - const plot = sectionDef.m_annotations?.plot + let sortedFigures + const annotationPlot = sectionDef?.m_annotations?.plot && sectionDef.m_annotations?.plot + if (section?.figures) { + const [indexedFigures, otherFigures] = section.figures && partition(section.figures, figure => figure?.index !== undefined) + sortedFigures = indexedFigures.sort((a, b) => a.index - b.index) + sortedFigures = [...sortedFigures, ...otherFigures] + } const [selected, setSelected] = useState([0]) + const plots = useMemo(() => { - const plots = (Array.isArray(plot) ? [...plot] : [{...plot}]) - plots.forEach(plot => { + const validPlots = [] + sortedFigures?.forEach(plot => { + if (plot?.figure) { + plot.figure.data = (Array.isArray(plot?.figure?.data) ? [...plot?.figure?.data] : [{...plot?.figure?.data}]) + validPlots.push({plot: plot.figure, label: plot.label || plot?.layout?.title?.text || 'Untitled', type: 'PlotSection'}) + } + }) + const annotationPlots = annotationPlot + ? Array.isArray(annotationPlot) ? [...annotationPlot] : [{...annotationPlot}] + : undefined + annotationPlots?.forEach(plot => { if (!('label' in plot)) { const yAxis = plot.y || plot['y_axis'] || plot['yAxis'] const pathParts = Array.isArray(yAxis) ? ['unnamed'] : yAxis.split('/') plot.label = pathParts[pathParts.length - 1] } + validPlots.push({plot: plot, label: plot.label || 'Untitled', type: 'PlotAnnotation'}) }) - return plots - }, [plot]) + return validPlots + }, [annotationPlot, sortedFigures]) useEffect(() => { setSelected([0]) @@ -1465,7 +1487,9 @@ export const SectionPlots = React.memo(function SectionPlots({section, sectionDe multiple: true, value: selected, onChange: event => setSelected(event.target.value), - renderValue: newSelected => newSelected.map(index => titleCase(plots[index].label))?.join(', ') + renderValue: newSelected => newSelected.map(index => { + return titleCase(plots?.[index]?.label) + })?.join(', ') }} > {plots.map((plot, index) => ( @@ -1473,21 +1497,28 @@ export const SectionPlots = React.memo(function SectionPlots({section, sectionDe <Checkbox checked={selected.findIndex(selectedIndex => selectedIndex === index) >= 0} /> - {titleCase(plot.label)} + {titleCase(plots?.[index]?.label)} </MenuItem> ))} </TextField>} {selected.map(index => plots?.[index]) - ?.map((plot, index) => ( - <XYPlot - key={index} - sectionDef={sectionDef} - section={section} - plot={plot} - title={plot.label} - /> - )) - } + ?.map((plot, index) => { + return plot.type === 'PlotSection' + ? <PlotlyFigure + key={index} + sectionDef={sectionDef} + section={section} + plot={plot.plot} + title={plot.label} + /> + : <XYPlot + key={index} + sectionDef={sectionDef} + section={section} + plot={plot.plot} + title={plot.label} + /> + })} </Box> </Compartment> }) diff --git a/gui/src/components/archive/Browser.js b/gui/src/components/archive/Browser.js index 5d53cd99f9357f8be332a6e797af41749c750111..2b26c69a700057780b5ecff278ca67cdc51ad5b1 100644 --- a/gui/src/components/archive/Browser.js +++ b/gui/src/components/archive/Browser.js @@ -119,6 +119,10 @@ const useBrowserStyles = makeStyles(theme => ({ height: '100%', overflowY: 'hidden', width: 'fit-content' + }, + sideLane: { + display: 'flex', + height: '100%' } })) export const Browser = React.memo(function Browser({adaptor, form}) { @@ -191,7 +195,7 @@ export const Browser = React.memo(function Browser({adaptor, form}) { lane = { index: index, key: segment, - path: prev ? prev.path + '/' + encodeURI(escapeBadPathChars(segment?.replace(':', '/'))) : rootPath, + path: prev ? prev.path + '/' + encodeURI(escapeBadPathChars(segment)) : rootPath, next: null, prev: prev, initialized: false @@ -313,8 +317,9 @@ export const Browser = React.memo(function Browser({adaptor, form}) { </Card> </Grid> {hdf5Path && hdf5Filename && adaptor?.obj?.metadata?.upload_id && <Grid item md={4} style={{visibility: (hdf5Path == null ? "hidden" : "visible")}}> - <Card> - <H5Web upload_id={adaptor?.obj?.metadata?.upload_id} filename={hdf5Filename} initialPath={(hdf5Path)} explorerOpen={false}/> + <Card className={classes.sideLane}> + {/* We use the key prop in the H5Web component here to force re-render on path changes while browsing with the browser. The prop, initialPath, does not re-render the component. */} + <H5Web key={hdf5Path} upload_id={adaptor?.obj?.metadata?.upload_id} filename={hdf5Filename} initialPath={hdf5Path} explorerOpen={false}/> </Card> </Grid>} </Grid> diff --git a/gui/src/components/archive/FilePreview.js b/gui/src/components/archive/FilePreview.js index 5ac424b3b68d9a93b0d9ee7103e9bd8c92116ef5..d6097297cd6a15dd86a5f67b074a81b90f656bbb 100644 --- a/gui/src/components/archive/FilePreview.js +++ b/gui/src/components/archive/FilePreview.js @@ -25,6 +25,7 @@ import InfiniteScroll from 'react-infinite-scroller' import { useApi } from '../api' import { apiBase } from '../../config' import { parseCifStructures } from 'crystcif-parse' +import H5Web from '../visualization/H5Web' import Structure from '../visualization/Structure' import { isWaitingForUpdateTestId } from '../../utils' import {useLane} from './Browser' @@ -99,6 +100,13 @@ const viewerPDF = { } } +const viewerHdfFive = { + name: 'hdf5', + fileExtensions: ['h4', 'hd4', 'hdf4', 'hdf', 'h5', 'hd5', 'hdf5', 'hd5', 'nxs', 'h5oina', 'edaxh5', 'emd', 'dream3d'], + maxSizeAutoPreview: 10e6, + width: 'fit-content', + render: ({uploadId, path}) => <H5Web upload_id={uploadId} filename={path}/> +} const viewerCif = { name: 'cif', fileExtensions: ['cif'], @@ -124,7 +132,8 @@ const viewerCif = { ) } } -export const viewers = [viewerText, viewerImg, viewerJSON, viewerPDF, viewerCif] + +export const viewers = [viewerText, viewerImg, viewerJSON, viewerPDF, viewerHdfFive, viewerCif] const FilePreview = React.memo(({uploadId, path, size}) => { const classes = useFilePreviewStyles() diff --git a/gui/src/components/archive/Overview.js b/gui/src/components/archive/Overview.js index 2b13e153a06246fa1907004bdd9a4023aea4ffd5..fb1523305fbeb0c21e9ba23d1200aa9c689bd36e 100644 --- a/gui/src/components/archive/Overview.js +++ b/gui/src/components/archive/Overview.js @@ -10,7 +10,7 @@ import { makeStyles } from '@material-ui/core/styles' import Structure from '../visualization/Structure' import BrillouinZone from '../visualization/BrillouinZone' import BandStructure from '../visualization/BandStructure' -import EELS from '../visualization/EELS' +import Spectra from '../visualization/Spectra' import DOS from '../visualization/DOS' import { Quantity, useUnits } from '../../units' import { electronicRange } from '../../config' @@ -55,6 +55,7 @@ const useOverviewDOSStyles = makeStyles({ export const OverviewDOSElectronic = React.memo(({def, section, units}) => { const style = useOverviewDOSStyles() const data = useMemo(() => ([{ + version: 'old', energies: section.energies, densities: section.total.map(dos => dos.value), energy_highest_occupied: section.band_gap @@ -202,24 +203,24 @@ OverviewBandstructureElectronic.propTypes = ({ units: PropTypes.object }) -const useOverviewEELSStyles = makeStyles({ +const useOverviewSpectraStyles = makeStyles({ root: { width: '30rem', height: '15rem', margin: 'auto' } }) -export const OverviewEELS = React.memo(({def, section, units}) => { - const style = useOverviewEELSStyles() +export const OverviewSpectra = React.memo(({def, section, units}) => { + const style = useOverviewSpectraStyles() - return <EELS + return <Spectra className={style.root} data={[section]} layout={{yaxis: {autorange: true}}} units={units} /> }) -OverviewEELS.propTypes = ({ +OverviewSpectra.propTypes = ({ def: PropTypes.object, section: PropTypes.object, units: PropTypes.object @@ -275,7 +276,7 @@ export const Overview = React.memo((props) => { } else if (def.name === 'Dos' && path === 'dos_phonon') { return <OverviewDOSPhonon {...props} units={units}/> } else if (def.name === 'Spectrum') { - return <OverviewEELS {...props} units={units}/> + return <OverviewSpectra {...props} units={units}/> } else if (def.name === 'EquationOfState') { return <OverviewEquationOfState {...props} units={units}/> } diff --git a/gui/src/components/archive/PlotExamples.js b/gui/src/components/archive/PlotExamples.js index 35c429e0a85525182760f32ddc38702849778163..c9308bcc9f58eccb0f28e4b0394ef427bdd01c31 100644 --- a/gui/src/components/archive/PlotExamples.js +++ b/gui/src/components/archive/PlotExamples.js @@ -22,7 +22,7 @@ import { Code } from '../buttons/SourceDialogButton' import { stripIndent } from '../../utils' import { SectionPlots } from './ArchiveBrowser' import { useGlobalMetainfo } from './metainfo' -import { JsonEditor } from './SectionEditor' +import InputConfig from '../search/input/InputConfig' import Typography from '@material-ui/core/Typography' const pvdSection = { @@ -63,75 +63,109 @@ Example.propTypes = { } const pvdExamples = [{ - a_plot: { - label: 'T_substrate', - x: 'process_time', - y: './substrate_temperature' - } -}, { - a_plot: { - label: 'Temperature', - x: ['process_time', 'process_time'], - y: ['./set_substrate_temperature', './substrate_temperature'] - } -}, { - a_plot: { - label: 'Temperature', - x: 'process_time', - y: ['./substrate_temperature', './chamber_pressure'], + plotly_graph_object: { + data: { + x: '#process_time', + y: '#./substrate_temperature' + }, + layout: {title: {text: 'T Substrate'}}, config: { editable: true, scrollZoom: false } } }, { - a_plot: [{ - label: 'Temperature and Pressure', - x: 'process_time', - y: ['./substrate_temperature', './chamber_pressure'], - lines: [{ - mode: 'markers', - marker: { - color: 'rgb(40, 80, 130)' - }}, { - mode: 'lines', - line: { - color: 'rgb(100, 0, 0)' - }} - ] + plotly_graph_object: { + data: [ + { + x: '#process_time', + y: '#./set_substrate_temperature', + mode: 'markers', + marker: { + color: '#./substrate_temperature' + } + }, + { + x: '#process_time', + y: '#./substrate_temperature' + } + ], + layout: {title: {text: 'Temperature'}} + } +}, { + plotly_graph_object: [{ + data: [ + { + x: '#process_time', + y: '#./substrate_temperature', + mode: 'markers', + marker: { + color: 'rgb(40, 80, 130)' + } + }, + { + x: '#process_time', + y: '#./chamber_pressure', + mode: 'lines', + line: { + color: 'rgb(100, 0, 0)' + } + } + ], + layout: {title: {text: 'Temperature and Pressure'}} }, { - label: 'Pressure of Chamber', - x: 'process_time', - y: 'chamber_pressure', + data: { + x: '#process_time', + y: '#chamber_pressure' + }, layout: { + title: {text: 'T Substrate'}, xaxis: {title: 't (sec)'}, yaxis: {title: 'P (GPa)', type: 'log'} } }] }] -const processExamples = [{ - a_plot: { - x: 'PVDEvaporation/0/process_time', - y: 'PVDEvaporation/0/chamber_pressure' +const processExamples = [ + { + plotly_graph_object: { + data: { + x: '#PVDEvaporation/0/process_time', + y: '#PVDEvaporation/0/chamber_pressure' + }, + layout: {title: {text: 'Chamber Pressure'}} } }, { - a_plot: { - x: 'PVDEvaporation/1/process_time', - y: 'PVDEvaporation/1/substrate_temperature' + plotly_graph_object: { + data: { + x: '#PVDEvaporation/1/process_time', + y: '#PVDEvaporation/1/substrate_temperature' + }, + layout: {title: {text: 'Substrate Temperature'}} } }, { - a_plot: { - x: 'PVDEvaporation/0/process_time', - y: ['PVDEvaporation/0/substrate_temperature', 'PVDEvaporation/2/substrate_temperature'] + plotly_graph_object: { + data: [ + { + x: '#PVDEvaporation/0/process_time', + y: '#PVDEvaporation/0/substrate_temperature' + }, + { + x: '#PVDEvaporation/0/process_time', + y: '#PVDEvaporation/2/substrate_temperature' + } + ], + layout: {title: {text: 'Temperature'}} } }, { - a_plot: { - x: 'PVDEvaporation/:2/process_time', - y: 'PVDEvaporation/:2/substrate_temperature' + plotly_graph_object: { + data: { + x: '#PVDEvaporation/:2/process_time', + y: '#PVDEvaporation/:2/substrate_temperature' + }, + layout: {title: {text: 'Substrate Temperature'}} } } - ] function getSection(metainfo, packageName, sectionName) { @@ -149,6 +183,12 @@ export function PlotExamples() { const pvdSectionDef = useMemo(() => ({ name: 'PVDEvaporation', + _allBaseSections: [ + { + m_def: 'nomad.metainfo.metainfo.Section', + name: 'PlotSection' + } + ], _properties: { name: { m_def: 'nomad.metainfo.metainfo.Quantity' @@ -180,6 +220,12 @@ export function PlotExamples() { if (archiveSectionDef) { archiveSectionDef['sub_section'] = { m_def: 'nomad.metainfo.metainfo.Section', + _allBaseSections: [ + { + m_def: 'nomad.metainfo.metainfo.Section', + name: 'PlotSection' + } + ], _properties: { PVDEvaporation: { m_def: 'nomad.metainfo.metainfo.SubSection', @@ -190,10 +236,15 @@ export function PlotExamples() { } } - const sectionDefs = useMemo(() => { - return plots.map((example, index) => index < pvdExamples.length - ? {...pvdSectionDef, m_annotations: {plot: example.a_plot}} - : {...archiveSectionDef, m_annotations: {plot: example.a_plot}}) + const sections = useMemo(() => { + return plots.map((example, index) => { + const graphObject = example.plotly_graph_object + const examples = Array.isArray(graphObject) ? graphObject : [graphObject] + return index < pvdExamples.length + ? {sectionDef: pvdSectionDef, figures: examples.map((figure) => ({figure: figure}))} + : {sectionDef: archiveSectionDef, figures: examples.map((figure) => ({figure: figure}))} + } + ) }, [plots, pvdSectionDef, archiveSectionDef]) const handleJsonChange = useCallback((data, index) => { @@ -206,7 +257,7 @@ export function PlotExamples() { setKeys(newKeys) }, [keys, plots]) - return sectionDefs.map((def, index) => ( + return sections.map((section, index) => ( <Box key={index}> {index === 0 && <Box margin={3} marginLeft={7}> <Typography variant="h6"> @@ -232,12 +283,12 @@ export function PlotExamples() { <Box width={'50%'} marginLeft={6} marginRight={6}> <Card> <CardContent> - <SectionPlots key={keys[index]} sectionDef={def} section={index < pvdExamples.length ? pvdSection : processSection}/> + <SectionPlots key={keys[index]} sectionDef={section.sectionDef} section={index < pvdExamples.length ? {...pvdSection, figures: section.figures} : {...processSection, figures: section.figures}}/> </CardContent> </Card> </Box> <Box width={'50%'} marginLeft={6} marginRight={6}> - <JsonEditor + <InputConfig data={plots[index]} onChange={data => handleJsonChange(data, index)} /> diff --git a/gui/src/components/archive/PlotExamples.spec.js b/gui/src/components/archive/PlotExamples.spec.js index ba81b384b0f9be8f485550527d6da72d80cdb116..89a26f162ee575b49368173ce72985d31d57078e 100644 --- a/gui/src/components/archive/PlotExamples.spec.js +++ b/gui/src/components/archive/PlotExamples.spec.js @@ -27,36 +27,32 @@ test('correctly renders the plots', async () => { await screen.findByText('Examples to plot data from an array of section') const plots = screen.queryAllByText('plot') - expect(plots.length).toBe(8) + expect(plots.length).toBe(7) const plotCards = plots.map(plot => plot.parentElement.parentElement) // get the card within(plotCards[0]).getByText('Process Time (fs)') - within(plotCards[0]).getByText('T Substrate (K)') + within(plotCards[0]).getByText('Substrate Temperature (K)') + within(plotCards[0]).getByText('T Substrate') within(plotCards[1]).getByText('Process Time (fs)') - within(plotCards[1]).getByText('Temperature (K)') - within(plotCards[1]).getByText('Set Substrate Temperature') - within(plotCards[1]).getByText('Substrate Temperature') + within(plotCards[1]).getByText('Temperature') + within(plotCards[1]).getByText('Set Substrate Temperature (K)') within(plotCards[2]).getByText('Process Time (fs)') within(plotCards[2]).getByText('Substrate Temperature (K)') - within(plotCards[2]).getByText('Chamber Pressure (GPa)') + within(plotCards[2]).getByText('Temperature and Pressure') within(plotCards[3]).getByText('Process Time (fs)') - within(plotCards[3]).getByText('Substrate Temperature (K)') within(plotCards[3]).getByText('Chamber Pressure (GPa)') within(plotCards[4]).getByText('Process Time (fs)') - within(plotCards[4]).getByText('Chamber Pressure (GPa)') + within(plotCards[4]).getByText('Substrate Temperature (K)') + // Check that first subsection is plotted even if third does not exist within(plotCards[5]).getByText('Process Time (fs)') within(plotCards[5]).getByText('Substrate Temperature (K)') - // Check that first subsection is plotted even if third does not exist - within(plotCards[6]).getByText('Process Time (fs)') - within(plotCards[6]).getByText('Substrate Temperature (K)') - // Check that legend for repeating subsection gets subsection name - within(plotCards[7]).getByText('Substrate 1, Substrate Temperature') - within(plotCards[7]).getByText('Substrate 2, Substrate Temperature') + within(plotCards[6]).getByText('Substrate 1, Process Time (fs)') + within(plotCards[6]).getByText('Substrate 1, Substrate Temperature (K)') }) diff --git a/gui/src/components/archive/PlotExamplesDeprecated.js b/gui/src/components/archive/PlotExamplesDeprecated.js new file mode 100644 index 0000000000000000000000000000000000000000..84a5c81064e9f5f07ea08078436dd3659b2dd45b --- /dev/null +++ b/gui/src/components/archive/PlotExamplesDeprecated.js @@ -0,0 +1,248 @@ +/* + * Copyright The NOMAD Authors. + * + * This file is part of NOMAD. See https://nomad-lab.eu for further info. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React, { useCallback, useMemo, useState } from 'react' +import PropTypes from 'prop-types' +import { Card, Box, CardContent } from '@material-ui/core' +import { Code } from '../buttons/SourceDialogButton' +import { stripIndent } from '../../utils' +import { SectionPlots } from './ArchiveBrowser' +import { useGlobalMetainfo } from './metainfo' +import InputConfig from '../search/input/InputConfig' +import Typography from '@material-ui/core/Typography' + +const pvdSection = { + name: 'Substrate 1', + process_time: [-2099, -2026, -1953, -1880, -1807, -1734, -1661, -1588, -1515, -1442, -1369, -1296, -1223, -1150, -1077, -1004, -931, -858, -785, -712, -639, -566, -493, -419, -346, -273, -200, -127, -54, 19, 92, 165, 238, 311, 384, 457, 530, 603, 676, 749, 822, 895, 968, 1041, 1114, 1187, 1260, 1333, 1406, 1479, 1552, 1625, 1698, 1771, 1844, 1917, 1990, 2063, 2136, 2209, 2282, 2355, 2428, 2501, 2574, 2647, 2720, 2793, 2866, 2939, 3012, 3085, 3158, 3231, 3304, 3377, 3450, 3523, 3596, 3669, 3742, 3815, 3888, 3961, 4034, 4107, 4180, 4253, 4326, 4399, 4472, 4545, 4618, 4691, 4764, 4837, 4910, 4983, 5056, 5129, 5202, 5275, 5348, 5421, 5494, 5567, 5640, 5713, 5786, 5859, 5932, 6005, 6078, 6151, 6225, 6298, 6371, 6444, 6517, 6590, 6663, 6736, 6809, 6882, 6955, 7028, 7101, 7174, 7247, 7320, 7393, 7466, 7539], + set_substrate_temperature: [309.356, 309.217, 309.084, 308.958, 308.838, 308.724, 308.616, 308.513, 308.415, 308.322, 308.233, 308.148, 308.068, 307.992, 307.919, 307.85, 307.784, 307.722, 307.662, 307.606, 307.552, 307.501, 307.452, 307.406, 307.362, 307.32, 307.28, 307.242, 307.206, 307.171, 307.139, 307.108, 307.078, 307.05, 307.023, 306.998, 306.974, 306.951, 306.929, 306.908, 306.888, 306.869, 306.851, 306.834, 306.818, 306.803, 306.788, 306.774, 306.761, 306.748, 306.736, 306.725, 306.714, 306.704, 306.694, 306.684, 306.676, 306.667, 306.659, 306.651, 306.644, 306.637, 306.631, 306.624, 306.618, 306.613, 306.607, 306.602, 306.597, 306.593, 306.588, 306.584, 306.58, 306.576, 306.573, 306.569, 306.566, 306.563, 306.56, 306.557, 306.554, 306.552, 306.549, 306.547, 306.545, 306.543, 306.541, 306.539, 306.537, 306.535, 306.534, 306.532, 306.531, 306.529, 306.528, 306.527, 306.525, 306.524, 306.523, 306.522, 306.521, 306.52, 306.519, 306.519, 306.518, 306.517, 306.516, 306.516, 306.515, 306.514, 306.514, 306.513, 306.513, 306.512, 306.512, 306.511, 306.511, 306.51, 306.51, 306.509, 306.509, 306.509, 306.508, 306.508, 306.508, 306.508, 306.507, 306.507, 306.507, 306.507, 306.506, 306.506, 306.506], + substrate_temperature: [305.563, 305.527, 305.518, 305.523, 305.506, 305.502, 305.506, 305.515, 305.563, 305.575, 305.591, 305.607, 305.609, 305.637, 305.683, 305.701, 305.74, 305.788, 305.813, 305.871, 305.913, 305.977, 306.003, 306.076, 306.143, 306.179, 306.267, 306.321, 306.374, 306.453, 306.635, 306.871, 307.098, 307.324, 307.549, 307.801, 308.03, 308.264, 308.499, 308.728, 308.971, 309.16, 309.374, 309.6, 309.779, 309.95, 310.16, 310.334, 310.501, 310.668, 310.84, 310.999, 311.145, 311.303, 311.45, 311.58, 311.709, 311.852, 311.991, 312.093, 312.243, 312.336, 312.464, 312.569, 312.664, 312.785, 312.887, 312.973, 313.099, 313.192, 313.27, 313.369, 313.47, 313.568, 313.638, 313.718, 314.497, 317.131, 316.92, 316.736, 316.561, 316.389, 316.204, 316.021, 315.853, 315.692, 315.552, 315.409, 315.284, 315.124, 314.984, 314.851, 314.719, 314.583, 314.466, 314.338, 314.226, 314.085, 313.986, 313.85, 313.765, 313.639, 313.536, 313.44, 313.315, 313.211, 313.123, 313.004, 312.9, 312.801, 312.717, 312.634, 312.553, 312.468, 312.371, 312.257, 312.172, 312.085, 312.004, 311.921, 311.833, 311.75, 311.658, 311.583, 310.238, 310.188, 310.204, 310.208, 310.185, 309.659, 309.457, 309.572, 309.602], + chamber_pressure: [0.313, 0.328, 0.319, 0.313, 0.307, 0.306, 0.304, 0.303, 0.304, 0.303, 0.303, 0.303, 0.303, 0.303, 0.303, 0.303, 0.302, 0.303, 0.301, 0.303, 0.303, 0.302, 0.301, 0.303, 0.303, 0.303, 0.303, 0.304, 0.303, 0.303, 0.303, 0.304, 0.304, 0.304, 0.304, 0.305, 0.304, 0.305, 0.304, 0.305, 0.305, 0.307, 0.305, 0.307, 0.308, 0.307, 0.31, 0.309, 0.307, 0.308, 0.314, 0.309, 0.307, 0.31, 0.311, 0.31, 0.312, 0.312, 0.314, 0.313, 0.315, 0.314, 0.314, 0.317, 0.314, 0.315, 0.319, 0.318, 0.317, 0.319, 0.317, 0.318, 0.317, 0.318, 0.318, 0.319, 0.319, 0.318, 0.319, 0.319, 0.319, 0.319, 0.319, 0.319, 0.319, 0.319, 0.319, 0.32, 0.318, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.321, 0.32, 0.32, 0.32, 0.322, 0.32, 0.32, 0.321, 0.32, 0.32, 0.321, 0.321, 0.321, 0.321, 0.321, 0.321, 0.322, 0.322, 0.323, 0.94, 2.25, 3.49, 4.28, 2.21, 0.72, 0.291, 47700.0, 102000.0, 102000.0, 102000.0, 102000.0, 102000.0, 102000.0, 102000.0, 3220.0] +} + +const pvdSectionSecond = { + name: 'Substrate 2', + process_time: [-2099, -2026, -1953, -1880, -1807, -1734, -1661, -1588, -1515, -1442, -1369, -1296, -1223, -1150, -1077, -1004, -931, -858, -785, -712, -639, -566, -493, -419, -346, -273, -200, -127, -54, 19, 92, 165, 238, 311, 384, 457, 530, 603, 676, 749, 822, 895, 968, 1041, 1114, 1187, 1260, 1333, 1406, 1479, 1552, 1625, 1698, 1771, 1844, 1917, 1990, 2063, 2136, 2209, 2282, 2355, 2428, 2501, 2574, 2647, 2720, 2793, 2866, 2939, 3012, 3085, 3158, 3231, 3304, 3377, 3450, 3523, 3596, 3669, 3742, 3815, 3888, 3961, 4034, 4107, 4180, 4253, 4326, 4399, 4472, 4545, 4618, 4691, 4764, 4837, 4910, 4983, 5056, 5129, 5202, 5275, 5348, 5421, 5494, 5567, 5640, 5713, 5786, 5859, 5932, 6005, 6078, 6151, 6225, 6298, 6371, 6444, 6517, 6590, 6663, 6736, 6809, 6882, 6955, 7028, 7101, 7174, 7247, 7320, 7393, 7466, 7539], + set_substrate_temperature: [309.356, 309.217, 309.084, 308.958, 308.838, 308.724, 308.616, 308.513, 308.415, 308.322, 308.233, 308.148, 308.068, 307.992, 307.919, 307.85, 307.784, 307.722, 307.662, 307.606, 307.552, 307.501, 307.452, 307.406, 307.362, 307.32, 307.28, 307.242, 307.206, 307.171, 307.139, 307.108, 307.078, 307.05, 307.023, 306.998, 306.974, 306.951, 306.929, 306.908, 306.888, 306.869, 306.851, 306.834, 306.818, 306.803, 306.788, 306.774, 306.761, 306.748, 306.736, 306.725, 306.714, 306.704, 306.694, 306.684, 306.676, 306.667, 306.659, 306.651, 306.644, 306.637, 306.631, 306.624, 306.618, 306.613, 306.607, 306.602, 306.597, 306.593, 306.588, 306.584, 306.58, 306.576, 306.573, 306.569, 306.566, 306.563, 306.56, 306.557, 306.554, 306.552, 306.549, 306.547, 306.545, 306.543, 306.541, 306.539, 306.537, 306.535, 306.534, 306.532, 306.531, 306.529, 306.528, 306.527, 306.525, 306.524, 306.523, 306.522, 306.521, 306.52, 306.519, 306.519, 306.518, 306.517, 306.516, 306.516, 306.515, 306.514, 306.514, 306.513, 306.513, 306.512, 306.512, 306.511, 306.511, 306.51, 306.51, 306.509, 306.509, 306.509, 306.508, 306.508, 306.508, 306.508, 306.507, 306.507, 306.507, 306.507, 306.506, 306.506, 306.506], + substrate_temperature: [366.6756, 366.6324, 366.6216, 366.6276, 366.6072, 366.6024, 366.6072, 366.618, 366.6756, 366.69, 366.7092, 366.7284, 366.7308, 366.7644, 366.8196, 366.8412, 366.888, 366.9456, 366.9756, 367.0452, 367.0956, 367.1724, 367.2036, 367.2912, 367.3716, 367.4148, 367.5204, 367.5852, 367.6488, 367.7436, 367.962, 368.2452, 368.5176, 368.7888, 369.0588, 369.3612, 369.636, 369.9168, 370.1988, 370.4736, 370.7652, 370.992, 371.2488, 371.52, 371.7348, 371.94, 372.192, 372.4008, 372.6012, 372.8016, 373.008, 373.1988, 373.374, 373.5636, 373.74, 373.896, 374.0508, 374.2224, 374.3892, 374.5116, 374.6916, 374.8032, 374.9568, 375.0828, 375.1968, 375.342, 375.4644, 375.5676, 375.7188, 375.8304, 375.924, 376.0428, 376.164, 376.2816, 376.3656, 376.4616, 377.3964, 380.5572, 380.304, 380.0832, 379.8732, 379.6668, 379.4448, 379.2252, 379.0236, 378.8304, 378.6624, 378.4908, 378.3408, 378.1488, 377.9808, 377.8212, 377.6628, 377.4996, 377.3592, 377.2056, 377.0712, 376.902, 376.7832, 376.62, 376.518, 376.3668, 376.2432, 376.128, 375.978, 375.8532, 375.7476, 375.6048, 375.48, 375.3612, 375.2604, 375.1608, 375.0636, 374.9616, 374.8452, 374.7084, 374.6064, 374.502, 374.4048, 374.3052, 374.1996, 374.1, 373.9896, 373.8996, 372.2856, 372.2256, 372.2448, 372.2496, 372.222, 371.5908, 371.3484, 371.4864, 371.5224], + chamber_pressure: [0.313, 0.328, 0.319, 0.313, 0.307, 0.306, 0.304, 0.303, 0.304, 0.303, 0.303, 0.303, 0.303, 0.303, 0.303, 0.303, 0.302, 0.303, 0.301, 0.303, 0.303, 0.302, 0.301, 0.303, 0.303, 0.303, 0.303, 0.304, 0.303, 0.303, 0.303, 0.304, 0.304, 0.304, 0.304, 0.305, 0.304, 0.305, 0.304, 0.305, 0.305, 0.307, 0.305, 0.307, 0.308, 0.307, 0.31, 0.309, 0.307, 0.308, 0.314, 0.309, 0.307, 0.31, 0.311, 0.31, 0.312, 0.312, 0.314, 0.313, 0.315, 0.314, 0.314, 0.317, 0.314, 0.315, 0.319, 0.318, 0.317, 0.319, 0.317, 0.318, 0.317, 0.318, 0.318, 0.319, 0.319, 0.318, 0.319, 0.319, 0.319, 0.319, 0.319, 0.319, 0.319, 0.319, 0.319, 0.32, 0.318, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.321, 0.32, 0.32, 0.32, 0.322, 0.32, 0.32, 0.321, 0.32, 0.32, 0.321, 0.321, 0.321, 0.321, 0.321, 0.321, 0.322, 0.322, 0.323, 0.94, 2.25, 3.49, 4.28, 2.21, 0.72, 0.291, 47700.0, 102000.0, 102000.0, 102000.0, 102000.0, 102000.0, 102000.0, 102000.0, 3220.0] +} + +const processSection = { + PVDEvaporation: [pvdSection, pvdSectionSecond] +} + +function Example({code, children}) { + return ( + <Box display="flex" flexDirection="row" alignItems="flext-start" marginBottom={2}> + <Box width={500} marginRight={2}> + {children} + </Box> + <Code + code={stripIndent(code)} + /> + </Box> + ) +} +Example.propTypes = { + code: PropTypes.string, + children: PropTypes.any +} + +const pvdExamples = [{ + a_plot: { + label: 'T_substrate', + x: 'process_time', + y: './substrate_temperature' + } +}, { + a_plot: { + label: 'Temperature', + x: ['process_time', 'process_time'], + y: ['./set_substrate_temperature', './substrate_temperature'] + } +}, { + a_plot: { + label: 'Temperature', + x: 'process_time', + y: ['./substrate_temperature', './chamber_pressure'], + config: { + editable: true, + scrollZoom: false + } + } +}, { + a_plot: [{ + label: 'Temperature and Pressure', + x: 'process_time', + y: ['./substrate_temperature', './chamber_pressure'], + lines: [{ + mode: 'markers', + marker: { + color: 'rgb(40, 80, 130)' + }}, { + mode: 'lines', + line: { + color: 'rgb(100, 0, 0)' + }} + ] + }, { + label: 'Pressure of Chamber', + x: 'process_time', + y: 'chamber_pressure', + layout: { + xaxis: {title: 't (sec)'}, + yaxis: {title: 'P (GPa)', type: 'log'} + } + }] +}] + +const processExamples = [{ + a_plot: { + x: 'PVDEvaporation/0/process_time', + y: 'PVDEvaporation/0/chamber_pressure' + } + }, { + a_plot: { + x: 'PVDEvaporation/1/process_time', + y: 'PVDEvaporation/1/substrate_temperature' + } + }, { + a_plot: { + x: 'PVDEvaporation/0/process_time', + y: ['PVDEvaporation/0/substrate_temperature', 'PVDEvaporation/2/substrate_temperature'] + } + }, { + a_plot: { + x: 'PVDEvaporation/:2/process_time', + y: 'PVDEvaporation/:2/substrate_temperature' + } + } + +] + +function getSection(metainfo, packageName, sectionName) { + if (!metainfo) return undefined + const packages = metainfo?._data?.packages + const eln = packages?.find(section => section.name === packageName) + const section_definitions = eln?.section_definitions + return section_definitions?.find(section => section.name === sectionName) +} + +export function PlotExamplesDeprecated() { + const metainfo = useGlobalMetainfo() + const [plots, setPlots] = useState(pvdExamples.concat(processExamples)) + const [keys, setKeys] = useState(pvdExamples.concat(processExamples).map((example, index) => `plot${index}-0`)) + + const pvdSectionDef = useMemo(() => ({ + name: 'PVDEvaporation', + _properties: { + name: { + m_def: 'nomad.metainfo.metainfo.Quantity' + }, + process_time: { + m_def: 'nomad.metainfo.metainfo.Quantity', + unit: 'second', + shape: ['*'] + }, + set_substrate_temperature: { + m_def: 'nomad.metainfo.metainfo.Quantity', + unit: 'kelvin', + shape: ['*'] + }, + substrate_temperature: { + m_def: 'nomad.metainfo.metainfo.Quantity', + unit: 'kelvin', + shape: ['*'] + }, + chamber_pressure: { + m_def: 'nomad.metainfo.metainfo.Quantity', + unit: 'pascal', + shape: ['*'] + } + } + }), []) + const archiveSectionDef = useMemo(() => metainfo ? getSection(metainfo, 'nomad.datamodel.data', 'ArchiveSection') : undefined, [metainfo]) + + if (archiveSectionDef) { + archiveSectionDef['sub_section'] = { + m_def: 'nomad.metainfo.metainfo.Section', + _properties: { + PVDEvaporation: { + m_def: 'nomad.metainfo.metainfo.SubSection', + repeats: true, + sub_section: pvdSectionDef + } + } + } + } + + const sectionDefs = useMemo(() => { + return plots.map((example, index) => index < pvdExamples.length + ? {...pvdSectionDef, m_annotations: {plot: example.a_plot}} + : {...archiveSectionDef, m_annotations: {plot: example.a_plot}}) + }, [plots, pvdSectionDef, archiveSectionDef]) + + const handleJsonChange = useCallback((data, index) => { + const newPlots = [...plots] + newPlots[index] = data + setPlots(newPlots) + const newKeys = [...keys] + const [plotIndex, plotKey] = newKeys[index].split('-') + newKeys[index] = `${plotIndex}-${Number(plotKey) + 1}` + setKeys(newKeys) + }, [keys, plots]) + + return sectionDefs.map((def, index) => ( + <Box key={index}> + {index === 0 && <Box margin={3} marginLeft={7}> + <Typography variant="h6"> + Examples to show how to plot simple and multiline graphs and how to customize the line styles + </Typography> + </Box>} + {index === pvdExamples.length && <Box margin={3} marginLeft={7}> + <Typography variant="h6"> + Examples to plot data from an array of section + </Typography> + </Box>} + {index === pvdExamples.length + 2 && <Box margin={3} marginLeft={7}> + <Typography variant="h6"> + Non instantiated subsections are ignored + </Typography> + </Box>} + {index === pvdExamples.length + 3 && <Box margin={3} marginLeft={7}> + <Typography variant="h6"> + Subsection index can use python slice notation + </Typography> + </Box>} + <Box display='flex' marginTop={3} width={'100%'} > + <Box width={'50%'} marginLeft={6} marginRight={6}> + <Card> + <CardContent> + <SectionPlots key={keys[index]} sectionDef={def} section={index < pvdExamples.length ? pvdSection : processSection}/> + </CardContent> + </Card> + </Box> + <Box width={'50%'} marginLeft={6} marginRight={6}> + <InputConfig + data={plots[index]} + onChange={data => handleJsonChange(data, index)} + /> + </Box> + </Box> + </Box> + )) +} diff --git a/gui/src/components/archive/PlotExamplesDeprecated.spec.js b/gui/src/components/archive/PlotExamplesDeprecated.spec.js new file mode 100644 index 0000000000000000000000000000000000000000..d4112c32799579e3bc660c7269152fe29cc609d1 --- /dev/null +++ b/gui/src/components/archive/PlotExamplesDeprecated.spec.js @@ -0,0 +1,62 @@ +/* + * Copyright The NOMAD Authors. + * + * This file is part of NOMAD. See https://nomad-lab.eu for further info. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from 'react' +import {render, screen, within} from '../conftest.spec' +import {PlotExamplesDeprecated} from './PlotExamplesDeprecated' + +test('correctly renders the deprecated plots', async () => { + render(<PlotExamplesDeprecated />) + + await screen.findByText('Examples to show how to plot simple and multiline graphs and how to customize the line styles') + await screen.findByText('Examples to plot data from an array of section') + + const plots = screen.queryAllByText('plot') + expect(plots.length).toBe(8) + const plotCards = plots.map(plot => plot.parentElement.parentElement) // get the card + + within(plotCards[0]).getByText('Process Time (fs)') + within(plotCards[0]).getByText('T Substrate (K)') + + within(plotCards[1]).getByText('Process Time (fs)') + within(plotCards[1]).getByText('Temperature (K)') + within(plotCards[1]).getByText('Set Substrate Temperature') + within(plotCards[1]).getByText('Substrate Temperature') + + within(plotCards[2]).getByText('Process Time (fs)') + within(plotCards[2]).getByText('Substrate Temperature (K)') + within(plotCards[2]).getByText('Chamber Pressure (GPa)') + + within(plotCards[3]).getByText('Process Time (fs)') + within(plotCards[3]).getByText('Substrate Temperature (K)') + within(plotCards[3]).getByText('Chamber Pressure (GPa)') + + within(plotCards[4]).getByText('Process Time (fs)') + within(plotCards[4]).getByText('Chamber Pressure (GPa)') + + within(plotCards[5]).getByText('Process Time (fs)') + within(plotCards[5]).getByText('Substrate Temperature (K)') + + // Check that first subsection is plotted even if third does not exist + within(plotCards[6]).getByText('Process Time (fs)') + within(plotCards[6]).getByText('Substrate Temperature (K)') + + // Check that legend for repeating subsection gets subsection name + within(plotCards[7]).getByText('Substrate 1, Substrate Temperature') + within(plotCards[7]).getByText('Substrate 2, Substrate Temperature') +}) diff --git a/gui/src/components/archive/PlotlyFigure.js b/gui/src/components/archive/PlotlyFigure.js new file mode 100644 index 0000000000000000000000000000000000000000..6af7777515c62d0bac02d5aa47ddfa27bdea3af9 --- /dev/null +++ b/gui/src/components/archive/PlotlyFigure.js @@ -0,0 +1,255 @@ +import React, {useMemo} from 'react' +import {Box} from '@material-ui/core' +import {Quantity as Q, useUnits} from '../../units' +import {titleCase, resolveInternalRef} from '../../utils' +import {cloneDeep, merge} from 'lodash' +import Plot from '../plotting/Plot' +import PropTypes from 'prop-types' +import {withErrorHandler} from '../ErrorHandler' + +class XYPlotError extends Error { + constructor(message) { + super(message) + this.name = 'XYPlotError' + } +} + +const traverse = (value, callback, parent = null, key = null) => { + if (value && typeof value === 'object') { + Object.entries(value).forEach(([k, v]) => { + traverse(v, callback, value, k) + }) + } else if (value && Array.isArray(value)) { + value.forEach((item, index) => { + traverse(item, callback, value, index) + }) + } else { + callback(parent, key, value) + } +} + +const PlotlyFigure = React.memo(function PlotlyFigure({plot, section, sectionDef, title}) { + const units = useUnits() + + const plotlyGraphObj = useMemo(() => { + if (!sectionDef?._properties) { + return [undefined, undefined] + } + + const toUnit = path => { + const relativePath = '/' + path.replace('./', '') + const resolvedQuantityDef = resolveInternalRef(relativePath, sectionDef) + if (resolvedQuantityDef === undefined || resolvedQuantityDef === null) { + throw new XYPlotError(`Could not resolve the path ${path}`) + } + let value + try { + value = resolveInternalRef(relativePath, section) + } catch (err) { + if (!err.message.startsWith('Path does not exist:')) { + throw new XYPlotError(err.message) + } + } + if (value === undefined || value === null) { + // there is not data yet + return [undefined, undefined] + } + const unit = resolvedQuantityDef?.unit + if (unit) { + const displayUnit = resolvedQuantityDef?.m_annotations?.eln?.[0]?.defaultDisplayUnit + const quantity = displayUnit ? new Q(value, unit).to(displayUnit) : new Q(value, unit).toSystem(units) + return [quantity.value(), quantity.label()] + } else { + return [value, unit] + } + } + + /** + * Recursively splits a path containing slice notation (`start:stop`) + * @param {String} path The path which should be split at repeating sections + * @param {Boolean} isScalar Whether the quantity at the end of the path is scalar + * @returns {Array} The paths and names of the new paths + */ + function resolveSlice(path, isScalar) { + const pathArr = path.split('/') + for (let i = 0; i < pathArr.length; i++) { + const pathSection = pathArr[i] + if (pathSection.includes(':')) { + const repeatPath = pathArr.slice(0, i).join('/') + const repeat = resolveInternalRef('/' + repeatPath.replace('./', ''), section) + if (repeat === undefined) { return [[], []] } + // Get start and stop from python slice notation + let [start, stop, rest] = pathSection.split(':').map((x) => x === '' ? undefined : parseInt(x)) + if (Number.isNaN(start) || Number.isNaN(stop) || rest !== undefined) { + throw new XYPlotError(`Invalid slice notation: "${pathSection}"`) + } + start = start === undefined || start < -repeat.length ? 0 : (start < 0 ? start + repeat.length : start) + stop = stop === undefined || stop > repeat.length ? repeat.length : (stop < 0 ? stop + repeat.length : stop) + // If there are initialized sections in this range + if (stop > start) { + const remainPath = pathArr.slice(i + 1).join('/') + const allPaths = [] + const allNames = [] + for (let j = start; j < stop; j++) { + const repeatDef = resolveInternalRef('/' + repeatPath.replace('./', '') + `/${j}/sub_section`, sectionDef) + const label = isScalar ? undefined : (repeat[j][repeatDef?.more?.label_quantity] ?? repeat[j].name) + const [paths, names] = resolveSlice(`${repeatPath}/${j}/${remainPath}`, isScalar) + const subSectionName = label ?? `${titleCase(pathArr[i - 1])}${isScalar ? '' : ` ${j}`}` + names.forEach((name) => { allNames.push(`${subSectionName}, ${name}`) }) + allPaths.push(...paths) + } + return [allPaths, allNames] + } + return [[], []] + } + } + return [[path], [titleCase(pathArr[pathArr.length - 1])]] + } + + /** + * Function for getting all the paths for an array of paths that may contain slice + * notation. The function also returns names to be used as labels if withNames is true. + * @param {Array} slicedPaths The array of paths that may contatin slice notation + * @param {Boolean} withNames Whether or not the functiion should return names + * @returns Array of paths or Array of Array of paths and names + */ + function getSlicedPaths(path, withNames) { + const slicedPaths = Array.isArray(path) ? path : [path] + const allPaths = [] + const Names = [] + slicedPaths.forEach((slicedPath) => { + const pathRelative = '/' + slicedPath.replace('./', '') + // Removes the index in the path and resolve the shape of the quantity + const isScalar = resolveInternalRef(pathRelative.replace(/\/-?\d*:-?\d*/gm, '/0') + '/shape', sectionDef)?.length === 0 + const [paths, names] = resolveSlice(pathRelative, isScalar) + // If the quanitity is a scalar an Array of paths is added otherwise the paths are added one by one + allPaths.push(...(isScalar ? [paths] : paths)) + if (withNames) { + // For scalar quantities the name is taken as the first one + Names.push(...(isScalar ? [names[0]] : names)) + } + }) + return withNames ? [allPaths, Names] : allPaths + } + + /** + * Gets the value array, unit and split path for: + * 1. A path to an array quanitity + * or + * 2. An array of paths to a scalar quantity + * @param {*} path String path or Array of string paths + * @returns Array of [value, unit, split path] + */ + function getValues(path) { + let Values = [] + let Unit = '' + let pathArray = '' + if (Array.isArray(path)) { + // If path is an Array of paths the quantity is scalar and Values is build from all of them + path.forEach((Point) => { + const [Value, PointUnit] = toUnit(Point) + Values.push(Value) + Unit = PointUnit + pathArray = Point.split('/') + }) + } else { + [Values, Unit] = toUnit(path) + pathArray = path.split('/') + } + return [Values, Unit, pathArray] + } + + const xUnits = [] + const xLabels = [] + const yUnits = [] + const yLabels = [] + const zUnits = [] + const zLabels = [] + + const resolveReferences = (data, key, units, labels) => { + const value = data?.[key] + if (value && (typeof value === 'string' || value instanceof String)) { + if (value.startsWith("#")) { + const [paths, names] = getSlicedPaths(value.slice(1), true) + const [values, unit, path] = getValues(paths[0]) + const label = names[0] || titleCase(path[path.length - 1]) + data[key] = values + units.push(unit) + labels.push(label) + } + } + } + + const plotlyGraphObj = cloneDeep(plot) + const isDataArray = plotlyGraphObj?.data && Array.isArray(plotlyGraphObj.data) + const dataArray = isDataArray ? plotlyGraphObj.data : [plotlyGraphObj.data] + dataArray.forEach((data, index) => { + resolveReferences(data, 'x', xUnits, xLabels) + resolveReferences(data, 'y', yUnits, yLabels) + resolveReferences(data, 'z', zUnits, zLabels) + }) + + traverse(plotlyGraphObj.data, (data, key, value) => { + if (key === 'color') { + if (typeof value === 'string' || value instanceof String) { + if (value.startsWith("#")) { + let paths, values + try { + [paths] = getSlicedPaths(value.slice(1), true); + [values] = getValues(paths[0]) + } catch (error) { + if (value && /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(value)) { + values = value + } else { + throw new XYPlotError(error) + } + } + data[key] = values + } + } + } + }) + + const layout = {} + if (xLabels.length > 0) { + layout.xaxis = { + title: xUnits[0] ? `${xLabels[0]} (${xUnits[0]})` : xLabels[0] + } + } + yLabels.forEach((yLabel, index) => { + layout[index === 0 ? 'yaxis' : `yaxis${index + 1}`] = { + title: yUnits[index] ? `${yLabel} (${yUnits[index]})` : yLabel + } + }) + zLabels.forEach((zLabel, index) => { + layout[index === 0 ? 'zaxis' : `zaxis${index + 1}`] = { + title: zUnits[index] ? `${zLabel} (${zUnits[index]})` : zLabel + } + }) + + plotlyGraphObj.layout = merge({}, layout, plotlyGraphObj.layout) + return plotlyGraphObj + }, [plot, section, sectionDef, units]) + + return <Box minWidth={500} height={500}> + <Plot + data={plotlyGraphObj.data} + layout={plotlyGraphObj.layout} + floatTitle={title} + fixedMargins={true} + config={plotlyGraphObj.config} + /> + </Box> +}) +PlotlyFigure.propTypes = { + plot: PropTypes.object.isRequired, + sectionDef: PropTypes.object.isRequired, + section: PropTypes.object, + title: PropTypes.string +} + +export default withErrorHandler( + (error) => error.name === 'XYPlotError' + ? error.message + : 'Could not load plot due to an unexpected error.' +)(PlotlyFigure) diff --git a/gui/src/components/archive/SectionEditor.js b/gui/src/components/archive/SectionEditor.js index 61f8acf9c8237a6a322b4bcf17531ec7f438779d..cba792ece8c2ed2fb64b6b4443714f317262e63a 100644 --- a/gui/src/components/archive/SectionEditor.js +++ b/gui/src/components/archive/SectionEditor.js @@ -16,71 +16,19 @@ * limitations under the License. */ -import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react' +import React, { useCallback, useMemo, useRef } from 'react' import PropTypes from 'prop-types' -import { Box, makeStyles, TextField } from '@material-ui/core' +import { Box, makeStyles } from '@material-ui/core' import { useEntryStore } from '../entry/EntryContext' -import { extend, isNil } from 'lodash' +import { extend } from 'lodash' import ListEditQuantity from '../editQuantity/ListEditQuantity' +import InputConfig from '../search/input/InputConfig' import { editQuantityComponents } from '../editQuantity/EditQuantity' import { QuantityMDef } from './metainfo' import {getAllVisibleProperties} from './ArchiveBrowser' import {QuantityRow, QuantityTable} from '../Quantity' import {PropertyPreview} from '../entry/properties/SectionCard' -export const JsonEditor = React.memo(function JsonEditor({data, onChange, error, onError}) { - const controlledError = useRef(error !== undefined) - const [json, setJson] = useState() - const [errorInternal, setErrorInternal] = useState() - const errorFinal = error || errorInternal - - useEffect(() => { - setJson(data - ? JSON.stringify( - data, - (k, v) => { return v === Infinity ? "Infinity" : v }, - 2) - : '' - ) - }, [data]) - - const handleError = useCallback((e) => { - if (!controlledError.current) { - setErrorInternal(e) - onError && onError(e) - } else { - if (!isNil(e)) onError && onError(e) - } - }, [onError]) - - const handleChange = useCallback((event) => { - const value = event.target.value - setJson(value) - try { - const data = JSON.parse(value) - onChange && onChange(data) - handleError(null) - } catch (e) { - handleError('This is not JSON: ' + e) - } - }, [onChange, setJson, handleError]) - - return ( - <TextField - fullWidth label="JSON" error={!!errorFinal} - helperText={errorFinal} - variant="filled" multiline maxRows={20} - value={json} onChange={handleChange} - /> - ) -}) -JsonEditor.propTypes = { - data: PropTypes.oneOfType([PropTypes.object, PropTypes.array]), - onChange: PropTypes.func, - error: PropTypes.string, - onError: PropTypes.func -} - const PropertyEditor = React.memo(function PropertyEditor({quantityDef, value, onChange}) { const editAnnotations = quantityDef.m_annotations?.eln || [] const editAnnotation = editAnnotations[0] || {} @@ -177,7 +125,7 @@ const SectionEditor = React.memo(function SectionEditor({sectionDef, section, on {showJson ? ( <Box height={rootRef.current?.clientHeight} marginY={1}> - <JsonEditor data={jsonData} onChange={handleJsonChange} /> + <InputConfig data={jsonData} onChange={handleJsonChange} /> </Box> ) : ( allVisibleQuantities.map(quantity => ( diff --git a/gui/src/components/archive/metainfo.js b/gui/src/components/archive/metainfo.js index ca0023d5c2da99038eef5a847cfd42a4d48e2ee4..0daff9ee7e90f06638077a4612bc0928b585a441 100644 --- a/gui/src/components/archive/metainfo.js +++ b/gui/src/components/archive/metainfo.js @@ -233,7 +233,7 @@ export class Metainfo { const defQualifiedNameSegments = qualifiedName.split('.') const packageName = defQualifiedNameSegments.slice(0, -1).join('.') const sectionName = defQualifiedNameSegments[defQualifiedNameSegments.length - 1] - return this._packageDefs[packageName]?._sections?.[sectionName] + return this._packageDefs[packageName || '*']?._sections?.[sectionName] } /** @@ -625,7 +625,11 @@ export class Metainfo { return this.getDefByPath(reference) } resolvedUrl = resolveNomadUrl(reference, this._parsedUrl) - if (resolvedUrl.qualifiedName) { + if (resolvedUrl.entryId && resolvedUrl.qualifiedName) { + // Reference to entry metainfo + const metainfo = await this._getMetainfoAsync(resolvedUrl) + return metainfo.getDefByQualifiedName(resolvedUrl.qualifiedName) + } else if (resolvedUrl.qualifiedName) { // Reference to the system metainfo, using qualified name const systemMetainfo = this._url === systemMetainfoUrl ? this : await this._getMetainfoAsync(systemMetainfoUrl) return systemMetainfo.getDefByQualifiedName(resolvedUrl.qualifiedName) @@ -753,7 +757,7 @@ export function getMetainfoFromDefinition(definition) { * @param {str} path The archive path to the section * @param {function} callback The callback that is called on each section */ -export function traverse(section, definition, path, callback, depthFirst) { +export function traverse(section, definition, path, callback) { callback(section, definition, path) for (const subSectionDef of definition._allProperties.filter(prop => prop.m_def === SubSectionMDef)) { let subSections = [] @@ -776,6 +780,29 @@ export function traverse(section, definition, path, callback, depthFirst) { } } +/** + * Allows to traverse a given section through all its sub-sections. + * + * @param {Object} section The section to traverse + * @param {Object} definition The definition of the section + * @param {str} path The archive path to the section + * @param {function} callback The callback that is called on each section + */ +export function traverseDefinition(definition, path = '', callback) { + callback(definition, path) + if (definition._allProperties) { + for (const def of definition._allProperties) { + const childPath = path ? `${path}.${def.name}` : def.name + traverseDefinition(def, childPath, callback) + } + } + if (definition.sub_section) { + for (const def of definition.sub_section._allProperties) { + traverseDefinition(def, `${path}.${def.name}`, callback) + } + } +} + /** * Constructs a graph from and with the definition. The graph will contain the given nodes, * all its outgoing and incomming references, the parents up to root (for sections and categories) diff --git a/gui/src/components/buttons/SourceDialogButton.js b/gui/src/components/buttons/SourceDialogButton.js index b1469046a57c711a6d67bd1ead393ff70267fe7c..bb882076103a7de4b95324f89bc45ab1d3644acc 100644 --- a/gui/src/components/buttons/SourceDialogButton.js +++ b/gui/src/components/buttons/SourceDialogButton.js @@ -255,17 +255,43 @@ SourceJsonDialogButton.propTypes = { data: PropTypes.any } -export const SourceJson = React.memo(function SourceJson({data, ...props}) { +const useSourceJsonStyles = makeStyles(theme => ({ + stickyContainer: { + zIndex: 1, + width: '100%', + height: 0, + position: 'sticky', + left: 0 + }, + actionContainer: { + position: 'relative' + }, + action: { + position: 'absolute', + right: 0, + top: "1rem", + transform: 'translate(0, -50%)' + } +})) +export const SourceJson = React.memo(({data, ...props}) => { + const styles = useSourceJsonStyles() const dataToRender = typeof data === 'object' ? data : {data: data} // serialized json has "private" values that might contain circles removed // might still have circles and fail - let code + let code = null try { code = JSON.stringify(data, (name, value) => name.startsWith('_') ? undefined : value, 2) } catch {} - return <Box display="flex" flexDirection="row" alignItems="start"> - <Box flexGrow={1}> + return <> + {code && <div className={styles.stickyContainer}> + <div className={styles.actionContainer}> + <div className={styles.action}> + <CopyToClipboardButton code={code} /> + </div> + </div> + </div>} + <Box minHeight="2rem" display="flex" alignItems="center"> <ReactJson src={dataToRender} enableClipboard={false} @@ -274,8 +300,7 @@ export const SourceJson = React.memo(function SourceJson({data, ...props}) { {...props} /> </Box> - {code && <CopyToClipboardButton code={code} />} - </Box> + </> }) SourceJson.propTypes = { data: PropTypes.any diff --git a/gui/src/components/conftest.spec.js b/gui/src/components/conftest.spec.js index 2ab88a65948adf583f909b51f709ff2c376193da..e1cc8dc8756a7535a0b3928940d2fbf72a22d146 100644 --- a/gui/src/components/conftest.spec.js +++ b/gui/src/components/conftest.spec.js @@ -41,7 +41,7 @@ import { createBrowserHistory } from 'history' import { APIProvider } from './api' import { ErrorSnacks, ErrorBoundary } from './errors' import DataStore from './DataStore' -import { filterData } from './search/FilterRegistry' +import { defaultFilterData } from './search/FilterRegistry' import { keycloakBase, searchQuantities } from '../config' import { useKeycloak } from '@react-keycloak/web' import { GlobalMetainfo } from './archive/metainfo' @@ -339,7 +339,7 @@ export function within(element, queriesToBind = defaultAndCustomQueries) { */ export function expectQuantity(name, data, label = undefined, description = undefined, root = customScreen) { description = description || searchQuantities[name].description - label = label || filterData?.[name]?.label?.toLowerCase() || searchQuantities[name].name.replace(/_/g, ' ') + label = label || defaultFilterData?.[name]?.label?.toLowerCase() || searchQuantities[name].name.replace(/_/g, ' ') const value = isPlainObject(data) ? get(data, name) : data const element = root.getByTooltip(description) expect(root.getByText(label)).toBeInTheDocument() diff --git a/gui/src/components/dataset/DatasetPage.js b/gui/src/components/dataset/DatasetPage.js index 2b1ed040cfa5900dadfb15de8b7effff88029532..0de1eb4b581407d3c7822ce172bfd20161669daa 100644 --- a/gui/src/components/dataset/DatasetPage.js +++ b/gui/src/components/dataset/DatasetPage.js @@ -62,6 +62,7 @@ const DatasetPage = React.memo(({match}) => { return dataset ? <SearchContext resource={context?.resource} + initialSchemas={context?.schemas} initialPagination={context?.pagination} initialColumns={context?.columns} initialRows={context?.rows} diff --git a/gui/src/components/datatable/Datatable.js b/gui/src/components/datatable/Datatable.js index 8bdb2a305f45e35872c151d540441d6eef868853..6f4c10f001a3f4ce14f63aa5c7ba42b6f28a79a1 100644 --- a/gui/src/components/datatable/Datatable.js +++ b/gui/src/components/datatable/Datatable.js @@ -25,7 +25,6 @@ import { IconButton, makeStyles, lighten, TableHead, TableRow, TableCell, TableS import TooltipButton from '../utils/TooltipButton' import EditColumnsIcon from '@material-ui/icons/ViewColumn' import InfiniteScroll from 'react-infinite-scroller' -import { searchQuantities } from '../../config' const DatatableContext = React.createContext({}) const StaticDatatableContext = React.createContext({}) @@ -41,7 +40,7 @@ const StaticDatatableContext = React.createContext({}) export function combinePagination(request, response) { const result = { page_size: request.page_size || response?.page_size, - order_by: request.order_by || response?.order_by, + order_by: response.order_by || request?.order_by, order: request.order || response?.order, page: request.page || response?.page, total: response?.total @@ -58,8 +57,10 @@ export function combinePagination(request, response) { /** * Ensures that all given columns have default values for necessary keys. * @param {array} columns An array of columns to extend/check. + * @param {object} moreDefaults Object containing additional default values + * @param {object} filterData Object that contains quantity/Filter pairs */ -export function addColumnDefaults(columns, moreDefaults) { +export function addColumnDefaults(columns, moreDefaults, filterData) { columns.forEach(column => { if (moreDefaults) { Object.keys(moreDefaults).filter(key => !column[key]).forEach(key => { column[key] = moreDefaults[key] }) @@ -77,7 +78,7 @@ export function addColumnDefaults(columns, moreDefaults) { if (column.sortable !== false) { column.sortable = true } - const multiple = !isEmpty(searchQuantities[column.key]?.shape) + const multiple = !isEmpty(filterData?.[column.key]?.shape) if (multiple) { column.sortable = false } else if (isNil(column.sortable)) { @@ -87,7 +88,7 @@ export function addColumnDefaults(columns, moreDefaults) { column.align = 'center' } if (!column.description) { - column.description = searchQuantities[column.key]?.description + column.description = filterData?.[column.key]?.description } }) } @@ -254,13 +255,11 @@ const DatatableHeader = React.memo(function DatatableHeader({actions}) { const createSortHandler = (column) => (event) => { const isAsc = order_by === column.key && order === 'asc' - if (onPaginationChanged) { - onPaginationChanged({ - ...pagination, - order: isAsc ? 'desc' : 'asc', - order_by: column.key - }) - } + onPaginationChanged?.({ + ...pagination, + order: isAsc ? 'desc' : 'asc', + order_by: column.key + }) } const sortableColumns = useMemo(() => { @@ -319,6 +318,22 @@ DatatableHeader.propTypes = { } const useDatatableRowStyles = makeStyles(theme => ({ + // The default transparent hover/selection colors are overridden here in order + // to make the last actions column work with a 'sticky' positioning. + row: { + backgroundColor: '#fff' + }, + rowHover: { + '&:hover': { + backgroundColor: '#f5f5f5 !important' + } + }, + rowSelected: { + backgroundColor: `${lighten(theme.palette.secondary.light, 0.85)} !important`, + '&:hover': { + backgroundColor: `${lighten(theme.palette.secondary.light, 0.85)} !important` + } + }, rowWithDetails: { '& > *': { borderBottom: 'unset' @@ -326,6 +341,9 @@ const useDatatableRowStyles = makeStyles(theme => ({ }, rowWithUncollapsedDetails: { backgroundColor: `${theme.palette.primary.main} !important`, + '&:hover': { + backgroundColor: `${theme.palette.primary.main} !important` + }, '& *': { fontWeight: 'bold', color: `${theme.palette.primary.contrastText} !important` @@ -342,7 +360,6 @@ const useDatatableRowStyles = makeStyles(theme => ({ paddingBottom: 0, position: 'sticky', right: 0, - zIndex: 1, backgroundColor: 'inherit' }, detailsCell: { @@ -384,6 +401,11 @@ const DatatableRow = React.memo(function DatatableRow({data, selected, uncollaps return <> <TableRow + classes={{ + root: classes.row, + hover: classes.rowHover, + selected: classes.rowSelected + }} className={clsx({ [classes.rowWithUncollapsedDetails]: uncollapsed, [classes.rowWithDetails]: details, diff --git a/gui/src/components/editQuantity/ReferenceEditQuantity.js b/gui/src/components/editQuantity/ReferenceEditQuantity.js index 51c21f2db59828b1ea8d8dcad788d5061405ba9c..9c64de72d8fcc488f82e9a1a03e176d32e1db0be 100644 --- a/gui/src/components/editQuantity/ReferenceEditQuantity.js +++ b/gui/src/components/editQuantity/ReferenceEditQuantity.js @@ -65,9 +65,8 @@ function useReferecedSectionDef(quantityDef) { }, [quantityDef]) } -const CreateNewReferenceDialog = React.memo(({quantityDef, open, onSuccess, onFailed, onCanceled}) => { +const CreateNewReferenceDialog = React.memo(({allEntryDataSections, open, onSuccess, onFailed, onCanceled}) => { const classes = useStyles() - const dataStore = useDataStore() const {deploymentUrl, uploadId} = useEntryStore('*') const {user, api} = useApi() const {raiseError} = useErrors() @@ -75,10 +74,10 @@ const CreateNewReferenceDialog = React.memo(({quantityDef, open, onSuccess, onFa const [suggestions, setSuggestions] = useState([]) const [selectedUpload, setSelectedUpload] = useState(null) const [askForOverwrite, setAskForOverwrite] = useState(false) - const referencedSectionDef = useReferecedSectionDef(quantityDef) - const [selectedSection, setSelectedSection] = useState(referencedSectionDef) + const [selectedSection, setSelectedSection] = useState() useEffect(() => { + setSelectedSection(allEntryDataSections?.[0]) const prepareUploads = async () => { const response = await api.get(`/uploads?is_published=false&page_size=10000`) const uploads = response.data.map(upload => { @@ -110,10 +109,7 @@ const CreateNewReferenceDialog = React.memo(({quantityDef, open, onSuccess, onFa if (user?.sub && open) { prepareUploads() } - }, [api, raiseError, uploadId, user?.sub, open]) - - const inheritingSections = useMemo(() => dataStore.getAllInheritingSections(referencedSectionDef), [dataStore, referencedSectionDef]) - const inheritingSectionsSuggestions = useMemo(() => [referencedSectionDef].concat(inheritingSections), [inheritingSections, referencedSectionDef]) + }, [api, raiseError, uploadId, user?.sub, open, allEntryDataSections]) const createNewEntry = useCallback((fileName, overwrite = false) => { const archive = { @@ -175,7 +171,7 @@ const CreateNewReferenceDialog = React.memo(({quantityDef, open, onSuccess, onFa return <React.Fragment> <Dialog classes={{paper: classes.dialog}} open={open} disableEscapeKeyDown data-testid='create-reference-dialog'> - <DialogTitle>Create new reference</DialogTitle> + <DialogTitle>{selectedSection?.name ? `Create new reference of type ${selectedSection.name}` : `Create new reference`}</DialogTitle> <DialogContent> <AutoComplete options={suggestions} @@ -187,8 +183,8 @@ const CreateNewReferenceDialog = React.memo(({quantityDef, open, onSuccess, onFa getOptionLabel={(option) => option.label} renderInput={(params) => <TextField {...params} label="Target upload" variant='filled' />} /> - {inheritingSections.length > 0 ? <AutoComplete - options={inheritingSectionsSuggestions} + {allEntryDataSections?.length > 1 ? <AutoComplete + options={allEntryDataSections} style={{width: '100%', paddingBottom: 10}} onChange={(event, value) => setSelectedSection(value)} value={selectedSection} @@ -227,7 +223,7 @@ const CreateNewReferenceDialog = React.memo(({quantityDef, open, onSuccess, onFa </React.Fragment> }) CreateNewReferenceDialog.propTypes = { - quantityDef: PropTypes.object.isRequired, + allEntryDataSections: PropTypes.object.isRequired, open: PropTypes.bool, onSuccess: PropTypes.func, onFailed: PropTypes.func, @@ -257,7 +253,7 @@ const ReferenceEditQuantity = React.memo(function ReferenceEditQuantity(props) { const {raiseError} = useErrors() const [error, setError] = useState({error: undefined, processingError: undefined}) const lane = useLane() - + const dataStore = useDataStore() const referencedSectionDef = useReferecedSectionDef(quantityDef) const referencedSectionQualifiedName = useMemo(() => referencedSectionDef?._qualifiedName, [referencedSectionDef]) @@ -376,10 +372,15 @@ const ReferenceEditQuantity = React.memo(function ReferenceEditQuantity(props) { return React.cloneElement(endAdornment, {}, children) }, []) + const allEntryDataSections = useMemo(() => { + const inheritingSections = dataStore.getAllInheritingSections(referencedSectionDef) + const allSections = [referencedSectionDef].concat(inheritingSections) + return allSections.filter(section => !!section._allBaseSections.find(baseSection => baseSection._qualifiedName === 'nomad.datamodel.data.EntryData')) + }, [dataStore, referencedSectionDef]) + const actions = useMemo(() => { - const isEntryData = referencedSectionDef?._allBaseSections.find(section => section._qualifiedName === 'nomad.datamodel.data.EntryData') const actions = [] - if (!value && isEntryData) { + if (!value && allEntryDataSections?.length > 0) { actions.push(<IconButton key={'createAction'} size={'small'} disabled={!user?.sub} onClick={() => setCreateEntryDialogOpen(true)}> <Tooltip title="Create and assign a new reference"> <AddIcon/> @@ -407,7 +408,7 @@ const ReferenceEditQuantity = React.memo(function ReferenceEditQuantity(props) { actions.push(<ItemButton key={'navigateAction'} size="small" itemKey={itemKey}/>) } return actions - }, [value, lane, itemKey, user, error.error, referencedSectionDef]) + }, [value, lane, itemKey, user, error.error, allEntryDataSections]) const referencedValue = useMemo(() => { const value = entry?.value?.split('#')[1] || '' @@ -449,7 +450,7 @@ const ReferenceEditQuantity = React.memo(function ReferenceEditQuantity(props) { ) }} /> - <CreateNewReferenceDialog open={createEntryDialogOpen} quantityDef={quantityDef} onSuccess={handleSuccess} onFailed={handleFailed} onCanceled={handleCanceled}/> + <CreateNewReferenceDialog open={createEntryDialogOpen} allEntryDataSections={allEntryDataSections} onSuccess={handleSuccess} onFailed={handleFailed} onCanceled={handleCanceled}/> </Box> <SectionSelectDialog open={open} diff --git a/gui/src/components/editQuantity/ReferenceEditQuantity.spec.js b/gui/src/components/editQuantity/ReferenceEditQuantity.spec.js index 5bec071f32425a8ad22c74adac709ab73e89c607..50b1715fc5d8a42515c7fdf1d51300a1271574a5 100644 --- a/gui/src/components/editQuantity/ReferenceEditQuantity.spec.js +++ b/gui/src/components/editQuantity/ReferenceEditQuantity.spec.js @@ -98,7 +98,7 @@ const testSectionSelectAutocomplete = async () => { const testCreateReferenceDialog = async () => { const dialog = screen.getByTestId('create-reference-dialog') - expect(within(dialog).queryByText('Create new reference')).toBeInTheDocument() + expect(within(dialog).queryByText('Create new reference of type Substance')).toBeInTheDocument() const createButton = within(dialog).getByRole('button', { name: /create/i }) expect(createButton).toBeDisabled() @@ -115,7 +115,7 @@ const testCreateReferenceDialog = async () => { test.each([ [ - 'referenceEditQuantity', + 'referenceEditQuantity 1', 'tests.states.entry.references', 'tests/data/editquantity/referenceEditQuantity', '4WgzB6xcTzWB_Xk9UNUH4HB3IRKJ', diff --git a/gui/src/components/entry/EntryDetails.js b/gui/src/components/entry/EntryDetails.js index be611083257e566c6b8ff5ac36c394be6b5a7bdc..9344f7ff75194f21af5ed43e1a8690301ef13675 100644 --- a/gui/src/components/entry/EntryDetails.js +++ b/gui/src/components/entry/EntryDetails.js @@ -23,10 +23,6 @@ import { Tooltip, IconButton } from '@material-ui/core' import { useApi } from '../api' import { EntryButton } from '../nav/Routes' import DetailsIcon from '@material-ui/icons/ArrowForward' -import PublicIcon from '@material-ui/icons/Public' -import UploaderIcon from '@material-ui/icons/AccountCircle' -import SharedIcon from '@material-ui/icons/SupervisedUserCircle' -import PrivateIcon from '@material-ui/icons/VisibilityOff' import { makeStyles } from '@material-ui/core/styles' export const MethodMetadata = React.memo(({data}) => { @@ -118,55 +114,6 @@ EntryIds.propTypes = { data: PropTypes.object.isRequired } -export function Published(props) { - const {user} = useApi() - const {entry} = props - if (entry.published) { - if (entry.with_embargo) { - if (user && entry.main_author.user_id === user.sub) { - if (entry.viewers.length === 1) { - return <Tooltip title="published with embargo by you and only accessible by you"> - <UploaderIcon color="error" /> - </Tooltip> - } else { - return <Tooltip title="published with embargo by you and only accessible to you and the specified coauthors and reviewers"> - <SharedIcon color="error" /> - </Tooltip> - } - } else if (user && entry.coauthors.find(user => user.user_id === user.sub)) { - return <Tooltip title="published with embargo and visible to you as a coauthor"> - <SharedIcon color="error" /> - </Tooltip> - } else if (user && entry.reviewers.find(user => user.user_id === user.sub)) { - return <Tooltip title="published with embargo and visible to you as a reviewer"> - <SharedIcon color="error" /> - </Tooltip> - } else { - if (user) { - return <Tooltip title="published with embargo and not accessible by you"> - <PrivateIcon color="error" /> - </Tooltip> - } else { - return <Tooltip title="published with embargo and might become accessible after login"> - <PrivateIcon color="error" /> - </Tooltip> - } - } - } else { - return <Tooltip title="published and accessible by everyone"> - <PublicIcon color="primary" /> - </Tooltip> - } - } else { - return <Tooltip title="you have not published this entry yet"> - <UploaderIcon color="error"/> - </Tooltip> - } -} -Published.propTypes = { - entry: PropTypes.object.isRequired -} - export const VisitEntryAction = React.memo(function VisitEntryAction({data, ...props}) { const {user} = useApi() const hide = (data.with_embargo && !user && !data.viewers.find(viewer => viewer.user_id === user.sub)) || data.process_running @@ -174,11 +121,14 @@ export const VisitEntryAction = React.memo(function VisitEntryAction({data, ...p return null } - // The portal is disabled for this tooltip because this button causes a - // navigation that otherwise leaves the popup opened (the Tooltip state does - // not get updated since the page is cached and a new page is shown - // immediately). - return <Tooltip PopperProps={{disablePortal: true}} title="Go to the entry page" placement="right-start"> + // The exit transition is disabled for this tooltip because this button causes + // a navigation that does not fully remove the button from the DOM (the page + // is cached and a new page is shown immediately). If the exit transition is + // left on, the button can flicker on the new page. + return <Tooltip + TransitionProps={{exit: false}} + title="Go to the entry page" + > <EntryButton {...props} entryId={data.entry_id} diff --git a/gui/src/components/entry/EntryDownloadButton.js b/gui/src/components/entry/EntryDownloadButton.js index 9d6c51426c72fc04a396836072b145b4eec876fc..434cc1d195b3412fa5e4a7852f6c6812d68c8b90 100644 --- a/gui/src/components/entry/EntryDownloadButton.js +++ b/gui/src/components/entry/EntryDownloadButton.js @@ -20,11 +20,9 @@ import PropTypes from 'prop-types' import { apiBase } from '../../config' import { Tooltip, IconButton, Menu, MenuItem } from '@material-ui/core' import DownloadIcon from '@material-ui/icons/CloudDownload' -import { toAPIFilter } from '../search/SearchContext' const EntryDownloadButton = React.memo(function EntryDownloadButton(props) { const {tooltip, disabled, buttonProps, dark, query} = props - const [anchorEl, setAnchorEl] = useState(null) const handleClick = event => { @@ -34,7 +32,7 @@ const EntryDownloadButton = React.memo(function EntryDownloadButton(props) { const handleSelect = (urlSuffix) => { setAnchorEl(null) - const queryStringData = toAPIFilter(query) + const queryStringData = query const owner = query.visibility || 'visible' const url = `${apiBase}/v1/entries/${urlSuffix}?owner=${owner}&json_query=${JSON.stringify(queryStringData)}` window.location.assign(url) diff --git a/gui/src/components/entry/EntryPage.js b/gui/src/components/entry/EntryPage.js index ce0be4107b3d9745f4e8d08eb33c57669b7d6e4f..31a07ab285f5f113a301377b71fa6cedd0c83572 100644 --- a/gui/src/components/entry/EntryPage.js +++ b/gui/src/components/entry/EntryPage.js @@ -43,7 +43,7 @@ function EntryTabs({tab, onChange}) { const {metadata} = useEntryStore() const dataStore = useDataStore() const styles = useStyles() - const entryHasProcessingError = metadata?.processing_errors.length > 0 + const entryHasProcessingError = metadata?.processing_errors?.length > 0 useEffect(() => { dataStore.breadcrumb.setUpload(metadata?.upload_name || 'Upload') diff --git a/gui/src/components/entry/OverviewView.js b/gui/src/components/entry/OverviewView.js index 93bf5eb9647ae71a8d33042fdc8a6cf79420b29d..613d7b5792d1c67f27c1ecc54e849ddcdf92c921 100644 --- a/gui/src/components/entry/OverviewView.js +++ b/gui/src/components/entry/OverviewView.js @@ -34,7 +34,7 @@ import ThermodynamicPropertiesCard from '../entry/properties/ThermodynamicProper import DynamicalPropertiesCard from '../entry/properties/DynamicalPropertiesCard' import StructuralPropertiesCard from '../entry/properties/StructuralPropertiesCard' import GeometryOptimizationCard from '../entry/properties/GeometryOptimizationCard' -import EELSPropertiesCard from './properties/EELSPropertiesCard' +import SpectroscopicPropertiesCard from './properties/SpectroscopicPropertiesCard' import RelatedResourcesCard from '../entry/properties/RelatedResourcesCard' import WorkflowCard from './properties/WorkflowCard' import { MethodMetadata } from './EntryDetails' @@ -111,11 +111,12 @@ const required = { electronic: { greens_functions_electronic: 'include-resolved', dos_electronic: 'include-resolved', + dos_electronic_new: 'include-resolved', band_structure_electronic: 'include-resolved', band_gap: '*' }, mechanical: 'include-resolved', - spectroscopy: 'include-resolved', + spectroscopic: 'include-resolved', vibrational: 'include-resolved', thermodynamic: 'include-resolved', geometry_optimization: { @@ -187,7 +188,7 @@ const OverviewView = React.memo(() => { structural: StructuralPropertiesCard, dynamical: DynamicalPropertiesCard, geometry_optimization: GeometryOptimizationCard, - eels: EELSPropertiesCard, + spectroscopic: SpectroscopicPropertiesCard, workflow: WorkflowCard, references: ReferenceUsingCard, relatedResources: RelatedResourcesCard diff --git a/gui/src/components/entry/OverviewView.spec.js b/gui/src/components/entry/OverviewView.spec.js index 9da1cb0bbb10330eee176ab9883275372cfbbd2f..69a6f92e9e3580e19bb81a657f24ceb0d1248c77 100644 --- a/gui/src/components/entry/OverviewView.spec.js +++ b/gui/src/components/entry/OverviewView.spec.js @@ -208,7 +208,7 @@ test('eln overview as a reviewer', async () => { const cardHotplateAnnealing = sectionCards[2] expect(within(cardSample).getByText('Sample')).toBeVisible() - expectQuantityToBe('chemical_formula', 'chemical formula', undefined, within(cardSample)) + // expectQuantityToBe('chemical_formula', 'chemical formula', undefined, within(cardSample)) expectQuantityToBe('name', 'name', 'ELN example sample', within(cardSample)) expectQuantityToBe('lab_id', 'lab id', '001', within(cardSample)) expectQuantityToBe('description', 'description', undefined, within(cardSample)) @@ -221,7 +221,7 @@ test('eln overview as a reviewer', async () => { expectQuantityToBe('data_file', 'data file', 'PVDProcess.csv', within(cardPvdEvaporation)) // Test if the plot is there - expect(within(cardPvdEvaporation).getByText(/Chamber Pressure \(mbar\)/)).toBeVisible() + expect(within(cardPvdEvaporation).getByText(/Chamber Pressure \(GPa\)/)).toBeVisible() expect(within(cardPvdEvaporation).getByText(/Substrate Temperature \(K\)/)).toBeVisible() expect(within(cardPvdEvaporation).getByText(/Time \(fs\)/)).toBeVisible() @@ -297,7 +297,7 @@ test.each([ expectNumberEditQuantity(numberFieldValue[0], numberFieldUnit[0], '', 'Å') // Test if the plot is there - expect(within(cardPvdEvaporation).getByText(/Chamber Pressure \(mbar\)/)).toBeVisible() + expect(within(cardPvdEvaporation).getByText(/Chamber Pressure \(GPa\)/)).toBeVisible() expect(within(cardPvdEvaporation).getByText(/Substrate Temperature \(K\)/)).toBeVisible() expect(within(cardPvdEvaporation).getByText(/Time \(fs\)/)).toBeVisible() diff --git a/gui/src/components/entry/properties/EELSPropertiesCard.js b/gui/src/components/entry/properties/EELSPropertiesCard.js deleted file mode 100644 index f73dd06721160c12e25dff8ff387d11433dc1ebf..0000000000000000000000000000000000000000 --- a/gui/src/components/entry/properties/EELSPropertiesCard.js +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright The NOMAD Authors. - * - * This file is part of NOMAD. See https://nomad-lab.eu for further info. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import React from 'react' -import PropTypes from 'prop-types' -import { PropertyCard, PropertyGrid, PropertyItem } from './PropertyCard' -import { useUnits } from '../../../units' -import { SectionTable } from '../../Quantity' -import EELS from '../../visualization/EELS' -import { resolveInternalRef } from '../../../utils' - -/** - * Card displaying EELS properties. -*/ -const eelsProperties = { - detector_type: {label: 'Detector type', align: 'left'}, - resolution: {label: 'Resolution', align: 'right'}, - min_energy: {label: 'Min. energy', align: 'right'}, - max_energy: {label: 'Max. energy', align: 'right'} -} -const EELSPropertiesCard = React.memo(({index, properties, archive}) => { - const units = useUnits() - - // Find out which properties are present - const hasEELS = properties.has('eels') - - // Do not show the card if none of the properties are available - if (!hasEELS) return null - - // Resolve EELS data - let eelsTable - let spectrumCurves = hasEELS ? undefined : false - if (archive) { - const spectroscopy = archive?.results?.properties?.spectroscopy - eelsTable = {data: [spectroscopy?.eels]} - if (spectroscopy.spectrum) { - spectrumCurves = [resolveInternalRef(spectroscopy.spectrum, archive)] - } - } - - return <PropertyCard title="EELS Properties"> - <PropertyGrid> - <PropertyItem xs={12} height="25rem"> - <EELS - data={spectrumCurves} - layout={{yaxis: {autorange: true}}} - units={units} - /> - </PropertyItem> - <PropertyItem xs={12} height="auto"> - <SectionTable - horizontal - section="results.properties.spectroscopy.eels" - quantities={eelsProperties} - data={eelsTable} - units={units} - data-testid="bulk-modulus" - showIndex={spectrumCurves && spectrumCurves.length > 1} - /> - </PropertyItem> - </PropertyGrid> - </PropertyCard> -}) - -EELSPropertiesCard.propTypes = { - index: PropTypes.object.isRequired, - properties: PropTypes.object.isRequired, - archive: PropTypes.object -} - -export default EELSPropertiesCard diff --git a/gui/src/components/entry/properties/ElectronicPropertiesCard.js b/gui/src/components/entry/properties/ElectronicPropertiesCard.js index 9a15d67c8ff490e1694fa970c5903d450c1b1149..257964b6578ab9c90f8efc6a739b74b633f2ab2d 100644 --- a/gui/src/components/entry/properties/ElectronicPropertiesCard.js +++ b/gui/src/components/entry/properties/ElectronicPropertiesCard.js @@ -1,4 +1,3 @@ -/* eslint-disable no-unused-vars */ /* * Copyright The NOMAD Authors. * @@ -18,53 +17,32 @@ */ import React from 'react' import PropTypes from 'prop-types' -import { isEmpty } from 'lodash' import { resolveInternalRef } from '../../../utils' import { PropertyCard } from './PropertyCard' import ElectronicProperties from '../../visualization/ElectronicProperties' +import { resolveGreensFunctions } from '../../visualization/GreensFunctions' +import { resolveDosNew, resolveDosOld } from '../../visualization/DOS' const ElectronicPropertiesCard = React.memo(({index, properties, archive}) => { // Find out which properties are present - const hasDos = properties.has('dos_electronic') + const hasDosNew = properties.has('dos_electronic_new') + const hasDosOld = properties.has('dos_electronic') const hasBs = properties.has('band_structure_electronic') const hasBandGap = properties.has('electronic.band_structure_electronic.band_gap') const hasGf = properties.has('greens_functions_electronic') // Do not show the card if none of the properties are available - if (!hasDos && !hasBs && !hasBandGap && !hasGf) return null + if (!hasDosNew && !hasDosOld && !hasBs && !hasBandGap && !hasGf) return null - let dosReferences = archive?.results?.properties?.electronic?.dos_electronic || [] let bsReferences = archive?.results?.properties?.electronic?.band_structure_electronic || [] - let gfReferences = archive?.results?.properties?.electronic?.greens_functions_electronic || [] const pattern = '\\.\\./(?:entries|upload/archive|uploads.+?archive)/(.+?)(?:/archive#|#)(.+)' if (!Array.isArray(bsReferences)) bsReferences = [bsReferences] - if (!Array.isArray(dosReferences)) dosReferences = [dosReferences] - if (!Array.isArray(gfReferences)) gfReferences = [gfReferences] - // Resolve DOS data - let dos = hasDos ? undefined : false + // Resolve the new DOS schema data. For older entries, resolve the old DOS schema data + let dos = (hasDosOld || hasDosNew) ? undefined : false if (archive) { - dos = [] - for (const reference of dosReferences) { - const d = {} - const match = reference.energies.match(pattern) - const path = match ? match[2] : reference.energies - const totalPath = match ? reference.total.map(ref => ref.match(pattern)[2]) : reference.total - const sourceArchive = match ? (archive.m_ref_archives[match[1]] || archive.m_ref_archives[reference.energies.split('#')[0]]) : archive - if (sourceArchive) { - d.energies = resolveInternalRef(path, sourceArchive) - const internalRef = resolveInternalRef(totalPath, sourceArchive) - d.densities = internalRef.map(dos => dos.value) - d.normalization_factors = internalRef.map(dos => dos.normalization_factor) - } - d.name = reference.label - if (reference.band_gap) { - d.energy_highest_occupied = Math.max(...reference.band_gap.map(x => x.energy_highest_occupied)) - } - d.m_path = `${archive?.metadata?.entry_id}/data/results/properties/electronic/dos_electronic` - if (d.energies && d.densities) dos.push(d) - } - dos = dos.length === 0 ? false : dos + if (hasDosNew) dos = resolveDosNew(properties, archive, pattern) + if (!hasDosNew && hasDosOld) dos = resolveDosOld(properties, archive, pattern) } // Resolve band structure data @@ -126,18 +104,7 @@ const ElectronicPropertiesCard = React.memo(({index, properties, archive}) => { } // Resolve Greens functions data - let gf = hasGf ? undefined : false - if (hasGf) { - if (!isEmpty(gfReferences)) { - const reference = gfReferences[0] - gf = { - tau: reference.tau, - regtau: reference.real_greens_function_tau, - iw: reference.matsubara_freq, - imsiw: reference.imag_self_energy_iw - } - } - } + const gf = resolveGreensFunctions(properties, archive, pattern) return <PropertyCard title="Electronic properties"> <ElectronicProperties diff --git a/gui/src/components/entry/properties/NexusCard.js b/gui/src/components/entry/properties/NexusCard.js index 10d27416b6474e213556303c13a37eeb25bce921..2491fafd80130837542b881b85c81b3133572e7c 100644 --- a/gui/src/components/entry/properties/NexusCard.js +++ b/gui/src/components/entry/properties/NexusCard.js @@ -20,14 +20,21 @@ import React from 'react' import PropTypes from 'prop-types' import H5Web from '../../visualization/H5Web' -import { Card } from '@material-ui/core' +import { Card, makeStyles } from '@material-ui/core' + +const useNexusCardStyles = makeStyles(theme => ({ + root: { + height: 500 + } +})) const NexusCard = React.memo(function NexusCard({index}) { + const classes = useNexusCardStyles() if (index.parser_name !== 'parsers/nexus') { return null } return ( - <Card style={{height: 500, overflowY: "scroll"}}> + <Card className={classes.root}> <H5Web upload_id={index.upload_id} filename={index.mainfile} initialPath="/"/> </Card> ) diff --git a/gui/src/components/entry/properties/RelatedResourcesCard.js b/gui/src/components/entry/properties/RelatedResourcesCard.js index 07b9c2c7f6b26d88964c2213ade391649ceacdcb..dc15d5ed501d25b2b7d15dbdffaab5a2e734c148 100644 --- a/gui/src/components/entry/properties/RelatedResourcesCard.js +++ b/gui/src/components/entry/properties/RelatedResourcesCard.js @@ -26,6 +26,7 @@ import { Datatable, DatatableTable, DatatablePagePagination } from '../../datata import { formatTimestamp } from '../../../utils' import Quantity from '../../Quantity' import { PropertyCard } from './PropertyCard' +import Ellipsis from '../../visualization/Ellipsis' const useResourceDetailsStyles = makeStyles(theme => ({ resourceDetails: { @@ -52,16 +53,6 @@ const useResourceDetailsStyles = makeStyles(theme => ({ overflow: 'hidden', textOverflow: 'ellipsis', width: '11rem' - }, - ellipsis: { - whiteSpace: 'nowrap', - overflow: 'hidden', - textOverflow: 'ellipsis', - width: '11rem' - }, - ellipsisFront: { - direction: 'rtl', - textAlign: 'left' } })) @@ -103,7 +94,6 @@ ResourceActions.propTypes = { } const RelatedResourcesCard = React.memo(({index, archive}) => { - const classes = useResourceDetailsStyles() const {resourcesApi} = useApi() const {raiseError} = useErrors() const [externalResources, setExternalResources] = useState() @@ -145,9 +135,9 @@ const RelatedResourcesCard = React.memo(({index, archive}) => { sortable: true, align: 'left', render: data => ( - <div className={classes.ellipsis}> - <Typography noWrap> {data.id} </Typography> - </div> + <Typography noWrap> + <Ellipsis>{data.id}</Ellipsis> + </Typography> ) }, { @@ -155,9 +145,11 @@ const RelatedResourcesCard = React.memo(({index, archive}) => { sortable: true, align: 'left', render: data => ( - <div className={classes.ellipsis}> - <Typography noWrap><Link href={data.url}>{data.url}</Link></Typography> - </div> + <Typography noWrap> + <Link href={data.url}> + <Ellipsis>{data.url}</Ellipsis> + </Link> + </Typography> ) }, { @@ -166,7 +158,7 @@ const RelatedResourcesCard = React.memo(({index, archive}) => { align: 'left', render: data => data.database_name } - ], [classes.ellipsis]) + ], []) if (!externalResources || (!externalResources.is_retrieving_more && externalResources.data.length === 0)) { return '' diff --git a/gui/src/components/entry/properties/SectionCard.js b/gui/src/components/entry/properties/SectionCard.js index cbec42687cc531ca7b7c2f3ffc6ae548aaf37e1b..f6c4dad0738f9081ccfef6289e78385b71ecafb4 100644 --- a/gui/src/components/entry/properties/SectionCard.js +++ b/gui/src/components/entry/properties/SectionCard.js @@ -206,7 +206,7 @@ const SectionCard = React.memo(({archivePath, sectionDef, section, readOnly, ... {...props} /> )} - {sectionDef.m_annotations?.plot && <SectionPlots sectionDef={sectionDef} section={section}/>} + {(sectionDef.m_annotations?.plot || sectionDef._allBaseSections.map(section => section.name).includes('PlotSection')) && <SectionPlots sectionDef={sectionDef} section={section}/>} </Box> </PropertyCard> }) diff --git a/gui/src/components/entry/properties/SpectroscopicPropertiesCard.js b/gui/src/components/entry/properties/SpectroscopicPropertiesCard.js new file mode 100644 index 0000000000000000000000000000000000000000..eb11c885e1faede50ac4ba78840e2789216534e0 --- /dev/null +++ b/gui/src/components/entry/properties/SpectroscopicPropertiesCard.js @@ -0,0 +1,83 @@ +/* + * Copyright The NOMAD Authors. + * + * This file is part of NOMAD. See https://nomad-lab.eu for further info. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React from 'react' +import PropTypes from 'prop-types' +import { PropertyCard, PropertyGrid, PropertyItem } from './PropertyCard' +import Spectra from '../../visualization/Spectra' + +/** + * Card displaying spectroscopic properties. +*/ +const SpectroscopicPropertiesCard = React.memo(({index, properties, archive}) => { + // Find out which properties are present + const hasSpectra = properties.has('spectra') + + // Do not show the card if none of the properties are available + if (!hasSpectra) return null + + // Check index for which types of spectras exist. Create a mapping based on + // this: this will allow the GUI to show a placeholder while the data is + // loaded from archive. + const spectras = hasSpectra ? {} : false + for (const spectra of index?.results?.properties?.spectroscopic?.spectra) { + spectras[spectra.type] = undefined + } + + // When archive is loaded, fill out the information + if (archive) { + let spectraReferences = archive?.results?.properties?.spectroscopic?.spectra + if (!Array.isArray(spectraReferences)) spectraReferences = [spectraReferences] + if (spectraReferences) { + for (const spectra of spectraReferences) { + const data = {} + data.type = spectra.type + data.label = spectra.label === 'computation' ? 'comp.' : 'exp.' + data.intensities = spectra.intensities + data.energies = spectra.energies + if (data.energies) { + if (spectras[spectra.type]) { + spectras[spectra.type].push(data) + } else { + spectras[spectra.type] = [data] + } + } + } + } + } + + return <PropertyCard title="Spectroscopic properties"> + <PropertyGrid> + {spectras && Object.entries(spectras).map(([key, value]) => { + return <PropertyItem key={key} title={key} xs={12}> + <Spectra + data={value} + layout={{yaxis: {autorange: true}}} + /> + </PropertyItem> + })} + </PropertyGrid> + </PropertyCard> +}) + +SpectroscopicPropertiesCard.propTypes = { + index: PropTypes.object.isRequired, + properties: PropTypes.object.isRequired, + archive: PropTypes.object +} + +export default SpectroscopicPropertiesCard diff --git a/gui/src/components/errors.js b/gui/src/components/errors.js index 04b03e03fd10d21bd962088f7d5b7ffb5df9b70e..9fa80a7888e655b953d6358375c1680bfb76f1c6 100644 --- a/gui/src/components/errors.js +++ b/gui/src/components/errors.js @@ -19,7 +19,6 @@ import React, { useContext } from 'react' import PropTypes from 'prop-types' import { SnackbarContent, IconButton, Snackbar, withStyles } from '@material-ui/core' import CloseIcon from '@material-ui/icons/Close' -import { pwaRegistrationRef } from './PWA' export class VersionMismatch extends Error { constructor(msg) { @@ -147,12 +146,7 @@ export class ErrorBoundary extends React.Component { } componentDidCatch(error, errorInfo) { - console.log('caught error in boundary', error, errorInfo, pwaRegistrationRef) - // check for a newer version of the app - if (pwaRegistrationRef.current) { - console.log('try service worker update') - pwaRegistrationRef.current.update() - } + console.log('caught error in boundary', error, errorInfo) if (this.context) { this.context.raiseError('There has been a Javascript error.') } diff --git a/gui/src/components/nav/Navigation.js b/gui/src/components/nav/Navigation.js index cc8a0f1bca1d9e4753b7aac8c44e8b65fe9fe215..4136d2f613227c515d56b62e78b670e8ad1fb7f8 100644 --- a/gui/src/components/nav/Navigation.js +++ b/gui/src/components/nav/Navigation.js @@ -19,43 +19,17 @@ import React, { useEffect, useMemo, useRef, useState } from 'react' import { makeStyles } from '@material-ui/core/styles' import { useLocation } from 'react-router-dom' -import { Snackbar, SnackbarContent, IconButton, Link as MuiLink, Button, Link } from '@material-ui/core' +import { Snackbar, SnackbarContent, IconButton, Link as MuiLink, Link } from '@material-ui/core' import UnderstoodIcon from '@material-ui/icons/Check' -import ReloadIcon from '@material-ui/icons/Replay' import { amber } from '@material-ui/core/colors' import AppBar, { appBarHeight } from './AppBar' import { guiBase, version } from '../../config' import { Routes } from './Routes' -import { usePWA } from '../PWA' import { ErrorBoundary } from '../errors' import { useCookies } from 'react-cookie' export const ScrollContext = React.createContext({scrollParentRef: null}) -function ReloadSnack() { - const {showReload, reloadPage} = usePWA() - - return <Snackbar - anchorOrigin={{ - vertical: 'bottom', - horizontal: 'left' - }} - open={showReload} - > - <SnackbarContent - message={<span>There is a new NOMAD version. Please reload the app.</span>} - action={[ - <Button - key={0} color="inherit" startIcon={<ReloadIcon/>} - onClick={() => reloadPage()} - > - reload - </Button> - ]} - /> - </Snackbar> -} - const useTermsSnackStyles = makeStyles(theme => ({ termsLink: { color: theme.palette.primary.light @@ -178,7 +152,6 @@ export default function Navigation() { return ( <div className={classes.root}> <div className={classes.appFrame}> - <ReloadSnack/> <ErrorBoundary> <BetaSnack /> <TermsSnack /> diff --git a/gui/src/components/nav/Routes.js b/gui/src/components/nav/Routes.js index e5f86135ddf86e50244629796c5754ae64507ee9..569a3a9d7fea46fc295a7552bd21272b80437b9c 100644 --- a/gui/src/components/nav/Routes.js +++ b/gui/src/components/nav/Routes.js @@ -192,12 +192,13 @@ const searchRoutes = Object.values(ui?.apps?.options || {}) cache: 'always', menu: context.label, tooltip: context.description, - breadcrumb: context.breadcrumb, + breadcrumb: context.breadcrumb || context.label, category: context.category, render: (props) => ( <SearchContext {...props} resource={context.resource} + initialSchemas={context?.schemas} initialPagination={context.pagination} initialColumns={context.columns} initialRows={context.rows} @@ -210,8 +211,8 @@ const searchRoutes = Object.values(ui?.apps?.options || {}) </SearchContext> ), help: { - title: context.help?.title, - content: context.help?.content + title: 'About this page', + content: context.readme || context.description }, routes: routeMap[context.resource] } diff --git a/gui/src/components/plotting/Plot.js b/gui/src/components/plotting/Plot.js index 9a0a096c6517e6ba9484dbc81a9f5b7861a8907d..176265bdc5d93cb49e4e99241b64f7e361f4f254 100644 --- a/gui/src/components/plotting/Plot.js +++ b/gui/src/components/plotting/Plot.js @@ -210,13 +210,14 @@ const Plot = React.memo(forwardRef(({ margin: { l: theme.spacing(4), r: theme.spacing(1.5), - t: theme.spacing(1), + t: theme.spacing(layout?.title?.text ? 5 : 1), b: theme.spacing(6) }, title: { font: { family: theme.typography.fontFamily - } + }, + yanchor: 'middle' }, legend: { bgcolor: 'rgba(255, 255, 255, 0.9)', diff --git a/gui/src/components/plotting/PlotHistogram.js b/gui/src/components/plotting/PlotHistogram.js index 899276720612d82121d4011bd23d701516a6bc89..97822c37c715d6e56073c47943ad360548897751 100644 --- a/gui/src/components/plotting/PlotHistogram.js +++ b/gui/src/components/plotting/PlotHistogram.js @@ -113,11 +113,28 @@ const PlotHistogram = React.memo(({ onRangeChange, onRangeCommit, onClick, + minXInclusive, + maxXInclusive, className, classes, 'data-testid': testID }) => { const styles = useStyles(classes) + const useDynamicStyles = makeStyles((theme) => { + const color = highlight ? theme.palette.secondary.main : theme.palette.primary.main + return { + thumb: { + 'border': `2px solid ${color}`, + '&[data-index="0"]': { + backgroundColor: minXInclusive ? color : 'white' + }, + '&[data-index="1"]': { + backgroundColor: maxXInclusive ? color : 'white' + } + } + } + }) + const dynamicStyles = useDynamicStyles() const scaler = useMemo(() => getScaler(scale), [scale]) const aggIndicator = useRecoilValue(guiState('aggIndicator')) const oldRangeRef = useRef() @@ -330,7 +347,7 @@ const PlotHistogram = React.memo(({ onChange={handleRangeChange} onChangeCommitted={handleRangeCommit} valueLabelDisplay="off" - classes={{thumb: styles.thumb}} + classes={{thumb: styles.thumb && dynamicStyles.thumb}} className={styles.slider} /> } @@ -374,6 +391,10 @@ PlotHistogram.propTypes = { disableSlider: PropTypes.bool, /* Function to call when a histogram bar has been clicked */ onClick: PropTypes.func, + /* Whether the min slider is inclusive (=min value is included) */ + minXInclusive: PropTypes.bool, + /* Whether the max slider is inclusive (=max value is included) */ + maxXInclusive: PropTypes.bool, onRangeChange: PropTypes.func, onRangeCommit: PropTypes.func, className: PropTypes.string, diff --git a/gui/src/components/plotting/PlotScatter.js b/gui/src/components/plotting/PlotScatter.js index 40550aa9a953233cc77aa579b66111d886077362..fa14120e56086fc0c2f8fe7d79b8837db4bb848c 100644 --- a/gui/src/components/plotting/PlotScatter.js +++ b/gui/src/components/plotting/PlotScatter.js @@ -18,7 +18,7 @@ import React, {useState, useEffect, useMemo, useCallback, forwardRef} from 'react' import PropTypes from 'prop-types' import { makeStyles, useTheme } from '@material-ui/core' -import { getDeep, hasWebGLSupport } from '../../utils' +import { getDeep, hasWebGLSupport, parseQuantityName } from '../../utils' import { useUnits, Quantity, Unit } from '../../units' import * as d3 from 'd3' import { isArray, isNil } from 'lodash' @@ -142,9 +142,9 @@ const PlotScatter = React.memo(forwardRef(( const values = data .map((d) => ({ - x: getDeep(d, x), - y: getDeep(d, y), - color: color && getDeep(d, color), + x: getDeep(d, parseQuantityName(x).path), + y: getDeep(d, parseQuantityName(y).path), + color: color && getDeep(d, parseQuantityName(color).path), entry_id: d.entry_id })) // We filter out points that don't have x, y values. Also for continuous diff --git a/gui/src/components/search/Filter.js b/gui/src/components/search/Filter.js index bc4e6cd945a9060dada07bf396cd4b42d09e7af1..81d3241f265bbec58ace36c3e5b55e68d5281057 100644 --- a/gui/src/components/search/Filter.js +++ b/gui/src/components/search/Filter.js @@ -22,7 +22,8 @@ import { getSerializer, getDeserializer, formatLabel, - DType + DType, + multiTypes } from '../../utils' import { Unit } from '../../units' @@ -53,7 +54,6 @@ export class Filter { repeats widget parent - schema description scale /** @@ -72,6 +72,8 @@ export class Filter { * - label: Short name displayed for this filter. If no value is given and the * name corresponds to a metainfo name the description is read directly * from the metainfo. + * - quantity: The quantity that this filter targets in the metainfo. + * - schema: The schema in which the filter quantity is defined in * - labelFull: Long name displayed for this filter. * - placeholder: Placeholder displayed for this filter in input fields. * - multiple: Whether the user can simultaneously provide multiple values for @@ -98,6 +100,7 @@ export class Filter { * histogram: {buckets: 20}, * min_max: {set: (config) => ({}), get: (agg) => ({})} * } + * - requestQuantity: Optional name to use for this quantity in the final API call. * - nested: Provided for sections, determines whether they are configured as * nested field types in ES. * - repeats: Provided for sections, determines whether they can be repeated. @@ -115,13 +118,13 @@ export class Filter { * user input. * - aggregatable: Indicates whether this filter can be used in term aggregations. * - widget: Object that determines the default widget for this filter. - * - label: Name of the filter shown in the GUI. If no value is given and the - * name corresponds to a metainfo name the description is read directly - * from the metainfo. * @param {Filter} parent Optional parent filter */ constructor(def, params, parent) { - const name = params.name + this.name = params?.name || def?.name + this.quantity = params?.quantity || def?.quantity + this.schema = params?.schema || def?.schema + function getRepeats(def) { if (!isEmpty(def?.shape)) return true if (!isNil(def?.repeats)) { @@ -136,10 +139,10 @@ export class Filter { this.description = params?.description || def?.description this.unit = params?.unit || def?.unit this.dimension = def?.unit && new Unit(def?.unit).dimension() - this.label = params?.label || formatLabel(def?.name || name) + this.label = params?.label || formatLabel(this.name) let parentName if (parent) { - const sections = name.split('.') + const sections = this.quantity.split('.') const nSections = sections.length if (sections.length > 1) { parentName = formatLabel(sections[nSections - 2]) @@ -148,16 +151,19 @@ export class Filter { this.labelFull = parentName ? `${parentName} ${this.label}` : this.label this.parent = parent - this.schema = def?.schema this.placeholder = params?.placeholder - this.multiple = params?.multiple === undefined ? true : params?.multiple + this.multiple = params?.multiple === undefined + ? multiTypes.has(this.dtype) + : params?.multiple this.exclusive = params?.exclusive === undefined ? true : params?.exclusive this.queryMode = params?.queryMode || (this.multiple ? 'any' : undefined) this.options = params?.options || getEnumOptions(def) this.default = params?.default + this.suggestion = !isNil(params?.suggestion) ? params.suggestion : (!isNil(def?.suggestion) ? def.suggestion : false) this.scale = params?.scale || 'linear' this.value = params?.value this.aggs = params?.aggs + this.requestQuantity = params?.requestQuantity this.nested = params?.nested === undefined ? false : params?.nested this.repeats = params?.repeats === undefined ? getRepeats(def) : params?.repeats this.global = params?.global === undefined ? false : params?.global @@ -165,15 +171,15 @@ export class Filter { this.customSerialization = !!params?.serializerExact this.serializerExact = params?.serializerExact || getSerializer(this.dtype, false) this.serializerPretty = params?.serializerPretty || getSerializer(this.dtype, true) - this.deserializer = params?.deserializer || getDeserializer(this.dtype, def?.dimension) + this.deserializer = params?.deserializer || getDeserializer(this.dtype, this.dimension) this.aggregatable = def?.aggregatable === undefined ? false : def?.aggregatable this.widget = params?.widget || getWidgetConfig(this.dtype, def?.aggregatable) if (this.default && !this.global) { - throw Error('Only filters that do not correspond to a metainfo value may have default values set.') + throw Error(`Error constructing filter for ${this.name}: only filters that do not correspond to a metainfo value may have default values set.`) } if (this.queryMode && !this.multiple) { - throw Error('Only filters that accept multiple values may have a query mode.') + throw Error(`Error constructing filter for ${this.name}: only filters that accept multiple values may have a query mode.`) } } } diff --git a/gui/src/components/search/FilterChip.js b/gui/src/components/search/FilterChip.js index 9673810976d146066fbb15b87aaa938c1d0c4ea4..2336d81e4c23d4969de2097479e4164110f132f4 100644 --- a/gui/src/components/search/FilterChip.js +++ b/gui/src/components/search/FilterChip.js @@ -39,7 +39,6 @@ const useStyles = makeStyles(theme => ({ } })) export const FilterChip = React.memo(({ - quantity, label, onDelete, color, @@ -62,7 +61,6 @@ export const FilterChip = React.memo(({ }) FilterChip.propTypes = { - quantity: PropTypes.string, label: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), onDelete: PropTypes.func, color: PropTypes.string, diff --git a/gui/src/components/search/FilterRegistry.js b/gui/src/components/search/FilterRegistry.js index 7f66dde28961d5de26c9ff0cbba8829b79d55afc..84a0734352262e5c9964fbaeab572781cf784b64 100644 --- a/gui/src/components/search/FilterRegistry.js +++ b/gui/src/components/search/FilterRegistry.js @@ -15,16 +15,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { setToArray, DType, getSuggestions } from '../../utils' -import { searchQuantities } from '../../config' + +import React, { useEffect, useState, useMemo } from 'react' +import PropTypes from 'prop-types' +import { useGlobalMetainfo, traverseDefinition } from '../archive/metainfo' +import { setToArray, DType, getSuggestions, getOptions, getDatatype, glob, parseQuantityName } from '../../utils' +import { searchQuantities, schemaSeparator, dtypeSeparator, yamlSchemaPrefix } from '../../config' import { Filter, getEnumOptions } from './Filter' import elementData from '../../elementData' +import { Typography, Box } from '@material-ui/core' +import { useErrors } from '../errors' // Containers for filter information -export const filterGroups = [] // Mapping from a group name -> set of filter names -export const filterAbbreviations = [] // Mapping of filter full name -> abbreviation -export const filterFullnames = [] // Mapping of filter abbreviation -> full name -export const filterData = {} // Stores data for each registered filter +export const defaultFilterGroups = {} // Mapping from a group name -> set of filter names +export const defaultFilterData = {} // Stores data for each registered filter // Ids for the filter menus: used to tie filter chips to a specific menu. const idElements = 'elements' @@ -39,10 +43,11 @@ const idPrecision = 'precision' const idProperties = 'properties' const idElectronic = 'electronic' const idSolarCell = 'solarcell' +const idCatalyst = 'heterogeneouscatalyst' const idVibrational = 'vibrational' const idMechanical = 'mechanical' -const idSpectroscopy = 'spectroscopy' -const idThermodynamic = 'thermodynamic' +const idSpectroscopic = 'spectroscopic' +const idMolecularDynamics = 'molecular_dynamics' const idGeometryOptimization = 'geometry_optimization' const idELN = 'eln' const idCustomQuantities = 'custom_quantities' @@ -50,6 +55,20 @@ const idAuthor = 'author' const idMetadata = 'metadata' const idOptimade = 'optimade' +/** + * Associates the given quantity name with the given group name in the filter + * group data. + * + * @param {object} groups The groups to work on. + * @param {str} groupName + * @param {str} quantityName + */ +function addToGroup(groups, groupName, quantityName) { + groups[groupName] + ? groups[groupName].add(quantityName) + : groups[groupName] = new Set([quantityName]) +} + /** * This function is used to register a new filter within the SearchContext. * Filters are entities that can be searched through the filter panel and the @@ -73,15 +92,13 @@ const idOptimade = 'optimade' */ function saveFilter(name, group, config, parent) { if (group) { - filterGroups[group] - ? filterGroups[group].add(name) - : filterGroups[group] = new Set([name]) + addToGroup(defaultFilterGroups, group, name) } const def = searchQuantities[name] - const newConf = {...(config || {})} - newConf.name = name - const data = filterData[name] || new Filter(def, newConf, parent) - filterData[name] = data + const {path: quantity, schema} = parseQuantityName(name) + const newConf = {...(config || {}), quantity, schema, name: config?.name || def?.name || name} + const data = defaultFilterData[name] || new Filter(def, newConf, parent) + defaultFilterData[name] = data return data } @@ -294,11 +311,11 @@ registerFilter('results.method.simulation.bse.gw_type', idBSE, {...termQuantity, registerFilter('results.method.simulation.projection.type', idProjection, {...termQuantity, scale: '1/2'}) registerFilter('results.method.simulation.projection.localization_type', idProjection, {...termQuantity, scale: '1/2'}) registerFilter('results.method.simulation.dmft.impurity_solver_type', idDMFT, {...termQuantity}) -registerFilter('results.method.simulation.dmft.total_filling', idDMFT, {...numberHistogramQuantity, scale: '1/2'}) registerFilter('results.method.simulation.dmft.magnetic_state', idDMFT, {...termQuantity}) registerFilter('results.method.simulation.dmft.inverse_temperature', idDMFT, {...numberHistogramQuantity, scale: '1/2'}) registerFilter('results.method.simulation.dmft.u', idDMFT, {...numberHistogramQuantity, scale: '1/2'}) -registerFilter('results.method.simulation.dmft.hunds_hubbard_ratio', idDMFT, {...numberHistogramQuantity, label: `JH / U`, scale: '1/2'}) +registerFilter('results.method.simulation.dmft.jh', idDMFT, {...numberHistogramQuantity, label: `JH`, scale: '1/2'}) +registerFilter('results.method.simulation.dmft.analytical_continuation', idDMFT, {...termQuantity}) registerFilter('results.method.simulation.precision.k_line_density', idPrecision, {...termQuantity, label: 'k-line Density'}) registerFilter('results.eln.sections', idELN, termQuantity) registerFilter('results.eln.tags', idELN, termQuantity) @@ -318,6 +335,9 @@ registerFilter('entry_id', idMetadata, termQuantity) registerFilter('entry_name', idMetadata, termQuantity) registerFilter('mainfile', idMetadata, termQuantity) registerFilter('upload_id', idMetadata, termQuantity) +registerFilter('upload_name', idMetadata, termQuantity) +registerFilter('published', idMetadata, termQuantity) +registerFilter('main_author.user_id', idMetadata, termQuantity) registerFilter('quantities', idMetadata, {...noAggQuantity, label: 'Metainfo definition', queryMode: 'all'}) registerFilter('sections', idMetadata, {...noAggQuantity, label: 'Metainfo sections', queryMode: 'all'}) registerFilter('section_defs.definition_qualified_name', idMetadata, {...noAggQuantity, label: 'Section defs qualified name', queryMode: 'all'}) @@ -353,8 +373,8 @@ registerFilter('custom_quantities', idCustomQuantities, { } }) registerFilter( - 'results.properties.spectroscopy.eels', - idSpectroscopy, + 'results.properties.spectroscopic.spectra.provenance.eels', + idSpectroscopic, {...nestedQuantity, label: 'Electron Energy Loss Spectrum (EELS)'}, [ {name: 'detector_type', ...termQuantity}, @@ -374,7 +394,7 @@ registerFilter( registerFilter( 'results.properties.electronic.dos_electronic', idElectronic, - {...nestedQuantity, label: 'Density of States (DOS)'}, + {...nestedQuantity, label: 'Density of States'}, [ {name: 'spin_polarized', label: 'Spin-polarized', ...termQuantityBool} ] @@ -409,6 +429,63 @@ registerFilter( {name: 'back_contact', ...termQuantityAllNonExclusive} ] ) +registerFilter( + 'results.properties.catalytic.catalyst_characterization', + idCatalyst, + nestedQuantity, + [ + {name: 'surface_area', ...numberHistogramQuantity, scale: '1/4'}, + {name: 'method_surface_area', ...termQuantity} + ] +) +registerFilter( + 'results.properties.catalytic.catalyst_synthesis', + idCatalyst, + nestedQuantity, + [ + {name: 'catalyst_type', ...termQuantity}, + {name: 'preparation_method', ...termQuantityAllNonExclusive} + ] +) +registerFilter( + 'results.properties.catalytic.reactivity', + idCatalyst, + nestedQuantity, + [ + {name: 'reaction_name', ...termQuantity}, + {name: 'reaction_class', ...termQuantity}, + {name: 'test_temperatures', ...numberHistogramQuantity, scale: '1/4'}, + {name: 'pressure', ...numberHistogramQuantity, scale: 'linear'}, + {name: 'gas_hourly_space_velocity', ...numberHistogramQuantity, scale: '1/4'} + ] +) +registerFilter( + 'results.properties.catalytic.reactivity.products', + idCatalyst, + nestedQuantity, + [ + {name: 'name', ...termQuantityAllNonExclusive}, + {name: 'selectivity', ...numberHistogramQuantity, scale: '1/4'} + ] +) +registerFilter( + 'results.properties.catalytic.reactivity.reactants', + idCatalyst, + nestedQuantity, + [ + {name: 'name', ...termQuantityAllNonExclusive}, + {name: 'gas_concentration_in', ...numberHistogramQuantity, scale: 'linear'}, + {name: 'conversion', ...numberHistogramQuantity, scale: 'linear'} + ] +) +registerFilter( + 'results.properties.catalytic.reactivity.rates', + idCatalyst, + nestedQuantity, + [ + {name: 'reaction_rate', ...numberHistogramQuantity, scale: 'linear'} + ] +) registerFilter( 'results.properties.mechanical.bulk_modulus', idMechanical, @@ -452,7 +529,7 @@ registerFilter( ) registerFilter( 'results.properties.thermodynamic.trajectory', - idThermodynamic, + idMolecularDynamics, nestedQuantity, [ {name: 'available_properties', ...termQuantityAll}, @@ -569,7 +646,7 @@ registerFilterOptions( // Spectroscopic properties: subset of results.properties.available_properties registerFilterOptions( 'spectroscopic_properties', - idSpectroscopy, + idSpectroscopic, 'results.properties.available_properties', 'Spectroscopic Properties', 'The spectroscopic properties that are present in an entry.', @@ -581,7 +658,7 @@ registerFilterOptions( // Thermodynamical properties: subset of results.properties.available_properties registerFilterOptions( 'thermodynamic_properties', - idThermodynamic, + idMolecularDynamics, 'results.properties.available_properties', 'Thermodynamic Properties', 'The thermodynamic properties that are present.', @@ -590,50 +667,12 @@ registerFilterOptions( } ) -// The filter abbreviation mapping has to be done only after all filters have -// been registered. -const abbreviations = {} -const nameAbbreviationPairs = [...Object.keys(filterData)].map( - fullname => [fullname, fullname.split('.').pop()]) -for (const [fullname, abbreviation] of nameAbbreviationPairs) { - const old = abbreviations[abbreviation] - if (old === undefined) { - abbreviations[abbreviation] = 1 - } else { - abbreviations[abbreviation] += 1 - } - filterAbbreviations[fullname] = fullname - filterFullnames[fullname] = fullname -} -for (const [fullname, abbreviation] of nameAbbreviationPairs) { - if (abbreviations[abbreviation] === 1) { - filterAbbreviations[fullname] = abbreviation - filterFullnames[abbreviation] = fullname - } -} - -// Material and entry queries target slightly different fields. Here we prebuild -// the mapping. -export const materialNames = {} // Mapping of field name from entry -> material -export const entryNames = {} // Mapping of field name from material -> entry -for (const name of Object.keys(searchQuantities)) { - const prefix = 'results.material.' - let materialName - if (name.startsWith(prefix)) { - materialName = name.substring(prefix.length) - } else { - materialName = `entries.${name}` - } - materialNames[name] = materialName - entryNames[materialName] = name -} - /** * Creates static suggestion for all metainfo quantities that have an enum * value. Also provides suggestions for quantity names. */ export const quantityNameSearch = 'quantity name' -export function getStaticSuggestions(quantities) { +export function getStaticSuggestions(quantities, filterData) { const suggestions = {} const filters = quantities ? [...quantities] @@ -666,3 +705,104 @@ export function getStaticSuggestions(quantities) { } return suggestions } + +/** + * HOC that is used to preload search filters from all required schemas. This + * simplifies the rendering logic by first loading all schemas before rendering + * any components that rely on them. + */ +export const withFilters = (WrappedComponent) => { + const WithFilters = ({initialSchemas, initialFilters, ...rest}) => { + // Here we load the python schemas, and determine which YAML schemas to download + const [yamlSchemas, initialFilterData, initialFilterGroups] = useMemo(() => { + const yamlSchemas = getOptions(initialSchemas) + .filter((name) => name.startsWith(yamlSchemaPrefix)) + const pythonFilterData = {} + const mergedFilterGroups = {...defaultFilterGroups} + for (const [name, def] of Object.entries(searchQuantities)) { + if (def.dynamic && glob(def.schema, initialSchemas?.include, initialSchemas?.exclude)) { + const {path, schema} = parseQuantityName(name) + pythonFilterData[name] = new Filter(def, {name: path, quantity: path, schema}) + addToGroup(mergedFilterGroups, idCustomQuantities, name) + } + } + + return [ + yamlSchemas, + {...defaultFilterData, ...pythonFilterData}, + mergedFilterGroups + ] + }, [initialSchemas]) + const metainfo = useGlobalMetainfo() + const { raiseError } = useErrors() + const [loading, setLoading] = useState(yamlSchemas.length) + const [filters, setFilters] = useState({...initialFilters, options: initialFilterData}) + const [filterGroups, setFilterGroups] = useState(initialFilterGroups) + + // YAML schemas are loaded here asynchronously + useEffect(() => { + if (!yamlSchemas.length || !metainfo) return + async function fetchSchemas(options) { + const yamlFilters = {} + const yamlFilterGroups = {} + for (const schemaPath of options) { + let schemaDefinition + try { + schemaDefinition = await metainfo.resolveDefinition(schemaPath) + } catch (e) { + raiseError(`Unable to load the schema ${schemaPath} defined for this app. Please check that the path is correct and you have access to it.`) + throw e + } + traverseDefinition(schemaDefinition, 'data', (def, path) => { + if (def.m_def !== 'nomad.metainfo.metainfo.Quantity') return + let dtype = getDatatype(def) + dtype = { + [DType.Int]: 'int', + [DType.Float]: 'float', + [DType.Timestamp]: 'datetime', + [DType.String]: 'str', + [DType.Enum]: 'str', + [DType.Boolean]: 'bool' + }[dtype] + if (!dtype) { + throw Error(`Unable to load the data type for ${path}.`) + } + const filterPath = `${path}${schemaSeparator}${schemaPath}` + const apiPath = `${filterPath}${dtypeSeparator}${dtype}` + const {path: quantity, schema} = parseQuantityName(filterPath) + yamlFilters[filterPath] = new Filter(def, {name: path, schema, quantity, requestQuantity: apiPath}) + addToGroup(yamlFilterGroups, idCustomQuantities, filterPath) + }) + } + setFilters((old) => { + return {...old, options: {...old.options, ...yamlFilters}} + }) + setFilterGroups((old) => { + const newGroups = {...old} + for (const [groupName, names] of Object.entries(yamlFilterGroups)) { + for (const quantityName of [...names]) { + addToGroup(newGroups, groupName, quantityName) + } + } + return newGroups + }) + setLoading(false) + } + fetchSchemas(yamlSchemas) + }, [yamlSchemas, metainfo, raiseError]) + + return loading + ? <Box margin={1}> + <Typography>Loading the required schemas...</Typography> + </Box> + : <WrappedComponent {...rest} initialFilters={filters} initialFilterGroups={filterGroups}/> + } + + WithFilters.displayName = `withFilter(${WrappedComponent.displayName || WrappedComponent.name})` + WithFilters.propTypes = { + initialSchemas: PropTypes.object, // Determines which schemas are available + initialFilters: PropTypes.object // Determines which filters are available + } + + return WithFilters +} diff --git a/gui/src/components/search/FilterSummary.js b/gui/src/components/search/FilterSummary.js index 500dfee14edc4ed9e82687867e4659b51df94406..726e60b3eb0590109211e11873948998d6e03f82 100644 --- a/gui/src/components/search/FilterSummary.js +++ b/gui/src/components/search/FilterSummary.js @@ -22,13 +22,12 @@ import clsx from 'clsx' import { isNil, isPlainObject, isEmpty } from 'lodash' import { FilterChip, FilterChipGroup, FilterAnd, FilterOr } from './FilterChip' import { useSearchContext } from './SearchContext' -import { filterAbbreviations } from './FilterRegistry' import { useUnits } from '../../units' import { DType } from '../../utils' /** - * Displays a summary for the given subset of filters. Each filter value is - * displayed as a chip. + * Smart component that displays a set of FilterGroups and FilterChips for + * the given quantities. */ const typesWithLabel = new Set([DType.Boolean, DType.Int, DType.Float]) const useStyles = makeStyles(theme => { @@ -60,7 +59,7 @@ const FilterSummary = React.memo(({ className, classes }) => { - const { filterData, useFiltersState } = useSearchContext() + const { filterData, filterAbbreviations, useFiltersState } = useSearchContext() const [filters, setFilter] = useFiltersState(quantities) // TODO: locked filters are currently not shown to keep the layout tidier const filtersLocked = {} // useFiltersLockedState(quantities) @@ -76,8 +75,7 @@ const FilterSummary = React.memo(({ } // If query has multiple elements, we display a chip for each. For // numerical values we also display the quantity name. - const {metaType, serializerPretty, customSerialization} = filterData[name] - const serializer = serializerPretty + const {metaType, serializerPretty: serializer, customSerialization} = filterData[name] const isArray = filterValue instanceof Array const isSet = filterValue instanceof Set const isObj = isPlainObject(filterValue) @@ -92,7 +90,6 @@ const FilterSummary = React.memo(({ if (customSerialization) { const item = <FilterChip locked={locked} - quantity={name} label={serializer(filterValue)} onDelete={() => { onDelete(undefined) @@ -104,8 +101,7 @@ const FilterSummary = React.memo(({ const displayValue = serializer(value, units) const item = <FilterChip locked={locked} - quantity={name} - label={typesWithLabel.has(metaType) ? `${label} = ${displayValue}` : displayValue} + label={typesWithLabel.has(metaType) ? `${label}=${displayValue}` : displayValue} onDelete={() => { let newValue if (isSet) { @@ -137,7 +133,6 @@ const FilterSummary = React.memo(({ } const item = <FilterChip locked={locked} - quantity={name} label={content} onDelete={() => { onDelete(undefined) @@ -148,7 +143,6 @@ const FilterSummary = React.memo(({ } else { const item = <FilterChip locked={locked} - quantity={name} label={`${label}=${serializer(filterValue)}`} onDelete={() => { onDelete(undefined) diff --git a/gui/src/components/search/FilterSummary.spec.js b/gui/src/components/search/FilterSummary.spec.js new file mode 100644 index 0000000000000000000000000000000000000000..aabd335a26132ca0f9fcf0eddbc26ad75f839eaf --- /dev/null +++ b/gui/src/components/search/FilterSummary.spec.js @@ -0,0 +1,49 @@ +/* + * Copyright The NOMAD Authors. + * + * This file is part of NOMAD. See https://nomad-lab.eu for further info. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React from 'react' +import { ui } from '../../config' +import { render, screen } from '../conftest.spec' +import FilterSummary from './FilterSummary' +import { SearchContext } from './SearchContext' + +test.each([ + ['integer', 'results.material.n_elements', 12, 'Number Of Elements', 'n_elements=12'], + ['string', 'results.material.symmetry.crystal_system', 'cubic', 'Crystal System', 'crystal_system=cubic'], + ['float', 'results.method.simulation.precision.k_line_density', 12.3, 'K Line Density (Å)', 'k_line_density=12.3'], + ['datetime', 'upload_create_time', 0, 'Upload Create Time', 'upload_create_time=01/01/1970'], + ['boolean', 'results.properties.electronic.dos_electronic.spin_polarized', 'false', 'Spin-polarized', 'results.properties.electronic.dos_electronic.spin_polarized=true'] +])('%s', async (name, quantity, input, title, output) => { + const context = ui.apps.options.entries + render( + <SearchContext + resource={context.resource} + initialSchemas={context?.schemas} + initialPagination={context.pagination} + initialColumns={context.columns} + initialRows={context.rows} + initialFilterMenus={context.filter_menus} + initialFiltersLocked={context.filters_locked} + initialDashboard={context?.dashboard} + initialFilterValues={{[quantity]: input}} + > + <FilterSummary quantities={new Set([quantity])}/> + </SearchContext> + ) + expect(screen.getByText(title, {exact: false})).toBeInTheDocument() + expect(screen.getByText(output)).toBeInTheDocument() +}) diff --git a/gui/src/components/search/SearchBar.js b/gui/src/components/search/SearchBar.js index 6e510f17ce8384050d56f72e78276d52504d0672..8f9dc2b08f0b0b3373e36225199f4ef71648b1e6 100644 --- a/gui/src/components/search/SearchBar.js +++ b/gui/src/components/search/SearchBar.js @@ -28,15 +28,15 @@ import { TextField, CircularProgress, Paper, - Tooltip + Tooltip, + ListItemText } from '@material-ui/core' import IconButton from '@material-ui/core/IconButton' import { useUnits } from '../../units' -import { DType, getDatatype } from '../../utils' +import { DType, getSchemaAbbreviation } from '../../utils' import { useSuggestions } from '../../hooks' -import { useSearchContext, toGUIFilterSingle } from './SearchContext' -import { searchQuantities } from '../../config' -import { filterFullnames, quantityNameSearch } from './FilterRegistry' +import { useSearchContext } from './SearchContext' +import { quantityNameSearch } from './FilterRegistry' const opMap = { '<=': 'lte', @@ -98,8 +98,10 @@ const SearchBar = React.memo(({ const { filters, filterData, + filterFullnames, useSetFilters, - useFiltersLocked + useFiltersLocked, + useParseQuery } = useSearchContext() const [inputValue, setInputValue] = useState('') const [suggestionInput, setSuggestionInput] = useState('') @@ -108,6 +110,7 @@ const SearchBar = React.memo(({ const [error, setError] = useState(false) const filtersLocked = useFiltersLocked() const setFilter = useSetFilters() + const parseQuery = useParseQuery() const [quantitiesAll, quantitiesAllSet, quantitiesSuggestable] = useMemo(() => { let quantitySetSuggestable, quantityList @@ -124,7 +127,7 @@ const SearchBar = React.memo(({ quantitySetSuggestable = new Set( quantityList .map(q => q.name) - .filter(name => name === quantityNameSearch || searchQuantities[name]?.suggestion) + .filter(name => name === quantityNameSearch || filterData[name]?.suggestion) ) // Default quantities to use. Certain quantities are prioritized, others // come in alphabetical order. @@ -139,9 +142,7 @@ const SearchBar = React.memo(({ 'authors.name' ]) const filterList = [...filters] - filterList - .filter(q => !quantitySetSuggestable.has(q) && searchQuantities[q]?.suggestion) - .forEach(q => quantitySetSuggestable.add(q)) + filterList.forEach(q => quantitySetSuggestable.add(q)) quantityList = filterList.map((name) => ({name, size: 5})) // The list of available quantity names is provided at the very // bottom. @@ -156,7 +157,7 @@ const SearchBar = React.memo(({ const suggestionQuantities = useMemo(() => { return quantitiesAll.filter((q) => suggestionNames.has(q.name)) }, [quantitiesAll, suggestionNames]) - const [suggestions, loading] = useSuggestions(suggestionQuantities, quantitiesAllSet, suggestionInput) + const [suggestions, loading] = useSuggestions(suggestionQuantities, quantitiesAllSet, suggestionInput, filterData) // Used to check the validity of the given quantity name const checkMetainfo = useCallback((name) => { @@ -168,7 +169,7 @@ const SearchBar = React.memo(({ return [fullName, `Cannot target metainfo sections`] } return [fullName, undefined] - }, [quantitiesAllSet, filterData]) + }, [quantitiesAllSet, filterData, filterFullnames]) // Triggered when a value is submitted by pressing enter or clicking the // search icon. @@ -181,24 +182,36 @@ const SearchBar = React.memo(({ let valid = false let quantityFullname let queryValue + let comparison = true + + // Presence query + const presence = inputValue.match(new RegExp(`^\\s*(${reString})\\s*=\\s*\\*\\s*$`)) + if (presence) { + quantityFullname = `quantities` + queryValue = parseQuery(quantityFullname, presence[1], units) // are units still necessary? + valid = true + } // Equality query - const equals = inputValue.match(new RegExp(`^\\s*(${reString})\\s*=\\s*(${reString})\\s*$`)) - if (equals) { - const quantityName = equals[1] - const [fullName, error] = checkMetainfo(quantityName) - quantityFullname = fullName - if (error) { - setError(error) - return - } - try { - queryValue = toGUIFilterSingle(quantityFullname, equals[2], units) - } catch (error) { - setError(`Invalid value for this metainfo. Please check your syntax.`) - return + if (!valid) { + const equals = inputValue.match(new RegExp(`^\\s*(${reString})\\s*=\\s*(${reString})\\s*$`)) + if (equals) { + const quantityName = equals[1] + const [fullName, error] = checkMetainfo(quantityName) + quantityFullname = fullName + if (error) { + setError(error) + return + } + try { + queryValue = parseQuery(quantityFullname, equals[2], units) + } catch (error) { + setError(`Invalid value for this metainfo. Please check your syntax.`) + return + } + comparison = false + valid = true } - valid = true } // Simple LTE/GTE query @@ -220,14 +233,14 @@ const SearchBar = React.memo(({ } quantityFullname = aError ? bFullname : aFullname const value = aError ? a : b - const dtype = getDatatype(quantityFullname) + const dtype = filterData[quantityFullname].dtype if (!numericTypes.has(dtype)) { setError(`Cannot perform range query for a non-numeric quantity`) return } let quantityValue try { - quantityValue = toGUIFilterSingle(quantityFullname, value, units) + quantityValue = parseQuery(quantityFullname, value, units, undefined, false) } catch (error) { console.log(error) setError(`Invalid value for this metainfo. Please check your syntax.`) @@ -254,15 +267,15 @@ const SearchBar = React.memo(({ return } quantityFullname = fullName - const dtype = getDatatype(quantityFullname) - if (numericTypes.has(dtype)) { + const dtype = filterData[quantityFullname].dtype + if (!numericTypes.has(dtype)) { setError(`Cannot perform range query for a non-numeric quantity.`) return } queryValue = {} try { - queryValue[opMapReverse[op1]] = toGUIFilterSingle(quantityFullname, a, units) - queryValue[opMap[op2]] = toGUIFilterSingle(quantityFullname, c, units) + queryValue[opMapReverse[op1]] = parseQuery(quantityFullname, a, units, undefined, false) + queryValue[opMap[op2]] = parseQuery(quantityFullname, c, units, undefined, false) } catch (error) { setError(`Invalid value for this metainfo. Please check your syntax.`) return @@ -277,18 +290,20 @@ const SearchBar = React.memo(({ return } + // Submit to search context on successful validation. if (valid) { - // Submit to search context on successful validation. setFilter([quantityFullname, old => { const multiple = filterData[quantityFullname].multiple - return (isNil(old) || !multiple) ? queryValue : new Set([...old, ...queryValue]) + return (comparison || isNil(old) || !multiple) + ? queryValue + : new Set([...old, ...queryValue]) }]) setInputValue('') setOpen(false) } else { setError(`Invalid query`) } - }, [inputValue, checkMetainfo, units, setFilter, filterData, filtersLocked]) + }, [inputValue, checkMetainfo, units, setFilter, filterData, parseQuery, filtersLocked]) // Handle clear button const handleClose = useCallback(() => { @@ -353,7 +368,7 @@ const SearchBar = React.memo(({ } setSuggestionNames(quantitySet) setSuggestionInput(value) - }, [quantitiesSuggestable]) + }, [quantitiesSuggestable, filterFullnames]) return <Paper className={clsx(className, styles.root)}> <Autocomplete @@ -373,10 +388,21 @@ const SearchBar = React.memo(({ options={suggestions} onInputChange={handleInputChange} onHighlightChange={handleHighlight} - getOptionLabel={option => option.text} + getOptionLabel={(option) => option.text} // Notice that we need to override the default filterOptions as it is // performing unwanted filtering. filterOptions={(options) => options} + renderOption={(opt) => { + const option = filterData?.[opt.value] + const dtype = option?.dtype || option?.definition?.dtype + const schema = getSchemaAbbreviation(option?.schema || option?.definition?.schema) + const primary = option?.quantity || opt.value + const secondary = option && `${dtype} ${schema ? `| ${schema}` : ''}` + return <ListItemText + primary={primary} + secondary={secondary} + /> + }} renderInput={(params) => ( <TextField {...params} diff --git a/gui/src/components/search/SearchContext.js b/gui/src/components/search/SearchContext.js index 9b6355c4b8d74a47810909458248133919b2e43b..9eded3e5e24b118d47f6780b831c610745e781cc 100644 --- a/gui/src/components/search/SearchContext.js +++ b/gui/src/components/search/SearchContext.js @@ -29,46 +29,63 @@ import { } from 'recoil' import { debounce, + isBoolean, isEmpty, + isEqual, isArray, - isBoolean, isPlainObject, isNil, isSet, isFunction, size, - isEqual, cloneDeep } from 'lodash' -import { Link } from '@material-ui/core' import qs from 'qs' +import { Box, Link, makeStyles } from '@material-ui/core' import { v4 as uuidv4 } from 'uuid' import PropTypes from 'prop-types' import { useHistory } from 'react-router-dom' import { useApi } from '../api' import { - setToArray, authorList, entryName, entryType, formatTimestamp, getDeep, formatNumber, - getDatatype + setToArray, + parseQuantityName, + getOptions, + rsplit, + parseOperator } from '../../utils' import { Quantity, Unit } from '../../units' import { useErrors } from '../errors' import { combinePagination, addColumnDefaults } from '../datatable/Datatable' -import { Published } from '../entry/EntryDetails' +import UploadStatusIcon from '../uploads/UploadStatusIcon' import { getWidgetsObject } from './widgets/Widget' import { inputSectionContext } from './input/InputSection' -import { searchQuantities } from '../../config' -import { - filterData as filterDataGlobal, - filterAbbreviations, - filterFullnames, - materialNames -} from './FilterRegistry' +import { withFilters } from './FilterRegistry' + +const useWidthConstrainedStyles = makeStyles(theme => ({ + root: { + maxWidth: '500px', + textOverflow: 'ellipsis', + overflow: 'hidden' + } +})) + +function WidthConstrained(props) { + const styles = useWidthConstrainedStyles() + return <Box className={styles.root}> + {props.children} + </Box> +} +WidthConstrained.propTypes = { + children: PropTypes.node +} + +const debounceTime = 450 /** * React context that provides access to the search state implemented with @@ -89,25 +106,8 @@ import { * depending on the context would re-render for each filter change regardless if * it actually changes the state of that component or not. */ - -/** - * Used to turn empty containers into undefined which is used to indicate that a - * search filter has not been specified. - */ -function clearEmpty(value) { - function isEmpty(value) { - if (isPlainObject(value)) { - return Object.values(value).every(isEmpty) - } else if ((isSet(value) || isArray(value)) && size(value) === 0) { - return true - } - return false - } - return isEmpty(value) ? undefined : value -} - export const searchContext = React.createContext() -export const SearchContext = React.memo(({ +const SearchContextRaw = React.memo(({ resource, initialFiltersLocked, initialColumns, @@ -116,9 +116,11 @@ export const SearchContext = React.memo(({ initialPagination, initialDashboard, initialFilters, + initialFilterGroups, + initialFilterValues, children }) => { - const {api} = useApi() + const {api, user} = useApi() const {raiseError} = useErrors() const oldQuery = useRef(undefined) const oldPagination = useRef(undefined) @@ -133,6 +135,24 @@ export const SearchContext = React.memo(({ const indexFilters = useRef(0) const indexLocked = useRef(0) + // Initialize the set of filters that are available in this context + const {initialFilterPaths, initialFilterData, initialFilterAbbreviations} = useMemo(() => { + const filterPathsList = getOptions(initialFilters) + const initialFilterPaths = new Set(filterPathsList) + const initialFilterData = Object.fromEntries(filterPathsList.map( + (name) => { + if (!initialFilters.options[name]) { + const error = `Filter definition for ${name} not found.` + raiseError(error) + throw Error(error) + } + return [name, initialFilters.options[name]] + } + )) + const initialFilterAbbreviations = getAbbreviations(initialFilterData) + return {initialFilterPaths, initialFilterData, initialFilterAbbreviations} + }, [initialFilters, raiseError]) + // The final set of columns const columns = useMemo(() => { if (!initialColumns) return undefined @@ -152,7 +172,7 @@ export const SearchContext = React.memo(({ // Automatically determine the render function based on metainfo. options.forEach(option => { option.render = (data) => { - const value = getDeep(data, option.key) + const value = getDeep(data, parseQuantityName(option.key).path) if (isNil(value)) return value const transform = (value) => { @@ -160,11 +180,11 @@ export const SearchContext = React.memo(({ const unit = option.unit const format = option.format if (unit) { - const originalUnit = searchQuantities[key].unit + const originalUnit = initialFilterData[key]?.unit value = new Quantity(value, originalUnit).to(unit).value() } if (format) { - const dtype = getDatatype(key) + const dtype = initialFilterData[key]?.dtype value = formatNumber(value, dtype, format?.mode, format?.decimals) } return value @@ -175,14 +195,14 @@ export const SearchContext = React.memo(({ } }) - // Custom render and other setting overrides ared used for a subset of + // Custom render and other setting overrides are used for a subset of // columns. const overrides = { entry_name: { - render: entryName + render: (entry) => <WidthConstrained>{entryName(entry)}</WidthConstrained> }, entry_type: { - render: entryType + render: (entry) => <WidthConstrained>{entryType(entry)}</WidthConstrained> }, upload_create_time: { render: row => row?.upload_create_time @@ -220,7 +240,7 @@ export const SearchContext = React.memo(({ } }, published: { - render: (entry) => <Published entry={entry} /> + render: (entry) => <UploadStatusIcon data={entry} user={user} /> } } @@ -233,13 +253,13 @@ export const SearchContext = React.memo(({ } // Add defaults and custom overrides to the options - addColumnDefaults(options) + addColumnDefaults(options, undefined, initialFilterData) config.options = Object.fromEntries(options.map(option => { return [option.key, {...option, ...(overrides[option.key] || {})}] })) return config - }, [initialColumns]) + }, [initialFilterData, initialColumns, user]) // The final row configuration const rows = useMemo(() => { @@ -258,25 +278,11 @@ export const SearchContext = React.memo(({ : undefined }, [initialDashboard]) - // Initialize the set of available filters. This may depend on the resource. - const [filtersLocal, filterDataLocal] = useMemo(() => { - const include = initialFilters?.include || [...Object.keys(filterDataGlobal)] - const exclude = initialFilters?.exclude || [] - const filters = include.filter((key) => !exclude?.includes(key)) - const filtersLocal = new Set(filters) - const filterDataLocal = Object.fromEntries(filters.map( - (name) => [name, filterDataGlobal[name]] - )) - return [filtersLocal, filterDataLocal] - }, [initialFilters]) - const filters = useState(filtersLocal)[0] - const filterData = useState(filterDataLocal)[0] - // Initialize the search context state: any parameters in the URL are read and // default values as specified in filter registry are loaded const [initialQuery, initialAggs, filterDefaults] = useMemo(() => { const filterDefaults = {} - for (const [key, value] of Object.entries(filterData)) { + for (const [key, value] of Object.entries(initialFilterData)) { if (!isNil(value.default)) { filterDefaults[key] = value.default } @@ -286,80 +292,156 @@ export const SearchContext = React.memo(({ let queryURL = {} if (split.length !== 1) { const qs = split.pop(); - [queryURL] = qsToSearch(qs) + [queryURL] = parseQueryString(qs, initialFilterData, initialFilterAbbreviations.filterFullnames) } const initialAggs = {} - for (const key of filters) { + for (const key of initialFilterPaths) { initialAggs[key] = { default: {update: false} } } return [ - queryURL, + {...(initialFilterValues || {}), ...queryURL}, initialAggs, filterDefaults ] - }, [filterData, filters]) + }, [initialFilterData, initialFilterPaths, initialFilterAbbreviations, initialFilterValues]) - // Initialize a bunch of Recoil.js states and hooks. Notice how we are not using a set - // of global states, but instead each SearchContext gets it's own states. This - // way the contexts stay separated and several of them can be active at once. - const [ - useFilterLocked, - useFiltersLocked, - useFiltersLockedState, - useFilterValue, - useSetFilter, - useFilterState, - useFiltersState, - useResetFilters, - useUpdateQueryString, - queryState, - aggsFamily, - aggsState, - paginationState, - requiredState, - resultsUsedState, - resultsState, - apiDataState, - aggsResponseState, - isMenuOpenState, - isCollapsedState, - isStatisticsEnabledState, - useWidgetValue, - useSetWidget, - useWidgetState, - useWidgetsValue, - useWidgetsState, - useAddWidget, - useRemoveWidget, - useResetWidgets, - useResults, - useApiData, - useAgg, - useSetFilters - ] = useMemo(() => { + // Atoms + setters and getters are used instead of regular React states to + // avoid re-rendering components that are not depending on these values. The + // Recoil mechanisms are abstracted under hooks in order to make it easier to + // replace Recoil with some other state management library in the future. + const { + useFilterLocked, + useFiltersLocked, + useFiltersLockedState, + useFilterValue, + useSetFilter, + useFilterState, + useFiltersState, + useFilterNames, + useFiltersData, + useFilterMaps, + useResetFilters, + useUpdateQueryString, + useDynamicQueryModes, + aggsFamily, + useWidgetValue, + useSetWidget, + useWidgetState, + useWidgetsValue, + useWidgetsState, + useAddWidget, + useRemoveWidget, + useResetWidgets, + useQuery, + usePagination, + usePaginationState, + useAgg, + useAggs, + useSetAggsResponse, + useSetFilters, + useIsMenuOpen, + useSetIsMenuOpen, + useIsCollapsed, + useSetIsCollapsed, + useIsStatisticsEnabled, + useSetIsStatisticsEnabled, + useApiQuery, + useSetApiQuery, + useApiData, + useSetApiData, + useResults, + useSetResults, + useResultsUsed, + useRequired + } = useMemo(() => { + const isMenuOpenState = atom({ + key: `isMenuOpen_${contextID}`, + default: false + }) + const isCollapsedState = atom({ + key: `isCollapsed_${contextID}`, + default: false + }) + const isStatisticsEnabledState = atom({ + key: `statisticsEnabled_${contextID}`, + default: true + }) + const apiDataState = atom({ + key: `apiData_${contextID}`, + default: null + }) + const apiQueryState = atom({ + key: `apiQuery_${contextID}`, + default: null + }) + const resultsState = atom({ + key: `results_${contextID}`, + default: { + pagination: {} + } + }) + const resultsUsedState = atom({ + key: `resultsUsed_${contextID}`, + default: false + }) + const requiredState = atom({ + key: `required_${contextID}`, + default: { + exclude: resource === 'entries' ? ['quantities', 'sections', 'files'] : undefined + } + }) + // Stores the available filters. Initialized with static filters, can be + // modified later. + const filtersDataState = atom({ + key: `filtersData_${contextID}`, + default: initialFilterData + }) + const filterNamesState = selector({ + key: `filters${contextID}`, + get: ({get}) => new Set(Object.keys(get(filtersDataState))) + }) const queryFamily = atomFamily({ key: `queryFamily_${contextID}`, default: (name) => initialQuery[name] }) + const dynamicQueryModesFamily = atomFamily({ + key: `dynamicQueryModesFamily_${contextID}`, + default: (name) => undefined + }) // Used to get/set the state of all filters at once const filtersState = selector({ key: `filtersState_${contextID}`, get: ({get}) => { const query = {} - for (const key of filters) { + for (const key of get(filterNamesState)) { const filter = get(queryFamily(key)) query[key] = filter } return query }, - set: ({set}, [key, value]) => { + set: ({set}, [key, value, queryMode]) => { set(queryFamily(key), value) + if (queryMode) set(dynamicQueryModesFamily(key), queryMode) } }) - const guiLocked = toGUIFilter(initialFiltersLocked) + // Stores a mapping between filter abbreviations and their full names. + const filterMapsState = selector({ + key: `filterAbbreviations_${contextID}`, + get: ({get}) => { + const filterData = get(filtersDataState) + return getAbbreviations(filterData) + } + }) + + const paginationState = atom({ + key: `pagination_${contextID}`, + default: initialPagination + }) + + const guiLocked = parseQueries(initialFiltersLocked, initialFilterData, initialFilterAbbreviations.filterFullnames) const lockedFamily = atomFamily({ key: `lockedFamily_${contextID}`, default: (name) => guiLocked?.[name] @@ -370,7 +452,7 @@ export const SearchContext = React.memo(({ key: `lockedState_${contextID}`, get: ({get}) => { const locks = {} - for (const key of filters) { + for (const key of get(filterNamesState)) { const filter = get(lockedFamily(key)) if (!isNil(filter)) locks[key] = filter } @@ -386,7 +468,7 @@ export const SearchContext = React.memo(({ key: `query_${contextID}`, get: ({get}) => { const query = {} - for (const key of filters) { + for (const key of get(filterNamesState)) { const filter = get(queryFamily(key)) if (filter !== undefined) { query[key] = filter @@ -394,8 +476,8 @@ export const SearchContext = React.memo(({ } return query }, - set: ({ set }, data) => { - for (const filter of filters) { + set: ({ set, get }, data) => { + for (const filter of get(filterNamesState)) { set(queryFamily(filter), undefined) } if (data) { @@ -406,35 +488,36 @@ export const SearchContext = React.memo(({ } }) - const isStatisticsEnabledState = atom({ - key: `statisticsEnabled_${contextID}`, - default: true - }) - const isMenuOpenState = atom({ - key: `isMenuOpen_${contextID}`, - default: false - }) - const isCollapsedState = atom({ - key: `isCollapsed_${contextID}`, - default: false - }) - - const paginationState = atom({ - key: `pagination_${contextID}`, - default: initialPagination - }) - - const requiredState = atom({ - key: `required_${contextID}`, - default: { - exclude: resource === 'entries' ? ['quantities', 'sections', 'files'] : undefined + /** + * A Recoil.js selector that return the dynamic query modes state + */ + const dynamicQueryModesState = selector({ + key: `dynamicQueryModes_${contextID}`, + get: ({get}) => { + const query = {} + for (const key of get(filterNamesState)) { + const filter = get(dynamicQueryModesFamily(key)) + if (filter !== undefined) { + query[key] = filter + } + } + return query + }, + set: ({ set, get }, data) => { + for (const filter of get(filterNamesState)) { + set(dynamicQueryModesFamily(filter), undefined) + } + if (data) { + for (const [key, value] of Object.entries(data)) { + set(dynamicQueryModesFamily(key), value) + } + } } }) - const resultsUsedState = atom({ - key: `resultsUsed_${contextID}`, - default: false - }) + function useDynamicQueryModes() { + return useRecoilValue(dynamicQueryModesState) + } const widgetFamily = atomFamily({ key: `widgetFamily_${contextID}`, @@ -470,6 +553,10 @@ export const SearchContext = React.memo(({ } }) + function useQuery(name) { + return useRecoilValue(queryState) + } + /** * This hook will expose a function for reading if widgets are shown * on the search page. Use this hook if you intend to only view the value and @@ -569,18 +656,6 @@ export const SearchContext = React.memo(({ return reset } - const resultsState = atom({ - key: `results_${contextID}`, - default: { - pagination: {} - } - }) - - const apiDataState = atom({ - key: `apiData_${contextID}`, - default: null - }) - const aggsFamilyRaw = atomFamily({ key: `aggsFamilyRaw_${contextID}`, default: (name) => initialAggs[name] @@ -657,6 +732,7 @@ export const SearchContext = React.memo(({ const subname = useMemo(() => section ? name.slice(section.length + 1) : undefined, [name, section]) const value = useRecoilValue(queryFamily(section || name)) + return section ? value?.[subname] : value @@ -676,9 +752,11 @@ export const SearchContext = React.memo(({ const section = sectionContext?.section const subname = useMemo(() => section ? name.slice(section.length + 1) : undefined, [name, section]) const setter = useSetRecoilState(queryFamily(section || name)) + const dynamicQueryModeSetter = useSetRecoilState(dynamicQueryModesFamily(section || name)) - const handleSet = useCallback((value) => { + const handleSet = useCallback((value, config = undefined) => { updatedFilters.current.add(name) + dynamicQueryModeSetter(config?.queryMode) section ? setter(old => { const newValue = isNil(old) ? {} : {...old} @@ -691,7 +769,7 @@ export const SearchContext = React.memo(({ : setter(isFunction(value) ? (old) => clearEmpty(value(old)) : clearEmpty(value)) - }, [section, subname, setter, name]) + }, [name, dynamicQueryModeSetter, section, setter, subname]) return handleSet } @@ -702,9 +780,9 @@ export const SearchContext = React.memo(({ * @param {string} name Name of the filter. * @returns Array containing the filter value and setter function for it. */ - const useFilterState = (name, section) => { - const value = useFilterValue(name, section) - const setter = useSetFilter(name, section) + const useFilterState = (name) => { + const value = useFilterValue(name) + const setter = useSetFilter(name) return useMemo(() => [value, setter], [value, setter]) } @@ -717,11 +795,13 @@ export const SearchContext = React.memo(({ const useUpdateQueryString = () => { const history = useHistory() const query = useRecoilValue(queryState) + const filtersData = useRecoilValue(filtersDataState) + const {filterAbbreviations} = useRecoilValue(filterMapsState) return useCallback(() => { - const queryString = searchToQs(query) + const queryString = convertQueryGUIToQS(query, filtersData, filterAbbreviations) history.replace(history.location.pathname + '?' + queryString) - }, [history, query]) + }, [history, query, filtersData, filterAbbreviations]) } /** @@ -730,9 +810,11 @@ export const SearchContext = React.memo(({ * @returns Function for resetting all filters. */ const useResetFilters = () => { + const filterNames = useRecoilValue(filterNamesState) const reset = useRecoilCallback(({set}) => () => { - for (const filter of filters) { + for (const filter of filterNames) { set(queryFamily(filter), undefined) + set(dynamicQueryModesFamily(filter), undefined) } }, []) return reset @@ -836,7 +918,7 @@ export const SearchContext = React.memo(({ * pagination and a function for changing the pagination. * * @returns {object} {data, pagination, setPagination} - */ + */ const useResults = () => { const setResultsUsed = useSetRecoilState(resultsUsedState) @@ -849,13 +931,6 @@ export const SearchContext = React.memo(({ return useRecoilValue(resultsState) } - /** - * Hook for returning an object containing the last used API call. - * - * @returns {object} {method, url, body, response} - */ - const useApiData = () => useRecoilValue(apiDataState) - /** * Hook for modifying an aggregation request and fetching the latest values for * this aggregation. @@ -876,20 +951,21 @@ export const SearchContext = React.memo(({ const key = useMemo(() => `${name}:${id}`, [name, id]) const setAgg = useSetRecoilState(aggsFamily(key)) const aggResponse = useRecoilValue(aggsResponseFamily(key)) + const filtersData = useRecoilValue(filtersDataState) // Whenever the aggregation requirements change, create the final // aggregation config and set it in the search context: this will then // trigger any required API calls that also return the aggregation // response that is returned by this hook. useEffect(() => { - const defaults = filterData[name]?.aggs?.[config?.type] + const defaults = filtersData[name]?.aggs?.[config?.type] const finalConfig = { update: update, ...defaults || {}, ...config } setAgg(finalConfig) - }, [name, update, setAgg, config]) + }, [name, update, setAgg, config, filtersData]) return aggResponse } @@ -904,7 +980,7 @@ export const SearchContext = React.memo(({ return useSetRecoilState(filtersState) } - return [ + return { useFilterLocked, useFiltersLocked, useFiltersLockedState, @@ -914,18 +990,8 @@ export const SearchContext = React.memo(({ useFiltersState, useResetFilters, useUpdateQueryString, - queryState, + useDynamicQueryModes, aggsFamily, - aggsState, - paginationState, - requiredState, - resultsUsedState, - resultsState, - apiDataState, - aggsResponseState, - isMenuOpenState, - isCollapsedState, - isStatisticsEnabledState, useWidgetValue, useSetWidget, useWidgetState, @@ -934,22 +1000,59 @@ export const SearchContext = React.memo(({ useAddWidget, useRemoveWidget, useResetWidgets, - useResults, - useApiData, useAgg, - useSetFilters - ] - }, [contextID, initialQuery, filters, initialFiltersLocked, dashboard, initialAggs, initialPagination, filterData, resource]) + useSetFilters, + useQuery, + useFilterNames: () => useRecoilValue(filterNamesState), + useFiltersData: () => useRecoilValue(filtersDataState), + useFilterMaps: () => useRecoilValue(filterMapsState), + useSetFiltersData: () => useSetRecoilState(filtersDataState), + useAggs: () => useRecoilValue(aggsState), + useSetAggsResponse: () => useSetRecoilState(aggsResponseState), + usePagination: () => useRecoilValue(paginationState), + usePaginationState: () => useRecoilState(paginationState), + useIsMenuOpen: () => useRecoilValue(isMenuOpenState), + useSetIsMenuOpen: () => useSetRecoilState(isMenuOpenState), + useIsCollapsed: () => useRecoilValue(isCollapsedState), + useSetIsCollapsed: () => useSetRecoilState(isCollapsedState), + useIsStatisticsEnabled: () => useRecoilValue(isStatisticsEnabledState), + useSetIsStatisticsEnabled: () => useSetRecoilState(isStatisticsEnabledState), + useApiQuery: () => useRecoilValue(apiQueryState), + useSetApiQuery: () => useSetRecoilState(apiQueryState), + useApiData: () => useRecoilValue(apiDataState), + useSetApiData: () => useSetRecoilState(apiDataState), + useResults, + useSetResults: () => useSetRecoilState(resultsState), + useResultsUsed: () => useRecoilValue(resultsUsedState), + useSetResultsUsed: () => useSetRecoilState(resultsUsedState), + useRequired: () => useRecoilValue(requiredState) + } + }, [ + resource, + contextID, + initialQuery, + initialFilterData, + initialFilterAbbreviations, + initialFiltersLocked, + initialPagination, + dashboard, + initialAggs + ]) - const setResults = useSetRecoilState(resultsState) - const setApiData = useSetRecoilState(apiDataState) - const updateAggsResponse = useSetRecoilState(aggsResponseState) - const aggs = useRecoilValue(aggsState) - const query = useRecoilValue(queryState) + const setResults = useSetResults() + const setApiData = useSetApiData() + const setApiQuery = useSetApiQuery() + const filters = useFilterNames() + const filtersData = useFiltersData() + const { filterAbbreviations, filterFullnames } = useFilterMaps() + const [pagination, setPagination] = usePaginationState() + const updateAggsResponse = useSetAggsResponse() + const aggs = useAggs() + const query = useQuery() + const dynamicQueryModes = useDynamicQueryModes() const filtersLocked = useFiltersLocked() - const [pagination, setPagination] = useRecoilState(paginationState) - const required = useRecoilValue(requiredState) - const resultsUsed = useRecoilValue(resultsUsedState) + const required = useRequired() + const resultsUsed = useResultsUsed() const updateQueryString = useUpdateQueryString() /** @@ -971,7 +1074,7 @@ export const SearchContext = React.memo(({ // Update the aggregations if new aggregation data is received. The old // aggregation data is preserved and new information is updated. if (!isEmpty(data.aggregations)) { - const newAggs = toGUIAgg(data.aggregations, aggsToUpdate, resource) + const newAggs = convertAggAPIToGUI(data.aggregations, aggsToUpdate, resource, filtersData) callbackAgg && callbackAgg(newAggs, undefined, true) } else { callbackAgg && callbackAgg(undefined, undefined, false) @@ -995,7 +1098,7 @@ export const SearchContext = React.memo(({ if (nextResolve) { resolve(nextResolve) } - }, [setPagination]) + }, [setPagination, filtersData]) /** * Function that preprocesses API call requests and finally performs the @@ -1035,8 +1138,8 @@ export const SearchContext = React.memo(({ // The locked filters are applied as a parallel AND query. This is the only // way to consistently apply them. If we mix them inside 'regular' filters, // they can be accidentally overwritten with an OR statement. - const customQuery = toAPIFilter(apiQuery, resource) - const lockedQuery = toAPIFilter(filtersLocked, resource) + const customQuery = convertQueryGUIToAPI(apiQuery, resource, filtersData, dynamicQueryModes) + const lockedQuery = convertQueryGUIToAPI(filtersLocked, resource, filtersData, dynamicQueryModes) let finalQuery = customQuery if (!isEmpty(lockedQuery)) { @@ -1055,12 +1158,13 @@ export const SearchContext = React.memo(({ const search = { owner: filtersLocked?.visibility || apiQuery.visibility, query: finalQuery, - aggregations: toAPIAgg( + aggregations: convertAggGUIToAPI( aggs, - resource + resource, + filtersData ), - pagination: {...pagination}, - required: required + pagination: convertPaginationGUItoAPI(pagination, filtersData), + required: convertRequiredGUItoAPI(required, filtersData) } // When aggregations have changed but the query has not, we request only the @@ -1099,6 +1203,7 @@ export const SearchContext = React.memo(({ const timestamp = Date.now() apiQueue.current.push(timestamp) + setApiQuery(search?.query) api.query(resource, search, {loadingIndicator: true, returnRequest: true}) .then((response) => { return resolve({ @@ -1118,10 +1223,10 @@ export const SearchContext = React.memo(({ callbackAgg && callbackAgg(undefined, error, true) callbackHits && callbackHits(undefined, error, true, undefined) }) - }, [filterDefaults, filtersLocked, resource, api, raiseError, resolve]) + }, [filtersData, filterDefaults, filtersLocked, resource, api, raiseError, resolve, dynamicQueryModes, setApiQuery]) // This is a debounced version of apiCall. - const apiCallDebounced = useMemo(() => debounce(apiCall, 400), [apiCall]) + const apiCallDebounced = useMemo(() => debounce(apiCall, debounceTime), [apiCall]) /** * Intermediate function that should primarily be used when trying to perform @@ -1146,7 +1251,8 @@ export const SearchContext = React.memo(({ aggs, updatedAggsMap.current, queryChanged, - updatedFilters.current + updatedFilters.current, + filtersData ) // If results are needed and query and pagination have not changed and @@ -1164,7 +1270,7 @@ export const SearchContext = React.memo(({ callbackAgg && callbackAgg(undefined, undefined, false) callbackHits && callbackHits(undefined, undefined, false, undefined) } - }, [apiCall, apiCallDebounced]) + }, [apiCall, apiCallDebounced, filtersData]) // When query, aggregation or pagination changes, update the search context useEffect(() => { @@ -1204,11 +1310,11 @@ export const SearchContext = React.memo(({ const values = useMemo(() => { // Hook for refreshing the results. const useRefresh = () => { - const query = useRecoilValue(queryState) - const aggs = useRecoilValue(aggsState) - const pagination = useRecoilValue(paginationState) - const required = useRecoilValue(requiredState) - const resultsUsed = useRecoilValue(resultsUsedState) + const query = useQuery() + const aggs = useAggs() + const pagination = usePagination() + const required = useRequired() + const resultsUsed = useResultsUsed() const refresh = useCallback(() => { apiCallInterMediate( @@ -1242,10 +1348,10 @@ export const SearchContext = React.memo(({ // can track the state of individual calls and perform callbacks. const useAggCall = (name, id) => { const key = useMemo(() => `${name}:${id}`, [name, id]) - const query = useRecoilValue(queryState) - const pagination = useRecoilValue(paginationState) - const required = useRecoilValue(requiredState) - const resultsUsed = useRecoilValue(resultsUsedState) + const query = useQuery() + const pagination = usePagination() + const required = useRequired() + const resultsUsed = useResultsUsed() const setAgg = useSetRecoilState(aggsFamily(key)) /** @@ -1298,16 +1404,16 @@ export const SearchContext = React.memo(({ */ const useHits = (id = 'default', required, pagination, callback) => { const [results, setResults] = useState() - const query = useRecoilValue(queryState) - const apiCallDebounced = useMemo(() => debounce(apiCall, 400), []) + const query = useQuery() + const apiCallDebounced = useMemo(() => debounce(apiCall, debounceTime), []) // Update hits when query, includes, excludes or pagination change. useEffect(() => { apiCallDebounced( query, {}, - pagination, - required, + convertPaginationGUItoAPI(pagination, filtersData), + convertRequiredGUItoAPI(required, filtersData), true, true, true, @@ -1327,18 +1433,40 @@ export const SearchContext = React.memo(({ return results } + /** + * Hook that returns a function for parsing filter values into a form that + * is supported by the GUI. The parsing depends on the SearchContext as + * filters may define a custom deserialization function and only certain + * filters may be available. + * */ + const useParseQuery = () => { + const parse = useCallback( + (key, value, units, path, multiple) => parseQuery(key, value, filtersData, units, path, multiple), + [] + ) + return parse + } + return { resource, columns, rows, filterMenus, - useIsMenuOpen: () => useRecoilValue(isMenuOpenState), - useSetIsMenuOpen: () => useSetRecoilState(isMenuOpenState), - useIsCollapsed: () => useRecoilValue(isCollapsedState), - useSetIsCollapsed: () => useSetRecoilState(isCollapsedState), - useIsStatisticsEnabled: () => useRecoilValue(isStatisticsEnabledState), - useSetIsStatisticsEnabled: () => useSetRecoilState(isStatisticsEnabledState), - useQuery: () => useRecoilValue(queryState), + filters, + filterData: filtersData, + filterGroups: initialFilterGroups, + filterFullnames, + filterAbbreviations, + useIsMenuOpen, + useSetIsMenuOpen, + useIsCollapsed, + useSetIsCollapsed, + useIsStatisticsEnabled, + useSetIsStatisticsEnabled, + useApiData, + useApiQuery, + useQuery, + useParseQuery, useFilterValue, useSetFilter, useFilterState, @@ -1359,18 +1487,26 @@ export const SearchContext = React.memo(({ useUpdateQueryString, useResults, useHits, - useApiData, useAgg, useAggCall, - useSetFilters, - filters, - filterData + useSetFilters } }, [ resource, rows, columns, filterMenus, + filters, + filtersData, + initialFilterGroups, + filterFullnames, + filterAbbreviations, + useIsMenuOpen, + useSetIsMenuOpen, + useIsCollapsed, + useSetIsCollapsed, + useIsStatisticsEnabled, + useSetIsStatisticsEnabled, useFilterValue, useSetFilter, useFilterState, @@ -1388,23 +1524,19 @@ export const SearchContext = React.memo(({ useRemoveWidget, useResetWidgets, useUpdateQueryString, + usePagination, useResults, + useResultsUsed, + useRequired, + useApiQuery, useApiData, useAgg, + useAggs, + useQuery, useSetFilters, - filters, - filterData, - queryState, - aggsState, - paginationState, - requiredState, - resultsUsedState, apiCallInterMediate, apiCall, aggsFamily, - isMenuOpenState, - isCollapsedState, - isStatisticsEnabledState, updateAggsResponse, setPagination, setResults, @@ -1416,7 +1548,7 @@ export const SearchContext = React.memo(({ </searchContext.Provider> }) -SearchContext.propTypes = { +SearchContextRaw.propTypes = { resource: PropTypes.string, initialFiltersLocked: PropTypes.object, initialColumns: PropTypes.object, @@ -1425,9 +1557,13 @@ SearchContext.propTypes = { initialPagination: PropTypes.object, initialDashboard: PropTypes.object, initialFilters: PropTypes.object, // Determines which filters are available + initialFilterGroups: PropTypes.object, // Maps filter groups to a set of filter names + initialFilterValues: PropTypes.object, // Here one can provide default filter values children: PropTypes.node } +export const SearchContext = withFilters(SearchContextRaw) + /** * Hook for accessing the current SearchContext. */ @@ -1436,39 +1572,106 @@ export function useSearchContext() { } /** - * Converts a query string into a valid query object. + * Parses a single filter value into a form that is supported by the GUI. This includes: + * - Arrays are are transformed into Sets + * - If multiple values are supported, scalar values are stored inside sets. + * - Numerical values with units are transformed into Quantities. + * - Custom serialization defined for the filter will be used if defined. + * + * @param {string} key Name of the filter or an operator name. + * @param {any} value Value of the filter or operator + * @param {object} filtersData All of the filters that are available + * @param {object} units Unit system for unit conversion + * @param {string} path The full path for the filter without an operator name. + * + * @returns {any} The filter value in a format that is suitable for the GUI. + */ +function parseQuery(key, value, filtersData, units = undefined, path = undefined, multiple = undefined) { + let newValue + const fullPath = path ? `${path}.${key}` : key + if (isPlainObject(value)) { + newValue = {} + for (const [keyInner, valueInner] of Object.entries(value)) { + const valueConverted = parseQuery(keyInner, valueInner, filtersData, units, fullPath) + if (!isNil(valueConverted)) { + newValue[keyInner] = valueConverted + } + } + } else { + // If the key is an operator, the filter name is read from the path. + const opKeys = new Set(['lte', 'lt', 'gte', 'gt']) + const isOperator = opKeys.has(key) + const filterPath = isOperator ? path : fullPath + multiple = multiple ?? filtersData[filterPath].multiple + const deserializer = filtersData[filterPath].deserializer + if (isArray(value) || isSet(value)) { + newValue = new Set(value.map((v) => deserializer(v, units))) + } else { + newValue = deserializer(value, units) + if (!isOperator && multiple) { + newValue = new Set([newValue]) + } + } + } + return newValue +} + +/** + * Cleans an entire query object into a form that is supported by the GUI. This + * includes: + * - Arrays are are transformed into Sets + * - If multiple values are supported, scalar values are stored inside sets. + * - Numerical values with units are transformed into Quantities. + * + * @param {object} query Query object to transform. + * @param {object} filtersData All of the filters that are available + * @param {object} units The desired unit system used when reading quantities. + * + * @returns {any} The filter object in a format that is suitable for the GUI. + */ +function parseQueries(query, filtersData, filterFullnames, units = undefined) { + const newQuery = {} + if (query) { + for (const [key, value] of Object.entries(query)) { + const newKey = filterFullnames[key] || key + const valueGUI = parseQuery(newKey, value, filtersData, units) + newQuery[newKey] = valueGUI + } + } + return newQuery +} + +/** + * Parses a URL query string into a query object that can be used within + * search context. * * @param {string} queryString URL querystring, encoded or not. - * @returns Returns an object containing the filters. Values are converted into + * @param {object} filtersData All of the filters that are available + * @returns Returns an object containing the query. Values are converted into * datatypes that are directly compatible with the filter components. */ -function qsToSearch(queryString) { +function parseQueryString(queryString, filtersData, filterFullnames) { const queryObj = qs.parse(queryString, {comma: true}) - - // Deserialize query - const query = toGUIFilter(queryObj) + const query = parseQueries(queryObj, filtersData, filterFullnames) return [query] } /** - * Used to create an object that represents the current search context state in - * a serializable format. Can e.g. be used to build a query string. + * Converts a query object into a valid query string. * - * @param {object} search Object representing the currently active search - * context. - * - query: Object representing the active search filters. - * @returns {object} An object that can e.g. be serialized into a query string. + * @param {object} query Query object representing the currently active + * filters in a search context. + * @param {object} filtersData All of the filters that are available + * @returns URL querystring, not encoded to improve readability. */ -export function searchToQsData(search) { - const query = search.query - +function convertQueryGUIToQS(query, filtersData, filterAbbreviations) { // Used to recursively convert the query into a serializable format. function convert(key, value, path) { // If the key is an operator, the filter name is read from the path. const opKeys = new Set(['lte', 'lt', 'gte', 'gt']) const fullPath = path ? `${path}.${key}` : key const filterPath = opKeys.has(key) ? path : fullPath - const filterData = filterDataGlobal[filterPath] + const filterData = filtersData[filterPath] let newValue if (isPlainObject(value) && !filterData.customSerialization) { newValue = {} @@ -1500,24 +1703,12 @@ export function searchToQsData(search) { for (const [key, value] of Object.entries(query)) { const valueConverted = convert(key, value) if (!isNil(valueConverted)) { - const newKey = filterAbbreviations[key] || key - queryStringQuery[newKey] = valueConverted + queryStringQuery[key] = valueConverted } } } - return queryStringQuery -} - -/** - * Converts a query into a valid query string. - * @param {object} query Query object representing the currently active - * filters. - * @returns URL querystring, not encoded if possible to improve readability. - */ -function searchToQs(query, statistics) { - const queryData = searchToQsData({query, abbreviate: true}) - return qs.stringify(queryData, {indices: false, encode: false}) + return qs.stringify(queryStringQuery, {indices: false, encode: false}) } /** @@ -1529,19 +1720,22 @@ function searchToQs(query, statistics) { * * @param {number} query The query object. * @param {string} resource The resource we are looking at: entries or materials. + * @param {object} filtersData All of the filters that are available + * @param {object} queryModes Query modes for filters * * @returns {object} A copy of the object with certain items cleaned into a * format that is supported by the API. */ -export function toAPIFilter(query, resource) { +function convertQueryGUIToAPI(query, resource, filtersData, queryModes) { const queryCustomized = {} if (!query) { return undefined } - // Perform custom transformations + // Perform custom transformations. Note that these calls may add new keys to + // the query. function customize(key, value, parent, subKey = undefined) { - const data = filterDataGlobal[key] + const data = filtersData[key] // Global filters are not serialized into the API call. if (data?.global) return @@ -1575,12 +1769,15 @@ export function toAPIFilter(query, resource) { // Create the API-compatible keys and values. const queryNormalized = {} for (const [k, v] of Object.entries(queryCustomized)) { - const [newKey, newValue] = toAPIFilterSingle(k, v) - const splitted = newKey.split(':') - const filterName = splitted[0] - const queryMode = splitted.length > 1 ? splitted[1] : undefined - let finalKey = resource === 'materials' ? materialNames[filterName] : filterName - finalKey = queryMode ? `${finalKey}:${queryMode}` : finalKey + const newValue = convertQuerySingleGUIToAPI(v) + const {quantity: filterName, op: queryMode} = parseOperator(k) + let finalKey = filtersData[filterName]?.requestQuantity || filterName + finalKey = resource === 'materials' ? getFilterMaterialPath(finalKey) : finalKey + let finalQueryMode = queryMode || queryModes?.[k] + if (isNil(finalQueryMode) && isArray(newValue)) { + finalQueryMode = filtersData[k]?.queryMode + } + finalKey = finalQueryMode ? `${finalKey}:${finalQueryMode}` : finalKey queryNormalized[finalKey] = newValue } @@ -1593,8 +1790,7 @@ export function toAPIFilter(query, resource) { const entrySearch = [] for (const [k, v] of Object.entries(queryNormalized)) { if (k.startsWith('entries.')) { - const splitted = k.split(':') - const [newKey, queryMode] = splitted.length === 2 ? splitted : [splitted[0], undefined] + const {quantity: newKey, op: queryMode} = parseOperator(k) // When the queryMode is 'all', each value can come from a separate // entry. if (isArray(v) && queryMode === 'all') { @@ -1634,14 +1830,16 @@ export function toAPIFilter(query, resource) { * Cleans a single filter value into a form that is supported by the API. This includes: * - Sets are transformed into Arrays * - Quantities are converted to SI values. + * - Empty containers are set to undefined * * @param {string} key Filter name * @param {any} value Filter value - * @param {string} path The full path of the filter. + * @param {object} filtersData All of the filters that are available + * @param {string} queryMode Determines the queryMode * * @returns {any} The filter value in a format that is suitable for the API. */ -function toAPIFilterSingle(key, value, path = undefined) { +function convertQuerySingleGUIToAPI(value) { // Determine the API-compatible value. let newValue if (value instanceof Set) { @@ -1666,9 +1864,9 @@ function toAPIFilterSingle(key, value, path = undefined) { } else if (isPlainObject(value)) { newValue = {} for (const [keyInner, valueInner] of Object.entries(value)) { - const [apiKey, apiValue] = toAPIFilterSingle(keyInner, valueInner, key) + const apiValue = convertQuerySingleGUIToAPI(valueInner) if (!isNil(apiValue)) { - newValue[apiKey] = apiValue + newValue[keyInner] = apiValue } } if (isEmpty(newValue)) { @@ -1678,80 +1876,6 @@ function toAPIFilterSingle(key, value, path = undefined) { newValue = value } - // Determine the final API key. It depends on the particular queryMode. - let queryMode - if (isArray(newValue)) { - const fullPath = path ? `${path}.${key}` : key - queryMode = filterDataGlobal[fullPath]?.queryMode - } - const newKey = queryMode ? `${key}:${queryMode}` : key - - return [newKey, newValue] -} - -/** - * Cleans an entire query object into a form that is supported by the GUI. This - * includes: - * - Arrays are are transformed into Sets - * - If multiple values are supported, scalar values are stored inside sets. - * - Numerical values with units are transformed into Quantities. - * - * @param {object} query Query object to transform. - * @param {object} units The desired unit system used when reading quantities. - * - * @returns {any} The filter object in a format that is suitable for the GUI. - */ -export function toGUIFilter(query, units = undefined) { - const newQuery = {} - if (query) { - for (const [key, value] of Object.entries(query)) { - const newKey = filterFullnames[key] || key - const valueGUI = toGUIFilterSingle(newKey, value, units) - newQuery[newKey] = valueGUI - } - } - return newQuery -} - -/** - * Cleans a single filter value into a form that is supported by the GUI. This includes: - * - Arrays are are transformed into Sets - * - If multiple values are supported, scalar values are stored inside sets. - * - Numerical values with units are transformed into Quantities. - * - * @param {string} key Name of the filter or an operator name. - * @param {any} value Value of the filter or operator - * @param {object} units Unit system for unit conversion - * @param {string} path The full path for the filter without an operator name. - * - * @returns {any} The filter value in a format that is suitable for the GUI. - */ -export function toGUIFilterSingle(key, value, units = undefined, path = undefined) { - let newValue - const fullPath = path ? `${path}.${key}` : key - if (isPlainObject(value)) { - newValue = {} - for (const [keyInner, valueInner] of Object.entries(value)) { - const valueConverted = toGUIFilterSingle(keyInner, valueInner, units, fullPath) - if (!isNil(valueConverted)) { - newValue[keyInner] = valueConverted - } - } - } else { - // If the key is an operator, the filter name is read from the path. - const opKeys = new Set(['lte', 'lt', 'gte', 'gt']) - const filterPath = opKeys.has(key) ? path : fullPath - const multiple = filterDataGlobal[filterPath].multiple - const deserializer = filterDataGlobal[filterPath].deserializer - if (isArray(value) || isSet(value)) { - newValue = new Set(value.map((v) => deserializer(v, units))) - } else { - newValue = deserializer(value, units) - if (multiple) { - newValue = new Set([newValue]) - } - } - } return newValue } @@ -1763,26 +1887,31 @@ export function toGUIFilterSingle(key, value, units = undefined, path = undefine * @param {object} updatedFilters Set of filters that were updated together with * this call. * @param {string} resource The resource we are looking at: entries or materials. + * @param {object} filtersData All of the filters that are available * * @returns {object} Aggregation query that is usable by the API. */ -function toAPIAgg(aggs, resource) { +function convertAggGUIToAPI(aggs, resource, filtersData) { const apiAggs = {} for (const [key, agg] of Object.entries(aggs)) { - const filterName = key.split(':')[0] + const filterName = rsplit(key, ':', 1)[0] if (agg.update) { - const exclusive = filterDataGlobal[filterName].exclusive + const exclusive = filtersData[filterName].exclusive const type = agg.type const apiAgg = apiAggs[key] || {} const aggSet = agg.set const finalAgg = aggSet ? aggSet(agg) : agg - const quantity = finalAgg.quantity || filterName + let finalQuantity = finalAgg.quantity || filterName + + // If the targeted quantity has a special requestQuantity, it is used in + // the final API call. + finalQuantity = filtersData[finalQuantity]?.requestQuantity || finalQuantity // The targeted quantity is decided based on the resource as materials // search need to target slightly different fields. - const finalQuantity = resource === 'materials' - ? materialNames[quantity] - : quantity + finalQuantity = resource === 'materials' + ? getFilterMaterialPath(finalQuantity) + : finalQuantity apiAgg[type] = { // Exclusive quantities (quantities that have one value per entry) are @@ -1804,11 +1933,11 @@ function toAPIAgg(aggs, resource) { * @param {object} aggs The aggregation data as returned by the API. * @param {array} aggsToUpdate The set of targeted filters. Needed because the keys * in the aggs dictionary may be different due to custom aggregation set/get. - * @param {string} resource The resource we are looking at: entries or materials. + * @param {object} filtersData All of the filters that are available * * @returns {object} Aggregation result that is usable by the GUI. */ -function toGUIAgg(aggs, aggsToUpdate, resource) { +function convertAggAPIToGUI(aggs, aggsToUpdate, filtersData) { if (isEmpty(aggs)) { return {} } @@ -1816,11 +1945,11 @@ function toGUIAgg(aggs, aggsToUpdate, resource) { // Perform custom transformations const aggsCustomized = {} for (const key of aggsToUpdate) { - const filter_name = key.split(':')[0] + const filter_name = rsplit(key, ':', 1)[0] const aggConfig = aggs[key] if (!isNil(aggConfig)) { for (const [type, agg] of Object.entries(aggConfig)) { - const aggGet = filterDataGlobal[filter_name]?.aggs?.[type]?.get + const aggGet = filtersData[filter_name]?.aggs?.[type]?.get const aggFinal = aggGet ? aggGet(agg) : agg // Add flag for if all terms have been returned, and the total number of // items. TODO: Could this total be given by the API directly? @@ -1835,6 +1964,41 @@ function toGUIAgg(aggs, aggsToUpdate, resource) { return aggsCustomized } +/** + * Used to transform a GUI pagination call result into a form that is usable by the + * API. + * + * @param {object} pagination The aggregation data as returned by the API. + * @param {object} filtersData All of the filters that are available + * + * @returns {object} Pagination object that is usable by the API. + */ +function convertPaginationGUItoAPI(pagination, filtersData) { + if (!pagination) return {} + return { + ...pagination, + order_by: filtersData[pagination.order_by]?.requestQuantity || pagination.order_by + } +} + +/** + * Used to transform a GUI pagination call result into a form that is usable by the + * API. + * + * @param {object} pagination The aggregation data as returned by the API. + * @param {object} filtersData All of the filters that are available + * + * @returns {object} Pagination object that is usable by the API. + */ +function convertRequiredGUItoAPI(required, filtersData) { + if (!required) return {} + return { + ...required, + include: required.include?.map(name => filtersData[name]?.requestQuantity || name), + exclude: required.exclude?.map(name => filtersData[name]?.requestQuantity || name) + } +} + /** * Goes through the given aggregations and compares then against the old results * and the current query to identify and return the aggregations that need to be @@ -1843,16 +2007,17 @@ function toGUIAgg(aggs, aggsToUpdate, resource) { * @param {object} aggs The current aggregation configuration. * @param {object} oldAggs Reduced aggregation config from latest finished query. * @param {bool} queryChanged Whether the query has changed. + * @param {object} filtersData All of the filters that are available * * @returns {object} Reduced aggregation config. */ -function reduceAggs(aggs, oldAggs, queryChanged, updatedFilters) { +function reduceAggs(aggs, oldAggs, queryChanged, updatedFilters, filtersData) { // Loop through the different aggregations for each quantity and see if any // of them need to be updated. const reducedAggs = {} let updateAggs = false for (const [key, agg] of Object.entries(aggs)) { - const filter_name = key.split(':')[0] + const filter_name = rsplit(key, ':', 1)[0] if (!isBoolean(agg.update)) { throw Error(`It was not specified whether the aggregation ${key} should update or not.`) } @@ -1885,7 +2050,7 @@ function reduceAggs(aggs, oldAggs, queryChanged, updatedFilters) { // If the filter is exclusive, and ONLY it has been modified in this // query, we do not update it's aggregation. const exclude = isNil(agg.exclude_from_search) - ? filterDataGlobal[filter_name].exclusive + ? filtersData[filter_name].exclusive : agg.exclude_from_search if (exclude && updatedFilters.has(filter_name) && updatedFilters.size === 1) { update = false @@ -1909,6 +2074,7 @@ function reduceAggs(aggs, oldAggs, queryChanged, updatedFilters) { * @param {*} filterLocked The current locked filter value in the search context * @param {*} initialValue Initial value that overrides any default specified in * the FilterRegistry + * * @returns The final value for the filter. */ export function getValue(def, filter, filterLocked, initialValue) { @@ -1918,13 +2084,67 @@ export function getValue(def, filter, filterLocked, initialValue) { } /** - * Returns the final value that should be shown for the given filter. - * - * @param {Set} dtypes The targeted data types - * @param {string[]} filters The available list of filters - * @returns Array of filter names + * Used to turn empty containers into undefined which is used to indicate that a + * search filter has not been specified. */ -export function getFilterSuggestions(dtypes, repeats, filterData) { - return Object.keys(filterData) - .filter((d) => dtypes.has(filterData[d]?.dtype) && filterData[d]?.repeats === repeats) +function clearEmpty(value) { + function isEmpty(value) { + if (isPlainObject(value)) { + return Object.values(value).every(isEmpty) + } else if ((isSet(value) || isArray(value)) && size(value) === 0) { + return true + } + return false + } + return isEmpty(value) ? undefined : value +} + +/** + * Returns a mapping from full filter names to their abbreviations + * and vice-versa. +*/ +function getAbbreviations(filterData) { + const abbreviations = {} + const filterAbbreviations = {} + const filterFullnames = {} + const nameAbbreviationPairs = Object.keys(filterData).map( + fullname => { + const {path, schema} = parseQuantityName(fullname) + return [fullname, schema ? path : path.split('.').pop()] + } + ) + for (const [fullname, abbreviation] of nameAbbreviationPairs) { + const old = abbreviations[abbreviation] + if (old === undefined) { + abbreviations[abbreviation] = 1 + } else { + abbreviations[abbreviation] += 1 + } + filterAbbreviations[fullname] = fullname + filterFullnames[fullname] = fullname + } + for (const [fullname, abbreviation] of nameAbbreviationPairs) { + if (abbreviations[abbreviation] === 1) { + filterAbbreviations[fullname] = abbreviation + filterFullnames[abbreviation] = fullname + } + } + return {filterAbbreviations, filterFullnames} +} + +/** + * Function that is used to automatically convert paths that target the correct + * property in the materials index. + * @param {string} path Path in the entry index + * @returns The correct path in the materials index + */ +function getFilterMaterialPath(path) { + const prefix = 'results.material.' + let materialPath + if (path.startsWith(prefix)) { + materialPath = path.substring(prefix.length) + } else { + materialPath = `entries.${path}` + } + return materialPath } diff --git a/gui/src/components/search/SearchContext.spec.js b/gui/src/components/search/SearchContext.spec.js new file mode 100644 index 0000000000000000000000000000000000000000..166b913c79b592bca1e4cfa20ae182217bdc9b78 --- /dev/null +++ b/gui/src/components/search/SearchContext.spec.js @@ -0,0 +1,63 @@ +/* + * Copyright The NOMAD Authors. + * + * This file is part of NOMAD. See https://nomad-lab.eu for further info. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React from 'react' +import { renderSearchEntry } from './conftest.spec' +import { useSearchContext } from './SearchContext' +import { unitSystems, Quantity } from '../../units' +import { isEqualWith } from 'lodash' + +/** + * Function that exposes the useSearchContext hook. + */ +function setup() { + const returnVal = {} + + function TestComponent() { + const {useParseQuery} = useSearchContext() + const parseQuery = useParseQuery() + Object.assign(returnVal, {parseQuery}) + return null + } + renderSearchEntry( + <TestComponent /> + ) + + return returnVal +} +describe('parseQuery', function() { + test.each([ + ['unit not specified', 'results.material.topology.cell.a', '1', new Quantity(1, 'angstrom'), undefined], + ['unit specified', 'results.material.topology.cell.a', '1 m', new Quantity(1, 'meter'), undefined], + ['cannot parse number', 'results.material.topology.cell.a', 'a', undefined, 'Could not parse the number a'], + ['filter hat accepts multiple values is wrapped in set', 'results.material.material_id', 'abcd', new Set(['abcd']), undefined], + ['filter that does not accept multiple values is not wrapped in set', 'visibility', 'public', 'public', undefined] + ])('%s', async (name, quantity, input, output, error) => { + const parseQuery = setup().parseQuery + if (!error) { + function customizer(a, b) { + if (a instanceof Quantity) { + return a.equal(b) + } + } + expect(isEqualWith(parseQuery(quantity, input, unitSystems.Custom.units), output, customizer)).toBe(true) + } else { + expect(() => parseQuery(quantity, input, unitSystems.Custom.units)).toThrow(error) + } + } + ) +}) diff --git a/gui/src/components/search/SearchPage.spec.js b/gui/src/components/search/SearchPage.spec.js index 48cac7cfcb0c66b1d6f4dc6f6b996849f123665d..e0d59a697c96c92240362fd96bbe06b4e91c4d02 100644 --- a/gui/src/components/search/SearchPage.spec.js +++ b/gui/src/components/search/SearchPage.spec.js @@ -36,6 +36,7 @@ describe('', () => { render( <SearchContext resource={context.resource} + initialSchemas={context.schemas} initialPagination={context.pagination} initialColumns={context.columns} initialRows={context.rows} diff --git a/gui/src/components/search/SearchResults.js b/gui/src/components/search/SearchResults.js index 60a7991220b72f18f9290a23f41accf7a9e3e13a..c53d4a2338cf89f080ffd94162367d1461717120 100644 --- a/gui/src/components/search/SearchResults.js +++ b/gui/src/components/search/SearchResults.js @@ -38,9 +38,9 @@ import { useSearchContext } from './SearchContext' */ const SearchResults = React.memo(function SearchResults(props) { const {noAction, onSelectedChanged, defaultUncollapsedEntryID, 'data-testid': testID, ...otherProps} = props - const {columns, resource, rows, useResults, useQuery} = useSearchContext() + const {columns, resource, rows, useResults, useApiQuery} = useSearchContext() const {data, pagination, setPagination} = useResults() - const searchQuery = useQuery() + const apiQuery = useApiQuery() const [selected, setSelected] = useState(new Set()) useEffect(() => { @@ -51,10 +51,10 @@ const SearchResults = React.memo(function SearchResults(props) { const query = useMemo(() => { if (selected === 'all') { - return searchQuery + return apiQuery } return {entry_id: [...selected]} - }, [selected, searchQuery]) + }, [selected, apiQuery]) if (isEmpty(columns)) { return <Alert severity="warning"> diff --git a/gui/src/components/search/conftest.spec.js b/gui/src/components/search/conftest.spec.js index 226751e1a4c4f9f1f04595d9bcde1ad3771a69cb..cead5c0ea71b6a3e965d7a5423fa9952ebcf726f 100644 --- a/gui/src/components/search/conftest.spec.js +++ b/gui/src/components/search/conftest.spec.js @@ -25,7 +25,7 @@ import { screen, WrapperDefault } from '../conftest.spec' import { render } from '@testing-library/react' import userEvent from '@testing-library/user-event' import { SearchContext } from './SearchContext' -import { filterData } from './FilterRegistry' +import { defaultFilterData } from './FilterRegistry' import { format } from 'date-fns' import { DType } from '../../utils' import { Unit, unitSystems } from '../../units' @@ -65,7 +65,7 @@ export const renderSearchEntry = (ui, options) => * @param {object} root The container to work on. */ export async function expectFilterTitle(quantity, label, description, unit, disableUnit, root = screen) { - const data = filterData[quantity] + const data = defaultFilterData[quantity] let finalLabel = label || data?.label const finalDescription = description || data?.description if (!disableUnit) { @@ -87,7 +87,7 @@ export async function expectFilterTitle(quantity, label, description, unit, disa */ export async function expectInputHeader(quantity, disableScale, root = screen) { await expectFilterTitle(quantity) - const data = filterData[quantity] + const data = defaultFilterData[quantity] if (!disableScale) { const scale = data.scale expect(root.getByText(scale)).toBeInTheDocument() @@ -175,7 +175,7 @@ export async function expectInputRange(quantity, loaded, histogram, anchored, mi // Test text elements if the component is not anchored if (!anchored) { - const data = filterData[quantity] + const data = defaultFilterData[quantity] const dtype = data.dtype if (dtype === DType.Timestamp) { expect(root.getByText('Start time')).toBeInTheDocument() @@ -213,7 +213,7 @@ export async function expectPeriodicTable(quantity, loaded, elements, root = scr expect(root.getAllByText(element.number)) // This number may also be used as a count expect(root.getByTitle(element.name)).toBeInTheDocument() if (!loaded) { - expect(name.closest('button')).toHaveAttribute('disabled') + expectElement(element.name, true) } }) expect(screen.getByRole('checkbox')).toBeInTheDocument() @@ -225,6 +225,22 @@ export async function expectPeriodicTable(quantity, loaded, elements, root = scr await expectPeriodicTableItems(elements) } +/** + * Tests that a PeriodicTable element is displayed correctly. + * @param {string} name Full name of the element. + * @param {bool} disabled Whether the element should be disabled. + */ +export function expectElement(name, disabled) { + const rect = screen.getByTestId(name) + expect(rect).not.toBe(null) + const classes = [...rect.classList].join(' ') + if (disabled) { + expect(classes).toMatch(/rectDisabled/) + } else { + expect(classes).not.toMatch(/rectDisabled/) + } +} + /** * Tests that an InputPeriodicTable has the given elements available. * @param {array} elements List of chemical symbols. @@ -236,13 +252,7 @@ export async function expectPeriodicTableItems(elements, root = screen) { const elementSet = new Set(elements) await waitFor(() => { elementData.elements.forEach(element => { - const button = root.getByText(element.symbol).closest('button') - expect(button).not.toBe(null) - if (elementSet.has(element.symbol)) { - expect(button).not.toBeDisabled() - } else { - expect(button).toBeDisabled() - } + expectElement(element.name, !elementSet.has(element.symbol)) }) }) } diff --git a/gui/src/components/search/input/InputConfig.js b/gui/src/components/search/input/InputConfig.js new file mode 100644 index 0000000000000000000000000000000000000000..c151c25c6cce6773e623c6f8a157a004aa204a09 --- /dev/null +++ b/gui/src/components/search/input/InputConfig.js @@ -0,0 +1,99 @@ +/* + * Copyright The NOMAD Authors. + * + * This file is part of NOMAD. See https://nomad-lab.eu for further info. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React, { useCallback, useEffect, useRef, useState } from 'react' +import PropTypes from 'prop-types' +import { TextField } from '@material-ui/core' +import { isNil, isEmpty } from 'lodash' +import YAML from 'yaml' + +/** + * Form used for editing a YAML or JSON config. + */ +const InputConfig = React.memo(({data, format, maxRows, minRows, onChange, error, onError}) => { + const controlledError = useRef(error !== undefined) + const [serialized, setSerialized] = useState() + const [errorInternal, setErrorInternal] = useState() + const errorFinal = error || errorInternal + const formatLib = { + 'JSON': JSON, + 'YAML': YAML + }[format] + + useEffect(() => { + setSerialized(isEmpty(data) + ? '' + : formatLib.stringify( + data, + (k, v) => { return v === Infinity ? "Infinity" : v }, + 2) + ) + }, [data, formatLib]) + + const handleError = useCallback((e) => { + if (!controlledError.current) { + setErrorInternal(e) + onError && onError(e) + } else { + if (!isNil(e)) onError && onError(e) + } + }, [onError]) + + const handleChange = useCallback((event) => { + const value = event.target.value + setSerialized(value) + try { + const data = formatLib.parse(value) + onChange && onChange(data) + handleError(null) + } catch (e) { + handleError(`This is not ${format}: ` + e) + } + }, [onChange, handleError, formatLib, format]) + + return ( + <TextField + fullWidth + label={format} + error={!!errorFinal} + helperText={errorFinal} + variant="filled" + multiline + maxRows={maxRows} + minRows={minRows} + value={serialized} + onChange={handleChange} + /> + ) +}) +InputConfig.propTypes = { + data: PropTypes.oneOfType([PropTypes.object, PropTypes.array]), + format: PropTypes.oneOf(['JSON', 'YAML']), + maxRows: PropTypes.number, + minRows: PropTypes.number, + onChange: PropTypes.func, + error: PropTypes.string, + onError: PropTypes.func +} + +InputConfig.defaultProps = { + format: 'JSON', + maxRows: 20 +} + +export default InputConfig diff --git a/gui/src/components/search/input/InputField.spec.js b/gui/src/components/search/input/InputField.spec.js index f3d1b216084523de27a9ea36dbe1d916df4cfcd0..56a5e3790b6b2aa32107465dff6953e3dd3b2bf2 100644 --- a/gui/src/components/search/input/InputField.spec.js +++ b/gui/src/components/search/input/InputField.spec.js @@ -19,7 +19,7 @@ import React from 'react' import { waitFor, within, waitForElementToBeRemoved } from '@testing-library/dom' import { startAPI, closeAPI, screen } from '../../conftest.spec' import { renderSearchEntry, expectInputHeader } from '../conftest.spec' -import { filterData } from '../FilterRegistry' +import { defaultFilterData } from '../FilterRegistry' import InputField from './InputField' import userEvent from '@testing-library/user-event' @@ -215,5 +215,5 @@ function queryByInputItemName(option, root = screen) { * @returns {array} List of options for the given quantity. */ function getAllOptions(quantity) { - return [...Object.values(filterData[quantity].options)].map(option => option.label) + return [...Object.values(defaultFilterData[quantity].options)].map(option => option.label) } diff --git a/gui/src/components/search/input/InputMetainfo.js b/gui/src/components/search/input/InputMetainfo.js index 6f1782fa18b9049a20ac48fbaa668b36fdcaa4e8..2b4f8606363a4ad471db3eb1ea9b2ea618b4514a 100644 --- a/gui/src/components/search/input/InputMetainfo.js +++ b/gui/src/components/search/input/InputMetainfo.js @@ -28,7 +28,7 @@ import { makeStyles } from '@material-ui/core/styles' import PropTypes from 'prop-types' import { Tooltip, List, ListItemText, ListSubheader } from '@material-ui/core' import HelpOutlineIcon from '@material-ui/icons/HelpOutline' -import { getSuggestions, capitalize } from '../../../utils' +import { getSchemaAbbreviation, getSuggestions } from '../../../utils' import { useSearchContext } from '../SearchContext' import { VariableSizeList } from 'react-window' import { InputText } from './InputText' @@ -152,16 +152,21 @@ export const InputMetainfo = React.memo(({ filterOptions={filterOptions} renderOption={(key) => { const option = options[key] + const primary = option.primary || option.definition?.name || option.key + const dtype = option.dtype || option.definition?.dtype + const schema = getSchemaAbbreviation(option.schema || option.definition?.schema) + const secondary = option.secondary || `${dtype} ${schema ? `| ${schema}` : ''}` + const description = option.description || option.definition?.description return <div className={styles.option}> <ListItemText - primary={option.primary || option.key} - secondary={option.secondary} + primary={primary} + secondary={secondary} className={styles.optionText} primaryTypographyProps={{className: styles.noWrap}} secondaryTypographyProps={{className: styles.noWrap}} /> - {option.description && - <Tooltip title={option.description || ''}> + {description && + <Tooltip title={description || ''}> <div className="description"> <HelpOutlineIcon fontSize="small" color="action"/> </div> @@ -177,9 +182,12 @@ InputMetainfo.propTypes = { value: PropTypes.string, options: PropTypes.objectOf(PropTypes.shape({ key: PropTypes.string.isRequired, // The value used for matching - primary: PropTypes.string, // The value shown as primary text, defaults to path - secondary: PropTypes.string, // Optional secondary text - description: PropTypes.string, // Optional description shown as hover + definition: PropTypes.object, // The definition for the metainfo. + primary: PropTypes.string, // The value shown as primary text, defaults to key. + secondary: PropTypes.string, // Optional secondary text. Defaults to data type + schema read from definition. + description: PropTypes.string, // Optional description shown as hover. Defaults to desription read from definition. + schema: PropTypes.string, // Schema name. Defaults to schema read from searchQuantities. + dtype: PropTypes.string, // Data type. Defaults to data type read from definition. group: PropTypes.string // Optional group information })), error: PropTypes.string, @@ -232,8 +240,7 @@ export const InputSearchMetainfo = React.memo(({ }) .map(([key, data]) => [key, { key: key, - description: data.description, - secondary: data.dtype && capitalize(data.dtype) + definition: data }]) ) return suggestions diff --git a/gui/src/components/search/input/InputPeriodicTable.js b/gui/src/components/search/input/InputPeriodicTable.js index 7f1ad37d5548354187eff8779bddb8b98be69066..0115b720ee734da3971d730ada7df83bdebe87cf 100644 --- a/gui/src/components/search/input/InputPeriodicTable.js +++ b/gui/src/components/search/input/InputPeriodicTable.js @@ -15,121 +15,60 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import React, { useMemo, useCallback, useState, useEffect, useRef } from 'react' +import React, { useMemo, useCallback, useState } from 'react' import PropTypes from 'prop-types' import clsx from 'clsx' import { isNil } from 'lodash' import elementData from '../../../elementData' -import { - Typography, - ButtonBase, - Tooltip -} from '@material-ui/core' +import { useResizeDetector } from 'react-resize-detector' +import { Tooltip } from '@material-ui/core' import InputHeader from './InputHeader' import InputCheckbox from './InputCheckbox' -import { makeStyles } from '@material-ui/core/styles' +import { makeStyles, useTheme, lighten } from '@material-ui/core/styles' import { useSearchContext } from '../SearchContext' import { approxInteger } from '../../../utils' import { getScaler } from '../../plotting/common' -// A fixed 2D, 10x18 array for the element data. -const elements = [] -for (let i = 0; i < 10; i++) { - elements[i] = Array.apply(null, Array(18)) -} -elementData.elements.forEach(element => { - elements[element.ypos - 1][element.xpos - 1] = element - element.category = element.category.replace(' ', '') -}) - /** * A single element in the periodic table. */ const useElementStyles = makeStyles(theme => ({ - root: { - top: 1, - bottom: 1, - left: 1, - right: 1, - position: 'absolute' - }, - fit: { - top: 0, - bottom: 0, - left: 0, - right: 0, - position: 'absolute' - }, - bg: { - opacity: 0, - willChange: 'opacity', - transition: 'opacity 250ms', - backgroundColor: theme.palette.primary.light - }, - disabled: { - opacity: 1, - willChange: 'opacity', - transition: 'opacity 250ms', - backgroundColor: '#eee' - }, - selected: { - backgroundColor: theme.palette.secondary.main, - display: 'none' - }, - visible: { - display: 'block' - }, - button: { - color: theme.palette.text.default, - width: '100%', - height: '100%', - border: '1px solid', - borderColor: '#555', - textAlign: 'center', + text: { fontFamily: theme.typography.fontFamily, - fontSize: '1rem', - fontWeight: 600, + fill: theme.palette.text.default, + userSelect: 'none', + pointerEvents: 'none' + }, + rect: { + transition: 'fill .15s ease', + cursor: 'pointer', '&:hover': { - boxShadow: theme.shadows[4] + filter: 'drop-shadow(0px 0px 2px rgb(0 0 0 / 0.4))' } }, - buttonSelected: { - color: 'white' + rectDisabled: { + cursor: 'auto', + '&:hover': { + filter: 'unset' + } }, - buttonDisabled: { - borderColor: '#999', - color: theme.palette.text.disabled + label: { + fontSize: '1rem', + fontWeight: 600 }, number: { - position: 'absolute', - top: 0, - left: 2, - margin: 0, - padding: 0, - fontSize: 9, - pointerEvents: 'none' + fontSize: '0.58rem' }, count: { - position: 'absolute', - bottom: 0, - right: 2, - margin: 0, - padding: 0, - fontSize: 9, - pointerEvents: 'none' - }, - textSelected: { - color: 'white' - }, - textDisabled: { - color: '#BDBDBD' - }, - symbol: { - marginTop: -2 + fontSize: '0.58rem' } })) const Element = React.memo(({ + x, + y, + width, + height, element, selected, disabled, @@ -137,145 +76,110 @@ const Element = React.memo(({ disableStatistics, max, count, - scale, - localFilter + scale }) => { const styles = useElementStyles() - - // Calculate the approximated count and the final scaled value + const theme = useTheme() const scaler = useMemo(() => getScaler(scale, undefined, [0.2, 1]), [scale]) const finalCount = useMemo(() => approxInteger(count || 0), [count]) const finalScale = useMemo(() => scaler(count / max) || 0, [count, max, scaler]) - - // Dynamically calculated styles. The background color is formed by animating - // opacity: opacity animation can be GPU-accelerated by the browser unlike - // animating the color property. - const useDynamicStyles = makeStyles((theme) => { - return { - bg: { opacity: disableStatistics - ? 0.4 - : (isNil(count) || isNil(max)) - ? 0 - : finalScale - }, - disabled: { opacity: disabled ? 1 : 0 } - } - }) - const dynamicStyles = useDynamicStyles() - - const [selectedInternal, setSelectedInternal] = useState(selected) - useEffect(() => { - setSelectedInternal(selected) - }, [selected]) - const disabledInternal = selectedInternal ? false : disabled + const disabledFinal = disabled && !selected + const color = selected + ? theme.palette.secondary.main + : disabled + ? '#eee' + : disableStatistics + ? theme.palette.primary.light + : lighten(theme.palette.primary.light, 1 - finalScale) + const strokeColor = disabledFinal + ? theme.palette.text.disabled + : '#555' + const textColor = selected + ? 'white' + : disabled + ? theme.palette.text.disabled + : theme.palette.text.default const handleClick = useCallback(() => { - setSelectedInternal(old => { - const newValue = !old - if (newValue) { - localFilter.add(element.symbol) - } else { - localFilter.delete(element.symbol) - } - return newValue - }) - onClick() - }, [onClick, element, localFilter]) + if (disabledFinal) return + onClick && onClick() + }, [onClick, disabledFinal]) - return <div className={styles.root}> - <div className={clsx(styles.fit, styles.bg, dynamicStyles.bg)}/> - <div className={clsx(styles.fit, styles.disabled, dynamicStyles.disabled)}/> - <div className={clsx(styles.fit, styles.selected, selectedInternal && styles.visible)}/> - <Tooltip title={element.name}> - <span className={styles.fit}> - <ButtonBase - className={clsx( - styles.fit, - styles.button, - selectedInternal && styles.buttonSelected, - disabledInternal && styles.buttonDisabled) - } - disabled={disabledInternal} - onClick={handleClick} - variant="contained" - > - <span className={styles.symbol}>{element.symbol}</span> - </ButtonBase> - </span> - </Tooltip> - <Typography - className={clsx( - styles.number, - selectedInternal && styles.textSelected, - disabledInternal && styles.textDisabled - )} - variant="caption" - > - {element.number} - </Typography> - {(!disableStatistics) && <Typography - className={clsx( - styles.count, - selectedInternal && styles.textSelected, - disabledInternal && styles.textDisabled - )} - variant="caption" - > - {finalCount} - </Typography>} - </div> + return <Tooltip title={element.name}> + <g> + <rect + data-testid={element.name} + x={x} + y={y} + width={width} + height={height} + stroke={strokeColor} + strokeWidth={1} + fill={color} + className={clsx(styles.rect, disabledFinal && styles.rectDisabled)} + onClick={handleClick} + /> + <text + x={x + 0.5 * width} + y={y + 0.53 * height} + fill={textColor} + textAnchor="middle" + dominantBaseline="middle" + className={clsx(styles.text, styles.label)}>{element.symbol} + </text> + <text + x={x + 0.04 * width} + y={y + 0.03 * height} + fill={textColor} + textAnchor="start" + dominantBaseline="hanging" + className={clsx(styles.text, styles.number)}>{element.number} + </text> + {!disableStatistics && <text + x={x + 0.95 * width} + y={y + 0.93 * height} + fill={textColor} + textAnchor="end" + dominantBaseline="auto" + className={clsx(styles.text, styles.number)}>{finalCount} + </text>} + </g> + </Tooltip> }) Element.propTypes = { + x: PropTypes.number.isRequired, + y: PropTypes.number.isRequired, + width: PropTypes.number.isRequired, + height: PropTypes.number.isRequired, element: PropTypes.object.isRequired, - onClick: PropTypes.func, - selected: PropTypes.bool, - disabled: PropTypes.bool, - disableStatistics: PropTypes.bool, max: PropTypes.number, count: PropTypes.number, scale: PropTypes.string, - localFilter: PropTypes.object + selected: PropTypes.bool, + disabled: PropTypes.bool, + onClick: PropTypes.func, + disableStatistics: PropTypes.bool } /** - * Represents a single element in the periodic table. + * Displays an interactive periodic table. */ -const useTableStyles = makeStyles(theme => ({ +const usePeriodicTableStyles = makeStyles(theme => ({ root: { - height: '100%', - width: '100%', - display: 'flex', - flexDirection: 'column' - }, - container: { - flex: '1 1 100%', - position: 'relative' - }, - table: { + minHeight: 0, // added min-height: 0 to prevent relayouting when within flexbox + flexGrow: 1, width: '100%', height: '100%', - borderSpacing: 0, - tableLayout: 'fixed' - }, - td: { position: 'relative' }, - formContainer: { + container: { position: 'absolute', top: theme.spacing(-0.2), left: '10%', textAlign: 'center' } })) - -function eqSet(as, bs) { - if (isNil(as) || isNil(bs)) return false - if (as.size !== bs.size) return false - for (const a of as) if (!bs.has(a)) return false - return true -} - export const PeriodicTable = React.memo(({ quantity, visible, @@ -286,12 +190,11 @@ export const PeriodicTable = React.memo(({ className, 'data-testid': testID }) => { - const styles = useTableStyles() + const styles = usePeriodicTableStyles() + const { height, width, ref } = useResizeDetector() const {useFilterState, useAgg, useIsStatisticsEnabled} = useSearchContext() const isStatisticsEnabled = useIsStatisticsEnabled() const [filter, setFilter] = useFilterState(quantity) - const localFilter = useRef(new Set()) - const [update, setUpdate] = useState(0) const aggConfig = useMemo(() => ({type: 'terms'}), []) const agg = useAgg(quantity, visible, aggId, aggConfig) const availableValues = useMemo(() => { @@ -303,18 +206,6 @@ export const PeriodicTable = React.memo(({ ? false : isNil(disableStatistics) ? !isStatisticsEnabled : disableStatistics - // The selected state of the periodic filter is kept in a local reference. - // This way simply selecting an element does not cause a full re-render of the - // table. To handle external changes to the filter state, the local state is - // synced each time a change is triggered and only if the states differ, a - // re-render is issued. - useEffect(() => { - if (!eqSet(filter, localFilter.current)) { - localFilter.current = new Set(filter) - setUpdate(old => old + 1) - } - }, [filter, setUpdate, localFilter]) - const onElementClicked = useCallback((element) => { setFilter(old => { let newValues @@ -329,53 +220,54 @@ export const PeriodicTable = React.memo(({ }) }, [setFilter]) - const table = useMemo(() => { - // The colors are normalized with respect to the maximum aggregation size - // for an unselected element. - const max = agg + const max = useMemo(() => { + return agg ? Math.max(...agg.data - .filter(option => !localFilter.current.has(option.value)) + .filter(option => !filter?.has(option.value)) .map(option => option.count)) : 0 - return <div className={clsx(styles.root, className)} data-testid={testID}> - <div className={styles.container}> - <table className={styles.table}> - <tbody> - {elements.map((row, i) => ( - <tr key={i}> - {row.map((element, j) => ( - <td key={j} className={styles.td}> - {element - ? <Element - element={element} - disabled={!availableValues[element.symbol]} - onClick={() => onElementClicked(element.symbol)} - selected={localFilter.current.has(element.symbol)} - max={max} - count={availableValues[element.symbol]} - localFilter={localFilter.current} - scale={scale} - disableStatistics={disableStatistics} - /> - : null} - </td> - ))} - </tr> - ))} - </tbody> - </table> - <div className={styles.formContainer}> - <InputCheckbox - quantity="exclusive" - label="only compositions that exclusively contain these atoms" - ></InputCheckbox> - </div> - </div> - </div> - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [agg, availableValues, onElementClicked, styles, update, scale, disableStatistics, className, testID]) + }, [agg, filter]) + + const padding = 1 + const margin = 3 + const cellWidth = (width - 2 * padding - 17 * margin) / 18 + const cellHeight = (height - 2 * padding - 9 * margin) / 10 - return table + return <div ref={ref} className={clsx(styles.root, className)} data-testid={testID}> + <svg + width="100%" + height="100%" + viewBox={`0 0 ${width || 0} ${height || 0}`} + shapeRendering='optimizeSpeed' + textRendering='optimizeSpeed' + > + {(width && height) && + elementData.elements.map((element) => ( + <Element + key={element.name} + element={element} + disabled={!availableValues[element.symbol]} + onClick={() => onElementClicked(element.symbol)} + selected={filter?.has(element.symbol)} + max={max} + count={availableValues[element.symbol]} + scale={scale} + x={padding + (element.xpos - 1) * (cellWidth + margin)} + y={padding + (element.ypos - 1) * (cellHeight + margin)} + width={cellWidth} + height={cellHeight} + disableStatistics={disableStatistics} + /> + )) + } + </svg> + <div className={styles.container}> + <InputCheckbox + quantity="exclusive" + label="only compositions that exclusively contain these atoms" + ></InputCheckbox> + </div> + </div> }) PeriodicTable.propTypes = { diff --git a/gui/src/components/search/input/InputPeriodicTable.spec.js b/gui/src/components/search/input/InputPeriodicTable.spec.js index 1e4a4abf26c8de90bc68cdfc0ad3840b39093b67..1aead838a52df2c2cdf91ae0a18b46256ba575fb 100644 --- a/gui/src/components/search/input/InputPeriodicTable.spec.js +++ b/gui/src/components/search/input/InputPeriodicTable.spec.js @@ -19,7 +19,12 @@ import React from 'react' import userEvent from '@testing-library/user-event' import { waitFor } from '@testing-library/dom' import { startAPI, closeAPI, screen } from '../../conftest.spec' -import { renderSearchEntry, expectPeriodicTable, expectPeriodicTableItems } from '../conftest.spec' +import { + renderSearchEntry, + expectPeriodicTable, + expectPeriodicTableItems, + expectElement +} from '../conftest.spec' import InputPeriodicTable from './InputPeriodicTable' const quantity = 'results.material.elements' @@ -54,10 +59,10 @@ describe('', () => { test('selecting an element in both non-exclusive and exclusive mode correctly updates the table', async () => { // Wait for hydrogen to become selectable - await waitFor(() => { expect(screen.getByText('H').closest('button')).not.toHaveAttribute('disabled') }) + await waitFor(() => expectElement('Hydrogen', false)) // Test that after selecting C, only the correct elements are selectable. - const cButton = screen.getByText('C') + const cButton = screen.getByTestId('Carbon') await userEvent.click(cButton) await expectPeriodicTableItems(['H', 'C', 'N', 'I', 'Pb']) diff --git a/gui/src/components/search/input/InputRange.js b/gui/src/components/search/input/InputRange.js index af3ea3bd09a821606039c1b234830a9f3a1c8bec..822a8d6c1dc5d35150729296871c9d2d3df4f5bf 100644 --- a/gui/src/components/search/input/InputRange.js +++ b/gui/src/components/search/input/InputRange.js @@ -137,6 +137,8 @@ export const Range = React.memo(({ const [range, setRange] = useState({gte: undefined, lte: undefined}) const [minError, setMinError] = useState(false) const [maxError, setMaxError] = useState(false) + const [minInclusive, setMinInclusive] = useState(true) + const [maxInclusive, setMaxInclusive] = useState(true) const highlight = Boolean(filter) const inputVariant = useRecoilValue(guiState('inputVariant')) disableHistogram = isNil(disableHistogram) ? !isStatisticsEnabled : disableHistogram @@ -183,12 +185,12 @@ export const Range = React.memo(({ // Aggregation when the statistics are enabled: a histogram aggregation with // extended bounds based on the currently set filter range. Note: the config // should be memoed in order to prevent re-renders. - const minRef = useRef(fromFilter(filter?.gte)) - const maxRef = useRef(fromFilter(filter?.lte)) + const minRef = useRef(fromFilter(isNil(filter?.gte) ? filter?.gt : filter?.gte)) + const maxRef = useRef(fromFilter(isNil(filter?.lte) ? filter?.lt : filter?.lte)) const aggHistogramConfig = useMemo(() => { const filterBounds = (filter) ? { - min: fromFilter(filter.gte), - max: fromFilter(filter.lte) + min: fromFilter(isNil(filter.gte) ? filter.gt : filter.gte), + max: fromFilter(isNil(filter.lte) ? filter.lt : filter.lte) } : undefined let exclude_from_search let extended_bounds @@ -324,6 +326,8 @@ export const Range = React.memo(({ let gte let min let max + let minInc = true + let maxInc = true // Helper functions for determining the min/max boundaries. const limit = (global, filter, min) => { @@ -350,10 +354,17 @@ export const Range = React.memo(({ lte = filter.toSI().value() min = limitMin(minGlobalSI, gte) max = limitMax(maxGlobalSI, lte) - // A range is given + // A range is given. For visualization purposes open-ended queries are + // displayed as well, although making such queries is currently not + // supported. } else { - gte = filter.gte instanceof Quantity ? filter.gte.toSI().value() : filter.gte - lte = filter.lte instanceof Quantity ? filter.lte.toSI().value() : filter.lte + minInc = isNil(filter.gt) + maxInc = isNil(filter.lt) + gte = filter.gte || filter.gt + lte = filter.lte || filter.lt + gte = gte instanceof Quantity ? gte.toSI().value() : gte + lte = lte instanceof Quantity ? lte.toSI().value() : lte + if (isNil(gte)) { min = limitMin(minGlobalSI, lte) gte = min @@ -369,6 +380,8 @@ export const Range = React.memo(({ } minRef.current = min maxRef.current = max + setMinInclusive(minInc) + setMaxInclusive(maxInc) setMinLocal(min) setMaxLocal(max) setRange({gte: gte, lte: lte}) @@ -512,6 +525,8 @@ export const Range = React.memo(({ setRange({gte: value[0], lte: value[1]}) setMinInput(toInternal(value[0])) setMaxInput(toInternal(value[1])) + setMinInclusive(true) + setMaxInclusive(true) setMaxError() setMinError() } @@ -634,6 +649,8 @@ export const Range = React.memo(({ handleRangeChange(event, value, false) handleRangeCommit(event, value) }} + minXInclusive={minInclusive} + maxXInclusive={maxInclusive} data-testid={`${testID}-histogram`} /> } diff --git a/gui/src/components/search/input/InputRange.spec.js b/gui/src/components/search/input/InputRange.spec.js index a897068ebe15cba8b377a2320039be4d33cb5439..cb32bfaca26a1e80c3ac0c08ba87ffce91b0d293 100644 --- a/gui/src/components/search/input/InputRange.spec.js +++ b/gui/src/components/search/input/InputRange.spec.js @@ -22,7 +22,7 @@ import { format } from 'date-fns' import { startAPI, closeAPI, screen } from '../../conftest.spec' import { renderSearchEntry, expectInputRange } from '../conftest.spec' import InputRange from './InputRange' -import { filterData } from '../FilterRegistry' +import { defaultFilterData } from '../FilterRegistry' import { DType, formatNumber } from '../../../utils' const nBins = 30 @@ -102,7 +102,7 @@ describe('test histograms with only one value', () => { ['upload_create_time', 1585872000000] ])('quantity: %s', async (quantity, value) => { renderSearchEntry(<InputRange visible quantity={quantity} disableHistogram={false}/>) - const data = filterData[quantity] + const data = defaultFilterData[quantity] const dtype = data.dtype // Check that both text fields show the only available value @@ -186,7 +186,7 @@ test.each([ * @param {bool} isMax Is the slider shown for a histogram. */ async function testSliderMove(quantity, min, max, input, slider, percentage, isMax, histogram) { - const data = filterData[quantity] + const data = defaultFilterData[quantity] const dtype = data.dtype const discretization = (histogram && dtype === DType.Int) ? 1 : 0 const range = max - min + discretization diff --git a/gui/src/components/search/input/InputText.js b/gui/src/components/search/input/InputText.js index 0587f5b94c59c0e947d9807681082661f9524d9f..854f7ec6cf25a65e5e818cfa86456f18748d0dd6 100644 --- a/gui/src/components/search/input/InputText.js +++ b/gui/src/components/search/input/InputText.js @@ -295,7 +295,7 @@ export const InputTextQuantity = React.memo(({ [{name: quantity, size: 5}], new Set([quantity]) ], [quantity]) - const [suggestionsAuto, loadingAuto] = useSuggestions(quantitiesSuggestion, quantitiesAll, suggestionInput) + const [suggestionsAuto, loadingAuto] = useSuggestions(quantitiesSuggestion, quantitiesAll, suggestionInput, filterData) const finalSuggestions = suggestions || suggestionsAuto const finalLoading = loading || loadingAuto const disableSuggestionsFinal = suggestions diff --git a/gui/src/components/search/menus/FilterMainMenu.js b/gui/src/components/search/menus/FilterMainMenu.js index 18ae0c2c8d6475888fd814fc44acc4589f21bdcb..060fdfb76c78f195b469db9d64434a23e1181b41 100644 --- a/gui/src/components/search/menus/FilterMainMenu.js +++ b/gui/src/components/search/menus/FilterMainMenu.js @@ -38,6 +38,7 @@ import FilterSubMenuDMFT from './FilterSubMenuDMFT' import FilterSubMenuEELS from './FilterSubMenuEELS' import FilterSubMenuElectronic from './FilterSubMenuElectronic' import FilterSubMenuSolarCell from './FilterSubMenuSolarCell' +import FilterSubMenuCatalyst from './FilterSubMenuCatalystProperties' import FilterSubMenuVibrational from './FilterSubMenuVibrational' import FilterSubMenuMechanical from './FilterSubMenuMechanical' import FilterSubMenuMolecularDynamics from './FilterSubMenuMolecularDynamics' @@ -64,6 +65,7 @@ export const menuMap = { eels: FilterSubMenuEELS, electronic: FilterSubMenuElectronic, solarcell: FilterSubMenuSolarCell, + heterogeneouscatalyst: FilterSubMenuCatalyst, vibrational: FilterSubMenuVibrational, mechanical: FilterSubMenuMechanical, molecular_dynamics: FilterSubMenuMolecularDynamics, diff --git a/gui/src/components/search/menus/FilterMenu.js b/gui/src/components/search/menus/FilterMenu.js index 16307f57a30214dd0a2eb3e703a52c0aad3176be..bfb91ad9da3ea75218cf4a658d473164066eb72a 100644 --- a/gui/src/components/search/menus/FilterMenu.js +++ b/gui/src/components/search/menus/FilterMenu.js @@ -41,7 +41,6 @@ import FilterSummary from '../FilterSummary' import FilterSettings from './FilterSettings' import { Actions, ActionHeader, Action } from '../../Actions' import { useSearchContext } from '../SearchContext' -import { filterGroups } from '../FilterRegistry' import { pluralize } from '../../../utils' import { isNil } from 'lodash' import { SourceApiCall, SourceApiDialogButton, SourceDialogDivider, SourceJsonCode } from '../../buttons/SourceDialogButton' @@ -476,6 +475,7 @@ export const FilterMenuItem = React.memo(({ }) => { const styles = useFilterMenuItemStyles() const theme = useTheme() + const {filterGroups} = useSearchContext() const groupFinal = group || filterGroups[id] const { selected, open, onChange } = useContext(filterMenuContext) const handleClick = disableButton ? undefined : (onClick || onChange) diff --git a/gui/src/components/search/menus/FilterSubMenuCatalystProperties.js b/gui/src/components/search/menus/FilterSubMenuCatalystProperties.js new file mode 100755 index 0000000000000000000000000000000000000000..fdbb0a1fdc5ccd25a1d05b9fdb01d89893337339 --- /dev/null +++ b/gui/src/components/search/menus/FilterSubMenuCatalystProperties.js @@ -0,0 +1,113 @@ +/* + * Copyright The NOMAD Authors. + * + * This file is part of NOMAD. See https://nomad-lab.eu for further info. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React, { useContext } from 'react' +import PropTypes from 'prop-types' +import { FilterSubMenu, filterMenuContext } from './FilterMenu' +import { InputGrid, InputGridItem } from '../input/InputGrid' +import InputSection from '../input/InputSection' +import InputRange from '../input/InputRange' +import InputField from '../input/InputField' + +const FilterSubMenuCatalyst = React.memo(({ + id, + ...rest +}) => { + const {selected, open} = useContext(filterMenuContext) + const visible = open && id === selected + + return <FilterSubMenu id={id} {...rest}> + <InputGrid> + <InputGridItem xs={12}> + <InputField + quantity="results.properties.catalytic.reactivity.reaction_name" + visible={visible} + /> + </InputGridItem> + <InputGridItem xs={12}> + <InputSection + section="results.properties.catalytic.reactivity.reactants" + visible={visible} + > + <InputField + quantity="results.properties.catalytic.reactivity.reactants.name" + visible={visible} + /> + <InputRange + quantity="results.properties.catalytic.reactivity.reactants.conversion" + visible={visible} + /> + <InputRange + quantity="results.properties.catalytic.reactivity.reactants.gas_concentration_in" + visible={visible} + /> + </InputSection> + </InputGridItem> + <InputGridItem xs={12}> + <InputSection + section="results.properties.catalytic.reactivity.products" + visible={visible} + > + <InputField + quantity="results.properties.catalytic.reactivity.products.name" + visible={visible} + /> + <InputRange + quantity="results.properties.catalytic.reactivity.products.selectivity" + visible={visible} + /> + </InputSection> + </InputGridItem> + <InputGridItem xs={12}> + <InputRange + quantity="results.properties.catalytic.reactivity.test_temperatures" + visible={visible} + /> + </InputGridItem> + <InputGridItem xs={12}> + <InputSection + section="results.properties.catalytic.catalyst_synthesis" + disableHeader + visible={visible} + > + <InputField + quantity="results.properties.catalytic.catalyst_synthesis.catalyst_type" + visible={visible} + /> + <InputField + quantity="results.properties.catalytic.catalyst_synthesis.preparation_method" + visible={visible} + /> + </InputSection> + <InputSection + section="results.properties.catalytic.catalyst_characterization" + visible={visible} + > + <InputRange + quantity="results.properties.catalytic.catalyst_characterization.surface_area" + visible={visible} + /> + </InputSection> + </InputGridItem> + </InputGrid> + </FilterSubMenu> +}) +FilterSubMenuCatalyst.propTypes = { + id: PropTypes.string +} + +export default FilterSubMenuCatalyst diff --git a/gui/src/components/search/menus/FilterSubMenuCustomQuantities.js b/gui/src/components/search/menus/FilterSubMenuCustomQuantities.js index dca6b7f0fdca1f73e48aa3b907da7c37aa8da93c..4d59aa762da34df84c24fa09b6e0030476126ab7 100644 --- a/gui/src/components/search/menus/FilterSubMenuCustomQuantities.js +++ b/gui/src/components/search/menus/FilterSubMenuCustomQuantities.js @@ -18,6 +18,7 @@ import React, { useCallback, useContext, useEffect, useMemo, useState } from 'react' import PropTypes from 'prop-types' +import { isNil } from 'lodash' import { FilterSubMenu, filterMenuContext } from './FilterMenu' import { Box, @@ -37,19 +38,18 @@ import { useGlobalMetainfo } from '../../archive/metainfo' import { NumberEditQuantity } from '../../editQuantity/NumberEditQuantity' import { StringEditQuantity } from '../../editQuantity/StringEditQuantity' import { EnumEditQuantity } from '../../editQuantity/EnumEditQuantity' -import { DateTimeEditQuantity } from '../../editQuantity/DateTimeEditQuantity' +import { DateTimeEditQuantity, DateEditQuantity } from '../../editQuantity/DateTimeEditQuantity' import { editQuantityComponents } from '../../editQuantity/EditQuantity' import { InputMetainfo } from '../../search/input/InputMetainfo' -import { DType, getDatatype } from '../../../utils' +import { DType, getDatatype, rsplit, parseQuantityName } from '../../../utils' import { InputTextField } from '../input/InputText' const types = { - str: 'String', - float: 'Float', - float64: 'Float', - int32: 'Integer', - int: 'Integer', - 'nomad.metainfo.metainfo._Datetime': 'Datetime' + [DType.Int]: 'Integer', + [DType.Float]: 'Float', + [DType.Timestamp]: 'Datetime', + [DType.String]: 'String', + [DType.Enum]: 'Enum' } const operators = { @@ -65,15 +65,26 @@ const typeOperators = { [DType.Float]: Object.keys(operators), [DType.Timestamp]: Object.keys(operators), [DType.String]: ['search'], - [DType.Enum]: ['search'] + [DType.Enum]: ['search'], + [DType.Boolean]: ['search'] } const valueKeys = { - [DType.Int]: 'long_value', - [DType.Float]: 'double_value', - [DType.Timestamp]: 'date_value', - [DType.String]: 'text_value', - [DType.Enum]: 'keyword_value' + [DType.Int]: 'int_value', + [DType.Float]: 'float_value', + [DType.Timestamp]: 'datetime_value', + [DType.String]: 'str_value', + [DType.Enum]: 'str_value', + [DType.Boolean]: 'bool_value' +} + +const componentMap = { + [DType.Int]: NumberEditQuantity, + [DType.Float]: NumberEditQuantity, + [DType.Timestamp]: DateEditQuantity, + [DType.String]: StringEditQuantity, + [DType.Enum]: EnumEditQuantity, + [DType.Boolean]: StringEditQuantity } const getValueKey = (quantityDef) => { @@ -103,18 +114,9 @@ const EditQuantity = React.memo(({quantityDef, value, onChange}) => { const usesCompatibleComponent = [StringEditQuantity, EnumEditQuantity, NumberEditQuantity, DateTimeEditQuantity].indexOf(component) !== -1 if (!(component && usesCompatibleComponent)) { - const {type_kind, type_data} = quantityDef.type - if (type_data === 'str') { - component = StringEditQuantity - } else if (type_kind === 'Enum') { - component = EnumEditQuantity - } else if (type_data === 'float' || type_data === 'np.float64') { - component = NumberEditQuantity - } else if (type_data === 'int' || type_data === 'np.int32') { - component = NumberEditQuantity - } else if (type_data === 'nomad.metainfo.metainfo._Datetime') { - component = DateTimeEditQuantity - } + const type = getDatatype(quantityDef) + // fall back on StringEditQuantity if type ends up being unknown + component = type === DType.Unknown ? StringEditQuantity : componentMap[type] props = {} otherProps = {} } @@ -144,17 +146,23 @@ const QuantityFilter = React.memo(({quantities, filter, onChange}) => { const {path, value} = filter const operator = filter.operator || 'search' const quantityDef = useMemo(() => { - return quantities.find(q => q.path === path)?._quantityDef + return quantities.find(q => q.id === path)?._quantityDef }, [path, quantities]) const options = useMemo(() => { - return Object.fromEntries(quantities.map(quantity => [ - quantity.path, { - key: quantity.path, - secondary: quantity._description, - description: quantity?._quantityDef?.description - } - ])) + return Object.fromEntries(quantities.map(quantity => { + const {path, schema} = parseQuantityName(quantity.id) + return [ + quantity.id, { + key: quantity.id, + primary: path, + schema: schema, + description: quantity?._quantityDef?.description, + dtype: getDatatype(quantity?._quantityDef) + } + ] + } + )) }, [quantities]) const handleValueChange = useCallback((value) => { @@ -244,6 +252,7 @@ const FilterSubMenuCustomQuantities = React.memo(({ const metainfo = useGlobalMetainfo() const {selected, open} = useContext(filterMenuContext) const {useFilterState} = useSearchContext() + const [loaded, setLoaded] = useState(false) const visible = open && id === selected const {api} = useApi() const {raiseError} = useErrors() @@ -253,7 +262,7 @@ const FilterSubMenuCustomQuantities = React.memo(({ const [andFilters, setAndFilters] = useState([{}]) useEffect(() => { - if (!metainfo || !visible) { + if (!metainfo || loaded || !visible) { return } const retrieve = async () => { @@ -268,14 +277,15 @@ const FilterSubMenuCustomQuantities = React.memo(({ 'aggregations': { 'paths': { 'terms': { - 'quantity': 'searchable_quantities.path', + 'quantity': 'search_quantities.id', 'size': 1000, 'entries': { 'size': 1, 'required': { 'include': [ - 'searchable_quantities.path', 'searchable_quantities.quantity_name', - 'searchable_quantities.section_definition'] + 'search_quantities.id', + 'search_quantities.definition' + ] } } } @@ -286,33 +296,31 @@ const FilterSubMenuCustomQuantities = React.memo(({ }) const quantities = [] for (const path of response.aggregations.paths.terms.data) { - const searchableQuantity = path.entries[0].searchable_quantities - const sectionDef = await metainfo.resolveDefinition(searchableQuantity.section_definition) - const quantityDef = sectionDef._properties[searchableQuantity.quantity_name] - let description = types[quantityDef.type.type_data] || 'unknown type' - if (quantityDef.type.type_kind === 'Enum') { - description = 'Enum' - } + const searchableQuantity = path.entries[0].search_quantities + const [section_path, quantity_path] = rsplit(searchableQuantity.definition, '.', 1) + const sectionDef = await metainfo.resolveDefinition(section_path) + const quantityDef = sectionDef?._properties?.[quantity_path] + + // The definition may not exist in the installation if e.g. the + // definition is removed while old data is not reprocessed) + if (!quantityDef) continue + + const type = getDatatype(quantityDef) + let description = types[type] || 'unknown type' if (quantityDef.unit) { description += ` in ${quantityDef.unit}` } quantities.push({ ...searchableQuantity, - _sectionDef: sectionDef, _quantityDef: quantityDef, _description: description }) } setQuantities(quantities) + setLoaded(true) } retrieve().catch(raiseError) - }, [visible, api, raiseError, setQuantities, metainfo]) - - useEffect(() => { - if (!visible && quantities?.length > 0) { - setQuantities([]) - } - }, [quantities, setQuantities, visible]) + }, [loaded, visible, api, raiseError, setQuantities, metainfo]) const handleFilterChange = useCallback((filter, index) => { setAndFilters(filters => { @@ -332,19 +340,19 @@ const FilterSubMenuCustomQuantities = React.memo(({ }, [setAndFilters, setQuery]) const searchEnabled = useMemo(() => { - return andFilters.every(f => f.path && f.value) + return andFilters.every(f => f.path && !isNil(f.value)) }, [andFilters]) const handleSearchClicked = useCallback(() => { const query = { and: andFilters.map(filter => { const {path, value, operator} = filter - const quantityDef = path && quantities.find(q => q.path === path)._quantityDef + const quantityDef = path && quantities.find(q => q.id === path)._quantityDef const valueKey = getValueKey(quantityDef) const valueKeyWithOperator = operator === 'search' ? valueKey : `${valueKey}:${operator}` return { - searchable_quantities: { - path: path, + search_quantities: { + id: path, [valueKeyWithOperator]: value } } @@ -355,13 +363,13 @@ const FilterSubMenuCustomQuantities = React.memo(({ useEffect(() => { const andFilters = query?.and?.map(filter => { - const searchableQuantity = filter.searchable_quantities - const valueKey = Object.keys(searchableQuantity)[1] + const searchQuantity = filter.search_quantities + const valueKey = Object.keys(searchQuantity)[1] const valueKeyWithOperator = valueKey.split(':') const operator = valueKeyWithOperator.length === 2 ? valueKeyWithOperator[1] : 'search' return { - path: searchableQuantity.path, - value: searchableQuantity[Object.keys(searchableQuantity)[1]], + path: searchQuantity.path, + value: searchQuantity[Object.keys(searchQuantity)[1]], operator: operator } }) diff --git a/gui/src/components/search/menus/FilterSubMenuDMFT.js b/gui/src/components/search/menus/FilterSubMenuDMFT.js index 33ccaa0281b8590cd776fc7c71718138afaeadf6..ca5e0bd46ed98ac569f2b43a3b52c6918adb5bb4 100644 --- a/gui/src/components/search/menus/FilterSubMenuDMFT.js +++ b/gui/src/components/search/menus/FilterSubMenuDMFT.js @@ -49,23 +49,23 @@ const FilterSubMenuDMFT = React.memo(({ </InputGridItem> <InputGridItem xs={12}> <InputRange - quantity="results.method.simulation.dmft.total_filling" + quantity="results.method.simulation.dmft.inverse_temperature" visible={visible} xs={12} disableSearch /> </InputGridItem> <InputGridItem xs={12}> - <InputRange - quantity="results.method.simulation.dmft.inverse_temperature" + <InputField + quantity="results.method.simulation.dmft.magnetic_state" visible={visible} xs={12} disableSearch /> </InputGridItem> <InputGridItem xs={12}> - <InputField - quantity="results.method.simulation.dmft.magnetic_state" + <InputRange + quantity="results.method.simulation.dmft.u" visible={visible} xs={12} disableSearch @@ -73,15 +73,15 @@ const FilterSubMenuDMFT = React.memo(({ </InputGridItem> <InputGridItem xs={12}> <InputRange - quantity="results.method.simulation.dmft.u" + quantity="results.method.simulation.dmft.jh" visible={visible} xs={12} disableSearch /> </InputGridItem> <InputGridItem xs={12}> - <InputRange - quantity="results.method.simulation.dmft.hunds_hubbard_ratio" + <InputField + quantity="results.method.simulation.dmft.analytical_continuation" visible={visible} xs={12} disableSearch diff --git a/gui/src/components/search/menus/FilterSubMenuEELS.js b/gui/src/components/search/menus/FilterSubMenuEELS.js index 8671cb9ef045efadb8ed953f17d9b687454cd732..6339df01faf7aea58e71c1ec5e08f00b4989a704 100644 --- a/gui/src/components/search/menus/FilterSubMenuEELS.js +++ b/gui/src/components/search/menus/FilterSubMenuEELS.js @@ -42,26 +42,26 @@ const FilterSubMenuEELS = React.memo(({ <InputGrid> <InputGridItem xs={12}> <InputSection - section="results.properties.spectroscopy.eels" + section="results.properties.spectroscopic.spectra.provenance.eels" disableHeader visible={visible} > - <InputRange - quantity="results.properties.spectroscopy.eels.resolution" + <InputField + quantity="results.properties.spectroscopic.spectra.provenance.eels.detector_type" visible={visible} + xs={12} /> <InputRange - quantity="results.properties.spectroscopy.eels.min_energy" + quantity="results.properties.spectroscopic.spectra.provenance.eels.resolution" visible={visible} /> <InputRange - quantity="results.properties.spectroscopy.eels.max_energy" + quantity="results.properties.spectroscopic.spectra.provenance.eels.min_energy" visible={visible} /> - <InputField - quantity="results.properties.spectroscopy.eels.detector_type" + <InputRange + quantity="results.properties.spectroscopic.spectra.provenance.eels.max_energy" visible={visible} - xs={12} /> </InputSection> </InputGridItem> diff --git a/gui/src/components/search/menus/FilterSubMenuMetadata.js b/gui/src/components/search/menus/FilterSubMenuMetadata.js index f8d2e16bf99f8cef0dbea9a512c53ac9579e1adc..eafd01ee100092ac63987f528ff342261859b21d 100644 --- a/gui/src/components/search/menus/FilterSubMenuMetadata.js +++ b/gui/src/components/search/menus/FilterSubMenuMetadata.js @@ -227,6 +227,14 @@ const FilterSubMenuMetadata = React.memo(({ disableOptions /> </InputGridItem> + <InputGridItem xs={12}> + <InputField + quantity="upload_name" + visible={visible} + disableStatistics + disableOptions + /> + </InputGridItem> <InputGridItem xs={12}> <InputField quantity="results.material.material_id" diff --git a/gui/src/components/search/widgets/Dashboard.js b/gui/src/components/search/widgets/Dashboard.js index 88ee88b8e8bd04aa71c6108882f90629163dbec2..3b4b8b711ebed871aacffd3e3ae1536f20f492f1 100644 --- a/gui/src/components/search/widgets/Dashboard.js +++ b/gui/src/components/search/widgets/Dashboard.js @@ -41,7 +41,7 @@ import { WidgetScatterPlotEdit, schemaWidgetScatterPlot } from './WidgetScatterP import { WidgetHistogramEdit, schemaWidgetHistogram } from './WidgetHistogram' import { WidgetTermsEdit, schemaWidgetTerms } from './WidgetTerms' import { WidgetPeriodicTableEdit, schemaWidgetPeriodicTable } from './WidgetPeriodicTable' -import { JsonEditor } from '../../archive/SectionEditor' +import InputConfig from '../input/InputConfig' import Markdown from '../../Markdown' import { isArray } from 'lodash' import { getWidgetsObject } from './Widget' @@ -106,9 +106,9 @@ const Dashboard = React.memo(() => { xl: {...layout}, xxl: {...layout} }, - type: 'scatterplot', size: 1000, - autorange: true + autorange: true, + type: 'scatterplot' } addWidget(id, value) }, [addWidget]) @@ -129,9 +129,9 @@ const Dashboard = React.memo(() => { xl: {...layout}, xxl: {...layout} }, - type: 'periodictable', + scale: 'linear', quantity: 'results.material.elements', - scale: 'linear' + type: 'periodictable' } addWidget(id, value) }, [addWidget]) @@ -152,10 +152,10 @@ const Dashboard = React.memo(() => { xl: {...layout}, xxl: {...layout} }, - type: 'histogram', autorange: false, nbins: 30, - scale: 'linear' + scale: 'linear', + type: 'histogram' } addWidget(id, value) }, [addWidget]) @@ -176,8 +176,8 @@ const Dashboard = React.memo(() => { xl: {...layout}, xxl: {...layout} }, - type: 'terms', - scale: 'linear' + scale: 'linear', + type: 'terms' } addWidget(id, value) }, [addWidget]) @@ -224,12 +224,12 @@ const Dashboard = React.memo(() => { </Action> <Action tooltip="" - ButtonComponent={DashboardJSONButton} + ButtonComponent={DashboardExportButton} ButtonProps={{ tooltip: "Dashboard export/import", title: "Dashboard export/import", DialogProps: { - maxWidth: "lg", + maxWidth: "md", fullWidth: true }, ButtonProps: { @@ -279,13 +279,20 @@ DashboardAction.propTypes = { children: PropTypes.node } +const schemas = { + scatterplot: schemaWidgetScatterPlot, + periodictable: schemaWidgetPeriodicTable, + histogram: schemaWidgetHistogram, + terms: schemaWidgetTerms +} + /** * A button that displays a dialog that can be used to modify the current * dashboard setup. */ -export const DashboardJSONButton = React.memo((props) => { +export const DashboardExportButton = React.memo((props) => { const {tooltip, title, DialogProps, ButtonProps} = props - const { useWidgetsState } = useSearchContext() + const {useWidgetsState} = useSearchContext() const [widgets, setWidgets] = useWidgetsState() const [widgetExport, setWidgetExport] = useState() const [widgetImport, setWidgetImport] = useState() @@ -298,13 +305,19 @@ export const DashboardJSONButton = React.memo((props) => { const exp = Object .values(widgets) .map((widget) => { - const schemas = { - scatterplot: schemaWidgetScatterPlot, - periodictable: schemaWidgetPeriodicTable, - histogram: schemaWidgetHistogram, - terms: schemaWidgetTerms + const schema = schemas[widget.type] + const casted = schema?.cast(widget, {stripUnknown: true}) + // Perform custom sort: type first, layout last + const sorted = {} + if (casted['type']) sorted['type'] = casted['type'] + const fields = new Set(['type', 'layout']) + for (const [key, value] of Object.entries(casted)) { + if (!fields.has(key)) { + sorted[key] = value + } } - return schemas[widget.type]?.cast(widget, {stripUnknown: true}) + if (casted['layout']) sorted['layout'] = casted['layout'] + return sorted }) setWidgetExport(exp) }, [open, widgets]) @@ -315,12 +328,6 @@ export const DashboardJSONButton = React.memo((props) => { let error for (const widget of data) { const type = widget.type - const schemas = { - scatterplot: schemaWidgetScatterPlot, - periodictable: schemaWidgetPeriodicTable, - histogram: schemaWidgetHistogram, - terms: schemaWidgetTerms - } const schema = schemas[type] if (!schema) return try { @@ -355,13 +362,16 @@ export const DashboardJSONButton = React.memo((props) => { <Dialog {...DialogProps} open={open}> {title && <DialogTitle>{title}</DialogTitle>} <DialogContent> - <Markdown text="The current dashboard configuration in JSON. You can modify it here directly and save it to update the dashboard."/> - <JsonEditor + <Markdown text="The current dashboard configuration in YAML. You can modify it here directly and save it to update the dashboard."/> + <InputConfig data={widgetExport} + format='YAML' + maxRows={30} + minRows={30} onChange={handleChange} error={widgetImportError} onError={setWidgetImportError} - ></JsonEditor> + /> </DialogContent> <DialogActions> <Button onClick={() => setOpen(false)}> @@ -374,7 +384,7 @@ export const DashboardJSONButton = React.memo((props) => { </Dialog> </ContentButton> }) -DashboardJSONButton.propTypes = { +DashboardExportButton.propTypes = { label: PropTypes.string, title: PropTypes.string, tooltip: PropTypes.string, diff --git a/gui/src/components/search/widgets/Dashboard.spec.js b/gui/src/components/search/widgets/Dashboard.spec.js index ada0c3a6cfdbd2214b32b861879d9bc5fc37266d..848e8f476f47fd430f673f522e4e93f1cd167d8b 100644 --- a/gui/src/components/search/widgets/Dashboard.spec.js +++ b/gui/src/components/search/widgets/Dashboard.spec.js @@ -19,7 +19,7 @@ import React from 'react' import { render, screen, startAPI, closeAPI } from '../../conftest.spec' import userEvent from '@testing-library/user-event' import Dashboard from './Dashboard' -import { filterData } from '../FilterRegistry' +import { defaultFilterData } from '../FilterRegistry' import { SearchContext } from '../SearchContext' import { expectWidgetTerms, @@ -148,7 +148,7 @@ describe('displaying an initial widget and removing it', () => { // Remove widget, check that it is gone. A test id is used to fetch the // remove button since it is an icon that may appear in several locations. const removeButton = screen.getByTestId(`0-remove-widget`) - const label = widget.label || filterData[widget.quantity].label + const label = widget.label || defaultFilterData[widget.quantity].label expect(screen.queryByText(label, {exact: false})).toBeInTheDocument() await userEvent.click(removeButton) expect(screen.queryByText(label, {exact: false})).not.toBeInTheDocument() diff --git a/gui/src/components/search/widgets/Widget.js b/gui/src/components/search/widgets/Widget.js index a36c48c3b81c5907b501ae34613558a2ef749d69..0eb1da5224b56fdd27d6ba979c536c003091933d 100644 --- a/gui/src/components/search/widgets/Widget.js +++ b/gui/src/components/search/widgets/Widget.js @@ -97,17 +97,17 @@ export const schemaLayout = object({ minH: number().integer() }) export const schemaWidget = object({ - id: string().strip(), type: string().required(), - editing: string().strip(), - visible: string().strip(), layout: object({ sm: schemaLayout, md: schemaLayout, lg: schemaLayout, xl: schemaLayout, xxl: schemaLayout - }) + }), + id: string().strip(), + editing: string().strip(), + visible: string().strip() }) /** diff --git a/gui/src/components/search/widgets/WidgetPeriodicTable.js b/gui/src/components/search/widgets/WidgetPeriodicTable.js index 55f179d979340465f28ce0fa3717f462280e8424..71fd0dd419377bd9ce8ce801d94d3da0e20a488a 100644 --- a/gui/src/components/search/widgets/WidgetPeriodicTable.js +++ b/gui/src/components/search/widgets/WidgetPeriodicTable.js @@ -71,6 +71,10 @@ export const WidgetPeriodicTable = React.memo(( anchored={true} disableStatistics={true} visible={true} + // Can't use the same aggregation identifier as the periodic table in the + // filter menu: due to rendering order the aggregation may otherwise get + // turned off when menu is not open. + aggId={'widget'} /> </Widget> }) diff --git a/gui/src/components/search/widgets/WidgetScatterPlot.js b/gui/src/components/search/widgets/WidgetScatterPlot.js index 1815eb9b6625954d815cf5156119fdfa3f8b0bb2..001220c5a15a5caceab76a3016fc42cdc70eb0ad 100644 --- a/gui/src/components/search/widgets/WidgetScatterPlot.js +++ b/gui/src/components/search/widgets/WidgetScatterPlot.js @@ -101,9 +101,12 @@ export const WidgetScatterPlot = React.memo(( const discrete = useMemo(() => { return new Set([DType.String, DType.Enum]).has(filterData[color]?.dtype) }, [filterData, color]) - const unitX = filterData[x]?.unit || 'dimensionless' - const unitY = filterData[y]?.unit || 'dimensionless' - const unitColor = filterData[color]?.unit + const filterX = filterData[x] + const filterY = filterData[y] + const filterColor = filterData[color] + const unitX = filterX?.unit || 'dimensionless' + const unitY = filterY?.unit || 'dimensionless' + const unitColor = filterColor?.unit const setWidget = useSetWidget(id) const pagination = useMemo(() => ({ page_size: size, @@ -154,12 +157,12 @@ export const WidgetScatterPlot = React.memo(( const unitXConverted = new Unit(unitX).toSystem(units) const unitYConverted = new Unit(unitY).toSystem(units) setXFilter({ - gt: new Quantity(range.x[0], unitXConverted), - lt: new Quantity(range.x[1], unitXConverted) + gte: new Quantity(range.x[0], unitXConverted), + lte: new Quantity(range.x[1], unitXConverted) }) setYFilter({ - gt: new Quantity(range.y[0], unitYConverted), - lt: new Quantity(range.y[1], unitYConverted) + gte: new Quantity(range.y[0], unitYConverted), + lte: new Quantity(range.y[1], unitYConverted) }) onSelected && onSelected(data) } diff --git a/gui/src/components/search/widgets/WidgetTerms.js b/gui/src/components/search/widgets/WidgetTerms.js index 1796d093e738aa0be63b09a6597b92775f6d753b..ea2f0d1ccce6a28247b6ffdc1a936065b35685e9 100644 --- a/gui/src/components/search/widgets/WidgetTerms.js +++ b/gui/src/components/search/widgets/WidgetTerms.js @@ -88,7 +88,8 @@ const useStyles = makeStyles(theme => ({ marginBottom: theme.spacing(1) }, count: { - marginTop: theme.spacing(0.5), + height: '1.2rem', + marginTop: theme.spacing(0.25), marginRight: theme.spacing(1), display: 'flex', justifyContent: 'flex-end', @@ -107,7 +108,7 @@ export const WidgetTerms = React.memo(( className, 'data-testid': testID }) => { - const {useAgg, useFilterState} = useSearchContext() + const {useAgg, useFilterState, filterData} = useSearchContext() const styles = useStyles() const [filter, setFilter] = useFilterState(quantity) const { height, ref } = useResizeDetector() @@ -116,7 +117,15 @@ export const WidgetTerms = React.memo(( // The terms aggregations need to request at least 1 item or an API error is thrown const aggSize = useMemo(() => Math.max(Math.floor(height / inputItemHeight), 1), [height]) - const aggConfig = useMemo(() => ({type: 'terms', size: aggSize}), [aggSize]) + const aggConfig = useMemo(() => { + const config = {type: 'terms', size: aggSize} + // If a fixed list of options is used, we must restrict the aggregation + // return values with 'include'. Otherwise the returned results may not + // contain the correct values. + const options = filterData[quantity]?.options + if (options) config.include = Object.keys(options) + return config + }, [aggSize, filterData, quantity]) const agg = useAgg(quantity, !isNil(height), id, aggConfig) const max = agg ? Math.max(...agg.data.map(option => option.count)) : 0 diff --git a/gui/src/components/uploads/CreateEntry.js b/gui/src/components/uploads/CreateEntry.js index 1544b0a2dc1960f6f364c19d28308c0fc2b5cdce..c835bf0da4db6089d8f0567bb526164b9fdebe3f 100644 --- a/gui/src/components/uploads/CreateEntry.js +++ b/gui/src/components/uploads/CreateEntry.js @@ -229,10 +229,10 @@ const CreateEntry = React.memo((props) => { onClose={() => setOpenCreateEntryDialog(false)} data-testid='create-entry-dialog' > - <DialogTitle>Create new entry</DialogTitle> + <DialogTitle>Create new entry from schema</DialogTitle> <DialogContent> <DialogContentText> - Select a name to create an entry of the type of the selected schema + Name of the entry </DialogContentText> <TextField className={classes.nameField} diff --git a/gui/src/components/uploads/CreateEntry.spec.js b/gui/src/components/uploads/CreateEntry.spec.js index 37c0ff417f71541fc1af5c0572eef92ac4e09843..915a5a07d304aa8b30a2887e65ec541cf398fe28 100644 --- a/gui/src/components/uploads/CreateEntry.spec.js +++ b/gui/src/components/uploads/CreateEntry.spec.js @@ -60,7 +60,7 @@ test.each([ await waitFor(() => expect(screen.getByText('Processing completed, 3/3 entries processed')).toBeInTheDocument()) - const createEntryButton = screen.getByButtonText('Create entry') + const createEntryButton = screen.getByButtonText('Create from schema') await act(async () => { await userEvent.click(createEntryButton) }) await waitFor(() => expect(screen.queryByText('Select a schema')).toBeInTheDocument()) diff --git a/gui/src/components/uploads/DeleteUploadsButton.js b/gui/src/components/uploads/DeleteUploadsButton.js index 81e2e2a94f40a3040324f981dcb9a731f2bb02e0..c11157921f6cfb5f810a5f25a181286a5def9072 100644 --- a/gui/src/components/uploads/DeleteUploadsButton.js +++ b/gui/src/components/uploads/DeleteUploadsButton.js @@ -15,51 +15,86 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import React, {useState, useCallback, useEffect} from 'react' +import React, {useState, useCallback, useEffect, useMemo} from 'react' import PropTypes from 'prop-types' -import { Tooltip, IconButton, Dialog, DialogContent, DialogContentText, DialogActions, Button } from '@material-ui/core' +import { + Tooltip, + IconButton, + Dialog, + DialogContent, + DialogContentText, + DialogActions, + Button +} from '@material-ui/core' import DeleteIcon from '@material-ui/icons/Delete' import {pluralize} from '../../utils' import {useApi} from '../api' import {useErrors} from '../errors' import DeletingReferencesTable from './DeletingReferencesTable' -const DeleteUploadsButton = React.memo(({tooltip, disabled, buttonProps, dark, selectedUploads, selectedCount, onSubmitted}) => { - const [openDeleteConfirmDialog, setOpenDeleteConfirmDialog] = useState(false) +/** + * Button for deleting uploads. Shows a confirmation dialog with additional + * information about the effects of the deletion. + */ +const DeleteUploadsButton = React.memo(({ + tooltip, + disabled, + buttonProps, + dark, + uploads, + onConfirm, + 'data-testid': testID +}) => { + const [openDialog, setOpenDialog] = useState(false) const {api} = useApi() const {raiseError} = useErrors() const [entryReferences, setEntryReferences] = useState([]) const [brokenEntries, setBrokenEntries] = useState([]) + const {uploadIDs, nUploads, shared, uploadText, haveText} = useMemo(() => { + const nUploads = uploads?.length || 0 + const uploadText = pluralize('upload', nUploads, false) + const haveText = pluralize('has', nUploads, false) + return { + uploadIDs: uploads?.map(upload => upload.upload_id) || [], + nUploads, + shared: uploads?.some(entry => entry?.coauthors?.length > 0 || entry?.reviewers?.length > 0), + uploadText, + haveText + } + }, [uploads]) + // Fetch information about whether deleting the uploads will result in broken + // references. useEffect(() => { - if (!openDeleteConfirmDialog) { - return - } - const requestBody = {owner: 'visible', query: {entry_references: {'target_upload_id:any': selectedUploads || []}}} - api.post(`entries/query`, requestBody) + if (!openDialog) return + + api.post(`entries/query`, + { + owner: 'visible', + query: {entry_references: {'target_upload_id:any': uploadIDs}} + } + ) .then(results => { const data = results?.data || [] if (data.length > 0) { - const brokenEntries = data.filter(entry => !selectedUploads.includes(entry.upload_id)) + const brokenEntries = data.filter(entry => !uploadIDs.includes(entry.upload_id)) setBrokenEntries(brokenEntries) const allReferences = data.map(entry => entry.entry_references).flat() const references = [...new Map(allReferences.map(entry => [entry.target_entry_id, entry])).values()] setEntryReferences(references) } }) - .catch(err => - raiseError(err) - ) - }, [api, openDeleteConfirmDialog, raiseError, selectedUploads]) + .catch(raiseError) + }, [api, openDialog, raiseError, uploadIDs]) const handleClick = useCallback(() => { - setOpenDeleteConfirmDialog(true) - }, [setOpenDeleteConfirmDialog]) + setOpenDialog(true) + }, []) const handleDelete = useCallback(() => { - setOpenDeleteConfirmDialog(false) - onSubmitted() - }, [onSubmitted]) + setOpenDialog(false) + onConfirm && onConfirm() + }, [onConfirm]) return ( <React.Fragment> @@ -68,38 +103,39 @@ const DeleteUploadsButton = React.memo(({tooltip, disabled, buttonProps, dark, s disabled={disabled} onClick={handleClick} style={dark ? {color: 'white'} : null} + data-testid={testID} > - <Tooltip title={tooltip || 'Delete selected uploads'}> + <Tooltip title={tooltip || `Delete selected ${uploadText}`}> <DeleteIcon /> </Tooltip> </IconButton> - <Dialog - open={openDeleteConfirmDialog} - > + <Dialog open={openDialog}> <DialogContent> <DialogContentText> - <b>{`Please confirm deleting the ${pluralize('upload', selectedCount, false)}.`}</b> + <b>{`Please confirm deleting the ${uploadText}`}</b> </DialogContentText> <DialogContentText> - {`You have selected ${pluralize('upload', selectedCount, true)}. Are you sure you want to delete the selected ${pluralize('upload', selectedCount, false)}?`} + {nUploads > 1 ? `You have selected ${nUploads} ${uploadText}. ` : ''} + {shared ? `The ${uploadText} you are about to delete ${haveText} been shared with at least one coauthor or reviewer. ` : ''} + {`Are you sure you want to delete the selected ${uploadText}?`} </DialogContentText> <DeletingReferencesTable entryReferences={entryReferences} brokenEntries={brokenEntries}/> </DialogContent> <DialogActions> - <Button onClick={() => setOpenDeleteConfirmDialog(false)} autoFocus>Cancel</Button> + <Button onClick={() => setOpenDialog(false)} autoFocus>Cancel</Button> <Button onClick={() => handleDelete()}>{brokenEntries.length > 0 ? 'Delete anyway' : 'Delete'}</Button> </DialogActions> </Dialog> </React.Fragment>) }) DeleteUploadsButton.propTypes = { - selectedUploads: PropTypes.arrayOf(PropTypes.string).isRequired, - selectedCount: PropTypes.number.isRequired, - onSubmitted: PropTypes.func.isRequired, + uploads: PropTypes.arrayOf(PropTypes.object).isRequired, + onConfirm: PropTypes.func.isRequired, tooltip: PropTypes.string, disabled: PropTypes.bool, buttonProps: PropTypes.object, - dark: PropTypes.bool + dark: PropTypes.bool, + 'data-testid': PropTypes.string } export default DeleteUploadsButton diff --git a/gui/src/components/uploads/DeleteUploadsButton.spec.js b/gui/src/components/uploads/DeleteUploadsButton.spec.js new file mode 100644 index 0000000000000000000000000000000000000000..4b26f9cb3a116d48ee1767fb9245d52aa13c1bed --- /dev/null +++ b/gui/src/components/uploads/DeleteUploadsButton.spec.js @@ -0,0 +1,68 @@ +/* + * Copyright The NOMAD Authors. + * + * This file is part of NOMAD. See https://nomad-lab.eu for further info. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from 'react' +import { screen, render } from '../conftest.spec' +import DeleteUploadsButton from './DeleteUploadsButton' +import userEvent from '@testing-library/user-event' + +describe('test deleting different types of uploads', function() { + test.each([ + [ + 'single upload', + 'Delete selected upload', + 'Are you sure you want to delete the selected upload?', + [{upload_id: 'a'}] + ], + [ + 'multiple uploads', + 'Delete selected uploads', + 'You have selected 2 uploads. Are you sure you want to delete the selected uploads?', + [{upload_id: 'a'}, {upload_id: 'b'}] + ], + [ + 'upload with reviewer', + 'Delete selected upload', + 'The upload you are about to delete has been shared with at least one coauthor or reviewer. Are you sure you want to delete the selected upload?', + [{upload_id: 'a', reviewers: [{user_id: 'b'}]}] + ], + [ + 'upload with coauthor', + 'Delete selected upload', + 'The upload you are about to delete has been shared with at least one coauthor or reviewer. Are you sure you want to delete the selected upload?', + [{upload_id: 'a', coauthors: [{user_id: 'b'}]}] + ] + ])('%s', async (name, tooltip, dialogText, uploads) => { + const callback = jest.fn() + render(<DeleteUploadsButton uploads={uploads} onConfirm={callback}/>) + + // Try clicking the button + const button = screen.getByTooltip(tooltip) + await userEvent.click(button) + + // See if text is correct + expect(screen.getByText(dialogText)).toBeInTheDocument() + + // See that confirmation works + const confirmButton = screen.getByText('Delete') + expect(callback).not.toHaveBeenCalled() + await userEvent.click(confirmButton) + expect(callback).toHaveBeenCalled() + } + ) +}) diff --git a/gui/src/components/uploads/EditMetaDataDialog.js b/gui/src/components/uploads/EditMetaDataDialog.js index bc0779e6d4eb336dbec9a54cb1014d03dfbd5460..fef6dfdff5e58abe5c6836ddedbf905e57662447 100644 --- a/gui/src/components/uploads/EditMetaDataDialog.js +++ b/gui/src/components/uploads/EditMetaDataDialog.js @@ -28,7 +28,8 @@ import PropTypes from 'prop-types' import AutoComplete from '@material-ui/lab/Autocomplete' import {useApi} from '../api' import {useErrors} from '../errors' -import {useLocation} from 'react-router-dom' +import {useLocation} from 'react-router' +import {Link} from 'react-router-dom' import {getUrl} from '../nav/Routes' import {Datatable, DatatableTable} from '../datatable/Datatable' import DeleteIcon from '@material-ui/icons/Delete' @@ -274,13 +275,13 @@ const DatasetsActions = React.memo((props) => { const {data} = props const location = useLocation() - const handleOpenLink = () => { - const path = `dataset/id/${data.dataset.dataset_id}` - window.open(getUrl(path, location), '_blank') - } + const openDatasetUrl = useMemo(() => { + const path = `datasets/dataset/id/${data.dataset.dataset_id}` + return getUrl(path, location) + }, [data, location]) return <Box display={'inline-block'}> - {data.dataset.dataset_id && <IconButton size='small' onClick={handleOpenLink}> + {data.dataset.dataset_id && <IconButton size='small' component={Link} to={openDatasetUrl} target="_blank"> <Tooltip title="Open in new tab"> <OpenInNewIcon /> </Tooltip> diff --git a/gui/src/components/uploads/ProcessingTable.js b/gui/src/components/uploads/ProcessingTable.js index 2b5a0e8def06a8c3bacd3f2d2826fd93dcacaeae..93fdbc85228248795f1026dfea1a94fb25adee4d 100644 --- a/gui/src/components/uploads/ProcessingTable.js +++ b/gui/src/components/uploads/ProcessingTable.js @@ -30,6 +30,7 @@ import Quantity from '../Quantity' import EditMetaDataDialog from './EditMetaDataDialog' import {authorList, formatTimestamp, pluralize} from '../../utils' import { useUploadPageContext } from './UploadPageContext' +import { defaultFilterData } from '../search/FilterRegistry' const columns = [ { @@ -96,7 +97,7 @@ const columns = [ } ] -addColumnDefaults(columns) +addColumnDefaults(columns, defaultFilterData) const defaultSelectedColumns = [ 'entry_name', diff --git a/gui/src/components/uploads/SectionSelectAutocomplete.js b/gui/src/components/uploads/SectionSelectAutocomplete.js index cff5dc5730453322314ac13cacc1c348dd28e76b..7b45420a550f18b396152cc676e356929224a3c7 100644 --- a/gui/src/components/uploads/SectionSelectAutocomplete.js +++ b/gui/src/components/uploads/SectionSelectAutocomplete.js @@ -25,7 +25,8 @@ import {getSchemaInfo, getSectionsInfo} from './SectionSelectDialog' import {ListItemText} from '@material-ui/core' import {useSuggestions} from "../../hooks" import {useErrors} from "../errors" -import { debounce } from 'lodash' +import {debounce} from 'lodash' +import {defaultFilterData} from '../search/FilterRegistry' const getOptionSelected = (option, value) => { return value ? option.entry_id === value.entry_id && option.value === value.value : false @@ -78,7 +79,7 @@ function SectionSelectAutocomplete(props) { const [suggestionInput, setSuggestionInput] = useState('') const [entries, setEntries] = useState([]) const [selectedEntry, setSelectedEntry] = useState(undefined) - const [suggestions] = useSuggestions(suggestionQuantities, quantitiesAllSet, suggestionInput) + const [suggestions] = useSuggestions(suggestionQuantities, quantitiesAllSet, suggestionInput, defaultFilterData) const [inputValue, setInputValue] = useState({primary: '', secondary: ''}) const [lastInputValue, setLastInputValue] = useState({primary: '', secondary: ''}) const [options, setOptions] = useState([]) diff --git a/gui/src/components/uploads/SectionSelectDialog.js b/gui/src/components/uploads/SectionSelectDialog.js index f9e31c4967c35622ce36178c534a4e5e63178468..9a3ec8f97cb583e1e3e93fff3983e0336a26e81f 100644 --- a/gui/src/components/uploads/SectionSelectDialog.js +++ b/gui/src/components/uploads/SectionSelectDialog.js @@ -17,8 +17,8 @@ */ import React, {useCallback, useContext, useEffect, useMemo, useState} from 'react' import { - makeStyles, DialogContent, Dialog, Typography, Checkbox, FormControlLabel, - Box, MenuItem, ListItemIcon, ListItemText, MenuList, Chip + makeStyles, DialogContent, Dialog, Typography, FormControlLabel, + Box, MenuItem, ListItemIcon, ListItemText, MenuList, Chip, RadioGroup, Radio, FormControl, Checkbox } from '@material-ui/core' import Button from '@material-ui/core/Button' import DialogActions from '@material-ui/core/DialogActions' @@ -30,7 +30,7 @@ import {useApi} from '../api' import {useUploadPageContext} from './UploadPageContext' import {useEntryStore} from '../entry/EntryContext' import {traverse, useGlobalMetainfo} from '../archive/metainfo' -import { filterGroups, quantityNameSearch } from '../search/FilterRegistry' +import { defaultFilterGroups, quantityNameSearch } from '../search/FilterRegistry' import SearchResults from '../search/SearchResults' import {useDataStore} from '../DataStore' import {pluralize, resolveNomadUrlNoThrow} from "../../utils" @@ -41,9 +41,9 @@ import {getItemLabelKey} from '../archive/ArchiveBrowser' const searchDialogContext = React.createContext() const context = cloneDeep(ui?.apps?.options?.entries) -const allFilters = new Set(filterGroups && (Object.keys(context?.filter_menus?.options)) +const allFilters = new Set(defaultFilterGroups && (Object.keys(context?.filter_menus?.options)) .map(filter => { - const group = filterGroups?.[filter] + const group = defaultFilterGroups?.[filter] return group ? Array.from(group) : [] }).flat()) @@ -202,8 +202,9 @@ Details.propTypes = { function SearchBox({open, onCancel, onSelectedChanged, selected}) { const classes = useStyles() const {user} = useApi() - const [onlyMine, setOnlyMine] = useState(!!user?.sub) - const [onlyThisUpload, setOnlyThisUpload] = useState(false) + const [filter, setFilter] = useState('visible') + const [unpublished, setUnpublished] = useState(true) + const [published, setPublished] = useState(true) const { useSetFilter, useFiltersState, @@ -211,13 +212,23 @@ function SearchBox({open, onCancel, onSelectedChanged, selected}) { filters: filterList } = useSearchContext() const filtersLocked = useFiltersLocked() - const [filters, setFilters] = useFiltersState([...allFilters].filter(filter => filter !== 'visibility' && filter !== 'processed' && filter !== 'upload_id' && !filtersLocked[filter])) + const [filters, setFilters] = useFiltersState([...allFilters] + .filter( + filter => filter !== 'visibility' && + filter !== 'processed' && + filter !== 'upload_id' && + filter !== 'published' && + filter !== 'main_author.user_id' && + !filtersLocked[filter] + )) const uploadContext = useUploadPageContext() const entryContext = useEntryStore() const {uploadId} = uploadContext || entryContext const setVisibilityFilter = useSetFilter('visibility') const setUploadIdFilter = useSetFilter('upload_id') const setProcessedFilter = useSetFilter('processed') + const setPublishedFilter = useSetFilter('published') + const setMainAuthorFilter = useSetFilter('main_author.user_id') const handleCancel = useCallback(() => { onCancel() @@ -225,9 +236,25 @@ function SearchBox({open, onCancel, onSelectedChanged, selected}) { useEffect(() => { setProcessedFilter(true) - setVisibilityFilter(onlyMine ? 'user' : undefined) - setUploadIdFilter(onlyThisUpload ? uploadId : undefined) - }, [onlyMine, onlyThisUpload, setUploadIdFilter, setVisibilityFilter, setProcessedFilter, uploadId, user]) + setPublishedFilter(published === unpublished ? undefined : published) + if (filter === 'visible') { + setVisibilityFilter(undefined) + setMainAuthorFilter(undefined) + setUploadIdFilter(undefined) + } else if (filter === 'mine') { + setVisibilityFilter('user') + setMainAuthorFilter(undefined) + setUploadIdFilter(undefined) + } else if (filter === 'coauthors') { + setVisibilityFilter(undefined) + setMainAuthorFilter([user.sub], {queryMode: 'none'}) + setUploadIdFilter(undefined) + } else if (filter === 'upload') { + setVisibilityFilter(undefined) + setMainAuthorFilter(undefined) + setUploadIdFilter(uploadId) + } + }, [filter, published, unpublished, setUploadIdFilter, setMainAuthorFilter, setVisibilityFilter, setPublishedFilter, setProcessedFilter, uploadId, user]) const contextValue = useMemo(() => ({ selected: selected, @@ -275,27 +302,71 @@ function SearchBox({open, onCancel, onSelectedChanged, selected}) { <Typography className={classes.filters} variant="body1"> Filters </Typography> - <Box display='flex'> - <FormControlLabel + <Box display='grid'> + <FormControl> + <RadioGroup row> + <FormControlLabel + value={'visible'} + control={( + <Radio + checked={filter === 'visible'} + onClick={() => setFilter('visible')} + /> + )} + label='All' + /> + <FormControlLabel + value={'mine'} + control={( + <Radio + checked={filter === 'mine'} + onClick={() => setFilter('mine')} + /> + )} + label='Only mine' + /> + <FormControlLabel + value={'coauthors'} + control={( + <Radio + checked={filter === 'coauthors'} + onClick={() => setFilter('coauthors')} + /> + )} + label='Only from others' + /> + <FormControlLabel + value={'upload'} + control={( + <Radio + checked={filter === 'upload'} + onClick={() => setFilter('upload')} + /> + )} + label='Only this upload' + /> + </RadioGroup> + </FormControl> + <Box display='flex'> + <FormControlLabel control={<Checkbox - onChange={event => setOnlyMine(event.target.checked)} - color='primary' - checked={onlyMine} - name='Only mine' - disabled={!user || onlyThisUpload} + onChange={event => setPublished(event.target.checked)} + color='primary' + checked={published} + name='Published' />} - label='Only mine' - /> - <FormControlLabel + label='Published' + /> + <FormControlLabel control={<Checkbox - onChange={event => setOnlyThisUpload(event.target.checked)} - color='primary' - checked={onlyThisUpload} - name='Only this upload' - disabled={!user} + onChange={event => setUnpublished(event.target.checked)} + color='primary' + checked={unpublished} + name='Unpublished' />} - label='Only this upload' - /> + label='Unpublished' + /> + </Box> {definedFilters.length > 0 && <Chip label={`and ${definedFilters.length} more ${pluralize('filter', definedFilters.length, false)}`} color="primary" onDelete={() => handleResetSearch()}/>} </Box> <div className={classes.resultsTable}> @@ -334,6 +405,7 @@ function SectionSelectDialog(props) { return <SearchContext resource={context?.resource} + initialSchemas={context?.schemas} initialPagination={context?.pagination} initialColumns={columns} initialRows={rows} diff --git a/gui/src/components/uploads/UploadOverview.js b/gui/src/components/uploads/UploadOverview.js index 53bf861cf8d942c1072ee8d85f169255d94964a5..d73a39f8370d25c13538cea5c789b231f5aaccef 100644 --- a/gui/src/components/uploads/UploadOverview.js +++ b/gui/src/components/uploads/UploadOverview.js @@ -29,11 +29,8 @@ import FilesBrower from './FilesBrowser' import { useErrors } from '../errors' import ProcessingTable from './ProcessingTable' import DownloadIcon from '@material-ui/icons/CloudDownload' -import DeleteIcon from '@material-ui/icons/Delete' import ReprocessIcon from '@material-ui/icons/Autorenew' import WithButton from '../utils/WithButton' -import PublishedIcon from '@material-ui/icons/Public' -import UnPublishedIcon from '@material-ui/icons/AccountCircle' import Markdown from '../Markdown' import EditMembersDialog from './EditMembersDialog' import EditMetaDataDialog from './EditMetaDataDialog' @@ -50,7 +47,8 @@ import ReloadIcon from '@material-ui/icons/Replay' import {formatTimestamp} from '../../utils' import DialogLink from '../utils/DialogLink' import UploadName from './UploadName' -import DeletingReferencesTable from './DeletingReferencesTable' +import UploadStatusIcon from './UploadStatusIcon' +import DeleteUploadsButton from './DeleteUploadsButton' import UploadProgressDialog from './UploadProgressDialog' import UploadSearchMenu from './UploadSearchMenu' import {useDataStore} from "../DataStore" @@ -61,7 +59,7 @@ const useDropButtonStyles = makeStyles(theme => ({ }, dropzoneAccept: { '& button': { - background: theme.palette.primary.main, + background: theme.palette.secondary.main, color: theme.palette.common.white } }, @@ -83,11 +81,11 @@ function DropButton({onDrop, ...buttonProps}) { <input {...getInputProps()} /> <Button variant="contained" - color="default" + color="primary" startIcon={<UploadIcon/>} {...buttonProps} > - click or drop files + Drop files here or click to open dialog </Button> </div> </div> @@ -97,26 +95,6 @@ DropButton.propTypes = { onDrop: PropTypes.func } -function UploadStatus({upload, ...props}) { - if (!upload) { - return <UnPublishedIcon color="default" {...props} /> - } - if (upload.published) { - return <Tooltip title="This upload is published and visible to everybody."> - <PublishedIcon color="primary" {...props} /> - </Tooltip> - } - // TODO published with embargo - if (!upload.published) { - return <Tooltip title="This upload is not yet published and only visible to you."> - <UnPublishedIcon color="error" {...props} /> - </Tooltip> - } -} -UploadStatus.propTypes = { - upload: PropTypes.object -} - function PublishUpload({upload, onPublish}) { const [embargo, setEmbargo] = useState(upload.embargo_length === undefined ? 0 : upload.embargo_length) const [openConfirmDialog, setOpenConfirmDialog] = useState(false) @@ -248,33 +226,48 @@ const useStyles = makeStyles(theme => ({ } })) -export function UploadDocumentation() { - return <React.Fragment> - Visit our documentation on <Link href={`${appBase}/docs/web.html#uploading-and-publishing-data`}> - uploading files - </Link> or show <DialogLink title="Supported file formats" text="supported file formats"> - <Typography> - The following codes are supported: <CodeList withUploadInstructions />. Click - the code to get more specific information about how to prepare your files. - </Typography> - </DialogLink>. - </React.Fragment> +export function SupportedCodes({children}) { + return <DialogLink title="Supported codes" text={children}> + <Typography> + For the following codes, we support automatic parsing of data into + entries: <CodeList withUploadInstructions />. Click the code to get more + specific information about how to prepare your files. + </Typography> + </DialogLink> +} +SupportedCodes.propTypes = { + children: PropTypes.node +} + +export function UploadDocumentation({children}) { + return <Link href={`${appBase}/docs/web.html#uploading-and-publishing-data`}> + {children} + </Link> +} +UploadDocumentation.propTypes = { + children: PropTypes.node +} + +export function SchemaDocumentation({children}) { + return <Link href={`${appBase}/docs/schema/basics.html`}> + {children} + </Link> +} +SchemaDocumentation.propTypes = { + children: PropTypes.node } function UploadOverview(props) { const classes = useStyles() const dataStore = useDataStore() - const {api} = useApi() + const {api, user} = useApi() const {raiseError} = useErrors() const { uploadId, upload, entries, apiData, hasUpload, isProcessing, error, isWriter, pagination, deleteRequested, updateUpload, requestRefreshUpload, isMainAuthor} = useUploadPageContext() const [uploading, setUploading] = useState(null) - const [openDeleteConfirmDialog, setOpenDeleteConfirmDialog] = useState(false) const [openEmbargoConfirmDialog, setOpenEmbargoConfirmDialog] = useState(false) const [readme, setReadme] = useState(null) - const [entryReferences, setEntryReferences] = useState([]) - const [brokenEntries, setBrokenEntries] = useState([]) useEffect(() => { if (uploading) return @@ -289,27 +282,6 @@ function UploadOverview(props) { }) }, [api, raiseError, uploadId, uploading, setReadme, dataStore.breadcrumb, upload?.upload_name]) - useEffect(() => { - if (!openDeleteConfirmDialog) { - return - } - const requestBody = {owner: 'visible', query: {entry_references: {'target_upload_id:any': uploadId ? [uploadId] : []}}} - api.post(`entries/query`, requestBody) - .then(results => { - const data = results?.data || [] - if (data.length > 0) { - const brokenEntries = data.filter(entry => entry.upload_id !== uploadId) - setBrokenEntries(brokenEntries) - const allReferences = data.map(entry => entry.entry_references).flat() - const references = [...new Map(allReferences.map(entry => [entry.target_entry_id, entry])).values()] - setEntryReferences(references) - } - }) - .catch(err => - raiseError(err) - ) - }, [api, openDeleteConfirmDialog, raiseError, uploadId]) - const handleDropFiles = useCallback(files => { if (!files[0]?.name) { return // Not dropping a file, but something else. Ignore. @@ -362,7 +334,6 @@ function UploadOverview(props) { } const handleDelete = () => { - setOpenDeleteConfirmDialog(false) api.delete(`/uploads/${uploadId}`) .then(results => updateUpload({upload: results.data})) .catch(raiseError) @@ -378,20 +349,12 @@ function UploadOverview(props) { const isPublished = upload.published const isEmpty = upload.entries === 0 - const handleDeleteButtonClicked = () => { - if (isEmpty) { - handleDelete() - } else { - setOpenDeleteConfirmDialog(true) - } - } - return ( <Page limitedWidth> <UploadProgressDialog uploading={uploading} /> <Grid container spacing={2} alignItems="center"> <Grid item> - <UploadStatus upload={upload} fontSize="large" /> + <UploadStatusIcon data={upload} user={user} fontSize="large" /> </Grid> <Grid item style={{flexGrow: 1}}> <UploadName upload_name={upload?.upload_name} onChange={handleNameChange} /> @@ -423,27 +386,14 @@ function UploadOverview(props) { <SourceApiDialogButton maxWidth="lg" fullWidth> <SourceApiCall {...apiData} /> </SourceApiDialogButton> - <IconButton disabled={isPublished || !isMainAuthor} onClick={handleDeleteButtonClicked} data-testid='upload-delete-action'> - <Tooltip title="Delete the upload"> - <DeleteIcon /> - </Tooltip> - </IconButton> + <DeleteUploadsButton + tooltip="Delete upload" + disabled={isPublished || !isMainAuthor} + data-testid='upload-delete-action' + uploads={[upload]} + onConfirm={handleDelete} + /> </Box> - <Dialog - open={openDeleteConfirmDialog} - aria-describedby="alert-dialog-description" - > - <DialogContent> - <DialogContentText id="alert-dialog-description"> - The upload is not empty. Are you sure you want to delete this upload? - </DialogContentText> - <DeletingReferencesTable entryReferences={entryReferences} brokenEntries={brokenEntries}/> - </DialogContent> - <DialogActions> - <Button onClick={() => setOpenDeleteConfirmDialog(false)} autoFocus>Cancel</Button> - <Button onClick={handleDelete}>{brokenEntries.length > 0 ? 'Delete anyway' : 'Delete'}</Button> - </DialogActions> - </Dialog> </Grid> </Grid> {readme && ( @@ -468,10 +418,11 @@ function UploadOverview(props) { {!isPublished && isAuthenticated && isWriter && ( <React.Fragment> <Typography className={classes.stepContent}> - Upload files or create entries. You can upload individual files or - .zip/.tar files. <UploadDocumentation/> Entries can be created from build-in - or uploaded schemas. Visit our documentation - on <Link href={`${appBase}/docs/schema/basics.html`}>creating schemas</Link>. + Here you can upload files. Top-level .zip/.tar files will be uncompressed automatically. For more information, + see our documentation on <UploadDocumentation>uploading + files</UploadDocumentation> or view the <SupportedCodes>supported codes</SupportedCodes>. + Optionally, you can also create an entry from built-in or + uploaded schemas. Please take a look at our documentation on <SchemaDocumentation>schemas</SchemaDocumentation>. </Typography> <Box display="flex" flexDirection="row"> <Box flexGrow={1}> @@ -487,9 +438,9 @@ function UploadOverview(props) { size="large" disabled={isProcessing} variant="contained" - color="primary" + color="default" > - Create entry + Create from schema </CreateEntry> </Box> </Box> diff --git a/gui/src/components/uploads/UploadStatusIcon.js b/gui/src/components/uploads/UploadStatusIcon.js new file mode 100644 index 0000000000000000000000000000000000000000..bb03561ded3810c815bdd57e8d9a5bc662048753 --- /dev/null +++ b/gui/src/components/uploads/UploadStatusIcon.js @@ -0,0 +1,88 @@ +/* + * Copyright The NOMAD Authors. + * + * This file is part of NOMAD. See https://nomad-lab.eu for further info. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React from 'react' +import PropTypes from 'prop-types' +import { Tooltip } from '@material-ui/core' +import PublishedIcon from '@material-ui/icons/Public' +import PrivateIcon from '@material-ui/icons/AccountCircle' +import SharedIcon from '@material-ui/icons/SupervisedUserCircle' +import NotVisibleIcon from '@material-ui/icons/VisibilityOff' + +/** + * Used to display the status of an Upload. Can work both with upload data and + * entry data which have different data models. + */ +const UploadStatusIcon = React.memo(({data, user, ...props}) => { + const coauthors = data?.coauthors || data?.authors?.map(user => user.user_id) + const reviewers = data?.reviewers || data?.viewers?.map(user => user.user_id) + const shared = data?.coauthors?.length > 0 || data?.reviewers?.length > 0 || data?.viewers?.length > 1 + const isMainAuthor = user && (data.main_author?.user_id === user.sub || data.main_author === user.sub) + const isReviewer = user && reviewers?.find(user_id => user_id === user.sub) + const isCoauthor = user && coauthors?.find(user_id => user_id === user.sub) + let Icon = shared ? SharedIcon : PrivateIcon + + let tooltip, color, role + if (!data) { + tooltip = 'Upload status not available' + color = 'action' + } else if (data.published) { + if (data.with_embargo) { + color = 'error' + if (isMainAuthor) { + tooltip = "Published with embargo by you and only accessible by you, coauthors and reviewers" + } else if (isCoauthor) { + tooltip = "Published with embargo and accessible by you as a coauthor" + } else if (isReviewer) { + tooltip = "Published with embargo and accessible by you as a reviewer" + } else { + Icon = NotVisibleIcon + if (user) { + tooltip = "Published with embargo and not accessible by you" + } else { + tooltip = "Published with embargo and might become accessible after login" + } + } + } else { + role = 'published-upload-icon' + tooltip = "Published and accessible by everyone" + Icon = PublishedIcon + color = 'primary' + } + } else { + if (isMainAuthor) { + tooltip = "Unpublished, only accessible by you, coauthors and reviewers" + } else if (isCoauthor) { + tooltip = "Unpublished, accessible by you as a coauthor" + } else if (isReviewer) { + tooltip = "Unpublished, accessible by you as a reviewer" + } else { + tooltip = "Unpublished" + } + color = 'error' + } + + return <Tooltip title={tooltip}> + <Icon color={color} role={role} {...props} /> + </Tooltip> +}) +UploadStatusIcon.propTypes = { + data: PropTypes.object, // The upload/entry data + user: PropTypes.object // The user object from API +} + +export default UploadStatusIcon diff --git a/gui/src/components/uploads/UploadStatusIcon.spec.js b/gui/src/components/uploads/UploadStatusIcon.spec.js new file mode 100644 index 0000000000000000000000000000000000000000..173ec1e17f18bdac737967e84bbf3686df89a29d --- /dev/null +++ b/gui/src/components/uploads/UploadStatusIcon.spec.js @@ -0,0 +1,56 @@ +/* + * Copyright The NOMAD Authors. + * + * This file is part of NOMAD. See https://nomad-lab.eu for further info. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from 'react' +import { screen, renderNoAPI } from '../conftest.spec' +import UploadStatusIcon from './UploadStatusIcon' + +describe('test different states', function() { + test.each([ + ['published', 'Published and accessible by everyone', {published: true}, {}], + ['published, embargo, main author', 'Published with embargo by you and only accessible by you, coauthors and reviewers', {published: true, with_embargo: true, main_author: 'a'}, {sub: 'a'}], + ['published, embargo, coauthor', 'Published with embargo and accessible by you as a coauthor', {published: true, with_embargo: true, main_author: 'a', coauthors: ['b']}, {sub: 'b'}], + ['published, embargo, author', 'Published with embargo and accessible by you as a coauthor', {published: true, with_embargo: true, main_author: 'a', authors: [{user_id: 'b'}]}, {sub: 'b'}], + ['published, embargo, reviewer', 'Published with embargo and accessible by you as a reviewer', {published: true, with_embargo: true, main_author: 'a', reviewers: ['b']}, {sub: 'b'}], + ['published, embargo, viewer', 'Published with embargo and accessible by you as a reviewer', {published: true, with_embargo: true, main_author: 'a', viewers: [{user_id: 'b'}]}, {sub: 'b'}], + ['published, embargo, external', 'Published with embargo and not accessible by you', {published: true, with_embargo: true, main_author: 'a', viewers: [{user_id: 'b'}]}, {sub: 'c'}], + ['published, embargo, no user data', 'Published with embargo and might become accessible after login', {published: true, with_embargo: true, main_author: 'a', viewers: [{user_id: 'b'}]}, undefined], + ['unpublished, main author', 'Unpublished, only accessible by you, coauthors and reviewers', {published: false, main_author: 'a'}, {sub: 'a'}], + ['unpublished, coauthor', 'Unpublished, accessible by you as a coauthor', {published: false, main_author: 'a', coauthors: ['b']}, {sub: 'b'}], + ['unpublished, author', 'Unpublished, accessible by you as a coauthor', {published: false, main_author: 'a', authors: [{user_id: 'b'}]}, {sub: 'b'}], + ['unpublished, reviewer', 'Unpublished, accessible by you as a reviewer', {published: false, main_author: 'a', reviewers: ['b']}, {sub: 'b'}], + ['unpublished, viewer', 'Unpublished, accessible by you as a reviewer', {published: false, main_author: 'a', viewers: [{user_id: 'b'}]}, {sub: 'b'}], + ['unpublished, external', 'Unpublished', {published: false, main_author: 'a', viewers: [{user_id: 'b'}]}, {sub: 'c'}], + ['unpublished, no user data', 'Unpublished', {published: false, main_author: 'a', viewers: [{user_id: 'b'}]}, undefined], + ['no data', 'Upload status not available', undefined, undefined] + ])('%s', async (name, tooltip, data, user) => { + renderNoAPI(<UploadStatusIcon data={data} user={user}/>) + expectUploadStatusIcon(tooltip) + } + ) +}) + +/** + * Asserts that an UploadStatusIcon is displayed correctly. + * + * @param {object} upload The upload object. + * @param {string} state Expected state of the icon. + */ +export async function expectUploadStatusIcon(tooltip, root = screen) { + expect(root.getByTooltip(tooltip)).toBeInTheDocument() +} diff --git a/gui/src/components/uploads/UploadsPage.js b/gui/src/components/uploads/UploadsPage.js index 9ae2cff7dd662442fe9d11561fc70564b5e8c930..03a733816e5968bb3f6f374797d9f28dd5c5be70 100644 --- a/gui/src/components/uploads/UploadsPage.js +++ b/gui/src/components/uploads/UploadsPage.js @@ -31,9 +31,6 @@ import ExampleUploadButton from './ExampleUploadButton' import { useApi, withLoginRequired } from '../api' import Page from '../Page' import { useErrors } from '../errors' -import PublicIcon from '@material-ui/icons/Public' -import UploaderIcon from '@material-ui/icons/AccountCircle' -import SharedIcon from '@material-ui/icons/SupervisedUserCircle' import DetailsIcon from '@material-ui/icons/ArrowForward' import { UploadButton } from '../nav/Routes' import { @@ -46,8 +43,10 @@ import Quantity from '../Quantity' import { SourceApiCall, SourceApiDialogButton } from '../buttons/SourceDialogButton' import { useHistory } from 'react-router-dom' import DeleteUploadsButton from './DeleteUploadsButton' +import UploadStatusIcon from './UploadStatusIcon' import { formatTimestamp } from '../../utils' -import { UploadDocumentation } from './UploadOverview' +import { SupportedCodes, UploadDocumentation } from './UploadOverview' +import { defaultFilterData } from '../search/FilterRegistry' export const help = ` NOMAD allows you to upload data. After upload, NOMAD will process your data: it will @@ -134,41 +133,6 @@ export function useUploadsPageContext() { return useContext(uploadsPageContext) } -const columns = [ - { - key: 'upload_create_time', - render: upload => formatTimestamp(upload.upload_create_time) - }, - {key: 'upload_name'}, - { - key: 'upload_id', - render: upload => <Quantity quantity={'upload_id'} noLabel noWrap withClipboard data={upload}/> - }, - {key: 'last_status_message', label: 'Status'}, - {key: 'entries', render: upload => upload.entries, align: 'center'}, - {key: 'published', render: upload => <Published upload={upload} />, align: 'center'} -] - -addColumnDefaults(columns, {align: 'left'}) - -const Published = React.memo(function Published({upload}) { - const hasMultipleAuthors = upload.coauthors.length > 0 - if (upload.published) { - return <Tooltip title="published upload"> - <PublicIcon color="primary" role='published-upload-icon'/> - </Tooltip> - } else { - return <Tooltip title="this upload is not yet published"> - {hasMultipleAuthors ? <SharedIcon color="error" /> - : <UploaderIcon color="error" /> - } - </Tooltip> - } -}) -Published.propTypes = { - upload: PropTypes.object.isRequired -} - const useUploadCommandStyles = makeStyles(theme => ({ root: { width: '100%' @@ -294,7 +258,7 @@ export function UploadsPage() { } }) .catch(errors.raiseError) - api.get(`/uploads?is_published=false&page_size=10000&order_by=${(order_by === 'published' ? 'publish_time' : order_by)}&order=${order}`) + api.get(`/uploads?is_published=false&roles=main_author&page_size=10000&order_by=${(order_by === 'published' ? 'publish_time' : order_by)}&order=${order}`) .then(response => { setUnpublished(response) }) @@ -316,7 +280,9 @@ export function UploadsPage() { } }, [fetchData, history]) - const isDisabled = unpublished ? (unpublished.pagination ? unpublished.pagination.total >= servicesUploadLimit : false) : false + const isDisabled = unpublished + ? (unpublished.pagination ? unpublished.pagination.total >= servicesUploadLimit : false) + : false useEffect(() => { api.get('/uploads/command-examples') @@ -324,7 +290,10 @@ export function UploadsPage() { .catch(errors.raiseError) }, [api, errors, setUploadCommands]) - const selectedUploads = useMemo(() => selected === 'all' ? unpublished.data.map(upload => upload.upload_id) : [...selected], [selected, unpublished]) + const selectedUploads = useMemo(() => selected === 'all' + ? unpublished.data + : data?.data?.filter(upload => selected.has(upload.upload_id) + ), [data, selected, unpublished]) // A map to store whether each of the upload object's main author is the current user const currentUserUploadsMap = useMemo(() => { @@ -346,9 +315,8 @@ export function UploadsPage() { } }, [data, selected, currentUserUploadsMap]) - const selectedCount = useMemo(() => selected === 'all' ? unpublished.pagination.total : selected?.size, [selected, unpublished]) const deleteUploads = useCallback(() => { - const promises = selectedUploads.map(upload_id => api.delete(`uploads/${upload_id}`)) + const promises = selectedUploads.map(upload => api.delete(`uploads/${upload.upload_id}`)) return Promise.allSettled(promises) }, [selectedUploads, api]) @@ -368,6 +336,26 @@ export function UploadsPage() { }) }, [deleteUploads, errors, fetchData]) + // Setup columns + const columns = useMemo(() => { + const columns = [ + { + key: 'upload_create_time', + render: upload => formatTimestamp(upload.upload_create_time) + }, + {key: 'upload_name'}, + { + key: 'upload_id', + render: upload => <Quantity quantity={'upload_id'} noLabel noWrap withClipboard data={upload}/> + }, + {key: 'last_status_message', label: 'Status'}, + {key: 'entries', render: upload => upload.entries, align: 'center'}, + {key: 'published', render: upload => <UploadStatusIcon data={upload} user={user} />, align: 'center'} + ] + addColumnDefaults(columns, {align: 'left'}, defaultFilterData) + return columns + }, [user]) + return ( <Page loading={!(data && uploadCommands)}> <Box marginBottom={2}> @@ -395,7 +383,7 @@ export function UploadsPage() { </Box> <Box> <Typography> - <UploadDocumentation/> + Visit our documentation on <UploadDocumentation>uploading files</UploadDocumentation> or show <SupportedCodes>supported codes</SupportedCodes>. </Typography> </Box> {(data?.pagination?.total || 0) > 0 && <React.Fragment> @@ -430,9 +418,8 @@ export function UploadsPage() { <DeleteUploadsButton isIcon disabled={disableDeleteButton} - selectedCount={selectedCount} - selectedUploads={selectedUploads} - onSubmitted={handleDeleteSubmitted} + uploads={selectedUploads} + onConfirm={handleDeleteSubmitted} /> </DatatableToolbarActions> </DatatableToolbar> diff --git a/gui/src/components/uploads/UploadsPage.spec.js b/gui/src/components/uploads/UploadsPage.spec.js index 53a0dfdf55662268b7fc1a161053d07a5b9adeb7..35509add0f68c4a9a0312b79ad9580197836a56a 100644 --- a/gui/src/components/uploads/UploadsPage.spec.js +++ b/gui/src/components/uploads/UploadsPage.spec.js @@ -49,7 +49,10 @@ test('Render uploads page: sort by upload create time', async () => { // Test the order of uploads: by default is descending upload create time for (let i = 0; i < 10; i++) { expect(within(rows[i]).queryByText(`dft_upload_${11 - i}`)).toBeInTheDocument() - expect(within(rows[i]).queryByTitle(((i + 1) % 2 === 0 ? 'published upload' : 'this upload is not yet published'))).toBeInTheDocument() + expect(within(rows[i]).queryByTitle(((i + 1) % 2 === 0 + ? 'Published and accessible by everyone' + : 'Unpublished, only accessible by you, coauthors and reviewers' + ))).toBeInTheDocument() } // Test the order of uploads: sort by Upload name @@ -72,7 +75,10 @@ test('Render uploads page: sort by upload create time', async () => { expect(within(datatableBody).queryByText('dft_upload_11')).not.toBeInTheDocument() for (let i = 0; i < 10; i++) { expect(within(rows[i]).queryByText(`dft_upload_${i + 1}`)).toBeInTheDocument() - expect(within(rows[i]).queryByTitle(((i + 1) % 2 === 0 ? 'published upload' : 'this upload is not yet published'))).toBeInTheDocument() + expect(within(rows[i]).queryByTitle(((i + 1) % 2 === 0 + ? 'Published and accessible by everyone' + : 'Unpublished, only accessible by you, coauthors and reviewers' + ))).toBeInTheDocument() } // Testing the "Add example uploads" functionality diff --git a/gui/src/components/visualization/BandGap.spec.js b/gui/src/components/visualization/BandGap.spec.js index bec0380dde1587772f203c9a33146879d5a4c5bf..e3f9d47ee6d3bc77e35c895ef280c3b17269b698 100644 --- a/gui/src/components/visualization/BandGap.spec.js +++ b/gui/src/components/visualization/BandGap.spec.js @@ -16,7 +16,7 @@ * limitations under the License. */ import React from 'react' -import { render } from '../conftest.spec' +import { renderNoAPI } from '../conftest.spec' import { expectVisualization, VisualizationState } from './conftest.spec' import BandGap, { bandGapError } from './BandGap' @@ -25,6 +25,6 @@ test.each([ ['loading', VisualizationState.Loading, undefined], ['error: invalid data', VisualizationState.Error, "invalid data"] ])('band gap: %s', async (id, state, data) => { - render(<BandGap data={data} />) + renderNoAPI(<BandGap data={data} />) await expectVisualization(state, 'band-gap-placeholder', bandGapError) }) diff --git a/gui/src/components/visualization/BrillouinZone.spec.js b/gui/src/components/visualization/BrillouinZone.spec.js index 750fb618fca061c5b61efc5cece72847e81d5236..4e5c471eb87c107a618332712ffc9b3e1379224f 100644 --- a/gui/src/components/visualization/BrillouinZone.spec.js +++ b/gui/src/components/visualization/BrillouinZone.spec.js @@ -16,13 +16,13 @@ * limitations under the License. */ import React from 'react' -import { render } from '../conftest.spec' +import { renderNoAPI } from '../conftest.spec' import { expectVisualization, VisualizationState } from './conftest.spec' import BrillouinZone from './BrillouinZone' test.each([ ['no webgl', VisualizationState.NoWebGL, false] ])('brillouin zone: %s', async (id, state, data) => { - render(<BrillouinZone data={data} />) + renderNoAPI(<BrillouinZone data={data} />) await expectVisualization(state) }) diff --git a/gui/src/components/visualization/CatalystSample.js b/gui/src/components/visualization/CatalystSample.js new file mode 100755 index 0000000000000000000000000000000000000000..fa3c3c2e9a684c25b6583ab62bf09e55426874fc --- /dev/null +++ b/gui/src/components/visualization/CatalystSample.js @@ -0,0 +1,57 @@ +/* + * Copyright The NOMAD Authors. + * + * This file is part of NOMAD. See https://nomad-lab.eu for further info. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React, { } from 'react' +import PropTypes from 'prop-types' +import { QuantityTable, QuantityRow, QuantityCell } from '../Quantity' +import NoData from './NoData' +import Placeholder from './Placeholder' + +/** + * Shows a summary of catalyst properties. + */ +const CatalystSample = React.memo(({data}) => { + const prefix = 'results.properties.catalytic.catalyst_characterization' + const prefix1 = 'results.properties.catalytic.catalyst_synthesis' + const prefix2 = 'results.properties.catalytic.reactivity' + return data !== false + ? data + ? <QuantityTable> + <QuantityRow> + <QuantityCell value={data?.surface_area} quantity={`${prefix}.surface_area`}/> + <QuantityCell value={data?.catalyst_type} quantity={`${prefix1}.catalyst_type`}/> + <QuantityCell value={data?.preparation_method} quantity={`${prefix1}.preparation_method`}/> + </QuantityRow> + <QuantityRow> + <QuantityCell value={data?.reaction_name} quantity={`${prefix2}.reaction_name`}/> + <QuantityCell value={data?.test_temperatures} quantity={`${prefix2}.test_temperatures`}/> + <QuantityCell value={data?.reactants.name} quantity={`${prefix2}.reactants.name`}/> + <QuantityCell value={data?.reactants.conversion} quantity={`${prefix2}.reactants.conversion`}/> + <QuantityCell value={data?.products.name} quantity={`${prefix2}.products.name`}/> + <QuantityCell value={data?.products.selectivity} quantity={`${prefix2}.products.selectivity`}/> + + </QuantityRow> + </QuantityTable> + : <Placeholder /> + : <NoData /> +}) + +CatalystSample.propTypes = { + data: PropTypes.any +} + +export default CatalystSample diff --git a/gui/src/components/visualization/CatalyticProperties.js b/gui/src/components/visualization/CatalyticProperties.js new file mode 100755 index 0000000000000000000000000000000000000000..e3fda1ea05da185538bf41bf39df244de9ac01b4 --- /dev/null +++ b/gui/src/components/visualization/CatalyticProperties.js @@ -0,0 +1,38 @@ +/* + * Copyright The NOMAD Authors. + * + * This file is part of NOMAD. See https://nomad-lab.eu for further info. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React from 'react' +import PropTypes from 'prop-types' +import { PropertyGrid, PropertyItem } from '../entry/properties/PropertyCard' +import CatalystSample from './CatalystSample' + +// Displays the set of catalytic properties. +const CatalyticProperties = React.memo(({ + catalystSample +}) => { + return <PropertyGrid> + <PropertyItem title="Catalyst" xs={12} height="auto" minHeight="100px"> + <CatalystSample data={CatalystSample} /> + </PropertyItem> + </PropertyGrid> +}) + +CatalyticProperties.propTypes = { + catalystSample: PropTypes.any // Set to false if not available, set to other falsy value to show placeholder. +} + +export default CatalyticProperties diff --git a/gui/src/components/visualization/DOS.js b/gui/src/components/visualization/DOS.js index 320b5773d92696c2f8c5a1ba14a3d88f7fa2c77d..4bc4fe8cd0b9878f26457eae422c4f835c73d4d5 100644 --- a/gui/src/components/visualization/DOS.js +++ b/gui/src/components/visualization/DOS.js @@ -20,8 +20,8 @@ import PropTypes from 'prop-types' import { useTheme } from '@material-ui/core/styles' import { MoreVert } from '@material-ui/icons' import Plot from '../plotting/Plot' -import { add, mergeObjects } from '../../utils' -import { Quantity, Unit } from '../../units' +import { add, mergeObjects, resolveInternalRef } from '../../utils' +import { Quantity, Unit, useUnits } from '../../units' import { withErrorHandler } from '../ErrorHandler' import { Action } from '../Actions' import { msgNormalizationWarning } from '../../config' @@ -35,24 +35,19 @@ const DOS = React.memo(({ data, layout, className, - units, type, 'data-testid': testID, ...other }) => { + const units = useUnits() + // Merge custom layout with default layout const initialLayout = useMemo(() => { const defaultLayout = { - yaxis: { - title: { - text: `Energy (${energyUnit.toSystem(units).label()})` - }, - zeroline: type === 'vibrational' - }, xaxis: { showexponent: 'first', - zeroline: false, - autorange: false + autorange: false, + zeroline: type === 'vibrational' }, showlegend: true, legend: { @@ -63,7 +58,7 @@ const DOS = React.memo(({ } } return mergeObjects(layout, defaultLayout) - }, [layout, units, type]) + }, [layout, type]) const [finalData, setFinalData] = useState(!data ? data : undefined) const [finalLayout, setFinalLayout] = useState(initialLayout) @@ -83,115 +78,16 @@ const DOS = React.memo(({ } // Create the final data that will be plotted. - const plotData = [] - let normalized - const mins = [] - const maxes = [] - const dosRenormalized = data.map(d => { - const densities = dosNormalize - ? d.densities.map((density, index) => { - return density.map(density_intensity => density_intensity * d.normalization_factors[index]) - }) - : d.densities - return {...d, densities: densities} - }) - const channels = dosRenormalized.map(d => d.densities.length) - const lines = getLineStyles(channels.reduce((a, b) => a + b, 0), null, channels.length > 0 ? channels[0] : null).values() - dosRenormalized.forEach(d => { - // Determine the energy reference. - let energyHighestOccupied - if (type === 'vibrational') { - energyHighestOccupied = 0 - normalized = true - } else { - if (d.energy_highest_occupied === undefined) { - energyHighestOccupied = 0 - normalized = false - } else { - energyHighestOccupied = new Quantity(d.energy_highest_occupied, energyUnit).toSystem(units).value() - normalized = true - } - } + const version = data.length > 0 ? data[0].version : undefined + const processedData = version === 'new' + ? processNewDosData(data, units, initialLayout, normalizedToHOE, theme, type, dosNormalize) + : processOldDosData(data, units, initialLayout, normalizedToHOE, theme, type, dosNormalize) - // Convert units and determine range - const nChannels = d.densities.length - let energies = new Quantity(d.energies, energyUnit).toSystem(units).value() - const values1 = new Quantity(d.densities[0], valueUnit).toSystem(units).value() - let values2 - mins.push(Math.min(...values1)) - maxes.push(Math.max(...values1)) - if (nChannels === 2) { - values2 = new Quantity(d.densities[1], valueUnit).toSystem(units).value() - mins.push(Math.min(...values2)) - maxes.push(Math.max(...values2)) - } - if (energyHighestOccupied !== 0) { - energies = add(energies, -energyHighestOccupied) - } - - const line = lines.next().value - if (nChannels === 2) { - plotData.push( - { - x: values2, - y: energies, - type: 'scatter', - mode: 'lines', - showlegend: false, - line: lines.next().value - } - ) - } - plotData.push( - { - x: values1, - y: energies, - name: d.name, - type: 'scatter', - mode: 'lines', - showlegend: d.name !== undefined, - line: line - } - ) - }) - - const range = [Math.min(...mins), Math.max(...maxes)] - // Normalization line - if (type !== 'vibrational' && normalizedToHOE) { - plotData.push({ - x: range, - y: [0, 0], - name: 'Highest occupied', - showlegend: true, - type: 'line', - mode: 'lines', - line: { - color: '#000', - width: 1 - } - }) + if (processedData) { + setFinalData(processedData.finalData) + setFinalLayout(processedData.finalLayout) + setNormalizedToHOE(processedData.normalized) } - - // Compute the final layout - const computedLayout = mergeObjects( - { - xaxis: { - title: { - text: dosNormalize ? `${valueUnit.toSystem(units).label()}` : `states ${valueUnit.toSystem(units).label()}` - }, - range: range - }, - legend: { - font: { - size: 13 - } - } - }, - initialLayout - ) - setFinalData(plotData) - setFinalLayout(computedLayout) - setNormalizedToHOE(normalized) }, [data, units, initialLayout, normalizedToHOE, theme, type, dosNormalize]) const open = Boolean(anchorEl) @@ -212,7 +108,7 @@ const DOS = React.memo(({ data-testid={testID} className={className} actions={ - <Action tooltip='Options' onClick={openMenu}> + <Action tooltip='Options' onClick={openMenu} data-testid="dos-options-menu"> <MoreVert/> </Action> } @@ -220,24 +116,25 @@ const DOS = React.memo(({ > </Plot> <Menu - id='settings-menu' anchorEl={anchorEl} getContentAnchorEl={null} anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }} transformOrigin={{ vertical: 'top', horizontal: 'right' }} keepMounted - open={open} - onClose={closeMenu} + open={open} + onClose={closeMenu} > <MenuItem key='normalization'> - <FormControlLabel control={ - <Checkbox - onChange={() => { - setDosNormalize(data[0].normalization_factors ? (dosNormalize) => !dosNormalize : false) - }} - color="primary" - checked={dosNormalize} - /> + <FormControlLabel + control={ + <Checkbox + onChange={() => { + setDosNormalize(data[0].normalization_factors ? (dosNormalize) => !dosNormalize : false) + }} + color="primary" + checked={dosNormalize} + disabled={!data?.[0]?.normalization_factors || data[0].normalization_factors.every(value => value === undefined)} + /> } label='Normalize intensities' /> @@ -259,7 +156,6 @@ DOS.propTypes = { ]), layout: PropTypes.object, className: PropTypes.string, - units: PropTypes.object, // Contains the unit configuration type: PropTypes.string, // Type of band structure: electronic or vibrational 'data-testid': PropTypes.string } @@ -269,3 +165,326 @@ DOS.defaultProps = { } export default withErrorHandler('Could not load density of states.')(DOS) + +/** + * Given index and archive, resolves the data for plotting the DOS. + */ +export function resolveDosNew(properties, archive, pattern) { + // Return undefined if property not available + if (!properties.has('dos_electronic_new')) return false + + // Resolve the final data once archive is here + let dosReferences = archive?.results?.properties?.electronic?.dos_electronic_new || [] + if (!Array.isArray(dosReferences)) dosReferences = [dosReferences] + const dos = [] + for (const reference of dosReferences) { + if (reference.spin_polarized && reference.data.length !== 2) break + const d = { + energies: [], + densities: [], + normalization_factors: [], + energy_highest_occupied: [], + version: 'new' + } + d.name = reference.label + d.spin_polarized = reference.spin_polarized + for (const data of reference.data) { + const match = data.energies.match(pattern) + const path = match ? match[2] : data.energies + const totalMatch = data.total.match(pattern) + const totalPath = match ? totalMatch[2] : data.total + const sourceArchive = match ? (archive.m_ref_archives[match[1]] || archive.m_ref_archives[data.energies.split('#')[0]]) : archive + if (sourceArchive) { + d.energies.push(resolveInternalRef(path, sourceArchive)) + const internalRef = resolveInternalRef(totalPath, sourceArchive) + d.densities.push(internalRef.value) + d.normalization_factors.push(internalRef.normalization_factor) + } + if (data.energy_ref) { + d.energy_highest_occupied.push(data.energy_ref) + } + d.m_path = `${archive?.metadata?.entry_id}/data/results/properties/electronic/dos_electronic_new` + } + if (d.energies && d.densities) dos.push(d) + } + return dos.length === 0 ? false : dos +} + +/** + * Given index and archive, resolves the data for plotting the old DOS. This will eventually + * be deprecated and fully replaced with resolveDosNew(). + */ +export function resolveDosOld(properties, archive, pattern) { + // Return undefined if property not available + if (!properties.has('dos_electronic')) return false + + // Resolve the final data once archive is here + let dosReferences = archive?.results?.properties?.electronic?.dos_electronic || [] + if (!Array.isArray(dosReferences)) dosReferences = [dosReferences] + const dos = [] + for (const reference of dosReferences) { + const d = {version: 'old'} + const match = reference.energies.match(pattern) + const path = match ? match[2] : reference.energies + const totalPath = match ? reference.total.map(ref => ref.match(pattern)[2]) : reference.total + const sourceArchive = match ? (archive.m_ref_archives[match[1]] || archive.m_ref_archives[reference.energies.split('#')[0]]) : archive + if (sourceArchive) { + d.energies = resolveInternalRef(path, sourceArchive) + const internalRef = resolveInternalRef(totalPath, sourceArchive) + d.densities = internalRef.map(dos => dos.value) + d.normalization_factors = internalRef.map(dos => dos.normalization_factor) + } + d.name = reference.label + if (reference.band_gap) { + d.energy_highest_occupied = Math.max(...reference.band_gap.map(x => x.energy_highest_occupied)) + } + d.m_path = `${archive?.metadata?.entry_id}/data/results/properties/electronic/dos_electronic` + if (d.energies && d.densities) dos.push(d) + } + return dos.length === 0 ? false : dos +} + +/** + * Processed the old DOS data plotting. + */ +function processOldDosData(data, units, initialLayout, normalizedToHOE, theme, type, dosNormalize) { + const plotData = [] + let normalized + const mins = [] + const maxes = [] + const dosRenormalized = data.map(d => { + const densities = dosNormalize + ? d.densities.map((density, index) => { + return density.map(density_intensity => density_intensity * d.normalization_factors[index]) + }) + : d.densities + return {...d, densities: densities} + }) + const channels = dosRenormalized.map(d => d.densities.length) + const lines = getLineStyles(channels.reduce((a, b) => a + b, 0), null, channels.length > 0 ? channels[0] : null).values() + dosRenormalized.forEach(d => { + // Determine the energy reference. + let energyHighestOccupied + if (type === 'vibrational') { + energyHighestOccupied = 0 + normalized = true + } else { + if (d.energy_highest_occupied === undefined) { + energyHighestOccupied = 0 + normalized = false + } else { + energyHighestOccupied = new Quantity(d.energy_highest_occupied, energyUnit).toSystem(units).value() + normalized = true + } + } + + // Convert units and determine range + const nChannels = d.densities.length + let energies = new Quantity(d.energies, energyUnit).toSystem(units).value() + const values1 = new Quantity(d.densities[0], valueUnit).toSystem(units).value() + let values2 + mins.push(Math.min(...values1)) + maxes.push(Math.max(...values1)) + if (nChannels === 2) { + values2 = new Quantity(d.densities[1], valueUnit).toSystem(units).value() + mins.push(Math.min(...values2)) + maxes.push(Math.max(...values2)) + } + if (energyHighestOccupied !== 0) { + energies = add(energies, -energyHighestOccupied) + } + + const line = lines.next().value + if (nChannels === 2) { + plotData.push( + { + x: values2, + y: energies, + type: 'scatter', + mode: 'lines', + showlegend: false, + line: lines.next().value + } + ) + } + plotData.push( + { + x: values1, + y: energies, + name: d.name, + type: 'scatter', + mode: 'lines', + showlegend: d.name !== undefined, + line: line + } + ) + }) + + const range = [Math.min(...mins), Math.max(...maxes)] + // Normalization line + if (type !== 'vibrational' && normalizedToHOE) { + plotData.push({ + x: range, + y: [0, 0], + name: 'Highest occupied', + showlegend: true, + type: 'line', + mode: 'lines', + line: { + color: '#000', + width: 1 + } + }) + } + + // Compute the final layout + const computedLayout = mergeObjects( + { + yaxis: { + title: { + text: `Energy (${energyUnit.toSystem(units).label()})` + } + }, + xaxis: { + title: { + text: dosNormalize ? `${valueUnit.toSystem(units).label()}` : `states ${valueUnit.toSystem(units).label()}` + }, + range: range, + zeroline: true + }, + legend: { + font: { + size: 13 + } + } + }, + initialLayout + ) + + return { + finalData: plotData, + finalLayout: computedLayout, + normalized: normalized + } +} +/* + * Processed the new DOS data plotting. + */ +function processNewDosData(data, units, initialLayout, normalizedToHOE, theme, type, dosNormalize) { + // Plotting styles: lineStyles differentiates spin channels, while lineColors changes + // for different methodologies + // @TODO use getLineStyles instead + const lineStyles = ['solid', 'dot'] + const lineColors = ['#005271', '#f57c00'] + + const plotData = [] + let normalized + const isSpinPolarized = [] + const mins = [] + const maxes = [] + for (const [iMethod, dos_method] of data.entries()) { + const methodName = dos_method.name ? dos_method.name : '' + const spinChannels = dos_method.spin_polarized ? 2 : 1 + isSpinPolarized.push(spinChannels === 2) + const spinName = spinChannels === 2 ? ['+', '-'] : [''] + // Looping over different spin channels + for (let iSpin = 0; iSpin < spinChannels; iSpin++) { + // Setting state for renormalizing densities by the normalization factor + const densities = dos_method.densities[iSpin] + const normalization_factor = dos_method.normalization_factors[iSpin] + let dosRenormalized + if (normalization_factor !== undefined && dosNormalize) { + dosRenormalized = densities.map(d => d * normalization_factor) + } else { + dosRenormalized = densities + } + + // Setting the energy reference using the energy_highest_occupied + let energyHighestOccupied + if (type === 'vibrational') { + energyHighestOccupied = 0 + normalized = true + } else { + if (dos_method.energy_highest_occupied[iSpin] === undefined) { + energyHighestOccupied = 0 + normalized = false + } else { + energyHighestOccupied = new Quantity(dos_method.energy_highest_occupied[iSpin], energyUnit).toSystem(units).value() + normalized = true + } + } + + // Convert units and determine range + let energies = new Quantity(dos_method.energies[iSpin], energyUnit).toSystem(units).value() + if (energyHighestOccupied !== 0) { + energies = add(energies, -energyHighestOccupied) + } + const densitiesUnits = new Quantity(dosRenormalized, valueUnit).toSystem(units).value() + mins.push(Math.min(...densitiesUnits)) + maxes.push(Math.max(...densitiesUnits)) + const line = { + width: 2, + dash: lineStyles[iSpin], + color: lineColors[iMethod] + } + plotData.push( + { + x: densitiesUnits, + y: energies, + name: `${methodName}${spinName[iSpin]}`, + type: 'scatter', + mode: 'lines', + showlegend: (methodName !== '' || spinChannels === 2), + line: line + } + ) + } + } + + // Zero energy line in case Fermi energy (EF) is stored + const range = [Math.min(...mins), Math.max(...maxes)] + let referencedLayout + if (normalized) { + referencedLayout = { + yaxis: { + title: { + text: `Energy - E<sub>F</sub> (${energyUnit.toSystem(units).label()})` + }, + zeroline: true + } + } + } else { + referencedLayout = { + yaxis: { + title: { + text: `Energy (${energyUnit.toSystem(units).label()})` + } + } + } + } + const zeroEnergyRefLayout = mergeObjects(initialLayout, referencedLayout) + + // Compute the final layout + const computedLayout = mergeObjects( + { + xaxis: { + title: { + text: dosNormalize ? `${valueUnit.toSystem(units).label()}` : `states ${valueUnit.toSystem(units).label()}` + }, + range: range + }, + legend: { + font: { + size: 13 + } + } + }, + zeroEnergyRefLayout + ) + + return { + finalData: plotData, + finalLayout: computedLayout, + normalized: normalized + } +} diff --git a/gui/src/components/visualization/DOS.spec.js b/gui/src/components/visualization/DOS.spec.js new file mode 100644 index 0000000000000000000000000000000000000000..3bc8bee9e4fc04db66af54ca781f242f76d8b8b8 --- /dev/null +++ b/gui/src/components/visualization/DOS.spec.js @@ -0,0 +1,59 @@ +/* + * Copyright The NOMAD Authors. + * + * This file is part of NOMAD. See https://nomad-lab.eu for further info. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React from 'react' +import userEvent from '@testing-library/user-event' +import { screen, renderNoAPI } from '../conftest.spec' +import DOS from './DOS' + +test.each([ + [ + 'no normalization factors', + [{ + energies: [0.1, 0.2, 0.3, 0.4, 0.5], + densities: [[0.1, 0.2, 0.3, 0.4, 0.5]], + normalization_factors: undefined + }], + true + ], + [ + 'with normalization factors', + [{ + energies: [0.1, 0.2, 0.3, 0.4, 0.5], + densities: [[0.1, 0.2, 0.3, 0.4, 0.5]], + normalization_factors: [2.5] + }], + false + ] +])('DOS: %s', async (id, data, normalization_disabled) => { + // Render component + renderNoAPI(<DOS data={data} />) + + // Find menu element + const menuButton = screen.getByTestId('dos-options-menu') + + // Click on menu to open options + await userEvent.click(menuButton) + + // Assert that the normalization option is disabled or not + const normalizationOption = screen.getByLabelText('Normalize intensities') + if (normalization_disabled) { + expect(normalizationOption).toBeDisabled() + } else { + expect(normalizationOption).not.toBeDisabled() + } +}) diff --git a/gui/src/components/visualization/EELS.js b/gui/src/components/visualization/EELS.js deleted file mode 100644 index 105e9e52ce4ef3b59c4d948169a226e4d8ce091a..0000000000000000000000000000000000000000 --- a/gui/src/components/visualization/EELS.js +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright The NOMAD Authors. - * - * This file is part of NOMAD. See https://nomad-lab.eu for further info. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import React, {useState, useEffect, useMemo} from 'react' -import PropTypes from 'prop-types' -import { useTheme } from '@material-ui/core/styles' -import Plot from '../plotting/Plot' -import { mergeObjects } from '../../utils' -import { getLineStyles } from '../plotting/common' -import { Quantity, Unit } from '../../units' -import { withErrorHandler } from '../ErrorHandler' - -const energyUnit = new Unit('joule') - -/** - * Graph for EELS (electron energy loss specroscopy) data. - */ -function EELS({data, layout, className, units, ...other}) { - const [finalData, setFinalData] = useState(!data ? data : undefined) - const theme = useTheme() - - // Merge custom layout with default layout - const tmpLayout = useMemo(() => { - if (data === undefined) { - return - } - const nTraces = data.length - const defaultLayout = { - showlegend: nTraces > 1, - legend: { - x: 1, - y: 1, - xanchor: 'right', - yanchor: 'top' - }, - yaxis: { - title: { - text: 'Electron count' - } - }, - xaxis: { - showexponent: 'first', - title: { - text: `Electron energy loss (${energyUnit.toSystem(units).label()})` - } - } - } - return mergeObjects(layout, defaultLayout) - }, [layout, units, data]) - - // The plotted data is loaded only after the first render as a side effect to - // avoid freezing the UI - useEffect(() => { - if (!data) { - setFinalData(data) - return - } - const plotData = [] - const lineStyles = getLineStyles(data.length, theme) - for (let i = 0; i < data.length; ++i) { - const trace = data[i] - const energies = new Quantity(trace.energy, energyUnit).toSystem(units).value() - plotData.push( - { - x: energies, - y: trace.count, - name: i, - type: 'scatter', - mode: 'lines', - line: lineStyles[i] - } - ) - } - setFinalData(plotData) - }, [data, theme, units]) - - return <Plot - data={finalData} - layout={tmpLayout} - floatTitle="EELS" - fixedMargins={true} - className={className} - {...other} - /> -} - -EELS.propTypes = { - data: PropTypes.arrayOf(PropTypes.shape({ - count: PropTypes.arrayOf(PropTypes.number), - energy: PropTypes.arrayOf(PropTypes.number) - })), - layout: PropTypes.object, - className: PropTypes.string, - units: PropTypes.object -} - -export default withErrorHandler('Could not load EELS data.')(EELS) diff --git a/gui/src/components/visualization/ElectronicProperties.js b/gui/src/components/visualization/ElectronicProperties.js index f0d2e5294c20990b21b0335f8eed92423799ce8c..ff25b62c465912a4a8750dfb6441b0f9e590410a 100644 --- a/gui/src/components/visualization/ElectronicProperties.js +++ b/gui/src/components/visualization/ElectronicProperties.js @@ -38,12 +38,6 @@ const useStyles = makeStyles((theme) => { placeholder: { top: theme.spacing(0.7), bottom: theme.spacing(2) - }, - regtau: { - height: '300px' - }, - imsiw: { - height: '300px' } } }) @@ -120,11 +114,10 @@ const ElectronicProperties = React.memo(({ // Custom layout if only Greens functions are available } else if (bs === false && dos === false && band_gap === false && brillouin_zone === false) { return <PropertyGrid> - <PropertyItem title="Green's functions" xs={12} height="auto"> + <PropertyItem title="Green's functions" xs={12} height='auto'> <GreensFunctions data={gf} provenance={dmftprovenance} - classes={{regtau: styles.regtau, imsiw: styles.imsiw}} /> </PropertyItem> </PropertyGrid> @@ -169,7 +162,6 @@ const ElectronicProperties = React.memo(({ <GreensFunctions data={gf} provenance={dmftprovenance} - classes={{regtau: styles.regtau, imsiw: styles.imsiw}} /> </PropertyItem> } diff --git a/gui/src/components/visualization/Ellipsis.js b/gui/src/components/visualization/Ellipsis.js new file mode 100644 index 0000000000000000000000000000000000000000..f9c8a55298c8febb68f6548cb9f330c3df070949 --- /dev/null +++ b/gui/src/components/visualization/Ellipsis.js @@ -0,0 +1,55 @@ +/* + * Copyright The NOMAD Authors. + * + * This file is part of NOMAD. See https://nomad-lab.eu for further info. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React from 'react' +import PropTypes from 'prop-types' +import clsx from 'clsx' +import { makeStyles } from '@material-ui/core' + +/** + * Component for displaying text that should be truncated with an Ellipsis + * either in front of the text or after the text. + */ +const useStyles = makeStyles(theme => ({ + root: { + dislay: 'inline-block', + whiteSpace: 'nowrap', + overflow: 'hidden', + textOverflow: 'ellipsis' + }, + // This is a trick to make the ellipsis appear in front. Note the special sign + // injected in front that makes the content flow form left-to-right. + ellipsisFront: { + direction: 'rtl', + textAlign: 'left', + '&::before': { + content: '""' + } + } +})) + +const Ellipsis = React.memo(({front, children}) => { + const styles = useStyles() + return <div className={clsx(styles.root, front && styles.ellipsisFront)}>{children}</div> +}) + +Ellipsis.propTypes = { + children: PropTypes.node, + front: PropTypes.bool +} + +export default Ellipsis diff --git a/gui/src/components/visualization/GeometryOptimization.spec.js b/gui/src/components/visualization/GeometryOptimization.spec.js index e8706172d06e30e2b59327f9ac1ed0e9e60a79a9..2b6f7ec2e43abdfe30e3b782e303c78340b5a6c3 100644 --- a/gui/src/components/visualization/GeometryOptimization.spec.js +++ b/gui/src/components/visualization/GeometryOptimization.spec.js @@ -16,7 +16,7 @@ * limitations under the License. */ import React from 'react' -import { render } from '../conftest.spec' +import { renderNoAPI } from '../conftest.spec' import { expectPlot, VisualizationState } from './conftest.spec' import GeometryOptimization from './GeometryOptimization' @@ -27,6 +27,6 @@ test.each([ [VisualizationState.Error, {invalid: 'data'}, undefined], [VisualizationState.Success, [0, 1, 2, 3, 4], undefined] ])('%s', async (state, energies, placeholderTestID) => { - const {container} = render(<GeometryOptimization energies={energies}/>) + const {container} = renderNoAPI(<GeometryOptimization energies={energies}/>) await expectPlot(state, placeholderTestID, errorMsg, container) }) diff --git a/gui/src/components/visualization/GreensFunctions.js b/gui/src/components/visualization/GreensFunctions.js index 4b037588a620ce03bafaed0fdff820d3c6cae9b5..22d0661a489d83e1435611dca2dbb6889e79be50 100644 --- a/gui/src/components/visualization/GreensFunctions.js +++ b/gui/src/components/visualization/GreensFunctions.js @@ -17,7 +17,7 @@ */ import React, {useState, useEffect} from 'react' import PropTypes from 'prop-types' -import { useTheme, makeStyles } from '@material-ui/core/styles' +import { useTheme, makeStyles} from '@material-ui/core/styles' import { Box } from '@material-ui/core' import Plot from '../plotting/Plot' import { @@ -25,158 +25,133 @@ import { PropertyProvenanceList } from '../entry/properties/PropertyCard' import { withErrorHandler } from '../ErrorHandler' -import { mergeObjects, alphabet } from '../../utils' +import { mergeObjects, alphabet, resolveInternalRef } from '../../utils' -/** - * Displays Greens functions data as two plots (real + imag) together with the - * provenance information. - */ export const gfError = 'Could not load Greens functions.' -const types = ['regtau', 'imsiw'] -const useStyles = makeStyles((theme) => ({ - regtau: {}, - imsiw: {} -})) -/* - * Plots data in atom, orbital and spin space, taking into account degeneracies for the - * labeling and titles. - */ -function plotDegeneracy(data, provenance, axisData) { - const oneSpecies = data.length === 1 - const oneSpin = provenance.magnetic_state === 'paramagnetic' - const atomLabels = alphabet - let legendTitle = '' - let legendWidth = 30 - const plotData = [] - for (let iAtom = 0; iAtom < data.length; ++iAtom) { - const atomData = data[iAtom] - if (oneSpin) { // We only show one spin data - const spinData = atomData[0] - for (let iOrb = 0; iOrb < spinData.length; ++iOrb) { - plotData.push({ - x: axisData, - y: spinData[iOrb], - name: `${oneSpecies ? '' : `${atomLabels[iAtom]}`}d<sub>${iOrb}</sub>`, - type: 'scatter' - }) - } - legendTitle = `${oneSpecies ? '<b>[orbital]</b>' : '<b>[atom][orbital]</b>'}` - legendWidth = oneSpecies ? 30 : 40 - } else { - for (let iSpin = 0; iSpin < atomData.length; ++iSpin) { - const spinData = atomData[iSpin] - for (let iOrb = 0; iOrb < spinData.length; ++iOrb) { - plotData.push({ - x: axisData, - y: spinData[iOrb], - name: `${oneSpecies ? '' : `${atomLabels[iAtom]}`}d<sub>${iOrb}</sub>${oneSpin ? '' : iSpin ? '+' : '-'}`, - type: 'scatter' - }) - } - } - legendTitle = `${oneSpecies ? '<b>[orbital][spin]</b>' : '<b>[atom][orbital][spin]</b>'}` - legendWidth = oneSpecies ? 40 : 60 - } +const types = { + greens_function_iw_im: { + xLabel: 'i\u03c9<sub>n</sub>', + yLabel: 'Im G(i\u03c9<sub>n</sub>)', + axis: 'matsubara_freq' + }, + self_energy_iw_im: { + xLabel: 'i\u03c9<sub>n</sub>', + yLabel: 'Im \u03A3(i\u03c9<sub>n</sub>)', + axis: 'matsubara_freq' + }, + greens_function_tau_re: { + xLabel: '\u03c4<sub>n</sub>', + yLabel: 'Re G(\u03c4<sub>n</sub>)', + axis: 'tau' + }, + greens_function_freq_im: { + xLabel: '\u03c9', + yLabel: 'Im G(\u03c9)', + axis: 'frequencies' + }, + self_energy_freq_im: { + xLabel: '\u03c9', + yLabel: 'Im \u03A3(\u03c9)', + axis: 'frequencies' } - return {plotData, legendTitle, legendWidth} } + +const useStyles = makeStyles(theme => ({ + plot: {height: '250px'} +})) + +/** + * Displays Greens functions data together with the provenance information. + */ const GreensFunctions = React.memo(({ data, provenance, className, - classes, 'data-testid': testID, ...other }) => { const theme = useTheme() - const styles = useStyles({classes: classes}) - const [finalData, setFinalData] = useState(!data ? {regtau: data, imsiw: data} : data) - const [finalLayout, setFinalLayout] = useState() + const styles = useStyles() + const [finalData, setFinalData] = useState( + data || Object.fromEntries(Object.keys(types).map(type => [type, [data]])) + ) // Side effect that runs when the data that is displayed should change. By // running all this heavy stuff as a side effect, the first render containing // the placeholders etc. can be done as fast as possible. useEffect(() => { if (!data) { - setFinalData({regtau: data, imsiw: data}) + setFinalData(Object.fromEntries(Object.keys(types).map(type => [type, [data]]))) return } - // Generate plot data for both regtau and imsiw - const tracesAll = {} - const layoutAll = {} - for (const type of types) { - let xLabel = '' - let yLabel = '' - let axisData = [] - let gfData = [] - if (type === 'regtau') { - xLabel = '\u03c4<sub>n</sub>' - yLabel = 'Re G(\u03c4<sub>n</sub>)' - axisData = data.tau - gfData = data.regtau - } else { - xLabel = 'i\u03c9<sub>n</sub>' - yLabel = 'Im \u03A3(i\u03c9<sub>n</sub>)' - axisData = data.iw - gfData = data.imsiw - } - const initialLayout = { - xaxis: { - title: { - text: xLabel - }, - fixedrange: false, - zeroline: true - }, - yaxis: { - title: { - text: yLabel - }, - fixedrange: false, - zeroline: true - } + const finalData = {} + for (const [key, plotArray] of Object.entries(data)) { + if (!plotArray) { + finalData[key] = [plotArray] + continue } + const plots = plotArray.map(plot => { + const {plotData, legendTitle, legendWidth} = plotDegeneracy(plot.x, plot.y, provenance) - // Defining the plot - const plotting = plotDegeneracy(gfData, provenance, axisData) - tracesAll[type] = plotting.plotData - - // Setting finalLayout: title for the legend - const finalLayout = { - showlegend: true, - legend: { - x: 1, - y: 1, - title: { - text: plotting.legendTitle, - font: { - size: 12 + // Defining the plot + const layout = { + xaxis: { + fixedrange: false, + zeroline: true, + title: { + text: types[key].xLabel } }, - xanchor: 'right', - itemwidth: plotting.legendWidth + yaxis: { + fixedrange: false, + zeroline: true, + title: { + text: types[key].yLabel + } + }, + showlegend: true, + legend: { + x: 1, + y: 1, + title: { + text: legendTitle, + font: { + size: 12 + } + }, + xanchor: 'right', + itemwidth: legendWidth + } } - } - layoutAll[type] = mergeObjects(initialLayout, finalLayout) + return { + type: key, + plotData, + layout, + title: plot?.label || '' + } + }) + finalData[key] = plots } - setFinalLayout(layoutAll) - setFinalData(tracesAll) + setFinalData(finalData) }, [data, provenance, theme]) return <Box display="flex" flexDirection="column" height="100%" width="100%"> - <Box flex="1 1 auto"> - {types.map((x) => <Plot - key={x} - data={finalData?.[x]} - layout={finalLayout?.[x]} - floatTitle={"Green's functions"} - className={styles?.[x]} - data-testid={`${testID}-${x}`} - {...other} - />)} - </Box> - {provenance && <Box flex="0 0 auto"> + {Object.entries(finalData).map(([key, plotArray]) => { + if (!plotArray) plotArray = [plotArray] + return plotArray.map((value, index) => + <Plot + key={`${key}-${index}`} + data={value === false ? false : value?.plotData} + layout={value?.layout} + floatTitle={value?.title} + data-testid={`${testID}-${key}`} + className={styles.plot} + {...other} + /> + ) + })} + {(provenance && !Array.isArray(provenance)) && <Box flex="0 0 auto"> <PropertyProvenanceList xs={12}> <PropertyProvenanceItem title="DMFT" @@ -187,23 +162,164 @@ const GreensFunctions = React.memo(({ </Box>} </Box> }) + +const plotType = PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.object), PropTypes.oneOf([false, undefined])]) GreensFunctions.propTypes = { - data: PropTypes.oneOfType([ - PropTypes.oneOf([false, undefined]), // false = no data, undefined = loading - PropTypes.shape({ - tau: PropTypes.array, // Array of tau - regtau: PropTypes.array, // Array of real_green_functions_tau - iw: PropTypes.array, // Array of matsubara_freq - imsiw: PropTypes.array // Array of imag_self_energy_iw - }) - ]), + data: PropTypes.shape({ + greens_function_iw_im: plotType, // Real part of Green's functions in matsubara_freq + self_energy_iw_im: plotType, // Imaginary part of self-energy in matsubara_freq + greens_function_tau_re: plotType, // Real part of Green's functions in tau + greens_function_freq_im: plotType, // Real part of Green's functions in frequencies + self_energy_freq_im: plotType // Imaginary part of self-energy in frequencies + }), provenance: PropTypes.object, // DMFT provenance className: PropTypes.string, - classes: PropTypes.object, 'data-testid': PropTypes.string } GreensFunctions.defaultProps = { - 'data-testid': 'greens-functions' + 'data-testid': 'gfs' +} + +/** + * Given index and archive, resolves the data for plotting Green's functions. + */ +export function resolveGreensFunctions(properties, archive, pattern) { + // Return undefined if property not available + if (!properties.has('greens_functions_electronic')) return false + + // With the current metainfo for Green's functions, we cannot tell just with + // the index data what type of plots will be available. Because of this, we + // don't show anything until the archive is loaded. + // TODO: This could be fixed by refactoring the greens functions data so that + // each section would contain an indexed list of what plots it contains. + if (!archive) return false + + // Resolve the final data once archive is here + let gfReferences = archive?.results?.properties?.electronic?.greens_functions_electronic || [] + if (!Array.isArray(gfReferences)) gfReferences = [gfReferences] + const greensFunctions = [] + for (const reference of gfReferences) { + // Resolving Green's function quantities in tau + const gfTau = {} + const matchTau = reference.tau ? reference.tau.match(pattern) : undefined + const pathTau = matchTau ? matchTau[2] : reference.tau + const matchGreensFunctionTau = reference.greens_function_tau ? reference.greens_function_tau.match(pattern) : undefined + const pathGreensFunctionTau = matchGreensFunctionTau ? matchGreensFunctionTau[2] : reference.greens_function_tau + const sourceArchiveTau = matchTau + ? (archive.m_ref_archives[matchTau[1]] || archive.m_ref_archives[reference.tau.split('#')[0]]) + : archive + if (sourceArchiveTau && pathTau) { + // @TODO ask why I have to flatten the axes (tau, matsubara_freq, frequencies) arrays + gfTau.tau = resolveInternalRef(pathTau, sourceArchiveTau).flat() + const greensFunctionTau = resolveInternalRef(pathGreensFunctionTau, sourceArchiveTau) + gfTau.greens_function_tau_re = greensFunctionTau ? greensFunctionTau.re : undefined + } + + // Resolving Green's function quantities in Matsubara frequencies + const gfMatsFreq = {} + const matchMatsFreq = reference.matsubara_freq ? reference.matsubara_freq.match(pattern) : undefined + const pathMatsFreq = matchMatsFreq ? matchMatsFreq[2] : reference.matsubara_freq + const matchGreensFunctionMatsFreq = reference.greens_function_iw ? reference.greens_function_iw.match(pattern) : undefined + const pathGreensFunctionMatsFreq = matchGreensFunctionMatsFreq ? matchGreensFunctionMatsFreq[2] : reference.greens_function_iw + const matchSelfEnergyMatsFreq = reference.self_energy_iw ? reference.self_energy_iw.match(pattern) : undefined + const pathSelfEnergyMatsFreq = matchSelfEnergyMatsFreq ? matchSelfEnergyMatsFreq[2] : reference.self_energy_iw + const sourceArchiveMatsFreq = matchMatsFreq + ? (archive.m_ref_archives[matchMatsFreq[1]] || archive.m_ref_archives[reference.matsubara_freq.split('#')[0]]) + : archive + if (sourceArchiveMatsFreq && pathMatsFreq) { + gfMatsFreq.matsubara_freq = resolveInternalRef(pathMatsFreq, sourceArchiveMatsFreq).flat() + const greensFunctionMatsFreq = resolveInternalRef(pathGreensFunctionMatsFreq, sourceArchiveMatsFreq) + gfMatsFreq.greens_function_iw_im = greensFunctionMatsFreq ? greensFunctionMatsFreq.im : undefined + const selfEnergyMatsFreq = resolveInternalRef(pathSelfEnergyMatsFreq, sourceArchiveMatsFreq) + gfMatsFreq.self_energy_iw_im = selfEnergyMatsFreq ? selfEnergyMatsFreq.im : undefined + } + const gfImAxis = mergeObjects(gfTau, gfMatsFreq) + + // Resolving Green's function quantities in Matsubara frequencies + const gfFreq = {} + const matchFreq = reference.frequencies ? reference.frequencies.match(pattern) : undefined + const pathFreq = matchFreq ? matchFreq[2] : reference.frequencies + const matchGreensFunctionFreq = reference.greens_function_freq ? reference.greens_function_freq.match(pattern) : undefined + const pathGreensFunctionFreq = matchGreensFunctionFreq ? matchGreensFunctionFreq[2] : reference.greens_function_freq + const matchSelfEnergyFreq = reference.self_energy_freq ? reference.self_energy_freq.match(pattern) : undefined + const pathSelfEnergyFreq = matchSelfEnergyFreq ? matchSelfEnergyFreq[2] : reference.self_energy_freq + const sourceArchiveFreq = matchFreq + ? (archive.m_ref_archives[matchFreq[1]] || archive.m_ref_archives[reference.frequencies.split('#')[0]]) + : archive + if (sourceArchiveFreq && pathFreq) { + gfFreq.frequencies = resolveInternalRef(pathFreq, sourceArchiveFreq).flat() + const greensFunctionFreq = resolveInternalRef(pathGreensFunctionFreq, sourceArchiveFreq) + gfFreq.greens_function_freq_im = greensFunctionFreq ? greensFunctionFreq.im : undefined + const selfEnergyFreq = resolveInternalRef(pathSelfEnergyFreq, sourceArchiveFreq) + gfFreq.self_energy_freq_im = selfEnergyFreq ? selfEnergyFreq.im : undefined + } + + // Merging all resolved data into gf. + const gf = mergeObjects(gfImAxis, gfFreq) + gf.type = reference.type || undefined + gf.label = reference.label || undefined + gf.m_path = `${archive?.metadata?.entry_id}/data/results/properties/electronic/greens_functions_electronic` + if (Object.keys(gf).length !== 0 && gf.type !== 'impurity') greensFunctions.push(gf) + } + + // Store all data under one dictionary for plotting + const data = {} + for (const gf of greensFunctions) { + for (const [type, value] of Object.entries(types)) { + if (gf[type] && gf[value.axis]) { + const oldData = data[type] + if (!oldData) { + data[type] = [] + } + data[type].push({x: gf[value.axis], y: gf[type]}) + } + } + } + return data +} + +/** + * Plots data in atom, orbital and spin space, taking into account degeneracies for the + * labeling and titles. + */ +function plotDegeneracy(axisData, data, provenance) { + const oneSpecies = data.length === 1 + const oneSpin = provenance.magnetic_state === 'paramagnetic' + const atomLabels = alphabet + let legendTitle = '' + let legendWidth = 30 + const plotData = [] + for (let iAtom = 0; iAtom < data.length; ++iAtom) { + const atomData = data[iAtom] + if (oneSpin) { // We only show one spin data + const spinData = atomData[0] + for (let iOrb = 0; iOrb < spinData.length; ++iOrb) { + plotData.push({ + x: axisData, + y: spinData[iOrb], + name: `${oneSpecies ? '' : `${atomLabels[iAtom]}`}d<sub>${iOrb}</sub>`, + type: 'scatter' + }) + } + legendTitle = `${oneSpecies ? '<b>[orbital]</b>' : '<b>[atom][orbital]</b>'}` + legendWidth = oneSpecies ? 30 : 40 + } else { + for (let iSpin = 0; iSpin < atomData.length; ++iSpin) { + const spinData = atomData[iSpin] + for (let iOrb = 0; iOrb < spinData.length; ++iOrb) { + plotData.push({ + x: axisData, + y: spinData[iOrb], + name: `${oneSpecies ? '' : `${atomLabels[iAtom]}`}d<sub>${iOrb}</sub>${oneSpin ? '' : iSpin ? '+' : '-'}`, + type: 'scatter' + }) + } + } + legendTitle = `${oneSpecies ? '<b>[orbital][spin]</b>' : '<b>[atom][orbital][spin]</b>'}` + legendWidth = oneSpecies ? 40 : 60 + } + } + return {plotData, legendTitle, legendWidth} } export default withErrorHandler(gfError)(GreensFunctions) diff --git a/gui/src/components/visualization/GreensFunctions.spec.js b/gui/src/components/visualization/GreensFunctions.spec.js index 7e5dece09a1b20f8454e85429bb6d642ae8aef50..7aa151b64e38ee25b92a0cd38fc31f99d16d0b5f 100644 --- a/gui/src/components/visualization/GreensFunctions.spec.js +++ b/gui/src/components/visualization/GreensFunctions.spec.js @@ -16,17 +16,23 @@ * limitations under the License. */ import React from 'react' -import { render } from '../conftest.spec' +import { renderNoAPI } from '../conftest.spec' import { expectPlot, VisualizationState } from './conftest.spec' import GreensFunctions, { gfError } from './GreensFunctions' +const greens_function_freq_im = 'gfs-greens_function_freq_im-placeholder' + test.each([ - ['no data', VisualizationState.NoData, false, undefined, undefined, undefined, undefined], - ['loading', VisualizationState.Loading, undefined, undefined, undefined, 'greens-functions-regtau', 'greens-functions-imsiw'], - ['error: invalid data layout', VisualizationState.Error, {invalid: 'data'}, undefined, undefined, undefined, undefined], - ['valid', VisualizationState.Success, {tau: [0, 1, 2], regtau: [[[[1, 0, 1]], [[1, 0, 1]]]], iw: [-1, 0, 1], imsiw: [[[[1, 0, 1]], [[1, 0, 1]]]]}, {magnetic_state: 'paramagnetic'}, undefined, 'greens-functions-regtau', 'greens-functions-imsiw'] -])('greens functions: %s', async (id, state, data, provenance, classes, regtauTestID, imsiwTestID) => { - render(<GreensFunctions data={data} provenance={provenance} classes={classes} />) - await expectPlot(state, regtauTestID, gfError) - await expectPlot(state, imsiwTestID, gfError) + ['no data', VisualizationState.NoData, {greens_function_freq_im: false}, undefined], + ['loading', VisualizationState.Loading, {greens_function_freq_im: undefined}, undefined], + ['error: invalid data layout', VisualizationState.Error, {invalid: 'data'}, undefined], + [ + 'valid', + VisualizationState.Success, + {greens_function_freq_im: [{x: [0, 1], y: [[0, 1]]}]}, + {magnetic_state: 'paramagnetic'} + ] +])('greens functions: %s', async (id, state, data, provenance) => { + renderNoAPI(<GreensFunctions data={data} provenance={provenance} />) + await expectPlot(state, greens_function_freq_im, gfError) }) diff --git a/gui/src/components/visualization/H5Web.css b/gui/src/components/visualization/H5Web.css new file mode 100644 index 0000000000000000000000000000000000000000..d5f33af1ffb76316937c9b45b85f1390d6c57803 --- /dev/null +++ b/gui/src/components/visualization/H5Web.css @@ -0,0 +1,38 @@ +._root_sdd7a_1 { + --primary: #a2b3f7; + --primary-light: #a2b3f7; + --primary-lighter: #ffffff; + --primary-dark: #2A4CDF; + --primary-bg: #ffffff; + --primary-light-bg: #ffffff; + --primary-dark-bg: #dde2d7; + --secondary: #2A4CDF; + --secondary-light: #eaedfc; + --secondary-lighter: #a2b3f7; + --secondary-dark: #2A4CDF; + --secondary-dark-15: #1b998b26; + --secondary-darker: #0e5846; + --secondary-bg: #ffffff; + --secondary-light-bg: #ffffff; + --monospace: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; + --sans-serif: -apple-system, BlinkMacSystemFont, "Titillium Web", "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + --toolbar-height: 2.875rem; + --toolbarBtn-height: 2rem +} + +/* Important for removing ugly scrollbars */ +.reflex-element::-webkit-scrollbar { + display: none; +} + +._btnLike_1fvcz_11:hover { + background-color: #FDFEFF !important; + color: var(--primary-dark) !important +} +._btnLike_1fvcz_11 { + height: 1.625rem !important; + background-color: #FDFEFF !important; + border: 1px solid #bdbdbd; + box-shadow: #0000001a 0 0 0 1px, #0000001a 0 1px 4px; + color: #282828; +} \ No newline at end of file diff --git a/gui/src/components/visualization/H5Web.js b/gui/src/components/visualization/H5Web.js index da825874ae8492272efb08ef8a302c095e07af4c..d6b95f6aefaf60c51923ba217312efafd7925f92 100644 --- a/gui/src/components/visualization/H5Web.js +++ b/gui/src/components/visualization/H5Web.js @@ -4,24 +4,17 @@ import { appBase } from '../../config' import { H5GroveProvider, App } from '@h5web/app' import { useApi } from '../api' import { useErrors } from '../errors' +import axios from 'axios' import '@h5web/lib/dist/styles.css' import '@h5web/app/dist/styles.css' -import { makeStyles } from '@material-ui/core' - -const useH5WebStyles = makeStyles(theme => ({ - visualizerContainer: { - color: theme.palette.primary.main - } -})) +import './H5Web.css' const H5Web = ({upload_id, filename, initialPath, explorerOpen}) => { const {api} = useApi() const {raiseError} = useErrors() const [filepath, setFilepath] = useState(false) - const styles = useH5WebStyles() - useEffect(() => { if (filename && upload_id) { if (filename.includes('.yaml') || filename.includes('.yml')) { @@ -39,16 +32,23 @@ const H5Web = ({upload_id, filename, initialPath, explorerOpen}) => { if (filepath) { return ( - <div className={styles.visualizerContainer} key={initialPath}> <H5GroveProvider url={appBase + '/h5grove/'} filepath={filepath} + getExportURL={(format, dataset, selection) => async () => { + const response = await axios.get(appBase + '/h5grove/data/', { + params: { + file: filepath, upload_id: upload_id, format, path: dataset.path + }, + headers: {Authorization: "Bearer " + api?.keycloak?.token} + }) + return new File([response.data], "test." + format) + }} axiosConfig={{params: {file: filepath, upload_id: upload_id}, headers: {Authorization: "Bearer " + api?.keycloak?.token}}} > - <App initialPath={initialPath} explorerOpen={explorerOpen}/> + <App disableDarkMode initialPath={initialPath} explorerOpen={explorerOpen}/> </H5GroveProvider> - </div> ) } return 'Loading...' diff --git a/gui/src/components/visualization/MeanSquaredDisplacement.spec.js b/gui/src/components/visualization/MeanSquaredDisplacement.spec.js index 4bb1ceb51c22efd4a9034eec6bf6623d45a9f692..ab547a3423242885444eba365561440e15698795 100644 --- a/gui/src/components/visualization/MeanSquaredDisplacement.spec.js +++ b/gui/src/components/visualization/MeanSquaredDisplacement.spec.js @@ -16,7 +16,7 @@ * limitations under the License. */ import React from 'react' -import { render } from '../conftest.spec' +import { renderNoAPI } from '../conftest.spec' import { expectPlot, VisualizationState } from './conftest.spec' import MeanSquaredDisplacement, { msdError } from './MeanSquaredDisplacement' @@ -28,6 +28,6 @@ test.each([ ['error: invalid data layout', VisualizationState.Error, {invalid: "data"}, undefined], ['valid', VisualizationState.Success, {molecular: [{label: 'MOL', times: [0, 1], value: [0, 1], diffusion_constant_value: 2.1, diffusion_constant_errors: 0.98}]}, undefined] ])('msd plot: %s', async (id, state, data, placeholderTestID) => { - render(<MeanSquaredDisplacement msd={data} />) + renderNoAPI(<MeanSquaredDisplacement msd={data} />) await expectPlot(state, placeholderTestID, msdError) }) diff --git a/gui/src/components/visualization/RadialDistributionFunction.spec.js b/gui/src/components/visualization/RadialDistributionFunction.spec.js index 0e3883329c71d5463f88d6f44c677b2f08b52331..0ff0dc56e7ee483c565ffbd8aad960eb676e702c 100644 --- a/gui/src/components/visualization/RadialDistributionFunction.spec.js +++ b/gui/src/components/visualization/RadialDistributionFunction.spec.js @@ -16,7 +16,7 @@ * limitations under the License. */ import React from 'react' -import { render } from '../conftest.spec' +import { renderNoAPI } from '../conftest.spec' import { expectPlot, VisualizationState } from './conftest.spec' import RadialDistributionFunction, { rdfError } from './RadialDistributionFunction' @@ -28,6 +28,6 @@ test.each([ ['error: invalid data layout', VisualizationState.Error, {invalid: "data"}, undefined], ['valid', VisualizationState.Success, {molecular: {'MOL-MOL': [{bins: [0, 1], value: [0, 1]}]}}, undefined] ])('rdf plot: %s', async (id, state, data, placeholderTestID) => { - render(<RadialDistributionFunction rdf={data} />) + renderNoAPI(<RadialDistributionFunction rdf={data} />) await expectPlot(state, placeholderTestID, rdfError) }) diff --git a/gui/src/components/visualization/RadiusOfGyration.spec.js b/gui/src/components/visualization/RadiusOfGyration.spec.js index 1bd95809bad28570ab39fce9eb5776feb73743b2..527fdf476a7d69bf8ef38f2752dcfd81ab587415 100644 --- a/gui/src/components/visualization/RadiusOfGyration.spec.js +++ b/gui/src/components/visualization/RadiusOfGyration.spec.js @@ -16,7 +16,7 @@ * limitations under the License. */ import React from 'react' -import { render } from '../conftest.spec' +import { renderNoAPI } from '../conftest.spec' import { expectPlot, VisualizationState } from './conftest.spec' import RadiusOfGyration, { rgError } from './RadiusOfGyration' @@ -28,6 +28,6 @@ test.each([ ['error: invalid data layout', VisualizationState.Error, {invalid: "data"}, undefined], ['valid', VisualizationState.Success, {molecular: [{label: 'MOL', time: [0, 1], value: [0, 1]}]}, undefined] ])('rg plot: %s', async (id, state, data, placeholderTestID) => { - render(<RadiusOfGyration rg={data} />) + renderNoAPI(<RadiusOfGyration rg={data} />) await expectPlot(state, placeholderTestID, rgError) }) diff --git a/gui/src/components/visualization/Spectra.js b/gui/src/components/visualization/Spectra.js new file mode 100644 index 0000000000000000000000000000000000000000..3d5cc20333369e114238e24384df552957c649f2 --- /dev/null +++ b/gui/src/components/visualization/Spectra.js @@ -0,0 +1,183 @@ +/* + * Copyright The NOMAD Authors. + * + * This file is part of NOMAD. See https://nomad-lab.eu for further info. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React, {useState, useEffect, useMemo, useCallback} from 'react' +import PropTypes from 'prop-types' +import { useTheme } from '@material-ui/core/styles' +import { Box, Checkbox, Menu, MenuItem, FormControlLabel } from '@material-ui/core' +import { MoreVert } from '@material-ui/icons' +import Plot from '../plotting/Plot' +import { mergeObjects } from '../../utils' +import { getLineStyles } from '../plotting/common' +import { Quantity, Unit, useUnits } from '../../units' +import { withErrorHandler } from '../ErrorHandler' +import { Action } from '../Actions' + +const energyUnit = new Unit('joule') + +/** + * Graph for Spectra data. + */ +export const spectraError = 'Could not load Spectra.' +const Spectra = React.memo(({ + data, + layout, + className, + 'data-testid': testID, + ...other +}) => { + const [finalData, setFinalData] = useState(!data ? data : undefined) + const theme = useTheme() + const units = useUnits() + const [anchorEl, setAnchorEl] = React.useState(null) + const [spectraNormalize, setSpectraNormalize] = useState(true) + + // Merge custom layout with default layout + const tmpLayout = useMemo(() => { + if (data === undefined) { + return + } + const defaultLayout = { + showlegend: true, + legend: { + x: 1, + y: 1, + xanchor: 'right', + yanchor: 'top' + }, + yaxis: { + title: { + text: 'Intensities (a.u.)' + } + }, + xaxis: { + title: { + text: `Excitation energies (${energyUnit.toSystem(units).label()})` + } + } + } + return mergeObjects(layout, defaultLayout) + }, [layout, units, data]) + + // Get the maximum intensity to normalize in the checkbox + const maximumIntensity = useMemo(() => { + if (!data) return undefined + const maxes = data.map(trace => Math.max(...trace.intensities)) + return Math.max(...maxes) + }, [data]) + + // The plotted data is loaded only after the first render as a side effect to + // avoid freezing the UI + useEffect(() => { + if (!data) { + setFinalData(data) + return + } + + // Normalizing spectra + const plotData = [] + const lineStyles = getLineStyles(data.length, theme) + if (maximumIntensity !== undefined) { + for (let i = 0; i < data.length; ++i) { + const trace = data[i] + const energies = new Quantity(trace.energies, energyUnit).toSystem(units).value() + const intensities = spectraNormalize + ? trace.intensities.map((intensity) => intensity / maximumIntensity) + : trace.intensities + plotData.push( + { + x: energies, + y: intensities, + name: `${data[i].label} ${i}`, + type: 'scatter', + mode: 'lines', + line: lineStyles[i] + } + ) + } + } + setFinalData(plotData) + }, [data, theme, units, spectraNormalize, maximumIntensity]) + + const open = Boolean(anchorEl) + const openMenu = useCallback((event) => { + setAnchorEl(event.currentTarget) + }, []) + const closeMenu = useCallback(() => { + setAnchorEl(null) + }, []) + + return <Box display="flex" flexDirection="column" height="100%" width="100%"> + <Box flex="1 1 auto"> + <Plot + data={finalData} + layout={tmpLayout} + floatTitle={"Spectra"} + className={className} + data-testid={`${testID}`} + actions={ + <Action tooltip='Options' onClick={openMenu}> + <MoreVert/> + </Action> + } + {...other} + > + </Plot> + <Menu + id='settings-menu' + anchorEl={anchorEl} + getContentAnchorEl={null} + anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }} + transformOrigin={{ vertical: 'top', horizontal: 'right' }} + keepMounted + open={open} + onClose={closeMenu} + > + <MenuItem key='normalization'> + <FormControlLabel control={ + <Checkbox + onChange={() => { + setSpectraNormalize(!spectraNormalize) + }} + color="primary" + checked={spectraNormalize} + /> + } + label='Normalize intensities' + /> + </MenuItem> + </Menu> + </Box> + </Box> +}) + +Spectra.propTypes = { + data: PropTypes.arrayOf(PropTypes.shape({ + type: PropTypes.string, + label: PropTypes.string, + intensities: PropTypes.arrayOf(PropTypes.number), + energies: PropTypes.arrayOf(PropTypes.number) + })), + layout: PropTypes.object, + className: PropTypes.string, + 'data-testid': PropTypes.string +} +Spectra.defaultProps = { + 'data-testid': 'spectra' +} + +export default withErrorHandler(spectraError)(Spectra) diff --git a/gui/src/components/visualization/Spectra.spec.js b/gui/src/components/visualization/Spectra.spec.js new file mode 100644 index 0000000000000000000000000000000000000000..ea6fe068a7c1e7576a7c3cc8de6422ae3b224392 --- /dev/null +++ b/gui/src/components/visualization/Spectra.spec.js @@ -0,0 +1,31 @@ +/* + * Copyright The NOMAD Authors. + * + * This file is part of NOMAD. See https://nomad-lab.eu for further info. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React from 'react' +import { renderNoAPI } from '../conftest.spec' +import { expectPlot, VisualizationState } from './conftest.spec' +import Spectra, { spectraError } from './Spectra' + +test.each([ + ['no data', VisualizationState.NoData, false, undefined], + ['loading', VisualizationState.Loading, undefined, 'spectra-placeholder'], + ['error: invalid data layout', VisualizationState.Error, {invalid: 'data'}, undefined], + ['valid', VisualizationState.Success, [{energies: [0, 1, 2], intensities: [0, 2, 1], label: 'computation', type: 'XAS'}], undefined] +])('spectra: %s', async (id, state, data, spectraID) => { + renderNoAPI(<Spectra data={data} />) + await expectPlot(state, spectraID, spectraError) +}) diff --git a/gui/src/components/visualization/StructureBase.js b/gui/src/components/visualization/StructureBase.js index d914a5fad4df04742da5ef90a43cfef14570ec72..ad94f32f901aebb03aef5ec1d7b2f32d6c80eae5 100644 --- a/gui/src/components/visualization/StructureBase.js +++ b/gui/src/components/visualization/StructureBase.js @@ -25,8 +25,13 @@ import { Button, Menu, MenuItem, + Tooltip, Typography, - FormControlLabel + FormControl, + FormLabel, + FormControlLabel, + Radio, + RadioGroup } from '@material-ui/core' import { Alert } from '@material-ui/lab' import { @@ -47,6 +52,11 @@ import { withErrorHandler, withWebGLErrorHandler } from '../ErrorHandler' import { isNil } from 'lodash' import { Quantity } from '../../units' +export const WrapMode = { + Original: "original", + Wrap: "wrap", + Unwrap: "unwrap" +} /** * Used to control a 3D system visualization that is implemented in the * 'children' prop. This allows for an easier change of visualization @@ -84,6 +94,11 @@ const useStyles = makeStyles((theme) => { title: { marginBottom: theme.spacing(1) }, + menuItem: { + margin: theme.spacing(2), + marginTop: theme.spacing(1), + marginBottom: theme.spacing(1) + }, canvas: { position: 'relative', flex: 1, @@ -94,9 +109,9 @@ const useStyles = makeStyles((theme) => { } }) const StructureBase = React.memo(({ - wrap, - onWrap, - disableWrap, + wrapMode, + onWrapModeChange, + disableWrapMode, showLatticeConstants, onShowLatticeConstants, disableShowLatticeConstants, @@ -137,9 +152,9 @@ const StructureBase = React.memo(({ onShowBonds && onShowBonds(value, render) }, [onShowBonds]) - const handleWrap = useCallback((value, showBonds, render = false) => { - onWrap && onWrap(value, showBonds, render) - }, [onWrap]) + const handleWrapModeChange = useCallback((value, showBonds, render = false) => { + onWrapModeChange && onWrapModeChange(value, showBonds, render) + }, [onWrapModeChange]) const handleShowLatticeConstants = useCallback((value, render = false) => { onShowLatticeConstants && onShowLatticeConstants(value, render) @@ -261,58 +276,68 @@ const StructureBase = React.memo(({ open={open} onClose={closeMenu} > - <MenuItem key='show-bonds'> - <FormControlLabel - control={ - <Checkbox - checked={showBonds} - disabled={disableShowBonds} - onChange={(event) => { setShowBonds(!showBonds, true) }} - color='primary' - /> - } - label='Show bonds' - /> - </MenuItem> - <MenuItem key='show-axis'> - <FormControlLabel - control={ - <Checkbox - checked={showLatticeConstants} - disabled={disableShowLatticeConstants} - onChange={(event) => { handleShowLatticeConstants(!showLatticeConstants, true) }} - color='primary' - /> - } - label='Show lattice constants' - /> - </MenuItem> - <MenuItem key='show-cell'> - <FormControlLabel - control={ - <Checkbox - checked={showCell} - disabled={disableShowCell} - onChange={(event) => { setShowCell(!showCell, true) }} - color='primary' - /> - } - label='Show simulation cell' - /> - </MenuItem> - <MenuItem key='wrap'> - <FormControlLabel - control={ - <Checkbox - checked={wrap} - disabled={disableWrap} - onChange={(event) => { handleWrap(!wrap, showBonds, true) }} - color='primary' - /> - } - label='Wrap positions' - /> - </MenuItem> + <MenuItem key='show-bonds'> + <FormControlLabel + control={ + <Checkbox + checked={showBonds} + disabled={disableShowBonds} + onChange={(event) => { setShowBonds(!showBonds, true) }} + color='primary' + /> + } + label='Show bonds' + /> + </MenuItem> + <MenuItem key='show-axis'> + <FormControlLabel + control={ + <Checkbox + checked={showLatticeConstants} + disabled={disableShowLatticeConstants} + onChange={(event) => { handleShowLatticeConstants(!showLatticeConstants, true) }} + color='primary' + /> + } + label='Show lattice constants' + /> + </MenuItem> + <MenuItem key='show-cell'> + <FormControlLabel + control={ + <Checkbox + checked={showCell} + disabled={disableShowCell} + onChange={(event) => { setShowCell(!showCell, true) }} + color='primary' + /> + } + label='Show simulation cell' + /> + </MenuItem> + <FormControl key='wrap' component="fieldset" className={styles.menuItem}> + <FormLabel component="legend">Wrap mode</FormLabel> + <RadioGroup + value={wrapMode} + onChange={handleWrapModeChange} + > + {Object.entries(WrapMode).map(([key, value]) => + <FormControlLabel + key={key} + value={value} + control={<Radio color="primary" disabled={disableWrapMode}/>} + label={<Tooltip + title={{ + [WrapMode.Original]: 'Original positions', + [WrapMode.Wrap]: 'Positions wrapped inside the cell respecting periodic boundary conditions', + [WrapMode.Unwrap]: 'Reconstructs positions so that small structures are not split by periodic cell boundary.' + }[value]}> + <span>{key}</span> + </Tooltip>} + /> + )} + </RadioGroup> + </FormControl> </Menu> </div> </div> @@ -321,9 +346,9 @@ const StructureBase = React.memo(({ }) StructureBase.propTypes = { - wrap: PropTypes.bool, - onWrap: PropTypes.func, - disableWrap: PropTypes.bool, + wrapMode: PropTypes.bool, + onWrapModeChange: PropTypes.func, + disableWrapMode: PropTypes.bool, showLatticeConstants: PropTypes.bool, onShowLatticeConstants: PropTypes.func, disableShowLatticeConstants: PropTypes.bool, diff --git a/gui/src/components/visualization/StructureNGL.js b/gui/src/components/visualization/StructureNGL.js index 8f4bd3a8ad45d74513ac41f5797275af6bb534fc..fd17281d30a2a8c14e6aa0705aae1c29007a390e 100644 --- a/gui/src/components/visualization/StructureNGL.js +++ b/gui/src/components/visualization/StructureNGL.js @@ -1,3 +1,4 @@ +/* eslint-disable no-unused-vars */ /* * Copyright The NOMAD Authors. * @@ -26,9 +27,9 @@ import React, { import { useResizeDetector } from 'react-resize-detector' import { makeStyles } from '@material-ui/core' import PropTypes from 'prop-types' -import { isNil, isEqual } from 'lodash' -import { Stage } from 'ngl' -import StructureBase from './StructureBase' +import { isNil, isEqual, range } from 'lodash' +import { Stage, Vector3 } from 'ngl' +import StructureBase, { WrapMode } from './StructureBase' import * as THREE from 'three' import { withErrorHandler } from '../ErrorHandler' import { useAsyncError } from '../../hooks' @@ -66,7 +67,8 @@ const StructureNGL = React.memo(({ const [showCell, setShowCell] = useState(true) const [showLatticeConstants, setShowLatticeConstants] = useState(true) const [disableShowLatticeConstants, setDisableShowLatticeContants] = useState(true) - const [wrap, setWrap] = useState(true) + const [wrapMode, setWrapMode] = useState(WrapMode.Wrap) + const [disableWrapMode, setDisableWrapMode] = useState(false) const [disableShowCell, setDisableShowCell] = useState(false) const [disableShowBonds, setDisableShowBonds] = useState(false) const stageRef = useRef() @@ -78,6 +80,7 @@ const StructureNGL = React.memo(({ const alignmentRef = useRef() const rotationsRef = useRef() const representationMap = useRef({}) + const representationRef = useRef() const selectionRef = useRef() const { api } = useApi() const asyncError = useAsyncError() @@ -161,11 +164,10 @@ const StructureNGL = React.memo(({ }, [render]) // Toggles position wrapping on all components - const handleWrap = useCallback((value) => { - setWrap(value) - for (const component of Object.values(componentsRef.current)) { - wrapPositions(component, value) - } + const handleWrapModeChange = useCallback((event) => { + setWrapMode(event.target.value) + representationRef.current.wrapMode = event.target.value + wrapRepresentation(componentRef.current, representationRef.current) componentRef.current.autoView(selectionRef.current) }, []) @@ -205,6 +207,10 @@ const StructureNGL = React.memo(({ const handleReset = useCallback(() => { view() componentRef.current.autoView(selectionRef.current) + // Autoview does not work nicely for single atoms: here we zoom back manually + if (representationRef?.current?.indices?.length === 1) { + componentRef.current.stage.viewerControls.zoom(-35) + } }, [view]) // Resizes the canvas to fit current parent @@ -264,6 +270,7 @@ const StructureNGL = React.memo(({ // Load the structure if not already cached const format = 'pdb' let component = componentsRef.current[componentKey] + let root if (!component) { const systemResponse = await api.get( `systems/${entryId}`, @@ -309,7 +316,7 @@ const StructureNGL = React.memo(({ ? top : getRoot(topologyMap[top.parent_system]) } - const root = getRoot(system) + root = getRoot(system) // Recursively add a new representation for each child that does not have // it's own component @@ -317,10 +324,13 @@ const StructureNGL = React.memo(({ const structuralType = top.structural_type const isMonomer = structuralType === 'monomer' const isMolecule = structuralType === 'molecule' - const sele = top.indices - ? `@${((isMolecule || isMonomer) + const indices = top.indices + ? ((isMolecule || isMonomer) ? top.indices[0] - : top.indices).flat().join(',')}` + : top.indices).flat() + : range(top.n_atoms) + const sele = top.indices + ? `@${indices.join(',')}` : 'all' // Add representation for the bonds @@ -338,7 +348,9 @@ const StructureNGL = React.memo(({ representationMap.current[top.system_id] = { bonds: bondRepr, atoms: atomRepr, - sele: sele + sele: sele, + indices: indices, + wrapMode: (isMonomer || isMolecule) ? WrapMode.Unwrap : WrapMode.Wrap } for (const child of top.child_systems || []) { if (!child.atoms) addRepresentation(child) @@ -419,16 +431,13 @@ const StructureNGL = React.memo(({ component.basis = basis component.pbc = pbc component.latticeConstants = latticeConstants - - // Perform a default wrap for the component - wrapPositions(component, wrap) } } componentRef.current = component componentsRef.current[componentKey] = component + // We dont want this effect to react to 'wrap' - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [api, wrapPositions]) + }, [api]) // Called whenever the system changes. Loads the structure asynchronously. useEffect(() => { @@ -476,7 +485,9 @@ const StructureNGL = React.memo(({ const isMonomerGroup = isGroup && isEqual(child_types, new Set(['monomer'])) // Determine the selection to center on. - selectionRef.current = representationMap.current[independent ? selected : topParent]?.sele + const representation = representationMap.current[independent ? selected : topParent] + representationRef.current = representation + selectionRef.current = representation?.sele // Determine the selections to show opaque const opaque = new Set([selected]) @@ -494,6 +505,8 @@ const StructureNGL = React.memo(({ handleShowLatticeConstants(false, false) } setDisableShowCell(!cellVisible) + setDisableWrapMode(!independent) + setWrapMode(representation.wrapMode) setDisableShowLatticeContants(!cellVisible) // Loop through representations and set the correct visualization @@ -510,6 +523,7 @@ const StructureNGL = React.memo(({ value.bonds.setVisibility(false) } } + wrapRepresentation(componentRef.current, representation) // Configure and reset the view based on the basis vectors. const nBasis = 3 @@ -519,8 +533,8 @@ const StructureNGL = React.memo(({ } handleReset() setLoading(false) - // We don't want this effect to react to 'showCell', 'showBonds' or - // 'showLatticeParameters' + // We don't want this effect to react to 'showCell', 'showBonds', + // 'showLatticeParameters', or 'wrapMode' // eslint-disable-next-line react-hooks/exhaustive-deps }, [selected, system, ready, handleShowCell, handleShowLatticeConstants, handleReset]) @@ -528,8 +542,9 @@ const StructureNGL = React.memo(({ onTakeScreenshot={handleTakeScreenshot} onFullscreen={handleFullscreen} onReset={handleReset} - wrap={wrap} - onWrap={handleWrap} + wrapMode={wrapMode} + onWrapModeChange={handleWrapModeChange} + disableWrapMode={disableWrapMode} showLatticeConstants={showLatticeConstants} onShowLatticeConstants={handleShowLatticeConstants} disableShowLatticeConstants={disableShowLatticeConstants} @@ -1177,13 +1192,15 @@ function addObject3DToStage(object, stage) { } /** - * For wrapping and unwrapping atom positions. + * For setting the positions according to the currently set wrapmode. * - * @param {ngl.Component} component The ngl component to wrap - * @param {bool} wrap Whether to use wrapped coordinates. + * @param {ngl.Component} component The ngl component + * @param {ngl.Representation} representation The ngl representation */ -function wrapPositions(component, wrap) { +function wrapRepresentation(component, representation) { let posNew + const indices = representation.indices + const wrapMode = representation.wrapMode const basis = component.basis const cartToFrac = component.cartToFrac const fracToCart = component.fracToCart @@ -1194,61 +1211,92 @@ function wrapPositions(component, wrap) { // Gather and store the original cartesian positions if they are not already // resolved. - if (isNil(component.posCart)) { - component.posCart = [] - component.structure.eachAtom(ap => { - component.posCart.push(ap.positionToVector3(new THREE.Vector3())) - }) + if (isNil(representation.posCart)) { + representation.posCart = [] + for (const index of indices) { + const ap = component.structure.getAtomProxy(index) + representation.posCart.push(ap.positionToVector3(new THREE.Vector3())) + } } - // Create wrapped positions - if (wrap) { - if (!isNil(component.posWrap)) { - posNew = component.posWrap + // Use wrapped positions + if (wrapMode === WrapMode.Wrap) { + if (!isNil(representation.posWrap)) { + posNew = representation.posWrap } else { - posNew = component.posCart.map(pos => { + posNew = representation.posCart.map(pos => { return pos.clone().applyMatrix4(cartToFrac) }) - const eps = 1e-2 - const epsArray = new THREE.Vector3(eps, eps, eps).applyMatrix4(cartToFrac).toArray() - const center = [0.5, 0.5, 0.5] // Positions will be nearest to this location - const shift = center.map((center, i) => pbc[i] ? center - 0.5 - epsArray[i] : 0) - for (let len = posNew.length, i = 0; i < len; ++i) { - const iFracPos = posNew[i] - for (let i = 0; i < 3; ++i) { - if (!pbc[i]) continue - const comp = iFracPos.getComponent(i) - let remainder = ((comp - shift[i]) % 1) + shift[i] - // Unlike in python, remainder in javascript can be negative - if (remainder < -epsArray[i]) remainder += 1 - iFracPos.setComponent(i, remainder) - } - } + wrapPositions(posNew, cartToFrac, pbc) posNew = posNew.map(pos => pos.applyMatrix4(fracToCart)) - component.posWrap = posNew + representation.posWrap = posNew } - // Use original cartesian positions + // Use unwrapped positions + } else if (wrapMode === WrapMode.Unwrap) { + if (!isNil(representation.posUnwrap)) { + posNew = representation.posUnwrap + } else { + const posFrac = representation.posCart.map(pos => { + return pos.clone().applyMatrix4(cartToFrac) + }) + const centerOfPos = getCenterOfPositions(posFrac, component.pbc) + posNew = posFrac.map(pos => pos.add(new Vector3(0.5, 0.5, 0.5).sub(centerOfPos))) + wrapPositions(posNew, cartToFrac, pbc) + posNew = posNew.map(pos => pos.applyMatrix4(fracToCart)) + representation.posUnwrap = posNew + } + // Use original positions + } else if (wrapMode === WrapMode.Original) { + posNew = representation.posCart } else { - posNew = component.posCart + throw Error('Invalid wrapmode provided.') } // Set new positions within the structure data. This follows roughly the // Structure.updatePosition()-function in NGL. let i = 0 - component.structure.eachAtom((ap) => { + for (const index of indices) { + const ap = component.structure.getAtomProxy(index) ap.positionFromVector3(posNew[i]) ++i - }) - component.structure._hasCoords = undefined - component.structure.refreshPosition() + } + // This updates the actual visuals. TODO: not sure why this is producing an // exception, ignored for now. + component.structure._hasCoords = undefined + component.structure.refreshPosition() try { component.updateRepresentations() } catch { } } +/** + * Wraps fractional positions within a cell respecting periodic boundary + * conditions. Wrapping is done in place. + * + * @param {THREE.Vector3[]} posFrac Positions to wrap + * @param {THREE.Matrix4} cartToFrac Matrix to convert cartesian positions to fractional + * @param {bool[]} pbc Periodic boundary conditions for each lattice vector + */ +function wrapPositions(posFrac, cartToFrac, pbc) { + const eps = 1e-2 + const epsArray = new THREE.Vector3(eps, eps, eps).applyMatrix4(cartToFrac).toArray() + const center = [0.5, 0.5, 0.5] // Positions will be nearest to this location + const shift = center.map((center, i) => pbc[i] ? center - 0.5 - epsArray[i] : 0) + for (let len = posFrac.length, i = 0; i < len; ++i) { + const iFracPos = posFrac[i] + for (let i = 0; i < 3; ++i) { + if (!pbc[i]) continue + const comp = iFracPos.getComponent(i) + let remainder = ((comp - shift[i]) % 1) + shift[i] + // Unlike in python, remainder in javascript can be negative + if (remainder < -epsArray[i]) remainder += 1 + iFracPos.setComponent(i, remainder) + } + } +} + // This data is copied directly from NGL as it cannot be imported directly. const atomicNumbers = { H: 1, D: 1, T: 1, HE: 2, LI: 3, BE: 4, B: 5, C: 6, N: 7, O: 8, F: 9, NE: 10, NA: 11, MG: 12, AL: 13, SI: 14, P: 15, S: 16, CL: 17, AR: 18, K: 19, CA: 20, SC: 21, TI: 22, V: 23, CR: 24, MN: 25, FE: 26, CO: 27, NI: 28, CU: 29, ZN: 30, GA: 31, GE: 32, AS: 33, SE: 34, BR: 35, KR: 36, RB: 37, SR: 38, Y: 39, ZR: 40, NB: 41, MO: 42, TC: 43, RU: 44, RH: 45, PD: 46, AG: 47, CD: 48, IN: 49, SN: 50, SB: 51, TE: 52, I: 53, XE: 54, CS: 55, BA: 56, LA: 57, CE: 58, PR: 59, ND: 60, PM: 61, SM: 62, EU: 63, GD: 64, TB: 65, DY: 66, HO: 67, ER: 68, TM: 69, YB: 70, LU: 71, HF: 72, TA: 73, W: 74, RE: 75, OS: 76, IR: 77, PT: 78, AU: 79, HG: 80, TL: 81, PB: 82, BI: 83, PO: 84, AT: 85, RN: 86, FR: 87, RA: 88, AC: 89, TH: 90, PA: 91, U: 92, NP: 93, PU: 94, AM: 95, CM: 96, BK: 97, CF: 98, ES: 99, FM: 100, MD: 101, NO: 102, LR: 103, RF: 104, DB: 105, SG: 106, BH: 107, HS: 108, MT: 109, DS: 110, RG: 111, CN: 112, NH: 113, FL: 114, MC: 115, LV: 116, TS: 117, OG: 118 @@ -1259,3 +1307,46 @@ const vdwRadii = { const elementColors = { 'H': 0xFFFFFF, 'HE': 0xD9FFFF, 'LI': 0xCC80FF, 'BE': 0xC2FF00, 'B': 0xFFB5B5, 'C': 0x909090, 'N': 0x3050F8, 'O': 0xFF0D0D, 'F': 0x90E050, 'NE': 0xB3E3F5, 'NA': 0xAB5CF2, 'MG': 0x8AFF00, 'AL': 0xBFA6A6, 'SI': 0xF0C8A0, 'P': 0xFF8000, 'S': 0xFFFF30, 'CL': 0x1FF01F, 'AR': 0x80D1E3, 'K': 0x8F40D4, 'CA': 0x3DFF00, 'SC': 0xE6E6E6, 'TI': 0xBFC2C7, 'V': 0xA6A6AB, 'CR': 0x8A99C7, 'MN': 0x9C7AC7, 'FE': 0xE06633, 'CO': 0xF090A0, 'NI': 0x50D050, 'CU': 0xC88033, 'ZN': 0x7D80B0, 'GA': 0xC28F8F, 'GE': 0x668F8F, 'AS': 0xBD80E3, 'SE': 0xFFA100, 'BR': 0xA62929, 'KR': 0x5CB8D1, 'RB': 0x702EB0, 'SR': 0x00FF00, 'Y': 0x94FFFF, 'ZR': 0x94E0E0, 'NB': 0x73C2C9, 'MO': 0x54B5B5, 'TC': 0x3B9E9E, 'RU': 0x248F8F, 'RH': 0x0A7D8C, 'PD': 0x006985, 'AG': 0xC0C0C0, 'CD': 0xFFD98F, 'IN': 0xA67573, 'SN': 0x668080, 'SB': 0x9E63B5, 'TE': 0xD47A00, 'I': 0x940094, 'XE': 0x940094, 'CS': 0x57178F, 'BA': 0x00C900, 'LA': 0x70D4FF, 'CE': 0xFFFFC7, 'PR': 0xD9FFC7, 'ND': 0xC7FFC7, 'PM': 0xA3FFC7, 'SM': 0x8FFFC7, 'EU': 0x61FFC7, 'GD': 0x45FFC7, 'TB': 0x30FFC7, 'DY': 0x1FFFC7, 'HO': 0x00FF9C, 'ER': 0x00E675, 'TM': 0x00D452, 'YB': 0x00BF38, 'LU': 0x00AB24, 'HF': 0x4DC2FF, 'TA': 0x4DA6FF, 'W': 0x2194D6, 'RE': 0x267DAB, 'OS': 0x266696, 'IR': 0x175487, 'PT': 0xD0D0E0, 'AU': 0xFFD123, 'HG': 0xB8B8D0, 'TL': 0xA6544D, 'PB': 0x575961, 'BI': 0x9E4FB5, 'PO': 0xAB5C00, 'AT': 0x754F45, 'RN': 0x428296, 'FR': 0x420066, 'RA': 0x007D00, 'AC': 0x70ABFA, 'TH': 0x00BAFF, 'PA': 0x00A1FF, 'U': 0x008FFF, 'NP': 0x0080FF, 'PU': 0x006BFF, 'AM': 0x545CF2, 'CM': 0x785CE3, 'BK': 0x8A4FE3, 'CF': 0xA136D4, 'ES': 0xB31FD4, 'FM': 0xB31FBA, 'MD': 0xB30DA6, 'NO': 0xBD0D87, 'LR': 0xC70066, 'RF': 0xCC0059, 'DB': 0xD1004F, 'SG': 0xD90045, 'BH': 0xE00038, 'HS': 0xE6002E, 'MT': 0xEB0026, 'DS': 0xFFFFFF, 'RG': 0xFFFFFF, 'CN': 0xFFFFFF, 'UUT': 0xFFFFFF, 'FL': 0xFFFFFF, 'UUP': 0xFFFFFF, 'LV': 0xFFFFFF, 'UUH': 0xFFFFFF, 'D': 0xFFFFC0, 'T': 0xFFFFA0 } + +/** + * Calculates the center of positions and also takes the periodicity of the + * system into account. + * + * The algorithm is replicated from: + * https://en.wikipedia.org/wiki/Center_of_mass#Systems_with_periodic_boundary_conditions + * + * @param {*} relative_positions + * @param {*} cell + * @param {*} pbc + * @returns + */ +function getCenterOfPositions(posFrac, pbc) { + const center = new Vector3() + const total = posFrac.length + for (const iComp of [0, 1, 2]) { + const iPbc = pbc[iComp] + let centerComp + if (iPbc) { + let xiSum = 0 + let zetaSum = 0 + for (const pos of posFrac) { + const component = pos.getComponent(iComp) + const theta = component * 2 * Math.PI + xiSum += Math.cos(theta) + zetaSum += Math.sin(theta) + } + const xiMean = xiSum / total + const zetaMean = zetaSum / total + const thetaMean = Math.atan2(-zetaMean, -xiMean) + Math.PI + centerComp = thetaMean / (2 * Math.PI) + } else { + let sum = 0 + for (const pos of posFrac) { + sum += pos.getComponent(iComp) + } + centerComp = sum / posFrac.length + } + center.setComponent(iComp, centerComp) + } + return center +} diff --git a/gui/src/components/visualization/Trajectory.spec.js b/gui/src/components/visualization/Trajectory.spec.js index 1971026b600bcea4a93d0077ed2cf3970b391409..2e708bf6aa6e1941c9cfe39bcdb9470eee430d46 100644 --- a/gui/src/components/visualization/Trajectory.spec.js +++ b/gui/src/components/visualization/Trajectory.spec.js @@ -16,7 +16,7 @@ * limitations under the License. */ import React from 'react' -import { render } from '../conftest.spec' +import { renderNoAPI } from '../conftest.spec' import { expectMethodologyItem } from '../entry/conftest.spec' import { expectPlot, VisualizationState } from './conftest.spec' import Trajectory, { trajectoryError, trajectoryPath } from './Trajectory' @@ -27,7 +27,7 @@ test.each([ ['error', VisualizationState.Error, {invalid: 'data'}, false, false, undefined], ['valid', VisualizationState.Success, {time: [0, 1, 2], value: [0, 1, 2]}, false, false, undefined] ])('trajectory plot: %s', async (id, state, temperature, pressure, energyPotential, placeholderTestID) => { - render(<Trajectory + renderNoAPI(<Trajectory temperature={temperature} pressure={pressure} energyPotential={energyPotential} @@ -39,7 +39,7 @@ test.each([ ['no provenance', undefined], ['valid provenance', {molecular_dynamics: {time_step: 2e-15, ensemble_type: 'NVT'}}] ])('provenance is displayed correctly: %s', async (state, provenance) => { - render(<Trajectory provenance={provenance}/>) + renderNoAPI(<Trajectory provenance={provenance}/>) expectMethodologyItem( 'Molecular dynamics', provenance, diff --git a/gui/src/config.js b/gui/src/config.js index dd54c5ba4420eca35ac8ea684cf7557512979399..78f1a06539215e706f88182d8997ae966cc7266f 100644 --- a/gui/src/config.js +++ b/gui/src/config.js @@ -97,8 +97,12 @@ export const encyclopediaBase = window.nomadEnv.encyclopediaBase export const aitoolkitEnabled = window.nomadEnv.aitoolkitEnabled || false export const oasis = window.nomadEnv.oasis || false export const globalLoginRequired = window.nomadEnv.globalLoginRequired || false +export const appTokenMaxExpiresIn = window.nomadEnv.appTokenMaxExpiresIn || "2023-10-25" export const email = 'support@nomad-lab.eu' export const maxLogsToShow = 50 +export const schemaSeparator = '#' +export const dtypeSeparator = '#' +export const yamlSchemaPrefix = 'entry_id:' window.nomadArtifacts = window.nomadArtifacts || {} export const searchQuantities = window.nomadArtifacts.searchQuantities diff --git a/gui/src/hooks.js b/gui/src/hooks.js index 036bc44e0373050764d7eb70e45769ff7d45f45d..63ffb812e560c14a229bc16203760d56f9c1c042 100644 --- a/gui/src/hooks.js +++ b/gui/src/hooks.js @@ -77,6 +77,7 @@ export function useBoolState(initialValue) { * suggestions for quantity names. * @param {str} input Text input used for the suggestions. Must be non-empty in * order to fetch any suggestions. + * @param {object} filterData Contains the available filters * @param {number} minLength Minimum input length before any dynamic * suggestions are fetched through the API. * @param {number} suggestionsStatic An object containing any fixed suggestion @@ -87,12 +88,12 @@ export function useBoolState(initialValue) { * @return {object} Array of suggestions containing the suggested value and the * quantity name. */ -export function useSuggestions(quantitiesSuggest, quantitiesAll, input, minLength = 2, debounceTime = 150) { +export function useSuggestions(quantitiesSuggest, quantitiesAll, input, filterData, minLength = 2, debounceTime = 150) { const {api} = useApi() const [loading, setLoading] = useState(false) const [suggestions, setSuggestions] = useState([]) const currentRequest = useRef() - const staticSuggestions = useMemo(() => getStaticSuggestions(quantitiesAll), [quantitiesAll]) + const staticSuggestions = useMemo(() => getStaticSuggestions(quantitiesAll, filterData), [quantitiesAll, filterData]) // Used to retrieve suggestions for this field. const fetchSuggestions = useCallback((quantities, input) => { @@ -116,7 +117,7 @@ export function useSuggestions(quantitiesSuggest, quantitiesAll, input, minLengt for (const quantity of quantities) { if (quantity.name in staticSuggestions) { quantitiesFixed.push(quantity) - } else { + } else if (filterData[quantity.name].suggestion) { quantitiesDynamic.push(quantity) } } @@ -130,7 +131,7 @@ export function useSuggestions(quantitiesSuggest, quantitiesAll, input, minLengt } // Start loading the dynamic suggestions - if (input.length >= minLength) { + if (input.length >= minLength && quantitiesDynamic.length > 0) { const promise = api.suggestions(quantitiesDynamic, input) currentRequest.current = promise promise @@ -161,7 +162,7 @@ export function useSuggestions(quantitiesSuggest, quantitiesAll, input, minLengt setSuggestions(flatten(suggestionsTemp)) setLoading(false) } - }, [api, minLength, staticSuggestions]) + }, [api, minLength, staticSuggestions, filterData]) // Debounced version. Notice that we specify a maxWait option in order to keep // on suggesting while the user is typing. diff --git a/gui/src/northTools.json b/gui/src/northTools.json index f416bd9677e21e4bfac9de04a806f888242270ad..70c76ca2d62471994498b7f938467d605e5b29f7 100644 --- a/gui/src/northTools.json +++ b/gui/src/northTools.json @@ -23,7 +23,7 @@ "nionswift": { "short_description": "Run NionSwift to analyze data as well as prepare focus series reconstructions", "description": "Run Nion Swift to analyze data.", - "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/nionswift-webtop:latest", + "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/nionswift-webtop", "privileged": true, "mount_path": "/config", "maintainer": [ @@ -35,7 +35,7 @@ }, "nexustools": { "description": "Includes multiple NeXus tools for visualization and analysis.", - "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/nexus-webtop:latest", + "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/nexus-webtop", "privileged": true, "mount_path": "/config", "file_extensions": [ @@ -99,7 +99,7 @@ "xps": { "short_description": "An example for analyzing XPS data.", "description": "Includes tools for analyzing X-ray Photoelectron Spectroscopy (XPS) spectra and converting SPECS xml files into NeXus.", - "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/xps-jupyter:0.1", + "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/xps-jupyter", "path_prefix": "lab/tree", "icon": "jupyter_logo.svg", "mount_path": "/home/jovyan", @@ -120,6 +120,23 @@ } ] }, + "sts": { + "short_description": "An example for using sts converter.", + "description": "AT this moment, the reader works only for two types of experiments Scanning Tunneling Microscopy (STM) and Scanning Tunneling Spectroscopy (STS) from Scanning Probe Microscopy (SPM). It can only transform the data from Nanonis machine generated files into standarised nexus application definition NXsts. The present version of STS reader can handle files from two specific software versions generic 5e and genric 4.5.", + "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/sts-jupyter", + "path_prefix": "lab/tree", + "icon": "jupyter_logo.svg", + "mount_path": "/home/jovyan", + "file_extensions": [ + "ipynb", "nxs", "h5", "hdf5" + ], + "maintainer": [ + { + "name": "Rubel Mozumder", + "email": "rubel.mozumder@physik.hu-berlin.de" + } + ] + }, "webtop": { "description": "Baseline webtop image for test", "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/webtop", @@ -134,7 +151,7 @@ }, "apmtools": { "short_description": "An example for analyzing atom probe data.", - "description": "Miscellaneous tools from the atom probe community:\nCurrently the Leoben APT_analyzer and the paraprobe-toolbox.", + "description": "Miscellaneous tools from the atom probe community:\nCurrently APTyzer, paraprobe-toolbox, and APAV.\nA JupyterLab instance will start which has a detailed Cheatsheet notebook for getting started.", "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/apmtools-webtop", "privileged": true, "icon": "jupyter_logo.svg", diff --git a/gui/src/service-worker.js b/gui/src/service-worker.js index 44af92bcba02f44e7cc7902d1a0b819f937605e5..821756d51b165b779aac66fe94502b69a35f47e0 100644 --- a/gui/src/service-worker.js +++ b/gui/src/service-worker.js @@ -17,21 +17,7 @@ */ /* eslint-env browser */ - -// This service worker can be customized! -// See https://developers.google.com/web/tools/workbox/modules -// for the list of available Workbox modules, or add any other -// code you'd like. -// You can also remove this file if you'd prefer not to use a -// service worker, and the Workbox build step will be skipped. - -import { clientsClaim } from 'workbox-core' -import { ExpirationPlugin } from 'workbox-expiration' -import { precacheAndRoute, createHandlerBoundToURL } from 'workbox-precaching' -import { registerRoute } from 'workbox-routing' -import { StaleWhileRevalidate } from 'workbox-strategies' - -clientsClaim() +import { precacheAndRoute } from 'workbox-precaching' // Precache all of the assets generated by your build process. // Their URLs are injected into the manifest variable below. @@ -39,63 +25,24 @@ clientsClaim() // even if you decide not to use precaching. See https://cra.link/PWA precacheAndRoute(self.__WB_MANIFEST) -// Set up App Shell-style routing, so that all navigation requests -// are fulfilled with your index.html shell. Learn more at -// https://developers.google.com/web/fundamentals/architecture/app-shell -const fileExtensionRegexp = /\/[^/?]+\\.[^/]+$/ -registerRoute( - // Return false to exempt requests from being fulfilled by index.html. - ({ request, url }) => { - // If this isn't a navigation, skip. - if (request.mode !== 'navigate') { - return false - } // If this is a URL that starts with /_, skip. - - if (url.pathname.startsWith('/_')) { - return false - } // If this looks like a URL for a resource, because it contains // a file extension, skip. - - if (url.pathname.match(fileExtensionRegexp)) { - return false - } // Return true to signal that we want to use the handler. - - return true - }, - createHandlerBoundToURL(process.env.PUBLIC_URL + '/index.html') -) - -// An example runtime caching route for requests that aren't handled by the -// precache, in this case same-origin .png requests like those from in public/ -registerRoute( - // Add in any other file extensions or routing criteria as needed. - ({ url }) => url.origin === self.location.origin && url.pathname.endsWith('.png'), // Customize this strategy as needed, e.g., by changing to CacheFirst. - new StaleWhileRevalidate({ - cacheName: 'images', - plugins: [ - // Ensure that once this runtime cache reaches a maximum size the - // least-recently used images are removed. - new ExpirationPlugin({ maxEntries: 50 }) - ] - }) -) - -// A route that caches the API generated artifacts.js which contains all the configuration dependent gui artifacts. -registerRoute( - ({ url }) => url.origin === self.location.origin && url.pathname.endsWith('/artifacts.js'), - new StaleWhileRevalidate({ - cacheName: 'artifacts', - plugins: [ - new ExpirationPlugin({ maxEntries: 1 }) - ] - }) -) - -// This allows the web app to trigger skipWaiting via -// registration.waiting.postMessage({type: 'SKIP_WAITING'}) -self.addEventListener('message', (event) => { - if (event.data && event.data.type === 'SKIP_WAITING') { - self.skipWaiting() - } +// This is a 'self-destructing' service worker +// (https://github.com/NekR/self-destroying-sw) that is used to fully remove any +// existing service worker definitions on the clients. It was decided that the +// approach of using a service-worker to deploy a progressive web app causes too +// many issues (users reporting problems due to stale service workers + +// deployment updates causing crashes at bootup). TODO: This service worker +// definition can be safely removed after we are fairly sure that all clients +// have properly removed it. +self.addEventListener('install', function(e) { + self.skipWaiting() }) -// Any other custom service worker logic can go here. +self.addEventListener('activate', function(e) { + self.registration.unregister() + .then(function() { + return self.clients.matchAll() + }) + .then(function(clients) { + clients.forEach(client => client.navigate(client.url)) + }) +}) diff --git a/gui/src/units.js b/gui/src/units.js index 8744222f6fd2e456a282a2d158b1a56e672cd5e4..2ee2228e7d981abb8b01b3f7d2213670a5d58523 100644 --- a/gui/src/units.js +++ b/gui/src/units.js @@ -600,6 +600,19 @@ export class Quantity { toSystem(system) { return new Quantity(this.normalized_value, this.unit.toSystem(system), true) } + + /** + * Checks if the given Quantity is equal to this one. + * @param {Quantity} quantity Quantity to compare to + * @returns boolean Whether quantities are equal + */ + equal(quantity) { + if (quantity instanceof Quantity) { + return this.normalized_value === quantity.normalized_value && this.unit.equalBase(quantity.unit) + } else { + throw Error('The given value is not an instance of Quantity.') + } + } } /** diff --git a/gui/src/utils.js b/gui/src/utils.js index 11c28cc762dc17619ffdfc825bf4016d04092f70..6bd6abbb1f2573e5a0bb6f5656e40e0037b9b806 100644 --- a/gui/src/utils.js +++ b/gui/src/utils.js @@ -15,10 +15,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { cloneDeep, merge, isSet, isNil, isArray, isString, isNumber, isPlainObject, startCase } from 'lodash' +import minimatch from 'minimatch' +import { cloneDeep, merge, isSet, isNil, isArray, isString, isNumber, isPlainObject, startCase, isEmpty } from 'lodash' import { Quantity } from './units' import { format } from 'date-fns' -import { dateFormat, guiBase, apiBase, searchQuantities, parserMetadata } from './config' +import { dateFormat, guiBase, apiBase, searchQuantities, parserMetadata, schemaSeparator, dtypeSeparator, yamlSchemaPrefix } from './config' const crypto = require('crypto') const parserLabels = Object.keys(parserMetadata).reduce((result, key) => { @@ -480,14 +481,9 @@ export function formatTimestamp(value) { /** * Determines the data type of the given metainfo. * - * @param {string} quantity The metainfo name (full path). Must exist in - * window.nomadArtifacts.searchQuantities. + * @param {object | str} def The metainfo name or definition. * - * @return {string} The data type of the metainfo. Can be one of the following: - * - number - * - timestamp - * - string - * - unknown + * @return {DType} The data type of the metainfo. */ export const DType = { Int: 'int', @@ -499,6 +495,7 @@ export const DType = { Unknown: 'unknown' } const numericTypes = new Set([DType.Int, DType.Float]) +export const multiTypes = new Set([DType.String, DType.Enum, DType.Boolean]) export function getDatatype(quantity) { if (typeof quantity === 'string') { quantity = searchQuantities[quantity] @@ -506,9 +503,9 @@ export function getDatatype(quantity) { const type_data = quantity?.type?.type_data const type_kind = quantity?.type?.type_kind - if (isString(type_data) && type_data.startsWith('int')) { + if (isString(type_data) && type_data.includes('int')) { return DType.Int - } else if (isString(type_data) && type_data.startsWith('float')) { + } else if (isString(type_data) && type_data.includes('float')) { return DType.Float } else if (type_data === 'nomad.metainfo.metainfo._Datetime') { return DType.Timestamp @@ -565,6 +562,8 @@ export function getSerializer(dtype, pretty = true) { } return pretty ? format(new Date(value), dateFormat) : value } + } else if (dtype === DType.Boolean) { + return (value) => value ? 'true' : 'false' } else { return (value) => value } @@ -588,8 +587,8 @@ export function serializeMetainfo(quantity, value, units) { /** * Returns a function that can be used to deserialize values for a given datatype. * @param {string} dtype The datatype - * @param {bool} pretty Whether to deserialize using a prettier, but possibly - * lossy format. + * @param {string} dimension Optional dimension for the filter. Used to + * determine default unit when a dimensionless value is given. * * @return {func} Function for deserializing values with the given datatype. */ @@ -606,10 +605,10 @@ export function getDeserializer(dtype, dimension) { throw Error(`Could not parse the number ${split[0]}`) } return split.length === 1 - ? new Quantity(value, units?.[dimension] || 'dimensionless') + ? new Quantity(value, units?.[dimension]?.name || 'dimensionless') : new Quantity(value, split[1]) } if (isNumber(value)) { - return new Quantity(value, units?.[dimension] || 'dimensionless') + return new Quantity(value, units?.[dimension]?.name || 'dimensionless') } return value } @@ -620,6 +619,25 @@ export function getDeserializer(dtype, dimension) { } return parseInt(value) } + } else if (dtype === DType.Boolean) { + return (value) => { + if (isNil(value)) { + return value + } + let newValue = value + if (isString(value)) { + const lowercase = value.toLowerCase() + const keywords = { + true: true, + false: false + } + newValue = keywords[lowercase] + if (isNil(newValue)) { + throw Error(`Could not parse boolean value from ${value}`) + } + } + return newValue + } } else { return (value) => { const keywords = { @@ -744,7 +762,8 @@ export function pluralize(word, count, inclusive, format = true, prefix) { 'manager': 'managers', 'filter': 'filters', 'mainfile': 'mainfiles', - 'folder': 'folders' + 'folder': 'folders', + 'has': 'have' } const words = word.trim().split(" ") let lastWord = words[words.length - 1] @@ -1004,6 +1023,9 @@ export function parseNomadUrl(url) { } else if (url.match(/^([a-zA-Z]\w*\.)*[a-zA-Z]\w*$/)) { qualifiedName = url relativeTo = refRelativeTo.deployment + } else if (url.startsWith(yamlSchemaPrefix)) { + [entryId, qualifiedName] = split(url.slice(yamlSchemaPrefix.length), '.', 1) + relativeTo = refRelativeTo.deployment } else { throw new Error(prefix + 'bad url') } @@ -1043,7 +1065,7 @@ export function parseNomadUrl(url) { } } } - if (qualifiedName) { + if (qualifiedName && !entryId) { // Refers to the global schema type = refType.metainfo } else if (deploymentUrl && !uploadId) { @@ -1434,3 +1456,101 @@ export function download(filename, content) { window.URL.revokeObjectURL(url) }, 0) } + +/** + * Mimics the Python split function. + */ +export function split(value, sep, maxsplit) { + const split = value.split(sep) + return maxsplit + ? split.slice(0, maxsplit).concat(split.slice(maxsplit).join(sep)) + : split +} + +/** + * Mimics the Python rsplit function. + */ +export function rsplit(value, sep, maxsplit) { + const split = value.split(sep) + return maxsplit + ? [split.slice(0, -maxsplit).join(sep)].concat(split.slice(-maxsplit)) + : split +} + +/** + * Used to abbreviate a schema name. + */ +export function getSchemaAbbreviation(schema) { + if (!schema) return schema + return schema.startsWith('../') + ? schema + : rsplit(schema, '.', 1).pop() +} + +/** + * Used to split a quantity name into path, schema and dtype. + */ +export function parseQuantityName(fullName) { + if (!fullName) return {} + const parts = split(fullName, schemaSeparator, 1) + const [path, schema] = parts.length === 2 + ? parts + : [fullName, undefined] + const dtypeParts = split(schema, dtypeSeparator, 1) + const [schemaNew, dtype] = parts.length === 2 + ? dtypeParts + : [schema, undefined] + return {path, schema: schemaNew, dtype} +} + +/** + * Used to parse a possible query operator from a quantity name. + */ +export function parseOperator(fullName) { + const operators = new Set(['any', 'all', 'none']) + const parts = rsplit(fullName, ':', 1) + let [quantity, op] = parts.length === 2 + ? parts + : [fullName, undefined] + if (!operators.has(op)) { + quantity = fullName + op = undefined + } + return {quantity, op} +} + +/** + * Used to determine the final set of available option names from an object that + * adheres to the include/exclude/options pattern. + */ +export function getOptions(config) { + const include = config?.include || (config?.options ? Object.keys(config.options) : []) + const exclude = config?.exclude || [] + const options = include.filter((key) => !exclude?.includes(key)) + return options +} + +/** + * Returns whether the given path should be accepted based on include and + * exclude glob patterns. + */ +export function glob(path, include, exclude) { + let match = false + if (!isEmpty(include)) { + for (const pattern of include) { + if (minimatch(path, pattern)) { + match = true + break + } + } + } + if (!isEmpty(exclude)) { + for (const pattern of exclude) { + if (minimatch(path, pattern)) { + match = false + break + } + } + } + return match +} diff --git a/gui/tests/artifacts.js b/gui/tests/artifacts.js index 9fd1cd39279be6b578ffb5ed1f344d8417519bf3..2fb56d98a08f2fb037abec365e8d74691065393b 100644 --- a/gui/tests/artifacts.js +++ b/gui/tests/artifacts.js @@ -7,7 +7,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "upload_name": { "name": "upload_name", @@ -16,7 +17,9 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false, + "suggestion": true }, "upload_create_time": { "name": "upload_create_time", @@ -25,7 +28,8 @@ window.nomadArtifacts = { "type_kind": "custom", "type_data": "nomad.metainfo.metainfo._Datetime" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "entry_id": { "name": "entry_id", @@ -34,7 +38,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "entry_name": { "name": "entry_name", @@ -44,6 +49,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "entry_name.prefix": { @@ -53,7 +59,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "entry_type": { "name": "entry_type", @@ -62,7 +69,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "calc_id": { "name": "calc_id", @@ -71,7 +79,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "entry_create_time": { "name": "entry_create_time", @@ -80,7 +89,8 @@ window.nomadArtifacts = { "type_kind": "custom", "type_data": "nomad.metainfo.metainfo._Datetime" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "parser_name": { "name": "parser_name", @@ -89,7 +99,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "mainfile": { "name": "mainfile", @@ -99,6 +110,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "mainfile.path": { @@ -108,7 +120,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "mainfile_key": { "name": "mainfile_key", @@ -117,7 +130,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "mainfile_key.path": { "name": "mainfile_key", @@ -126,7 +140,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "files": { "name": "files", @@ -138,7 +153,8 @@ window.nomadArtifacts = { "shape": [ "0..*" ], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "files.path": { "name": "files", @@ -150,7 +166,8 @@ window.nomadArtifacts = { "shape": [ "0..*" ], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "pid": { "name": "pid", @@ -159,7 +176,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "raw_id": { "name": "raw_id", @@ -168,7 +186,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "external_id": { "name": "external_id", @@ -177,7 +196,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "published": { "name": "published", @@ -186,7 +206,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "bool" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "publish_time": { "name": "publish_time", @@ -195,7 +216,8 @@ window.nomadArtifacts = { "type_kind": "custom", "type_data": "nomad.metainfo.metainfo._Datetime" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "with_embargo": { "name": "with_embargo", @@ -204,7 +226,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "bool" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "processed": { "name": "processed", @@ -213,7 +236,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "bool" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "last_processing_time": { "name": "last_processing_time", @@ -222,7 +246,8 @@ window.nomadArtifacts = { "type_kind": "custom", "type_data": "nomad.metainfo.metainfo._Datetime" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "processing_errors": { "name": "processing_errors", @@ -234,7 +259,8 @@ window.nomadArtifacts = { "shape": [ "*" ], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "nomad_version": { "name": "nomad_version", @@ -243,7 +269,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "nomad_commit": { "name": "nomad_commit", @@ -252,7 +279,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "comment": { "name": "comment", @@ -261,7 +289,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "references": { "name": "references", @@ -273,7 +302,8 @@ window.nomadArtifacts = { "shape": [ "0..*" ], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "external_db": { "name": "external_db", @@ -289,7 +319,8 @@ window.nomadArtifacts = { "Kyoto Phonopy Database" ] }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "origin": { "name": "origin", @@ -298,7 +329,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "main_author.name": { "name": "name", @@ -307,6 +339,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "main_author.name.text": { @@ -315,7 +348,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "main_author.user_id": { "name": "user_id", @@ -324,7 +358,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "main_author": { "name": "main_author", @@ -333,7 +368,8 @@ window.nomadArtifacts = { "type_kind": "User", "type_data": "User" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "authors.name": { "name": "name", @@ -342,6 +378,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "authors.name.text": { @@ -350,7 +387,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "authors": { "name": "authors", @@ -362,7 +400,8 @@ window.nomadArtifacts = { "shape": [ "0..*" ], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "writers.name": { "name": "name", @@ -371,6 +410,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "writers.name.text": { @@ -379,7 +419,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "writers.user_id": { "name": "user_id", @@ -388,7 +429,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "writers": { "name": "writers", @@ -400,7 +442,8 @@ window.nomadArtifacts = { "shape": [ "0..*" ], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "viewers.name": { "name": "name", @@ -409,6 +452,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "viewers.name.text": { @@ -417,7 +461,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "viewers.user_id": { "name": "user_id", @@ -426,7 +471,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "viewers": { "name": "viewers", @@ -438,7 +484,8 @@ window.nomadArtifacts = { "shape": [ "0..*" ], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "datasets.dataset_id": { "name": "dataset_id", @@ -447,7 +494,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "datasets.dataset_name": { "name": "dataset_name", @@ -457,6 +505,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "datasets.doi": { @@ -466,7 +515,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "datasets.dataset_create_time": { "name": "dataset_create_time", @@ -475,7 +525,8 @@ window.nomadArtifacts = { "type_kind": "custom", "type_data": "nomad.metainfo.metainfo._Datetime" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "datasets.dataset_modified_time": { "name": "dataset_modified_time", @@ -484,7 +535,8 @@ window.nomadArtifacts = { "type_kind": "custom", "type_data": "nomad.metainfo.metainfo._Datetime" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "datasets.dataset_type": { "name": "dataset_type", @@ -496,19 +548,21 @@ window.nomadArtifacts = { "foreign" ] }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "datasets": { "name": "datasets", "description": "A list of user curated datasets this entry belongs to.", "type": { "type_kind": "reference", - "type_data": "/packages/12/section_definitions/0" + "type_data": "/packages/13/section_definitions/0" }, "shape": [ "0..*" ], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "domain": { "name": "domain", @@ -520,7 +574,8 @@ window.nomadArtifacts = { "ems" ] }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "n_quantities": { "name": "n_quantities", @@ -529,7 +584,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "int" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "quantities": { "name": "quantities", @@ -541,7 +597,8 @@ window.nomadArtifacts = { "shape": [ "0..*" ], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "quantities.path": { "name": "quantities", @@ -553,7 +610,8 @@ window.nomadArtifacts = { "shape": [ "0..*" ], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "sections": { "name": "sections", @@ -565,7 +623,8 @@ window.nomadArtifacts = { "shape": [ "*" ], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "optimade.elements": { "name": "elements", @@ -697,7 +756,8 @@ window.nomadArtifacts = { "shape": [ "1..*" ], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "optimade.nelements": { "name": "nelements", @@ -706,7 +766,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "int" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "optimade.elements_ratios": { "name": "elements_ratios", @@ -718,7 +779,8 @@ window.nomadArtifacts = { "shape": [ "nelements" ], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "optimade.chemical_formula_descriptive": { "name": "chemical_formula_descriptive", @@ -727,7 +789,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "optimade.chemical_formula_reduced": { "name": "chemical_formula_reduced", @@ -736,7 +799,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "optimade.chemical_formula_hill": { "name": "chemical_formula_hill", @@ -745,7 +809,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "optimade.chemical_formula_anonymous": { "name": "chemical_formula_anonymous", @@ -754,7 +819,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "optimade.nperiodic_dimensions": { "name": "nperiodic_dimensions", @@ -763,7 +829,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "int" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "optimade.nsites": { "name": "nsites", @@ -772,7 +839,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "int" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "optimade.species_at_sites": { "name": "species_at_sites", @@ -784,7 +852,8 @@ window.nomadArtifacts = { "shape": [ "nsites" ], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "optimade.structure_features": { "name": "structure_features", @@ -800,7 +869,8 @@ window.nomadArtifacts = { "shape": [ "1..*" ], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "section_defs.definition_qualified_name": { "name": "definition_qualified_name", @@ -809,7 +879,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "section_defs.definition_id": { "name": "definition_id", @@ -818,7 +889,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "section_defs.used_directly": { "name": "used_directly", @@ -827,7 +899,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "bool" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "entry_references.target_reference": { "name": "target_reference", @@ -836,7 +909,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "entry_references.target_entry_id": { "name": "target_entry_id", @@ -845,7 +919,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "entry_references.target_mainfile": { "name": "target_mainfile", @@ -854,7 +929,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "entry_references.target_upload_id": { "name": "target_upload_id", @@ -863,7 +939,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "entry_references.target_name": { "name": "target_name", @@ -872,7 +949,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "entry_references.target_path": { "name": "target_path", @@ -881,7 +959,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "entry_references.source_name": { "name": "source_name", @@ -890,7 +969,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "entry_references.source_path": { "name": "source_path", @@ -899,7 +979,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "entry_references.source_quantity": { "name": "source_quantity", @@ -908,79 +989,98 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, - "searchable_quantities.quantity_name": { - "name": "quantity_name", - "description": "The name of the quantity holding the value.", + "search_quantities.id": { + "name": "id", + "description": "The full identifier for this quantity that contains the path in the schema +\nschema name.", "type": { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, - "searchable_quantities.section_definition": { - "name": "section_definition", - "description": "A reference to the section definition for the section that holds the quantity that holds the value.", + "search_quantities.definition": { + "name": "definition", + "description": "A reference to the quantity definition.", "type": { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, - "searchable_quantities.path": { - "name": "path", - "description": "The path to the quantity holding the value.", + "search_quantities.path_archive": { + "name": "path_archive", + "description": "Path of the value within the archive.", "type": { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false + }, + "search_quantities.bool_value": { + "name": "bool_value", + "description": "The value mapped as an ES boolean field.", + "type": { + "type_kind": "python", + "type_data": "bool" + }, + "aggregatable": true, + "dynamic": false }, - "searchable_quantities.keyword_value": { - "name": "keyword_value", - "description": "The value mapped as an ES keyword field.", + "search_quantities.str_value": { + "name": "str_value", + "description": "The value mapped as an ES text and keyword field.", "type": { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": false, + "dynamic": false }, - "searchable_quantities.text_value": { - "name": "text_value", - "description": "The value mapped as an ES text field.", + "search_quantities.str_value.keyword": { + "name": "str_value", + "description": "The value mapped as an ES text and keyword field.", "type": { "type_kind": "python", "type_data": "str" }, - "aggregatable": false + "aggregatable": true, + "dynamic": false }, - "searchable_quantities.long_value": { - "name": "long_value", + "search_quantities.int_value": { + "name": "int_value", "description": "The value mapped as an ES long number field.", "type": { "type_kind": "python", "type_data": "int" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, - "searchable_quantities.double_value": { - "name": "double_value", + "search_quantities.float_value": { + "name": "float_value", "description": "The value mapped as an ES double number field.", "type": { "type_kind": "python", "type_data": "float" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, - "searchable_quantities.date_value": { - "name": "date_value", + "search_quantities.datetime_value": { + "name": "datetime_value", "description": "The value mapped as an ES date field.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "custom", + "type_data": "nomad.metainfo.metainfo._Datetime" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.material_id": { "name": "material_id", @@ -989,7 +1089,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.material.material_name": { "name": "material_name", @@ -999,6 +1100,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.structural_type": { @@ -1018,6 +1120,7 @@ window.nomadArtifacts = { ] }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.dimensionality": { @@ -1033,6 +1136,7 @@ window.nomadArtifacts = { ] }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.building_block": { @@ -1048,6 +1152,7 @@ window.nomadArtifacts = { ] }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.functional_type": { @@ -1061,6 +1166,7 @@ window.nomadArtifacts = { "0..*" ], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.compound_type": { @@ -1074,6 +1180,7 @@ window.nomadArtifacts = { "0..*" ], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.elements": { @@ -1207,6 +1314,7 @@ window.nomadArtifacts = { "0..*" ], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.n_elements": { @@ -1216,7 +1324,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "int" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.elements_exclusive": { "name": "elements_exclusive", @@ -1225,7 +1334,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.material.chemical_formula_descriptive": { "name": "chemical_formula_descriptive", @@ -1235,6 +1345,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.chemical_formula_reduced": { @@ -1245,6 +1356,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.chemical_formula_hill": { @@ -1255,6 +1367,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.chemical_formula_iupac": { @@ -1265,6 +1378,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.chemical_formula_anonymous": { @@ -1275,6 +1389,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.chemical_formula_reduced_fragments": { @@ -1287,7 +1402,8 @@ window.nomadArtifacts = { "shape": [ "*" ], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.elemental_composition.element": { "name": "element", @@ -1416,6 +1532,7 @@ window.nomadArtifacts = { ] }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.elemental_composition.atomic_fraction": { @@ -1425,7 +1542,8 @@ window.nomadArtifacts = { "type_kind": "numpy", "type_data": "float64" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.elemental_composition.mass_fraction": { "name": "mass_fraction", @@ -1434,7 +1552,8 @@ window.nomadArtifacts = { "type_kind": "numpy", "type_data": "float64" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.symmetry.bravais_lattice": { "name": "bravais_lattice", @@ -1460,6 +1579,7 @@ window.nomadArtifacts = { }, "shape": [], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.symmetry.crystal_system": { @@ -1479,6 +1599,7 @@ window.nomadArtifacts = { }, "shape": [], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.symmetry.hall_number": { @@ -1489,7 +1610,8 @@ window.nomadArtifacts = { "type_data": "int32" }, "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.symmetry.hall_symbol": { "name": "hall_symbol", @@ -1500,6 +1622,7 @@ window.nomadArtifacts = { }, "shape": [], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.symmetry.point_group": { @@ -1511,6 +1634,7 @@ window.nomadArtifacts = { }, "shape": [], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.symmetry.space_group_number": { @@ -1521,7 +1645,8 @@ window.nomadArtifacts = { "type_data": "int32" }, "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.symmetry.space_group_symbol": { "name": "space_group_symbol", @@ -1532,6 +1657,7 @@ window.nomadArtifacts = { }, "shape": [], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.symmetry.prototype_formula": { @@ -1541,7 +1667,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.material.symmetry.prototype_aflow_id": { "name": "prototype_aflow_id", @@ -1551,6 +1678,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.symmetry.structure_name": { @@ -1579,6 +1707,7 @@ window.nomadArtifacts = { ] }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.symmetry.strukturbericht_designation": { @@ -1589,6 +1718,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.topology.system_id": { @@ -1598,7 +1728,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.material.topology.label": { "name": "label", @@ -1608,6 +1739,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.topology.method": { @@ -1623,6 +1755,7 @@ window.nomadArtifacts = { ] }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.topology.description": { @@ -1632,7 +1765,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.material.topology.material_id": { "name": "material_id", @@ -1641,7 +1775,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.material.topology.material_name": { "name": "material_name", @@ -1651,6 +1786,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.topology.structural_type": { @@ -1673,6 +1809,7 @@ window.nomadArtifacts = { ] }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.topology.dimensionality": { @@ -1688,6 +1825,7 @@ window.nomadArtifacts = { ] }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.topology.building_block": { @@ -1703,6 +1841,7 @@ window.nomadArtifacts = { ] }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.topology.functional_type": { @@ -1716,6 +1855,7 @@ window.nomadArtifacts = { "0..*" ], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.topology.compound_type": { @@ -1729,6 +1869,7 @@ window.nomadArtifacts = { "0..*" ], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.topology.elements": { @@ -1862,6 +2003,7 @@ window.nomadArtifacts = { "0..*" ], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.topology.n_elements": { @@ -1871,7 +2013,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "int" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.topology.elements_exclusive": { "name": "elements_exclusive", @@ -1880,7 +2023,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.material.topology.chemical_formula_descriptive": { "name": "chemical_formula_descriptive", @@ -1890,6 +2034,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.topology.chemical_formula_reduced": { @@ -1900,6 +2045,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.topology.chemical_formula_hill": { @@ -1910,6 +2056,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.topology.chemical_formula_iupac": { @@ -1920,6 +2067,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.topology.chemical_formula_anonymous": { @@ -1930,6 +2078,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.topology.chemical_formula_reduced_fragments": { @@ -1942,7 +2091,8 @@ window.nomadArtifacts = { "shape": [ "*" ], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.topology.parent_system": { "name": "parent_system", @@ -1951,7 +2101,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.material.topology.child_systems": { "name": "child_systems", @@ -1963,7 +2114,8 @@ window.nomadArtifacts = { "shape": [ "*" ], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.material.topology.atomic_fraction": { "name": "atomic_fraction", @@ -1972,7 +2124,8 @@ window.nomadArtifacts = { "type_kind": "numpy", "type_data": "float64" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.topology.mass_fraction": { "name": "mass_fraction", @@ -1981,7 +2134,8 @@ window.nomadArtifacts = { "type_kind": "numpy", "type_data": "float64" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.topology.n_atoms": { "name": "n_atoms", @@ -1991,7 +2145,8 @@ window.nomadArtifacts = { "type_data": "int" }, "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.topology.sbu_type": { "name": "sbu_type", @@ -2002,6 +2157,7 @@ window.nomadArtifacts = { }, "shape": [], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.topology.largest_cavity_diameter": { @@ -2012,7 +2168,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "meter", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.topology.pore_limiting_diameter": { "name": "pore_limiting_diameter", @@ -2022,7 +2179,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "meter", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.topology.largest_included_sphere_along_free_sphere_path": { "name": "largest_included_sphere_along_free_sphere_path", @@ -2032,7 +2190,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "meter", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.topology.accessible_surface_area": { "name": "accessible_surface_area", @@ -2042,7 +2201,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "meter ** 2", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.topology.accessible_volume": { "name": "accessible_volume", @@ -2052,7 +2212,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "meter ** 3", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.topology.void_fraction": { "name": "void_fraction", @@ -2061,7 +2222,8 @@ window.nomadArtifacts = { "type_kind": "numpy", "type_data": "float64" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.topology.n_channels": { "name": "n_channels", @@ -2071,7 +2233,8 @@ window.nomadArtifacts = { "type_data": "int" }, "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.topology.sbu_coordination_number": { "name": "sbu_coordination_number", @@ -2080,7 +2243,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "int" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.topology.elemental_composition.element": { "name": "element", @@ -2209,6 +2373,7 @@ window.nomadArtifacts = { ] }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.topology.elemental_composition.atomic_fraction": { @@ -2218,7 +2383,8 @@ window.nomadArtifacts = { "type_kind": "numpy", "type_data": "float64" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.topology.elemental_composition.mass_fraction": { "name": "mass_fraction", @@ -2227,7 +2393,8 @@ window.nomadArtifacts = { "type_kind": "numpy", "type_data": "float64" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.topology.system_relation.type": { "name": "type", @@ -2243,6 +2410,7 @@ window.nomadArtifacts = { ] }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.topology.cell.a": { @@ -2253,7 +2421,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "meter", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.topology.cell.b": { "name": "b", @@ -2263,7 +2432,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "meter", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.topology.cell.c": { "name": "c", @@ -2273,7 +2443,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "meter", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.topology.cell.alpha": { "name": "alpha", @@ -2283,7 +2454,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "radian", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.topology.cell.beta": { "name": "beta", @@ -2293,7 +2465,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "radian", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.topology.cell.gamma": { "name": "gamma", @@ -2303,7 +2476,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "radian", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.topology.cell.volume": { "name": "volume", @@ -2313,7 +2487,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "meter ** 3", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.topology.cell.atomic_density": { "name": "atomic_density", @@ -2323,7 +2498,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "1 / meter ** 3", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.topology.cell.mass_density": { "name": "mass_density", @@ -2333,7 +2509,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "kilogram / meter ** 3", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.topology.symmetry.bravais_lattice": { "name": "bravais_lattice", @@ -2359,6 +2536,7 @@ window.nomadArtifacts = { }, "shape": [], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.topology.symmetry.crystal_system": { @@ -2378,6 +2556,7 @@ window.nomadArtifacts = { }, "shape": [], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.topology.symmetry.hall_number": { @@ -2388,7 +2567,8 @@ window.nomadArtifacts = { "type_data": "int32" }, "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.topology.symmetry.hall_symbol": { "name": "hall_symbol", @@ -2399,6 +2579,7 @@ window.nomadArtifacts = { }, "shape": [], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.topology.symmetry.point_group": { @@ -2410,6 +2591,7 @@ window.nomadArtifacts = { }, "shape": [], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.topology.symmetry.space_group_number": { @@ -2420,7 +2602,8 @@ window.nomadArtifacts = { "type_data": "int32" }, "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.material.topology.symmetry.space_group_symbol": { "name": "space_group_symbol", @@ -2431,6 +2614,7 @@ window.nomadArtifacts = { }, "shape": [], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.topology.symmetry.strukturbericht_designation": { @@ -2441,6 +2625,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.topology.symmetry.prototype_label_aflow": { @@ -2452,6 +2637,7 @@ window.nomadArtifacts = { }, "shape": [], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material.topology.symmetry.prototype_name": { @@ -2480,6 +2666,7 @@ window.nomadArtifacts = { ] }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.method.method_id": { @@ -2489,7 +2676,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "str" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.method.method_name": { "name": "method_name", @@ -2505,10 +2693,12 @@ window.nomadArtifacts = { "BSE", "EELS", "XPS", + "XRD", "unavailable" ] }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.method.workflow_name": { @@ -2518,6 +2708,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.method.simulation.program_name": { @@ -2528,6 +2719,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.method.simulation.program_version": { @@ -2538,6 +2730,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.method.simulation.dft.basis_set_type": { @@ -2557,6 +2750,7 @@ window.nomadArtifacts = { ] }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.method.simulation.dft.core_electron_treatment": { @@ -2572,6 +2766,7 @@ window.nomadArtifacts = { ] }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.method.simulation.dft.spin_polarized": { @@ -2581,7 +2776,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "bool" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.method.simulation.dft.scf_threshold_energy_change": { "name": "scf_threshold_energy_change", @@ -2592,7 +2788,8 @@ window.nomadArtifacts = { }, "unit": "joule", "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.method.simulation.dft.van_der_Waals_method": { "name": "van_der_Waals_method", @@ -2603,6 +2800,7 @@ window.nomadArtifacts = { }, "shape": [], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.method.simulation.dft.relativity_method": { @@ -2618,6 +2816,7 @@ window.nomadArtifacts = { }, "shape": [], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.method.simulation.dft.smearing_kind": { @@ -2629,6 +2828,7 @@ window.nomadArtifacts = { }, "shape": [], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.method.simulation.dft.smearing_width": { @@ -2639,7 +2839,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.method.simulation.dft.jacobs_ladder": { "name": "jacobs_ladder", @@ -2656,7 +2857,8 @@ window.nomadArtifacts = { "not processed" ] }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.method.simulation.dft.xc_functional_type": { "name": "xc_functional_type", @@ -2673,7 +2875,8 @@ window.nomadArtifacts = { "not processed" ] }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.method.simulation.dft.xc_functional_names": { "name": "xc_functional_names", @@ -2686,6 +2889,7 @@ window.nomadArtifacts = { "*" ], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.method.simulation.dft.exact_exchange_mixing_factor": { @@ -2695,7 +2899,8 @@ window.nomadArtifacts = { "type_kind": "numpy", "type_data": "float64" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.method.simulation.dft.hubbard_kanamori_model.u_effective": { "name": "u_effective", @@ -2706,7 +2911,8 @@ window.nomadArtifacts = { }, "unit": "joule", "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.method.simulation.dft.hubbard_kanamori_model.u": { "name": "u", @@ -2717,7 +2923,8 @@ window.nomadArtifacts = { }, "unit": "joule", "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.method.simulation.dft.hubbard_kanamori_model.j": { "name": "j", @@ -2728,7 +2935,8 @@ window.nomadArtifacts = { }, "unit": "joule", "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.method.simulation.projection.type": { "name": "type", @@ -2742,6 +2950,7 @@ window.nomadArtifacts = { ] }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.method.simulation.projection.localization_type": { @@ -2755,6 +2964,7 @@ window.nomadArtifacts = { ] }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.method.simulation.gw.type": { @@ -2775,6 +2985,7 @@ window.nomadArtifacts = { }, "shape": [], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.method.simulation.gw.basis_set_type": { @@ -2794,6 +3005,7 @@ window.nomadArtifacts = { ] }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.method.simulation.gw.starting_point_type": { @@ -2812,7 +3024,8 @@ window.nomadArtifacts = { "not processed" ] }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.method.simulation.gw.starting_point_names": { "name": "starting_point_names", @@ -2825,6 +3038,7 @@ window.nomadArtifacts = { "*" ], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.method.simulation.bse.type": { @@ -2841,6 +3055,7 @@ window.nomadArtifacts = { }, "shape": [], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.method.simulation.bse.basis_set_type": { @@ -2860,6 +3075,7 @@ window.nomadArtifacts = { ] }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.method.simulation.bse.starting_point_type": { @@ -2878,7 +3094,8 @@ window.nomadArtifacts = { "not processed" ] }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.method.simulation.bse.starting_point_names": { "name": "starting_point_names", @@ -2891,6 +3108,7 @@ window.nomadArtifacts = { "*" ], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.method.simulation.bse.solver": { @@ -2908,6 +3126,7 @@ window.nomadArtifacts = { }, "shape": [], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.method.simulation.bse.gw_type": { @@ -2927,6 +3146,7 @@ window.nomadArtifacts = { ] }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.method.simulation.dmft.impurity_solver_type": { @@ -2950,17 +3170,9 @@ window.nomadArtifacts = { }, "shape": [], "aggregatable": true, + "dynamic": false, "suggestion": true }, - "results.method.simulation.dmft.total_filling": { - "name": "total_filling", - "description": "Total filling of the correlated atoms in the unit cell per spin \u2208[0.0, 1.0]. E.g., half-filling\nis defined as 0.5.", - "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "aggregatable": false - }, "results.method.simulation.dmft.inverse_temperature": { "name": "inverse_temperature", "description": "Inverse temperature = 1/(kB*T).", @@ -2970,7 +3182,8 @@ window.nomadArtifacts = { }, "unit": "1 / joule", "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.method.simulation.dmft.magnetic_state": { "name": "magnetic_state", @@ -2985,6 +3198,7 @@ window.nomadArtifacts = { }, "shape": [], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.method.simulation.dmft.u": { @@ -2996,16 +3210,36 @@ window.nomadArtifacts = { }, "unit": "joule", "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, - "results.method.simulation.dmft.hunds_hubbard_ratio": { - "name": "hunds_hubbard_ratio", - "description": "Ratio JH/U, with JH being the Hunds coupling and U being the Hubbard local interaction.", + "results.method.simulation.dmft.jh": { + "name": "jh", + "description": "Value of the (interorbital) Hund's coupling.", "type": { "type_kind": "numpy", "type_data": "float64" }, - "aggregatable": false + "unit": "joule", + "shape": [], + "aggregatable": false, + "dynamic": false + }, + "results.method.simulation.dmft.analytical_continuation": { + "name": "analytical_continuation", + "description": "Analytical continuation used to continuate the imaginary space Green's functions into\nthe real frequencies space.\n\n| Name | Description | Reference |\n\n| -------------- | ------------------- | -------------------------------- |\n\n| `'Pade'` | Pade's approximant | https://www.sciencedirect.com/science/article/pii/0021999173901277?via%3Dihub |\n\n| `'MaxEnt'` | Maximum Entropy method | https://journals.aps.org/prb/abstract/10.1103/PhysRevB.41.2380 |\n\n| `'SVD'` | Singular value decomposition | https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.75.517 |\n\n| `'Stochastic'` | Stochastic method | https://journals.aps.org/prb/abstract/10.1103/PhysRevB.57.10287 |", + "type": { + "type_kind": "Enum", + "type_data": [ + "Pade", + "MaxEnt", + "SVD", + "" + ] + }, + "shape": [], + "aggregatable": true, + "dynamic": false }, "results.method.simulation.precision.k_line_density": { "name": "k_line_density", @@ -3016,7 +3250,8 @@ window.nomadArtifacts = { }, "unit": "meter", "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.method.simulation.precision.native_tier": { "name": "native_tier", @@ -3026,7 +3261,8 @@ window.nomadArtifacts = { "type_data": "str" }, "shape": [], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.method.simulation.precision.basis_set": { "name": "basis_set", @@ -3050,6 +3286,7 @@ window.nomadArtifacts = { ] }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.method.simulation.precision.planewave_cutoff": { @@ -3061,7 +3298,8 @@ window.nomadArtifacts = { }, "unit": "joule", "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.method.simulation.precision.apw_cutoff": { "name": "apw_cutoff", @@ -3071,7 +3309,27 @@ window.nomadArtifacts = { "type_data": "float64" }, "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false + }, + "results.method.measurement.xrd.diffraction_method_name": { + "name": "diffraction_method_name", + "description": "The diffraction method used to obtain the diffraction pattern.\n| X-Ray Diffraction Method | Description |\n|------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| **Powder X-Ray Diffraction (PXRD)** | The term \"powder\" refers more to the random orientation of small crystallites than to the physical form of the sample. Can be used with non-powder samples if they present random crystallite orientations. |\n| **Single Crystal X-Ray Diffraction (SCXRD)** | Used for determining the atomic structure of a single crystal. |\n| **High-Resolution X-Ray Diffraction (HRXRD)** | A technique typically used for detailed characterization of epitaxial thin films using precise diffraction measurements. |\n| **Small-Angle X-Ray Scattering (SAXS)** | Used for studying nanostructures in the size range of 1-100 nm. Provides information on particle size, shape, and distribution. |\n| **X-Ray Reflectivity (XRR)** | Used to study thin film layers, interfaces, and multilayers. Provides info on film thickness, density, and roughness. |\n| **Grazing Incidence X-Ray Diffraction (GIXRD)** | Primarily used for the analysis of thin films with the incident beam at a fixed shallow angle. |", + "type": { + "type_kind": "Enum", + "type_data": [ + "Powder X-Ray Diffraction (PXRD)", + "Single Crystal X-Ray Diffraction (SCXRD)", + "High-Resolution X-Ray Diffraction (HRXRD)", + "Small-Angle X-Ray Scattering (SAXS)", + "X-Ray Reflectivity (XRR)", + "Grazing Incidence X-Ray Diffraction (GIXRD)", + "unavailable" + ] + }, + "aggregatable": true, + "dynamic": false, + "suggestion": true }, "results.properties.n_calculations": { "name": "n_calculations", @@ -3080,7 +3338,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "int" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.available_properties": { "name": "available_properties", @@ -3092,7 +3351,8 @@ window.nomadArtifacts = { "shape": [ "0..*" ], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.properties.structural.radial_distribution_function.type": { "name": "type", @@ -3106,6 +3366,7 @@ window.nomadArtifacts = { }, "shape": [], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.properties.structural.radial_distribution_function.label": { @@ -3117,6 +3378,7 @@ window.nomadArtifacts = { }, "shape": [], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.properties.structural.radial_distribution_function.provenance.label": { @@ -3127,7 +3389,8 @@ window.nomadArtifacts = { "type_data": "str" }, "shape": [], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.properties.structural.radial_distribution_function.provenance.molecular_dynamics.time_step": { "name": "time_step", @@ -3138,7 +3401,8 @@ window.nomadArtifacts = { }, "unit": "second", "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structural.radial_distribution_function.provenance.molecular_dynamics.ensemble_type": { "name": "ensemble_type", @@ -3153,7 +3417,8 @@ window.nomadArtifacts = { ] }, "shape": [], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.properties.structural.radius_of_gyration.kind": { "name": "kind", @@ -3164,6 +3429,7 @@ window.nomadArtifacts = { }, "shape": [], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.properties.structural.radius_of_gyration.label": { @@ -3175,6 +3441,7 @@ window.nomadArtifacts = { }, "shape": [], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.properties.structural.radius_of_gyration.provenance.label": { @@ -3185,7 +3452,8 @@ window.nomadArtifacts = { "type_data": "str" }, "shape": [], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.properties.structural.radius_of_gyration.provenance.molecular_dynamics.time_step": { "name": "time_step", @@ -3196,7 +3464,8 @@ window.nomadArtifacts = { }, "unit": "second", "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structural.radius_of_gyration.provenance.molecular_dynamics.ensemble_type": { "name": "ensemble_type", @@ -3211,7 +3480,19 @@ window.nomadArtifacts = { ] }, "shape": [], - "aggregatable": true + "aggregatable": true, + "dynamic": false + }, + "results.properties.structural.diffraction_pattern.incident_beam_wavelength": { + "name": "incident_beam_wavelength", + "description": "The wavelength of the incident beam.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "meter", + "aggregatable": false, + "dynamic": false }, "results.properties.dynamical.mean_squared_displacement.type": { "name": "type", @@ -3225,6 +3506,7 @@ window.nomadArtifacts = { }, "shape": [], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.properties.dynamical.mean_squared_displacement.label": { @@ -3236,6 +3518,7 @@ window.nomadArtifacts = { }, "shape": [], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.properties.dynamical.mean_squared_displacement.provenance.label": { @@ -3246,7 +3529,8 @@ window.nomadArtifacts = { "type_data": "str" }, "shape": [], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.properties.dynamical.mean_squared_displacement.provenance.molecular_dynamics.time_step": { "name": "time_step", @@ -3257,7 +3541,8 @@ window.nomadArtifacts = { }, "unit": "second", "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.dynamical.mean_squared_displacement.provenance.molecular_dynamics.ensemble_type": { "name": "ensemble_type", @@ -3272,7 +3557,8 @@ window.nomadArtifacts = { ] }, "shape": [], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.properties.structures.structure_original.nperiodic_dimensions": { "name": "nperiodic_dimensions", @@ -3281,7 +3567,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "int" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structures.structure_original.n_sites": { "name": "n_sites", @@ -3290,7 +3577,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "int" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structures.structure_original.cell_volume": { "name": "cell_volume", @@ -3300,7 +3588,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "meter ** 3", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structures.structure_original.lattice_parameters.a": { "name": "a", @@ -3310,7 +3599,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "meter", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structures.structure_original.lattice_parameters.b": { "name": "b", @@ -3320,7 +3610,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "meter", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structures.structure_original.lattice_parameters.c": { "name": "c", @@ -3330,7 +3621,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "meter", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structures.structure_original.lattice_parameters.alpha": { "name": "alpha", @@ -3340,7 +3632,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "radian", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structures.structure_original.lattice_parameters.beta": { "name": "beta", @@ -3350,7 +3643,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "radian", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structures.structure_original.lattice_parameters.gamma": { "name": "gamma", @@ -3360,7 +3654,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "radian", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structures.structure_conventional.nperiodic_dimensions": { "name": "nperiodic_dimensions", @@ -3369,7 +3664,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "int" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structures.structure_conventional.n_sites": { "name": "n_sites", @@ -3378,7 +3674,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "int" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structures.structure_conventional.cell_volume": { "name": "cell_volume", @@ -3388,7 +3685,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "meter ** 3", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structures.structure_conventional.lattice_parameters.a": { "name": "a", @@ -3398,7 +3696,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "meter", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structures.structure_conventional.lattice_parameters.b": { "name": "b", @@ -3408,7 +3707,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "meter", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structures.structure_conventional.lattice_parameters.c": { "name": "c", @@ -3418,7 +3718,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "meter", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structures.structure_conventional.lattice_parameters.alpha": { "name": "alpha", @@ -3428,7 +3729,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "radian", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structures.structure_conventional.lattice_parameters.beta": { "name": "beta", @@ -3438,7 +3740,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "radian", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structures.structure_conventional.lattice_parameters.gamma": { "name": "gamma", @@ -3448,7 +3751,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "radian", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structures.structure_primitive.nperiodic_dimensions": { "name": "nperiodic_dimensions", @@ -3457,7 +3761,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "int" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structures.structure_primitive.n_sites": { "name": "n_sites", @@ -3466,7 +3771,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "int" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structures.structure_primitive.cell_volume": { "name": "cell_volume", @@ -3476,7 +3782,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "meter ** 3", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structures.structure_primitive.lattice_parameters.a": { "name": "a", @@ -3486,7 +3793,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "meter", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structures.structure_primitive.lattice_parameters.b": { "name": "b", @@ -3496,7 +3804,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "meter", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structures.structure_primitive.lattice_parameters.c": { "name": "c", @@ -3506,7 +3815,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "meter", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structures.structure_primitive.lattice_parameters.alpha": { "name": "alpha", @@ -3516,7 +3826,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "radian", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structures.structure_primitive.lattice_parameters.beta": { "name": "beta", @@ -3526,7 +3837,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "radian", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.structures.structure_primitive.lattice_parameters.gamma": { "name": "gamma", @@ -3536,7 +3848,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "radian", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.electronic.band_gap.index": { "name": "index", @@ -3545,7 +3858,8 @@ window.nomadArtifacts = { "type_kind": "numpy", "type_data": "int32" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.electronic.band_gap.value": { "name": "value", @@ -3556,7 +3870,8 @@ window.nomadArtifacts = { }, "unit": "joule", "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.electronic.band_gap.type": { "name": "type", @@ -3569,7 +3884,8 @@ window.nomadArtifacts = { ] }, "shape": [], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.properties.electronic.band_gap.provenance.label": { "name": "label", @@ -3579,7 +3895,8 @@ window.nomadArtifacts = { "type_data": "str" }, "shape": [], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.properties.electronic.dos_electronic.spin_polarized": { "name": "spin_polarized", @@ -3588,7 +3905,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "bool" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.properties.electronic.dos_electronic.band_gap.index": { "name": "index", @@ -3597,7 +3915,8 @@ window.nomadArtifacts = { "type_kind": "numpy", "type_data": "int32" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.electronic.dos_electronic.band_gap.value": { "name": "value", @@ -3608,7 +3927,8 @@ window.nomadArtifacts = { }, "unit": "joule", "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.electronic.dos_electronic.band_gap.type": { "name": "type", @@ -3621,7 +3941,8 @@ window.nomadArtifacts = { ] }, "shape": [], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.properties.electronic.dos_electronic.band_gap.provenance.label": { "name": "label", @@ -3631,7 +3952,75 @@ window.nomadArtifacts = { "type_data": "str" }, "shape": [], - "aggregatable": true + "aggregatable": true, + "dynamic": false + }, + "results.properties.electronic.dos_electronic_new.spin_polarized": { + "name": "spin_polarized", + "description": "Whether the DOS is spin-polarized, i.e. is contains channels for both\nspin values.", + "type": { + "type_kind": "python", + "type_data": "bool" + }, + "aggregatable": true, + "dynamic": false + }, + "results.properties.electronic.dos_electronic_new.has_projected": { + "name": "has_projected", + "description": "Whether the DOS has information about projections (species-, atom-, and/or orbital-\nprojected).", + "type": { + "type_kind": "python", + "type_data": "bool" + }, + "aggregatable": true, + "dynamic": false + }, + "results.properties.electronic.dos_electronic_new.data.band_gap.index": { + "name": "index", + "description": "The spin channel index.", + "type": { + "type_kind": "numpy", + "type_data": "int32" + }, + "aggregatable": false, + "dynamic": false + }, + "results.properties.electronic.dos_electronic_new.data.band_gap.value": { + "name": "value", + "description": "The actual value of the band gap. Value of zero indicates a vanishing band gap and\nis distinct from sources lacking any band gap measurement or calculation.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "joule", + "shape": [], + "aggregatable": false, + "dynamic": false + }, + "results.properties.electronic.dos_electronic_new.data.band_gap.type": { + "name": "type", + "description": "Band gap type.", + "type": { + "type_kind": "Enum", + "type_data": [ + "direct", + "indirect" + ] + }, + "shape": [], + "aggregatable": true, + "dynamic": false + }, + "results.properties.electronic.dos_electronic_new.data.band_gap.provenance.label": { + "name": "label", + "description": "Class or type of the provenance.\nCan be used to add further description to the provenance.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [], + "aggregatable": true, + "dynamic": false }, "results.properties.electronic.band_structure_electronic.spin_polarized": { "name": "spin_polarized", @@ -3640,7 +4029,8 @@ window.nomadArtifacts = { "type_kind": "python", "type_data": "bool" }, - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.properties.electronic.band_structure_electronic.band_gap.index": { "name": "index", @@ -3649,7 +4039,8 @@ window.nomadArtifacts = { "type_kind": "numpy", "type_data": "int32" }, - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.electronic.band_structure_electronic.band_gap.value": { "name": "value", @@ -3660,7 +4051,8 @@ window.nomadArtifacts = { }, "unit": "joule", "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.electronic.band_structure_electronic.band_gap.type": { "name": "type", @@ -3673,7 +4065,8 @@ window.nomadArtifacts = { ] }, "shape": [], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.properties.electronic.band_structure_electronic.band_gap.provenance.label": { "name": "label", @@ -3683,7 +4076,8 @@ window.nomadArtifacts = { "type_data": "str" }, "shape": [], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.properties.optoelectronic.solar_cell.efficiency": { "name": "efficiency", @@ -3693,7 +4087,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.optoelectronic.solar_cell.fill_factor": { "name": "fill_factor", @@ -3703,7 +4098,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.optoelectronic.solar_cell.open_circuit_voltage": { "name": "open_circuit_voltage", @@ -3714,7 +4110,8 @@ window.nomadArtifacts = { }, "unit": "volt", "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.optoelectronic.solar_cell.short_circuit_current_density": { "name": "short_circuit_current_density", @@ -3725,7 +4122,8 @@ window.nomadArtifacts = { }, "unit": "ampere / meter ** 2", "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.optoelectronic.solar_cell.illumination_intensity": { "name": "illumination_intensity", @@ -3736,7 +4134,8 @@ window.nomadArtifacts = { }, "unit": "watt / meter ** 2", "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.optoelectronic.solar_cell.device_area": { "name": "device_area", @@ -3747,7 +4146,8 @@ window.nomadArtifacts = { }, "unit": "meter ** 2", "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.optoelectronic.solar_cell.device_architecture": { "name": "device_architecture", @@ -3757,6 +4157,7 @@ window.nomadArtifacts = { "type_data": "str" }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.properties.optoelectronic.solar_cell.device_stack": { @@ -3770,6 +4171,7 @@ window.nomadArtifacts = { "0..*" ], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.properties.optoelectronic.solar_cell.absorber": { @@ -3783,6 +4185,7 @@ window.nomadArtifacts = { "0..*" ], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.properties.optoelectronic.solar_cell.absorber_fabrication": { @@ -3796,6 +4199,7 @@ window.nomadArtifacts = { "0..*" ], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.properties.optoelectronic.solar_cell.electron_transport_layer": { @@ -3809,6 +4213,7 @@ window.nomadArtifacts = { "0..*" ], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.properties.optoelectronic.solar_cell.hole_transport_layer": { @@ -3822,6 +4227,7 @@ window.nomadArtifacts = { "0..*" ], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.properties.optoelectronic.solar_cell.substrate": { @@ -3835,6 +4241,7 @@ window.nomadArtifacts = { "0..*" ], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.properties.optoelectronic.solar_cell.back_contact": { @@ -3848,8 +4255,302 @@ window.nomadArtifacts = { "0..*" ], "aggregatable": true, + "dynamic": false, "suggestion": true }, + "results.properties.catalytic.reactivity.reaction_name": { + "name": "reaction_name", + "description": "Name of the catalytic test reaction.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [], + "aggregatable": true, + "dynamic": false + }, + "results.properties.catalytic.reactivity.reaction_class": { + "name": "reaction_class", + "description": "Classification of the catalytic test reaction such as Oxidation, Hydrogenation,\nIsomerization, Coupling...", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [], + "aggregatable": true, + "dynamic": false + }, + "results.properties.catalytic.reactivity.gas_hourly_space_velocity": { + "name": "gas_hourly_space_velocity", + "description": "The gas hourly space velocity in 1/time (gas flow per catalyst volume).", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "1 / second", + "shape": [], + "aggregatable": false, + "dynamic": false + }, + "results.properties.catalytic.reactivity.flow_rate": { + "name": "flow_rate", + "description": "The volumetric gas flow in volume per time", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "meter ** 3 / second", + "shape": [], + "aggregatable": false, + "dynamic": false + }, + "results.properties.catalytic.reactivity.test_temperatures": { + "name": "test_temperatures", + "description": "The reaction temperature(s) during the catalytic test reaction.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "kelvin", + "shape": [ + "*" + ], + "aggregatable": false, + "dynamic": false + }, + "results.properties.catalytic.reactivity.time_on_stream": { + "name": "time_on_stream", + "description": "The time on stream of the catalyst in the catalytic test reaction.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "second", + "shape": [ + "*" + ], + "aggregatable": false, + "dynamic": false + }, + "results.properties.catalytic.reactivity.total_time_on_stream": { + "name": "total_time_on_stream", + "description": "The time on stream of the catalyst in the catalytic test reaction.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "second", + "shape": [], + "aggregatable": false, + "dynamic": false + }, + "results.properties.catalytic.reactivity.pressure": { + "name": "pressure", + "description": "The pressure set during the catalytic test reaction.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "pascal", + "shape": [ + "*" + ], + "aggregatable": false, + "dynamic": false + }, + "results.properties.catalytic.reactivity.reactants.name": { + "name": "name", + "description": "Name of the reactant.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [], + "aggregatable": true, + "dynamic": false + }, + "results.properties.catalytic.reactivity.reactants.gas_concentration_in": { + "name": "gas_concentration_in", + "description": "Volumetric concentration of the reactant in the feed gas, value between 0 and 1.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [], + "aggregatable": false, + "dynamic": false + }, + "results.properties.catalytic.reactivity.reactants.gas_concentration_out": { + "name": "gas_concentration_out", + "description": "Volumetric concentration of the reactant after the reactor, value between 0 and 1.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [], + "aggregatable": false, + "dynamic": false + }, + "results.properties.catalytic.reactivity.reactants.conversion": { + "name": "conversion", + "description": "Conversion of the reactant, in %.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [], + "aggregatable": false, + "dynamic": false + }, + "results.properties.catalytic.reactivity.products.name": { + "name": "name", + "description": "Name of the product.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [], + "aggregatable": true, + "dynamic": false + }, + "results.properties.catalytic.reactivity.products.gas_concentration_out": { + "name": "gas_concentration_out", + "description": "Volumetric concentration of the product after the reactor, value between 0 and 1.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [], + "aggregatable": false, + "dynamic": false + }, + "results.properties.catalytic.reactivity.products.selectivity": { + "name": "selectivity", + "description": "Selectivity of the product, in %.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [], + "aggregatable": false, + "dynamic": false + }, + "results.properties.catalytic.reactivity.products.space_time_yield": { + "name": "space_time_yield", + "description": "Space-time-yield of the product, in mass product per mass catalyst per time.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "1 / second", + "shape": [], + "aggregatable": false, + "dynamic": false + }, + "results.properties.catalytic.reactivity.rates.reaction_rate": { + "name": "reaction_rate", + "description": "The rate of the number of reactant or product molecules converted/produced, per mass of total catalyst, per time.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "mole / gram / second", + "shape": [], + "aggregatable": false, + "dynamic": false + }, + "results.properties.catalytic.reactivity.rates.specific_mass_rate": { + "name": "specific_mass_rate", + "description": "The specific rate of the reactant, per mass of active catalyst component (e.g. metal).", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "mole / gram / second", + "shape": [], + "aggregatable": false, + "dynamic": false + }, + "results.properties.catalytic.reactivity.rates.specific_surface_area_rate": { + "name": "specific_surface_area_rate", + "description": "The specific rate of the reactant, per surface area of active catalyst.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "mole / meter ** 2 / second", + "shape": [], + "aggregatable": false, + "dynamic": false + }, + "results.properties.catalytic.reactivity.rates.turn_over_frequency": { + "name": "turn_over_frequency", + "description": "The turn over frequency, calculated from mol of reactant or product per number of sites over time.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "1 / second", + "shape": [], + "aggregatable": false, + "dynamic": false + }, + "results.properties.catalytic.catalyst_synthesis.catalyst_name": { + "name": "catalyst_name", + "description": "Custom name of catalyst.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [], + "aggregatable": true, + "dynamic": false + }, + "results.properties.catalytic.catalyst_synthesis.preparation_method": { + "name": "preparation_method", + "description": "The main preparation method of the sample.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [], + "aggregatable": true, + "dynamic": false + }, + "results.properties.catalytic.catalyst_synthesis.catalyst_type": { + "name": "catalyst_type", + "description": "The type of catalyst, wether metal or oxide, ...", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [], + "aggregatable": true, + "dynamic": false + }, + "results.properties.catalytic.catalyst_characterization.surface_area": { + "name": "surface_area", + "description": "The surface area per catalyst mass.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "meter ** 2 / gram", + "shape": [], + "aggregatable": false, + "dynamic": false + }, + "results.properties.catalytic.catalyst_characterization.method_surface_area": { + "name": "method_surface_area", + "description": "The method with which the surface area per catalyst mass was determined, e.g. BET.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [], + "aggregatable": true, + "dynamic": false + }, "results.properties.mechanical.energy_volume_curve.type": { "name": "type", "type": { @@ -3868,6 +4569,7 @@ window.nomadArtifacts = { ] }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.properties.mechanical.bulk_modulus.type": { @@ -3891,6 +4593,7 @@ window.nomadArtifacts = { ] }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.properties.mechanical.bulk_modulus.value": { @@ -3901,7 +4604,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "pascal", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.mechanical.shear_modulus.type": { "name": "type", @@ -3915,6 +4619,7 @@ window.nomadArtifacts = { ] }, "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.properties.mechanical.shear_modulus.value": { @@ -3925,7 +4630,8 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "pascal", - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.thermodynamic.trajectory.available_properties": { "name": "available_properties", @@ -3942,7 +4648,8 @@ window.nomadArtifacts = { "shape": [ "0..*" ], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.properties.thermodynamic.trajectory.provenance.label": { "name": "label", @@ -3952,7 +4659,8 @@ window.nomadArtifacts = { "type_data": "str" }, "shape": [], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.time_step": { "name": "time_step", @@ -3963,7 +4671,8 @@ window.nomadArtifacts = { }, "unit": "second", "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.ensemble_type": { "name": "ensemble_type", @@ -3978,7 +4687,108 @@ window.nomadArtifacts = { ] }, "shape": [], - "aggregatable": true + "aggregatable": true, + "dynamic": false + }, + "results.properties.spectroscopic.spectra.type": { + "name": "type", + "description": "Identifier for the methodology done to obtain the spectra data: EELS, XAS, XPS, etc.", + "type": { + "type_kind": "Enum", + "type_data": [ + "EELS", + "XAS", + "XANES", + "EXAFS", + "XES", + "XPS", + "RXIS", + "unavailable" + ] + }, + "aggregatable": true, + "dynamic": false, + "suggestion": true + }, + "results.properties.spectroscopic.spectra.label": { + "name": "label", + "description": "Identifier for the source of the spectra data, either 'computation' or 'experiment'.", + "type": { + "type_kind": "Enum", + "type_data": [ + "computation", + "experiment" + ] + }, + "aggregatable": true, + "dynamic": false, + "suggestion": true + }, + "results.properties.spectroscopic.spectra.provenance.label": { + "name": "label", + "description": "Class or type of the provenance.\nCan be used to add further description to the provenance.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [], + "aggregatable": true, + "dynamic": false + }, + "results.properties.spectroscopic.spectra.provenance.eels.detector_type": { + "name": "detector_type", + "description": "Detector type.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "aggregatable": true, + "dynamic": false, + "suggestion": true + }, + "results.properties.spectroscopic.spectra.provenance.eels.resolution": { + "name": "resolution", + "description": "Energy resolution of the detector.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "joule", + "aggregatable": false, + "dynamic": false + }, + "results.properties.spectroscopic.spectra.provenance.eels.max_energy": { + "name": "max_energy", + "description": "Maximum energy of the detector.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "joule", + "aggregatable": false, + "dynamic": false + }, + "results.properties.spectroscopic.spectra.provenance.eels.min_energy": { + "name": "min_energy", + "description": "Minimum energy of the detector.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "joule", + "aggregatable": false, + "dynamic": false + }, + "results.properties.spectroscopic.spectra.provenance.electronic_structure.label": { + "name": "label", + "description": "Class or type of the provenance.\nCan be used to add further description to the provenance.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [], + "aggregatable": true, + "dynamic": false }, "results.properties.geometry_optimization.convergence_tolerance_energy_difference": { "name": "convergence_tolerance_energy_difference", @@ -3989,7 +4799,8 @@ window.nomadArtifacts = { }, "unit": "joule", "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.geometry_optimization.convergence_tolerance_force_maximum": { "name": "convergence_tolerance_force_maximum", @@ -4000,7 +4811,8 @@ window.nomadArtifacts = { }, "unit": "newton", "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.geometry_optimization.final_force_maximum": { "name": "final_force_maximum", @@ -4011,7 +4823,8 @@ window.nomadArtifacts = { }, "unit": "newton", "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.geometry_optimization.final_energy_difference": { "name": "final_energy_difference", @@ -4022,7 +4835,8 @@ window.nomadArtifacts = { }, "unit": "joule", "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.properties.geometry_optimization.final_displacement_maximum": { "name": "final_displacement_maximum", @@ -4033,7 +4847,8 @@ window.nomadArtifacts = { }, "unit": "meter", "shape": [], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.eln.sections": { "name": "sections", @@ -4045,7 +4860,8 @@ window.nomadArtifacts = { "shape": [ "*" ], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.eln.tags": { "name": "tags", @@ -4057,7 +4873,8 @@ window.nomadArtifacts = { "shape": [ "*" ], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.eln.names": { "name": "names", @@ -4069,7 +4886,8 @@ window.nomadArtifacts = { "shape": [ "*" ], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.eln.descriptions": { "name": "descriptions", @@ -4081,7 +4899,8 @@ window.nomadArtifacts = { "shape": [ "*" ], - "aggregatable": false + "aggregatable": false, + "dynamic": false }, "results.eln.instruments": { "name": "instruments", @@ -4093,7 +4912,8 @@ window.nomadArtifacts = { "shape": [ "*" ], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.eln.methods": { "name": "methods", @@ -4105,7 +4925,8 @@ window.nomadArtifacts = { "shape": [ "*" ], - "aggregatable": true + "aggregatable": true, + "dynamic": false }, "results.eln.lab_ids": { "name": "lab_ids", @@ -4118,6 +4939,7 @@ window.nomadArtifacts = { "*" ], "aggregatable": true, + "dynamic": false, "suggestion": true }, "results.material": { @@ -4249,6 +5071,18 @@ window.nomadArtifacts = { "nested": false, "repeats": false }, + "results.method.measurement": { + "name": "measurement", + "description": "\n Contains method details for a measurement entry.\n ", + "nested": false, + "repeats": false + }, + "results.method.measurement.xrd": { + "name": "xrd", + "description": "\n Methodology for an X-Ray Diffraction measurement.\n ", + "nested": false, + "repeats": false + }, "results.properties": { "name": "properties", "description": "\n Contains the physical properties that have been calculated or used in\n this entry.\n ", @@ -4297,6 +5131,12 @@ window.nomadArtifacts = { "nested": false, "repeats": true }, + "results.properties.structural.diffraction_pattern": { + "name": "diffraction_pattern", + "description": "\n Diffraction pattern.\n ", + "nested": true, + "repeats": true + }, "results.properties.dynamical": { "name": "dynamical", "description": "\n Dynamical properties.\n ", @@ -4410,7 +5250,7 @@ window.nomadArtifacts = { }, "results.properties.vibrational.dos_phonon": { "name": "dos_phonon", - "description": "\n Contains the total phonon density of states.\n ", + "description": "\n Contains the phonon density of states.\n ", "nested": false, "repeats": false }, @@ -4445,7 +5285,7 @@ window.nomadArtifacts = { }, "results.properties.electronic.dos_electronic": { "name": "dos_electronic", - "description": "\n Contains the total electronic density of states.\n ", + "description": "\n Contains the total electronic density of states.\n\n OLD VERSION: it will eventually be deprecated.\n ", "nested": false, "repeats": true }, @@ -4460,6 +5300,29 @@ window.nomadArtifacts = { "nested": false, "repeats": true }, + "results.properties.electronic.dos_electronic_new": { + "name": "dos_electronic_new", + "description": "\n Contains the electronic Density of States (DOS). This section can be repeated to refer to\n different methodologies (e.g., label = 'DFT', 'GW', 'TB', etc.), and it can be spin-polarized\n or not. The sub-section data points to each (if present) spin channels.\n ", + "nested": false, + "repeats": true + }, + "results.properties.electronic.dos_electronic_new.data": { + "name": "data", + "description": "\n Section containign the density of states data.\n\n It includes the total DOS and the projected DOS values. We differentiate `species_projected` as the\n projected DOS for same atomic species, `atom_projected` as the projected DOS for different\n atoms in the cell, and `orbital_projected` as the projected DOS for the orbitals of each\n atom.\n ", + "nested": false, + "repeats": true + }, + "results.properties.electronic.dos_electronic_new.data.band_gap": { + "name": "band_gap", + "nested": true, + "repeats": true + }, + "results.properties.electronic.dos_electronic_new.data.band_gap.provenance": { + "name": "provenance", + "description": "\n Contains semantically labelled provenance information.\n To be stored under PropertySection.provenance or children.\n ", + "nested": false, + "repeats": true + }, "results.properties.electronic.band_structure_electronic": { "name": "band_structure_electronic", "description": "\n This section stores information on a electonic band structure\n evaluation along one-dimensional pathways in the reciprocal space.\n ", @@ -4495,6 +5358,47 @@ window.nomadArtifacts = { "nested": false, "repeats": false }, + "results.properties.catalytic": { + "name": "catalytic", + "description": "\n Properties of Heterogeneous Catalysts.\n ", + "nested": false, + "repeats": false + }, + "results.properties.catalytic.reactivity": { + "name": "reactivity", + "description": "\n Properties of a catalytic test reaction.\n ", + "nested": false, + "repeats": false + }, + "results.properties.catalytic.reactivity.reactants": { + "name": "reactants", + "description": "\n A reactant in a catalytic test reaction. A reactant is identified by having a conversion.\n ", + "nested": true, + "repeats": true + }, + "results.properties.catalytic.reactivity.products": { + "name": "products", + "description": "\n A product of a catalytic test reaction. A product is identified by having a selectivity.\n ", + "nested": true, + "repeats": true + }, + "results.properties.catalytic.reactivity.rates": { + "name": "rates", + "nested": true, + "repeats": true + }, + "results.properties.catalytic.catalyst_synthesis": { + "name": "catalyst_synthesis", + "description": "\n Synthesis of a heterogeneous catalyst.\n ", + "nested": false, + "repeats": false + }, + "results.properties.catalytic.catalyst_characterization": { + "name": "catalyst_characterization", + "description": "\n Properties of a heterogeneous catalyst.\n ", + "nested": false, + "repeats": false + }, "results.properties.mechanical": { "name": "mechanical", "description": "\n Mechanical properties.\n ", @@ -4567,12 +5471,36 @@ window.nomadArtifacts = { "nested": false, "repeats": true }, - "results.properties.spectroscopy": { - "name": "spectroscopy", + "results.properties.spectroscopic": { + "name": "spectroscopic", "description": "\n Spectroscopic properties.\n ", "nested": false, "repeats": false }, + "results.properties.spectroscopic.spectra": { + "name": "spectra", + "description": "\n Base class for Spectra calculation information as obtained from an experiment or a computation.\n ", + "nested": true, + "repeats": true + }, + "results.properties.spectroscopic.spectra.provenance": { + "name": "provenance", + "description": "\n Contains provenance information (mainly the methodology section) for spectra properties\n derived from an experiment or a calculation.\n ", + "nested": false, + "repeats": true + }, + "results.properties.spectroscopic.spectra.provenance.eels": { + "name": "eels", + "description": "\n Base class for the EELS methodology.\n ", + "nested": false, + "repeats": true + }, + "results.properties.spectroscopic.spectra.provenance.electronic_structure": { + "name": "electronic_structure", + "description": "\n ", + "nested": false, + "repeats": true + }, "results.properties.geometry_optimization": { "name": "geometry_optimization", "description": "\n Geometry optimization results and settings.\n ", @@ -4592,6 +5520,103 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Package", "m_parent_index": 0, "m_parent_sub_section": "packages", + "name": "nomad.datamodel.metainfo.plot", + "section_definitions": [ + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 0, + "m_parent_sub_section": "section_definitions", + "name": "Figure", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "label", + "description": "Label shown in the plot selection.", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "index", + "description": "Index of figure in the plot selection.", + "type": { + "type_kind": "python", + "type_data": "int" + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 1, + "m_parent_sub_section": "section_definitions", + "name": "PlotlyFigureQuantity", + "base_sections": [ + "/packages/22/section_definitions/6" + ], + "constraints": [ + "dimensions", + "has_type", + "higher_shapes_require_dtype" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 2, + "m_parent_sub_section": "section_definitions", + "name": "PlotlyFigure", + "base_sections": [ + "/packages/0/section_definitions/0" + ], + "quantities": [ + { + "m_def": "nomad.datamodel.metainfo.plot.PlotlyFigureQuantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "figure", + "description": "Contains the JSON serialization for a plotly figure.", + "type": { + "type_kind": "custom", + "type_data": "nomad.metainfo.metainfo._JSON" + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 3, + "m_parent_sub_section": "section_definitions", + "name": "PlotSection", + "description": "The PlotSection base section serves as an additional functionality to your sections. This base section is designed to simplify the process of creating various types of\nplots, making it easy to use Plotly Express, Plotly Subplot, and the general Plotly graph objects.\n\nFeatures:\n- Plotly Express: Create simple and quick plots with a high-level, expressive API.\n- Plotly Subplot: Organize multiple plots into subplots for more complex visualizations.\n- General Plotly Graph Objects: Fine-tune your plots by working directly with Plotly's graph objects.\n\nUsage:\n- Inherit from this base section to leverage its plot functionality.\n- Customize your plots using the annotations plotly-express, plotly-subplots, or/and plotly-graph-object.\n\nExample Usage:\n```python\nclass CustomSection(PlotSection, ElnBaseSection, EntryData):\n m_def = Section()\n time = Quantity(type=float, shape=['*'], unit='s', a_eln=dict(component='NumberEditQuantity'))\n substrate_temperature = Quantity(type=float, shape=['*'], unit='K', a_eln=dict(component='NumberEditQuantity'))\n chamber_pressure = Quantity(type=float, shape=['*'], unit='Pa', a_eln=dict(component='NumberEditQuantity'))\n\n def normalize(self, archive, logger):\n super(CustomSection, self).normalize(archive, logger)\n\n first_line = px.scatter(x=self.time, y=self.substrate_temperature)\n second_line = px.scatter(x=self.time, y=self.chamber_pressure)\n figure1 = make_subplots(rows=1, cols=2, shared_yaxes=True)\n figure1.add_trace(first_line.data[0], row=1, col=1)\n figure1.add_trace(second_line.data[0], row=1, col=2)\n figure1.update_layout(height=400, width=716, title_text=\"Creating Subplots in Plotly\")\n self.figures.append(PlotlyFigure(label='figure 1', figure=figure1.to_plotly_json()))\n\n figure2 = px.scatter(x=self.substrate_temperature, y=self.chamber_pressure, color=self.chamber_pressure, title=\"Chamber as a function of Temperature\")\n self.figures.append(PlotlyFigure(label='figure 2', index=1, figure=figure2.to_plotly_json()))\n\n heatmap_data = [[None, None, None, 12, 13, 14, 15, 16],\n [None, 1, None, 11, None, None, None, 17],\n [None, 2, 6, 7, None, None, None, 18],\n [None, 3, None, 8, None, None, None, 19],\n [5, 4, 10, 9, None, None, None, 20],\n [None, None, None, 27, None, None, None, 21],\n [None, None, None, 26, 25, 24, 23, 22]]\n\n heatmap = go.Heatmap(z=heatmap_data, showscale=False, connectgaps=True, zsmooth='best')\n figure3 = go.Figure(data=heatmap)\n self.figures.append(PlotlyFigure(label='figure 3', index=0, figure=figure3.to_plotly_json()))\n```", + "base_sections": [ + "/packages/15/section_definitions/0" + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "figures", + "more": { + "label_quantity": "label" + }, + "sub_section": "/packages/0/section_definitions/2", + "repeats": true + } + ] + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Package", + "m_parent_index": 1, + "m_parent_sub_section": "packages", "name": "nomad.datamodel.metainfo.simulation.method", "section_definitions": [ { @@ -4618,7 +5643,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "quantities", "name": "sampling_method", - "description": "Method used to generate the mesh:\n\n| Name | Description | Reference |\n\n| --------- | -------------------------------- | --------------------- |\n\n| `'Gamma-centered'` | Regular mesh is centered around Gamma. No offset. |\n\n| `'Monkhorst-Pack'` | Regular mesh with an offset of half the reciprocal lattice vector. |\n\n| `'Gamma-offcenter'` | Regular mesh with an offset that is neither `'Gamma-centered'`, nor `'Monkhorst-Pack'`. |\n\n| `'Line-path'` | Line path along high-symmetry points. Typically employed for simualting band structures. |\n\n| `'Equidistant'` | Equidistant 1D grid (also known as 'Newton-Cotes') |\n\n| `'Logarithmic'` | log distance 1D grid |\n\n| `'Gauss-Legendre'` | Quadrature rule for integration using Legendre polynomials |\n\n| `'Gauss-Laguerre'` | Quadrature rule for integration using Laguerre polynomials |\n\n| `'Clenshaw-Curtis'` | Quadrature rule for integration using Chebyshev polynomials using discrete cosine transformations |\n\n| `'Gauss-Hermite'` | Quadrature rule for integration using Hermite polynomials |", + "description": "Method used to generate the mesh:\n\n| Name | Description | Reference |\n\n| --------- | -------------------------------- | --------------------- |\n\n| `'Gamma-centered'` | Regular mesh is centered around Gamma. No offset. |\n\n| `'Monkhorst-Pack'` | Regular mesh with an offset of half the reciprocal lattice vector. |\n\n| `'Gamma-offcenter'` | Regular mesh with an offset that is neither `'Gamma-centered'`, nor `'Monkhorst-Pack'`. |\n\n| `'Line-path'` | Line path along high-symmetry points. Typically employed for simualting band structures. |\n\n| `'Equidistant'` | Equidistant 1D grid (also known as 'Newton-Cotes') |\n\n| `'Logarithmic'` | log distance 1D grid |\n\n| `'Tan'` | Non-uniform tan mesh for 1D grids. More dense at low abs values of the points, while less dense for higher values |\n\n| `'Gauss-Legendre'` | Quadrature rule for integration using Legendre polynomials |\n\n| `'Gauss-Laguerre'` | Quadrature rule for integration using Laguerre polynomials |\n\n| `'Clenshaw-Curtis'` | Quadrature rule for integration using Chebyshev polynomials using discrete cosine transformations |\n\n| `'Gauss-Hermite'` | Quadrature rule for integration using Hermite polynomials |", "type": { "type_kind": "Enum", "type_data": [ @@ -4628,6 +5653,7 @@ window.nomadArtifacts = { "Line-path", "Equidistant", "Logarithmic", + "Tan", "Gauss-Legendre", "Gauss-LaguerreClenshaw-Curtis", "Newton-Cotes", @@ -4774,7 +5800,7 @@ window.nomadArtifacts = { "name": "KMesh", "description": "Contains the settings for a sampling mesh in 3D reciprocal space. Supports uniformly-spaced meshes, line paths along high-symmetry points,\nas well as symmetry-reduced and full representations.", "base_sections": [ - "/packages/0/section_definitions/0" + "/packages/1/section_definitions/0" ], "quantities": [ { @@ -4827,7 +5853,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "line_path_segments", - "sub_section": "/packages/0/section_definitions/1", + "sub_section": "/packages/1/section_definitions/1", "repeats": true } ] @@ -4839,7 +5865,7 @@ window.nomadArtifacts = { "name": "FrequencyMesh", "description": "Contains the settings for a sampling mesh in 1D frequency space, either real or imaginary.", "base_sections": [ - "/packages/0/section_definitions/0" + "/packages/1/section_definitions/0" ], "quantities": [ { @@ -4879,7 +5905,7 @@ window.nomadArtifacts = { "name": "TimeMesh", "description": "Contains the settings for a sampling mesh in 1D time space, either real or imaginary.", "base_sections": [ - "/packages/0/section_definitions/0" + "/packages/1/section_definitions/0" ], "quantities": [ { @@ -5024,6 +6050,11 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 3, "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.method.simulation.dmft.jh" + ] + }, "name": "jh", "description": "Value of the (interorbital) Hund's coupling.", "type": { @@ -5245,6 +6276,17 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", + "name": "atom_index", + "description": "The atom index with respect to the parsed system atoms section.", + "type": { + "type_kind": "numpy", + "type_data": "int32" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", "name": "n_valence_electrons", "description": "Number of valence electrons.", "type": { @@ -5255,7 +6297,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, + "m_parent_index": 3, "m_parent_sub_section": "quantities", "name": "n_core_electrons", "description": "Number of core electrons.", @@ -5267,7 +6309,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, + "m_parent_index": 4, "m_parent_sub_section": "quantities", "name": "label", "description": "String used to identify the atoms of this kind. This should correspond to the\natom labels of the configuration. It is possible for one atom kind to have\nmultiple labels (in order to allow two atoms of the same kind to have two\ndifferently defined sets of atom-centered basis functions or two different pseudo-\npotentials). Atom kind is typically the symbol of the atomic species but it can be\nalso a ghost or pseudo-atom.", @@ -5279,7 +6321,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 4, + "m_parent_index": 5, "m_parent_sub_section": "quantities", "name": "mass", "description": "Mass of the atom.", @@ -5292,7 +6334,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, + "m_parent_index": 6, "m_parent_sub_section": "quantities", "name": "pseudopotential_name", "description": "Name identifying the pseudopotential used.", @@ -5304,7 +6346,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 6, + "m_parent_index": 7, "m_parent_sub_section": "quantities", "name": "n_orbitals", "description": "Number of active orbitals of the atom.", @@ -5316,7 +6358,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 7, + "m_parent_index": 8, "m_parent_sub_section": "quantities", "name": "orbitals", "description": "Label of the active orbitals of the atoms.", @@ -5330,7 +6372,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 8, + "m_parent_index": 9, "m_parent_sub_section": "quantities", "name": "onsite_energies", "description": "Values of the atomic onsite energy corresponding to each orbital.", @@ -5345,7 +6387,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 9, + "m_parent_index": 10, "m_parent_sub_section": "quantities", "name": "charge", "description": "Total charge of the atom.", @@ -5358,7 +6400,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 10, + "m_parent_index": 11, "m_parent_sub_section": "quantities", "name": "charges", "description": "Values of the charge corresponding to each orbital.", @@ -5378,7 +6420,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "pseudopotential", - "sub_section": "/packages/0/section_definitions/7", + "sub_section": "/packages/1/section_definitions/7", "repeats": false }, { @@ -5386,7 +6428,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "hubbard_kanamori_model", - "sub_section": "/packages/0/section_definitions/6" + "sub_section": "/packages/1/section_definitions/6" } ] }, @@ -5428,7 +6470,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "atom_parameters", - "sub_section": "/packages/0/section_definitions/8", + "sub_section": "/packages/1/section_definitions/8", "repeats": true } ] @@ -5632,7 +6674,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "gaussian_basis_group", - "sub_section": "/packages/0/section_definitions/11", + "sub_section": "/packages/1/section_definitions/11", "repeats": true } ] @@ -5948,7 +6990,7 @@ window.nomadArtifacts = { "name": "BasisSet", "description": "This section contains all basis sets used to represent the wavefunction or electron density.", "base_sections": [ - "/packages/0/section_definitions/14" + "/packages/1/section_definitions/14" ], "quantities": [ { @@ -6053,7 +7095,7 @@ window.nomadArtifacts = { "description": "Reference to a particular atom parameter setup further specifying the basis set.", "type": { "type_kind": "reference", - "type_data": "/packages/0/section_definitions/8" + "type_data": "/packages/1/section_definitions/8" }, "shape": [] } @@ -6064,7 +7106,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "atom_centered", - "sub_section": "/packages/0/section_definitions/12", + "sub_section": "/packages/1/section_definitions/12", "repeats": true }, { @@ -6072,7 +7114,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "orbital", - "sub_section": "/packages/0/section_definitions/13", + "sub_section": "/packages/1/section_definitions/13", "repeats": true } ] @@ -6154,7 +7196,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "basis_set", - "sub_section": "/packages/0/section_definitions/15", + "sub_section": "/packages/1/section_definitions/15", "repeats": true } ] @@ -6305,7 +7347,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "contributions", - "sub_section": "/packages/0/section_definitions/17", + "sub_section": "/packages/1/section_definitions/17", "repeats": true } ] @@ -6361,7 +7403,7 @@ window.nomadArtifacts = { "name": "XCFunctional", "description": "Section describing the exchange-correlation functional used in the DFT calculation. The name of the exchange-correlation functional is given by name and the reference to\nthe published functional is provided by reference. Other contributions to the\nfunctional not covered by exchange, correlation or hybrid types may be specified in\ncontributions.", "base_sections": [ - "/packages/0/section_definitions/18" + "/packages/1/section_definitions/18" ], "sub_sections": [ { @@ -6369,7 +7411,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "exchange", - "sub_section": "/packages/0/section_definitions/19", + "sub_section": "/packages/1/section_definitions/19", "repeats": true }, { @@ -6377,7 +7419,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "correlation", - "sub_section": "/packages/0/section_definitions/19", + "sub_section": "/packages/1/section_definitions/19", "repeats": true }, { @@ -6385,7 +7427,7 @@ window.nomadArtifacts = { "m_parent_index": 2, "m_parent_sub_section": "sub_sections", "name": "hybrid", - "sub_section": "/packages/0/section_definitions/19", + "sub_section": "/packages/1/section_definitions/19", "repeats": true }, { @@ -6393,7 +7435,7 @@ window.nomadArtifacts = { "m_parent_index": 3, "m_parent_sub_section": "sub_sections", "name": "contributions", - "sub_section": "/packages/0/section_definitions/19", + "sub_section": "/packages/1/section_definitions/19", "repeats": true } ] @@ -6424,7 +7466,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "xc_functional", - "sub_section": "/packages/0/section_definitions/20" + "sub_section": "/packages/1/section_definitions/20" } ] }, @@ -6523,7 +7565,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "wannier", - "sub_section": "/packages/0/section_definitions/22", + "sub_section": "/packages/1/section_definitions/22", "repeats": false } ] @@ -6632,23 +7674,6 @@ window.nomadArtifacts = { "shape": [ "n_neighbors" ] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, - "m_parent_sub_section": "quantities", - "name": "projection_matrix", - "description": "Projection matrices from Bloch bands to virtual projected orbitals.", - "type": { - "type_kind": "numpy", - "type_data": "complex128" - }, - "shape": [ - "*", - "*", - "*", - "*" - ] } ], "sub_sections": [ @@ -6657,7 +7682,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "hopping_matrix", - "sub_section": "/packages/0/section_definitions/24", + "sub_section": "/packages/1/section_definitions/24", "repeats": false }, { @@ -6665,7 +7690,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "hubbard_kanamori_model", - "sub_section": "/packages/0/section_definitions/6", + "sub_section": "/packages/1/section_definitions/6", "repeats": true } ] @@ -6815,21 +7840,21 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "k_mesh", - "sub_section": "/packages/0/section_definitions/2" + "sub_section": "/packages/1/section_definitions/2" }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "q_mesh", - "sub_section": "/packages/0/section_definitions/2" + "sub_section": "/packages/1/section_definitions/2" }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 2, "m_parent_sub_section": "sub_sections", "name": "frequency_mesh", - "sub_section": "/packages/0/section_definitions/3" + "sub_section": "/packages/1/section_definitions/3" } ] }, @@ -6840,7 +7865,7 @@ window.nomadArtifacts = { "name": "Screening", "description": "Section containing the various parameters that define a screening calculation, as for example, in RPA.", "base_sections": [ - "/packages/0/section_definitions/27" + "/packages/1/section_definitions/27" ], "quantities": [ { @@ -6863,7 +7888,7 @@ window.nomadArtifacts = { "name": "GW", "description": "Section containing the various parameters that define a GW calculation.", "base_sections": [ - "/packages/0/section_definitions/27" + "/packages/1/section_definitions/27" ], "quantities": [ { @@ -6934,7 +7959,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "screening", - "sub_section": "/packages/0/section_definitions/28" + "sub_section": "/packages/1/section_definitions/28" } ] }, @@ -6945,7 +7970,7 @@ window.nomadArtifacts = { "name": "BSE", "description": "Section containing the various parameters that define a BSE calculation.", "base_sections": [ - "/packages/0/section_definitions/27" + "/packages/1/section_definitions/27" ], "quantities": [ { @@ -7002,14 +8027,14 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "screening", - "sub_section": "/packages/0/section_definitions/28" + "sub_section": "/packages/1/section_definitions/28" }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "core_hole", - "sub_section": "/packages/0/section_definitions/26" + "sub_section": "/packages/1/section_definitions/26" } ] }, @@ -7024,8 +8049,8 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "n_atoms_per_unit_cell", - "description": "Number of atoms per unit cell.", + "name": "n_impurities", + "description": "Number of impurities mapped from the correlated atoms in the unit cell.", "type": { "type_kind": "numpy", "type_data": "int32" @@ -7037,27 +8062,27 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "quantities", "name": "n_correlated_orbitals", - "description": "Number of correlated orbitals per atom in the unit cell.", + "description": "Number of correlated orbitals per impurity.", "type": { "type_kind": "numpy", "type_data": "int32" }, "shape": [ - "n_atoms_per_unit_cell" + "n_impurities" ] }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 2, "m_parent_sub_section": "quantities", - "name": "n_correlated_electrons", - "description": "Number of correlated electrons per atom in the unit cell.", + "name": "n_electrons", + "description": "Initial number of valence electrons per impurity.", "type": { "type_kind": "numpy", "type_data": "float64" }, "shape": [ - "n_atoms_per_unit_cell" + "n_impurities" ] }, { @@ -7139,7 +8164,7 @@ window.nomadArtifacts = { "name": "TBModel", "description": "Section containing the parameters pertaining to a tight-binding calculation.", "base_sections": [ - "/packages/0/section_definitions/18" + "/packages/1/section_definitions/18" ], "sub_sections": [ { @@ -7147,7 +8172,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "hamiltonian", - "sub_section": "/packages/0/section_definitions/17", + "sub_section": "/packages/1/section_definitions/17", "repeats": true }, { @@ -7155,7 +8180,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "overlap", - "sub_section": "/packages/0/section_definitions/17", + "sub_section": "/packages/1/section_definitions/17", "repeats": true }, { @@ -7163,7 +8188,7 @@ window.nomadArtifacts = { "m_parent_index": 2, "m_parent_sub_section": "sub_sections", "name": "repulsion", - "sub_section": "/packages/0/section_definitions/17", + "sub_section": "/packages/1/section_definitions/17", "repeats": true }, { @@ -7171,7 +8196,7 @@ window.nomadArtifacts = { "m_parent_index": 3, "m_parent_sub_section": "sub_sections", "name": "magnetic", - "sub_section": "/packages/0/section_definitions/17", + "sub_section": "/packages/1/section_definitions/17", "repeats": true }, { @@ -7179,7 +8204,7 @@ window.nomadArtifacts = { "m_parent_index": 4, "m_parent_sub_section": "sub_sections", "name": "coulomb", - "sub_section": "/packages/0/section_definitions/17", + "sub_section": "/packages/1/section_definitions/17", "repeats": true } ] @@ -7210,7 +8235,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "model", - "sub_section": "/packages/0/section_definitions/32", + "sub_section": "/packages/1/section_definitions/32", "repeats": true } ] @@ -7308,7 +8333,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "neighbor_searching", - "sub_section": "/packages/0/section_definitions/34", + "sub_section": "/packages/1/section_definitions/34", "repeats": false } ] @@ -7325,7 +8350,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "model", - "sub_section": "/packages/0/section_definitions/18", + "sub_section": "/packages/1/section_definitions/18", "repeats": true }, { @@ -7333,7 +8358,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "force_calculations", - "sub_section": "/packages/0/section_definitions/35", + "sub_section": "/packages/1/section_definitions/35", "repeats": false } ] @@ -7511,7 +8536,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "smearing", - "sub_section": "/packages/0/section_definitions/37" + "sub_section": "/packages/1/section_definitions/37" } ] }, @@ -7522,7 +8547,7 @@ window.nomadArtifacts = { "name": "Method", "description": "Section containing the various parameters that define the theory and the approximations (convergence, thresholds, etc.) behind the calculation.", "base_sections": [ - "/packages/14/section_definitions/0" + "/packages/15/section_definitions/0" ], "quantities": [ { @@ -7544,11 +8569,11 @@ window.nomadArtifacts = { "name": "starting_method_ref", "description": "Links the current section method to a section method containing the starting\nparameters.", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], "type": { "type_kind": "reference", - "type_data": "/packages/0/section_definitions/39" + "type_data": "/packages/1/section_definitions/39" }, "shape": [] }, @@ -7559,11 +8584,11 @@ window.nomadArtifacts = { "name": "core_method_ref", "description": "Links the current section method to a section method containing the core settings.", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], "type": { "type_kind": "reference", - "type_data": "/packages/0/section_definitions/39" + "type_data": "/packages/1/section_definitions/39" }, "shape": [] }, @@ -7586,11 +8611,11 @@ window.nomadArtifacts = { "name": "methods_ref", "description": "Links the section method to other method sections. For instance, one calculation\nis a perturbation performed using a self-consistent field (SCF) calculation as\nstarting point, or a simulated system is partitioned in regions with different but\nconnected Hamiltonians (e.g., QM/MM, or a region treated via Kohn-Sham DFT\nembedded into a region treated via orbital-free DFT).", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], "type": { "type_kind": "reference", - "type_data": "/packages/0/section_definitions/39" + "type_data": "/packages/1/section_definitions/39" }, "shape": [ "n_references" @@ -7603,21 +8628,21 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "dft", - "sub_section": "/packages/0/section_definitions/21" + "sub_section": "/packages/1/section_definitions/21" }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "projection", - "sub_section": "/packages/0/section_definitions/23" + "sub_section": "/packages/1/section_definitions/23" }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 2, "m_parent_sub_section": "sub_sections", "name": "lattice_model_hamiltonian", - "sub_section": "/packages/0/section_definitions/25", + "sub_section": "/packages/1/section_definitions/25", "repeats": true }, { @@ -7625,77 +8650,79 @@ window.nomadArtifacts = { "m_parent_index": 3, "m_parent_sub_section": "sub_sections", "name": "gw", - "sub_section": "/packages/0/section_definitions/29" + "sub_section": "/packages/1/section_definitions/29" }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 4, "m_parent_sub_section": "sub_sections", "name": "bse", - "sub_section": "/packages/0/section_definitions/30" + "sub_section": "/packages/1/section_definitions/30" }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 5, "m_parent_sub_section": "sub_sections", "name": "dmft", - "sub_section": "/packages/0/section_definitions/31" + "sub_section": "/packages/1/section_definitions/31" }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 6, "m_parent_sub_section": "sub_sections", "name": "tb", - "sub_section": "/packages/0/section_definitions/33" + "sub_section": "/packages/1/section_definitions/33" }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 7, "m_parent_sub_section": "sub_sections", "name": "force_field", - "sub_section": "/packages/0/section_definitions/36" + "sub_section": "/packages/1/section_definitions/36" }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 8, "m_parent_sub_section": "sub_sections", "name": "core_hole", - "sub_section": "/packages/0/section_definitions/26" + "sub_section": "/packages/1/section_definitions/26" }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 9, "m_parent_sub_section": "sub_sections", "name": "k_mesh", - "sub_section": "/packages/0/section_definitions/2" + "sub_section": "/packages/1/section_definitions/2" }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 10, "m_parent_sub_section": "sub_sections", "name": "frequency_mesh", - "sub_section": "/packages/0/section_definitions/3" + "sub_section": "/packages/1/section_definitions/3", + "repeats": true }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 11, "m_parent_sub_section": "sub_sections", "name": "time_mesh", - "sub_section": "/packages/0/section_definitions/4" + "sub_section": "/packages/1/section_definitions/4", + "repeats": true }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 12, "m_parent_sub_section": "sub_sections", "name": "electronic", - "sub_section": "/packages/0/section_definitions/38" + "sub_section": "/packages/1/section_definitions/38" }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 13, "m_parent_sub_section": "sub_sections", "name": "scf", - "sub_section": "/packages/0/section_definitions/5" + "sub_section": "/packages/1/section_definitions/5" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -7705,7 +8732,7 @@ window.nomadArtifacts = { "more": { "label_quantity": "label" }, - "sub_section": "/packages/0/section_definitions/8", + "sub_section": "/packages/1/section_definitions/8", "repeats": true }, { @@ -7716,7 +8743,7 @@ window.nomadArtifacts = { "more": { "label_quantity": "label" }, - "sub_section": "/packages/0/section_definitions/9", + "sub_section": "/packages/1/section_definitions/9", "repeats": true }, { @@ -7727,7 +8754,7 @@ window.nomadArtifacts = { "more": { "label_quantity": "type" }, - "sub_section": "/packages/0/section_definitions/16", + "sub_section": "/packages/1/section_definitions/16", "repeats": true }, { @@ -7735,7 +8762,7 @@ window.nomadArtifacts = { "m_parent_index": 17, "m_parent_sub_section": "sub_sections", "name": "photon", - "sub_section": "/packages/0/section_definitions/10", + "sub_section": "/packages/1/section_definitions/10", "repeats": true } ] @@ -7744,7 +8771,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Package", - "m_parent_index": 1, + "m_parent_index": 2, "m_parent_sub_section": "packages", "name": "nomad.datamodel.metainfo.simulation.system", "section_definitions": [ @@ -7848,7 +8875,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "atoms_group", - "sub_section": "/packages/1/section_definitions/0", + "sub_section": "/packages/2/section_definitions/0", "repeats": true } ] @@ -8230,7 +9257,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "system_original", - "sub_section": "/packages/1/section_definitions/1", + "sub_section": "/packages/2/section_definitions/1", "repeats": true }, { @@ -8238,7 +9265,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "system_primitive", - "sub_section": "/packages/1/section_definitions/1", + "sub_section": "/packages/2/section_definitions/1", "repeats": true }, { @@ -8246,7 +9273,7 @@ window.nomadArtifacts = { "m_parent_index": 2, "m_parent_sub_section": "sub_sections", "name": "system_std", - "sub_section": "/packages/1/section_definitions/1", + "sub_section": "/packages/2/section_definitions/1", "repeats": true } ] @@ -8579,7 +9606,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "soap", - "sub_section": "/packages/1/section_definitions/6", + "sub_section": "/packages/2/section_definitions/6", "repeats": false } ] @@ -8591,7 +9618,7 @@ window.nomadArtifacts = { "name": "System", "description": "Contains parameters describing a system of atomic configuration. These inclue the compound name, atomic positions, lattice vectors, contraints on the atoms, etc.", "base_sections": [ - "/packages/14/section_definitions/0" + "/packages/15/section_definitions/0" ], "quantities": [ { @@ -8661,11 +9688,11 @@ window.nomadArtifacts = { "name": "sub_system_ref", "description": "Links the current section system to a sub system.", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], "type": { "type_kind": "reference", - "type_data": "/packages/1/section_definitions/8" + "type_data": "/packages/2/section_definitions/8" }, "shape": [] }, @@ -8676,11 +9703,11 @@ window.nomadArtifacts = { "name": "systems_ref", "description": "Links the current section system to other section systems. Such a link is\nnecessary for example between the supercell and the reference unit cell in a phonon\ncalculation. The relationship should be described by kind and the referred section\nsystem is given by value. An external url can also be provided in place of value.", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], "type": { "type_kind": "reference", - "type_data": "/packages/1/section_definitions/8" + "type_data": "/packages/2/section_definitions/8" }, "shape": [ "n_references" @@ -8742,16 +9769,16 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "atoms", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], - "sub_section": "/packages/1/section_definitions/1" + "sub_section": "/packages/2/section_definitions/1" }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "atoms_group", - "sub_section": "/packages/1/section_definitions/0", + "sub_section": "/packages/2/section_definitions/0", "repeats": true }, { @@ -8759,7 +9786,7 @@ window.nomadArtifacts = { "m_parent_index": 2, "m_parent_sub_section": "sub_sections", "name": "constraint", - "sub_section": "/packages/1/section_definitions/5", + "sub_section": "/packages/2/section_definitions/5", "repeats": true }, { @@ -8768,9 +9795,9 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "prototype", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], - "sub_section": "/packages/1/section_definitions/3", + "sub_section": "/packages/2/section_definitions/3", "repeats": true }, { @@ -8779,9 +9806,9 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "springer_material", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], - "sub_section": "/packages/1/section_definitions/4", + "sub_section": "/packages/2/section_definitions/4", "repeats": true }, { @@ -8790,9 +9817,9 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "symmetry", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], - "sub_section": "/packages/1/section_definitions/2", + "sub_section": "/packages/2/section_definitions/2", "repeats": true }, { @@ -8801,9 +9828,9 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "descriptors", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], - "sub_section": "/packages/1/section_definitions/7", + "sub_section": "/packages/2/section_definitions/7", "repeats": false } ] @@ -8812,7 +9839,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Package", - "m_parent_index": 2, + "m_parent_index": 3, "m_parent_sub_section": "packages", "name": "nomad.datamodel.metainfo.simulation.calculation", "section_definitions": [ @@ -8842,8 +9869,8 @@ window.nomadArtifacts = { "name": "n_orbitals", "description": "Number of orbitals used in the projection.", "type": { - "type_kind": "python", - "type_data": "int" + "type_kind": "numpy", + "type_data": "int32" }, "shape": [] }, @@ -8854,8 +9881,8 @@ window.nomadArtifacts = { "name": "n_atoms", "description": "Number of atoms.", "type": { - "type_kind": "python", - "type_data": "int" + "type_kind": "numpy", + "type_data": "int32" }, "shape": [] }, @@ -8866,8 +9893,8 @@ window.nomadArtifacts = { "name": "n_spin_channels", "description": "Number of spin channels.", "type": { - "type_kind": "python", - "type_data": "int" + "type_kind": "numpy", + "type_data": "int32" }, "shape": [] } @@ -9016,7 +10043,7 @@ window.nomadArtifacts = { "description": "References to the atoms_group section containing the molecule for which Rg was calculated.", "type": { "type_kind": "reference", - "type_data": "/packages/1/section_definitions/0" + "type_data": "/packages/2/section_definitions/0" }, "shape": [ 1 @@ -9031,7 +10058,7 @@ window.nomadArtifacts = { "name": "EnergyEntry", "description": "Section describing a type of energy or a contribution to the total energy.", "base_sections": [ - "/packages/2/section_definitions/0" + "/packages/3/section_definitions/0" ], "quantities": [ { @@ -9126,6 +10153,32 @@ window.nomadArtifacts = { }, "shape": [], "unit": "joule" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 7, + "m_parent_sub_section": "quantities", + "name": "short_range", + "description": "Value of the short range contributions to the energy.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [], + "unit": "joule" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 8, + "m_parent_sub_section": "quantities", + "name": "long_range", + "description": "Value of the long range contributions to the energy.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [], + "unit": "joule" } ] }, @@ -9195,8 +10248,8 @@ window.nomadArtifacts = { "name": "change", "description": "Stores the change of total energy with respect to the previous step.", "categories": [ - "/packages/2/category_definitions/5", - "/packages/2/category_definitions/3" + "/packages/3/category_definitions/5", + "/packages/3/category_definitions/3" ], "type": { "type_kind": "numpy", @@ -9212,8 +10265,8 @@ window.nomadArtifacts = { "name": "fermi", "description": "Fermi energy (separates occupied from unoccupied single-particle states)", "categories": [ - "/packages/2/category_definitions/4", - "/packages/2/category_definitions/3" + "/packages/3/category_definitions/4", + "/packages/3/category_definitions/3" ], "type": { "type_kind": "numpy", @@ -9257,9 +10310,9 @@ window.nomadArtifacts = { "name": "total", "description": "Contains the value and information regarding the total energy of the system.", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], - "sub_section": "/packages/2/section_definitions/4" + "sub_section": "/packages/3/section_definitions/4" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -9267,7 +10320,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "current", "description": "Contains the value and information regarding the energy calculated with\ncalculation_method_current. energy_current is equal to energy_total for\nnon-perturbative methods. For perturbative methods, energy_current is equal to the\ncorrection: energy_total minus energy_total of the calculation_to_calculation_ref\nwith calculation_to_calculation_kind = starting_point", - "sub_section": "/packages/2/section_definitions/4" + "sub_section": "/packages/3/section_definitions/4" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -9275,7 +10328,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "zero_point", "description": "Contains the value and information regarding the converged zero-point\nvibrations energy calculated using the method described in zero_point_method.", - "sub_section": "/packages/2/section_definitions/4" + "sub_section": "/packages/3/section_definitions/4" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -9283,7 +10336,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "kinetic_electronic", "description": "Contains the value and information regarding the self-consistent electronic\nkinetic energy.", - "sub_section": "/packages/2/section_definitions/4" + "sub_section": "/packages/3/section_definitions/4" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -9291,7 +10344,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "electronic", "description": "Contains the value and information regarding the self-consistent electronic\nenergy.", - "sub_section": "/packages/2/section_definitions/4" + "sub_section": "/packages/3/section_definitions/4" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -9299,7 +10352,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "correlation", "description": "Contains the value and information regarding the correlation energy calculated\nusing the method described in XC_functional.", - "sub_section": "/packages/2/section_definitions/4" + "sub_section": "/packages/3/section_definitions/4" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -9307,7 +10360,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "exchange", "description": "Contains the value and information regarding the exchange energy calculated\nusing the method described in XC_functional.", - "sub_section": "/packages/2/section_definitions/4" + "sub_section": "/packages/3/section_definitions/4" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -9315,7 +10368,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "xc", "description": "Contains the value and information regarding the exchange-correlation (XC)\nenergy calculated with the functional stored in XC_functional.", - "sub_section": "/packages/2/section_definitions/4" + "sub_section": "/packages/3/section_definitions/4" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -9323,7 +10376,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "xc_potential", "description": "Contains the value and information regarding the exchange-correlation (XC)\npotential energy: the integral of the first order derivative of the functional\nstored in XC_functional (integral of v_xc*electron_density), i.e., the component\nof XC that is in the sum of the eigenvalues. Value associated with the\nconfiguration, should be the most converged value..", - "sub_section": "/packages/2/section_definitions/4" + "sub_section": "/packages/3/section_definitions/4" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -9331,7 +10384,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "electrostatic", "description": "Contains the value and information regarding the total electrostatic energy\n(nuclei + electrons), defined consistently with calculation_method.", - "sub_section": "/packages/2/section_definitions/4" + "sub_section": "/packages/3/section_definitions/4" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -9339,7 +10392,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "nuclear_repulsion", "description": "Contains the value and information regarding the total nuclear-nuclear repulsion\nenergy.", - "sub_section": "/packages/2/section_definitions/4" + "sub_section": "/packages/3/section_definitions/4" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -9347,7 +10400,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "coulomb", "description": "Contains the value and information regarding the Coulomb energy.", - "sub_section": "/packages/2/section_definitions/4" + "sub_section": "/packages/3/section_definitions/4" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -9355,7 +10408,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "madelung", "description": "Contains the value and information regarding the Madelung energy.", - "sub_section": "/packages/2/section_definitions/4" + "sub_section": "/packages/3/section_definitions/4" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -9363,7 +10416,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "ewald", "description": "Contains the value and information regarding the Ewald energy.", - "sub_section": "/packages/2/section_definitions/4" + "sub_section": "/packages/3/section_definitions/4" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -9371,7 +10424,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "free", "description": "Contains the value and information regarding the free energy (nuclei + electrons)\n(whose minimum gives the smeared occupation density calculated with\nsmearing_kind).", - "sub_section": "/packages/2/section_definitions/4" + "sub_section": "/packages/3/section_definitions/4" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -9379,7 +10432,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "sum_eigenvalues", "description": "Contains the value and information regarding the sum of the eigenvalues of the\nHamiltonian matrix.", - "sub_section": "/packages/2/section_definitions/4" + "sub_section": "/packages/3/section_definitions/4" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -9387,7 +10440,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "total_t0", "description": "Contains the value and information regarding the total energy extrapolated to\n$T=0$, based on a free-electron gas argument.", - "sub_section": "/packages/2/section_definitions/4" + "sub_section": "/packages/3/section_definitions/4" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -9395,7 +10448,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "van_der_waals", "description": "Contains the value and information regarding the Van der Waals energy. A multiple\noccurence is expected when more than one van der Waals methods are defined. The\nvan der Waals kind should be specified in Energy.kind", - "sub_section": "/packages/2/section_definitions/4" + "sub_section": "/packages/3/section_definitions/4" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -9403,7 +10456,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "hartree_fock_x_scaled", "description": "Scaled exact-exchange energy that depends on the mixing parameter of the\nfunctional. For example in hybrid functionals, the exchange energy is given as a\nlinear combination of exact-energy and exchange energy of an approximate DFT\nfunctional; the exact exchange energy multiplied by the mixing coefficient of the\nhybrid functional would be stored in this metadata. Defined consistently with\nXC_method.", - "sub_section": "/packages/2/section_definitions/4" + "sub_section": "/packages/3/section_definitions/4" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -9411,7 +10464,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "contributions", "description": "Contains other energy contributions to the total energy not already defined.", - "sub_section": "/packages/2/section_definitions/4", + "sub_section": "/packages/3/section_definitions/4", "repeats": true }, { @@ -9420,48 +10473,67 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "types", "description": "Contains other energy types not already defined.", - "sub_section": "/packages/2/section_definitions/4", + "sub_section": "/packages/3/section_definitions/4", "repeats": true }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 21, "m_parent_sub_section": "sub_sections", + "name": "double_counting", + "description": "Double counting correction when performing Hubbard model calculations.", + "categories": [ + "/packages/17/category_definitions/0" + ], + "sub_section": "/packages/3/section_definitions/4" + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 22, + "m_parent_sub_section": "sub_sections", "name": "correction_entropy", "description": "Entropy correction to the potential energy to compensate for the change in\noccupation so that forces at finite T do not need to keep the change of occupation\nin account. Defined consistently with XC_method.", - "sub_section": "/packages/2/section_definitions/4" + "sub_section": "/packages/3/section_definitions/4" }, { "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 22, + "m_parent_index": 23, "m_parent_sub_section": "sub_sections", "name": "correction_hartree", "description": "Correction to the density-density electrostatic energy in the sum of eigenvalues\n(that uses the mixed density on one side), and the fully consistent density-\ndensity electrostatic energy. Defined consistently with XC_method.", - "sub_section": "/packages/2/section_definitions/4" + "sub_section": "/packages/3/section_definitions/4" }, { "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 23, + "m_parent_index": 24, "m_parent_sub_section": "sub_sections", "name": "correction_xc", "description": "Correction to energy_XC.", - "sub_section": "/packages/2/section_definitions/4" + "sub_section": "/packages/3/section_definitions/4" }, { "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 24, + "m_parent_index": 25, "m_parent_sub_section": "sub_sections", "name": "kinetic", "description": "Contains the value and information regarding the kinetic energy.", - "sub_section": "/packages/2/section_definitions/4" + "sub_section": "/packages/3/section_definitions/4" }, { "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 25, + "m_parent_index": 26, "m_parent_sub_section": "sub_sections", "name": "potential", "description": "Contains the value and information regarding the potential energy.", - "sub_section": "/packages/2/section_definitions/4" + "sub_section": "/packages/3/section_definitions/4" + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 27, + "m_parent_sub_section": "sub_sections", + "name": "pressure_volume_work", + "description": "Contains the value and information regarding the instantaneous pV work.", + "sub_section": "/packages/3/section_definitions/4" } ] }, @@ -9472,7 +10544,7 @@ window.nomadArtifacts = { "name": "ForcesEntry", "description": "Section describing a contribution to or type of atomic forces.", "base_sections": [ - "/packages/2/section_definitions/0" + "/packages/3/section_definitions/0" ], "quantities": [ { @@ -9522,7 +10594,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "total", "description": "Contains the value and information regarding the total forces on the atoms\ncalculated as minus gradient of energy_total.", - "sub_section": "/packages/2/section_definitions/6" + "sub_section": "/packages/3/section_definitions/6" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -9530,7 +10602,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "free", "description": "Contains the value and information regarding the forces on the atoms\ncorresponding to the minus gradient of energy_free. The (electronic) energy_free\ncontains the information on the change in (fractional) occupation of the\nelectronic eigenstates, which are accounted for in the derivatives, yielding a\ntruly energy-conserved quantity.", - "sub_section": "/packages/2/section_definitions/6" + "sub_section": "/packages/3/section_definitions/6" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -9538,7 +10610,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "t0", "description": "Contains the value and information regarding the forces on the atoms\ncorresponding to the minus gradient of energy_T0.", - "sub_section": "/packages/2/section_definitions/6" + "sub_section": "/packages/3/section_definitions/6" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -9546,7 +10618,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "contributions", "description": "Contains other forces contributions to the total atomic forces not already\ndefined.", - "sub_section": "/packages/2/section_definitions/6", + "sub_section": "/packages/3/section_definitions/6", "repeats": true }, { @@ -9555,7 +10627,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "types", "description": "Contains other types of forces not already defined.", - "sub_section": "/packages/2/section_definitions/6", + "sub_section": "/packages/3/section_definitions/6", "repeats": true } ] @@ -9567,7 +10639,7 @@ window.nomadArtifacts = { "name": "StressEntry", "description": "Section describing a contribution to or a type of stress.", "base_sections": [ - "/packages/2/section_definitions/0" + "/packages/3/section_definitions/0" ], "quantities": [ { @@ -9618,7 +10690,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "total", "description": "Contains the value and information regarding the stress on the simulation cell\nand the atomic stresses corresponding to energy_total.", - "sub_section": "/packages/2/section_definitions/8" + "sub_section": "/packages/3/section_definitions/8" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -9626,7 +10698,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "contributions", "description": "Contains contributions for the total stress.", - "sub_section": "/packages/2/section_definitions/8", + "sub_section": "/packages/3/section_definitions/8", "repeats": true }, { @@ -9635,7 +10707,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "types", "description": "Contains other types of stress.", - "sub_section": "/packages/2/section_definitions/8", + "sub_section": "/packages/3/section_definitions/8", "repeats": true } ] @@ -9647,7 +10719,7 @@ window.nomadArtifacts = { "name": "ChargesValue", "description": "Contains information on the charge on an atom or projected onto an orbital.", "base_sections": [ - "/packages/2/section_definitions/1" + "/packages/3/section_definitions/1" ], "quantities": [ { @@ -9696,7 +10768,7 @@ window.nomadArtifacts = { "name": "Charges", "description": "Section describing the charges on the atoms obtained through a given analysis method. Also contains information on the orbital projection of charges.", "base_sections": [ - "/packages/2/section_definitions/0" + "/packages/3/section_definitions/0" ], "quantities": [ { @@ -9774,7 +10846,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "spin_projected", - "sub_section": "/packages/2/section_definitions/10", + "sub_section": "/packages/3/section_definitions/10", "repeats": true }, { @@ -9782,7 +10854,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "orbital_projected", - "sub_section": "/packages/2/section_definitions/10", + "sub_section": "/packages/3/section_definitions/10", "repeats": true } ] @@ -9794,7 +10866,7 @@ window.nomadArtifacts = { "name": "BandGapDeprecated", "description": "Base class for breaking up circular dependencies between BandGap, Dos, and BandStructure.", "base_sections": [ - "/packages/16/section_definitions/1" + "/packages/17/section_definitions/1" ], "quantities": [ { @@ -10168,7 +11240,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "band_gap", - "sub_section": "/packages/2/section_definitions/12", + "sub_section": "/packages/3/section_definitions/12", "repeats": true } ] @@ -10228,7 +11300,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "band_gap", - "sub_section": "/packages/2/section_definitions/12", + "sub_section": "/packages/3/section_definitions/12", "repeats": true }, { @@ -10236,7 +11308,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "segment", - "sub_section": "/packages/2/section_definitions/13", + "sub_section": "/packages/3/section_definitions/13", "repeats": true } ] @@ -10319,7 +11391,7 @@ window.nomadArtifacts = { "name": "DosValues", "description": "Section containing information regarding the values of the density of states (DOS).", "base_sections": [ - "/packages/2/section_definitions/1" + "/packages/3/section_definitions/1" ], "quantities": [ { @@ -10382,9 +11454,9 @@ window.nomadArtifacts = { "m_parent_index": 17, "m_parent_sub_section": "section_definitions", "name": "Dos", - "description": "Section containing information of an electronic-energy or phonon density of states (DOS) evaluation.", + "description": "Section containing information of an electronic-energy or phonon density of states (DOS) evaluation per spin channel.\n\nIt includes the total DOS and the projected DOS values. We differentiate `species_projected` as the\nprojected DOS for same atomic species, `atom_projected` as the projected DOS for different\natoms in the cell, and `orbital_projected` as the projected DOS for the orbitals of each\natom. These are hierarchically connected as:\n\n atom_projected = sum_{orbitals} orbital_projected\n\n species_projected = sum_{atoms} atom_projected\n\n total = sum_{species} species_projected", "base_sections": [ - "/packages/2/section_definitions/0" + "/packages/3/section_definitions/0" ], "quantities": [ { @@ -10418,8 +11490,8 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 2, "m_parent_sub_section": "quantities", - "name": "energy_shift", - "description": "Value necessary to shift the energies array so that the energy zero corresponds to\nthe highest occupied energy level.", + "name": "energy_fermi", + "description": "Fermi energy.", "type": { "type_kind": "numpy", "type_data": "float64" @@ -10431,14 +11503,26 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 3, "m_parent_sub_section": "quantities", - "name": "energy_fermi", - "description": "Fermi energy.", + "name": "energy_ref", + "description": "Energy level denoting the origin along the energy axis, used for comparison and visualization.\nIt is defined as the energy_highest_occupied and does not necessarily coincide with energy_fermi.", "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": "spin_channel", + "description": "Spin channel of the corresponding DOS. It can take values of 0 or 1.", + "type": { + "type_kind": "numpy", + "type_data": "int32" + }, + "shape": [] } ], "sub_sections": [ @@ -10446,16 +11530,16 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 0, "m_parent_sub_section": "sub_sections", - "name": "band_gap", - "sub_section": "/packages/2/section_definitions/12", + "name": "total", + "sub_section": "/packages/3/section_definitions/16", "repeats": true }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 1, "m_parent_sub_section": "sub_sections", - "name": "total", - "sub_section": "/packages/2/section_definitions/16", + "name": "species_projected", + "sub_section": "/packages/3/section_definitions/16", "repeats": true }, { @@ -10463,32 +11547,32 @@ window.nomadArtifacts = { "m_parent_index": 2, "m_parent_sub_section": "sub_sections", "name": "atom_projected", - "sub_section": "/packages/2/section_definitions/16", + "sub_section": "/packages/3/section_definitions/16", "repeats": true }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 3, "m_parent_sub_section": "sub_sections", - "name": "species_projected", - "sub_section": "/packages/2/section_definitions/16", + "name": "orbital_projected", + "sub_section": "/packages/3/section_definitions/16", "repeats": true }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 4, "m_parent_sub_section": "sub_sections", - "name": "orbital_projected", - "sub_section": "/packages/2/section_definitions/16", - "repeats": true + "name": "fingerprint", + "sub_section": "/packages/3/section_definitions/15", + "repeats": false }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 5, "m_parent_sub_section": "sub_sections", - "name": "fingerprint", - "sub_section": "/packages/2/section_definitions/15", - "repeats": false + "name": "band_gap", + "sub_section": "/packages/3/section_definitions/12", + "repeats": true } ] }, @@ -10499,7 +11583,7 @@ window.nomadArtifacts = { "name": "ElectronicStructureProvenance", "description": "\n ", "base_sections": [ - "/packages/16/section_definitions/0" + "/packages/17/section_definitions/0" ], "quantities": [ { @@ -10510,7 +11594,7 @@ window.nomadArtifacts = { "description": "", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/16" + "type_data": "/packages/3/section_definitions/16" }, "shape": [] }, @@ -10522,7 +11606,19 @@ window.nomadArtifacts = { "description": "", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/13" + "type_data": "/packages/3/section_definitions/13" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "name": "methodology", + "description": "Reference to the specific method section.", + "type": { + "type_kind": "reference", + "type_data": "/packages/1/section_definitions/39" }, "shape": [] } @@ -10535,7 +11631,7 @@ window.nomadArtifacts = { "name": "BandGap", "description": "\n Contains information for each present spin channel.\n ", "base_sections": [ - "/packages/2/section_definitions/12" + "/packages/3/section_definitions/12" ], "sub_sections": [ { @@ -10543,7 +11639,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "provenance", - "sub_section": "/packages/2/section_definitions/18", + "sub_section": "/packages/3/section_definitions/18", "repeats": false } ] @@ -10555,7 +11651,7 @@ window.nomadArtifacts = { "name": "MultipolesValues", "description": "Section containing the values of the multipoles projected unto an atom or orbital.", "base_sections": [ - "/packages/2/section_definitions/1" + "/packages/3/section_definitions/1" ], "quantities": [ { @@ -10579,7 +11675,7 @@ window.nomadArtifacts = { "name": "MultipolesEntry", "description": "Section describing a multipole term. The unit of the values are given by C * m ^ n, where n = 1 for dipole, 2 for quadrupole, etc.", "base_sections": [ - "/packages/2/section_definitions/0" + "/packages/3/section_definitions/0" ], "quantities": [ { @@ -10645,7 +11741,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "orbital_projected", - "sub_section": "/packages/2/section_definitions/20", + "sub_section": "/packages/3/section_definitions/20", "repeats": true } ] @@ -10676,7 +11772,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "dipole", - "sub_section": "/packages/2/section_definitions/21", + "sub_section": "/packages/3/section_definitions/21", "repeats": false }, { @@ -10684,7 +11780,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "quadrupole", - "sub_section": "/packages/2/section_definitions/21", + "sub_section": "/packages/3/section_definitions/21", "repeats": false }, { @@ -10692,7 +11788,7 @@ window.nomadArtifacts = { "m_parent_index": 2, "m_parent_sub_section": "sub_sections", "name": "octupole", - "sub_section": "/packages/2/section_definitions/21", + "sub_section": "/packages/3/section_definitions/21", "repeats": false }, { @@ -10700,7 +11796,7 @@ window.nomadArtifacts = { "m_parent_index": 3, "m_parent_sub_section": "sub_sections", "name": "higher_order", - "sub_section": "/packages/2/section_definitions/21", + "sub_section": "/packages/3/section_definitions/21", "repeats": true } ] @@ -11006,7 +12102,7 @@ window.nomadArtifacts = { "name": "PotentialValue", "description": "Section containing the values of the potential evaluated on a uniform real-space grid.", "base_sections": [ - "/packages/2/section_definitions/24" + "/packages/3/section_definitions/24" ], "quantities": [ { @@ -11036,7 +12132,7 @@ window.nomadArtifacts = { "name": "Potential", "description": "Section containing all potential types.", "base_sections": [ - "/packages/2/section_definitions/24" + "/packages/3/section_definitions/24" ], "sub_sections": [ { @@ -11044,7 +12140,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "effective", - "sub_section": "/packages/2/section_definitions/25", + "sub_section": "/packages/3/section_definitions/25", "repeats": true }, { @@ -11052,7 +12148,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "hartree", - "sub_section": "/packages/2/section_definitions/25", + "sub_section": "/packages/3/section_definitions/25", "repeats": true } ] @@ -11064,7 +12160,7 @@ window.nomadArtifacts = { "name": "Density", "description": "Section containing the values of the density evaluated on a uniform real-space grid.", "base_sections": [ - "/packages/2/section_definitions/24" + "/packages/3/section_definitions/24" ], "quantities": [ { @@ -11104,7 +12200,10 @@ window.nomadArtifacts = { "m_parent_index": 28, "m_parent_sub_section": "section_definitions", "name": "Spectra", - "description": "Excited states properties.", + "description": "Section containing the spectra properties.", + "base_sections": [ + "/packages/15/section_definitions/0" + ], "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -11136,7 +12235,7 @@ window.nomadArtifacts = { "name": "excitation_energies", "description": "Excitation energies.", "categories": [ - "/packages/2/category_definitions/3" + "/packages/3/category_definitions/3" ], "type": { "type_kind": "numpy", @@ -11151,6 +12250,19 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 3, "m_parent_sub_section": "quantities", + "name": "energy_zero_ref", + "description": "Reference energy to set the origin of the spectra to 0 eV.", + "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": "intensities", "description": "Excitation intensities in arbitrary units.", "type": { @@ -11163,7 +12275,18 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 4, + "m_parent_index": 5, + "m_parent_sub_section": "quantities", + "name": "intensities_units", + "description": "Units in which the intensities of the spectra are returned by a calculation. The\ntypical units for the dielectric constant are `F/m`.", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 6, "m_parent_sub_section": "quantities", "name": "oscillator_strengths", "description": "Excited states oscillator strengths.", @@ -11177,7 +12300,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, + "m_parent_index": 7, "m_parent_sub_section": "quantities", "name": "transition_dipole_moments", "description": "Transition dipole moments.", @@ -11191,6 +12314,16 @@ window.nomadArtifacts = { ], "unit": "coulomb * meter" } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "provenance", + "sub_section": "/packages/3/section_definitions/18", + "repeats": true + } ] }, { @@ -11204,19 +12337,33 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", + "name": "type", + "description": "Type of Green's function calculated from the mapping of the Hubbard-Kanamori model\ninto the Anderson impurity model. These calculations are converged if both types of\nGreen's functions converge to each other (G_impurity == G_lattice).", + "type": { + "type_kind": "Enum", + "type_data": [ + "impurity", + "lattice" + ] + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", "name": "matsubara_freq", - "description": "Matsubara frequencies (imaginary frequencies).", + "description": "Matsubara frequencies (imaginary frequencies). Can be either positives or both positives\nand negatives.", "type": { "type_kind": "numpy", "type_data": "float64" }, "shape": [ - "2 * n_matsubara_freq" + "*" ] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, + "m_parent_index": 2, "m_parent_sub_section": "quantities", "name": "tau", "description": "Imaginary times.", @@ -11230,7 +12377,21 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, + "m_parent_index": 3, + "m_parent_sub_section": "quantities", + "name": "frequencies", + "description": "Real space frequencies.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "n_frequencies" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 4, "m_parent_sub_section": "quantities", "name": "chemical_potential", "description": "Chemical potential.", @@ -11238,14 +12399,14 @@ window.nomadArtifacts = { "type_kind": "numpy", "type_data": "float64" }, - "unit": "electron_volt" + "unit": "joule" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, + "m_parent_index": 5, "m_parent_sub_section": "quantities", "name": "self_energy_iw", - "description": "Self-energy matrix in Matsubara frequencies.", + "description": "Self-energy tensor in Matsubara frequencies.", "type": { "type_kind": "numpy", "type_data": "complex128" @@ -11254,15 +12415,15 @@ window.nomadArtifacts = { "n_atoms_per_unit_cell", 2, "n_correlated_orbitals", - "2 * n_matsubara_freq" + "*" ] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 4, + "m_parent_index": 6, "m_parent_sub_section": "quantities", "name": "greens_function_iw", - "description": "Green's function matrix in Matsubara frequencies.", + "description": "Green's function tensor in Matsubara frequencies.", "type": { "type_kind": "numpy", "type_data": "complex128" @@ -11271,26 +12432,32 @@ window.nomadArtifacts = { "n_atoms_per_unit_cell", 2, "n_correlated_orbitals", - "2 * n_matsubara_freq" + "*" ] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, + "m_parent_index": 7, "m_parent_sub_section": "quantities", - "name": "greens_function_freq", - "description": "Green's function matrix in real frequencies.", + "name": "hybridization_function_iw", + "description": "Hybridization function tensor in Matsubara frequencies.", "type": { "type_kind": "numpy", "type_data": "complex128" - } + }, + "shape": [ + "n_atoms_per_unit_cell", + 2, + "n_correlated_orbitals", + "*" + ] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 6, + "m_parent_index": 8, "m_parent_sub_section": "quantities", "name": "greens_function_tau", - "description": "Green's function matrix in tau (imaginary time).", + "description": "Green's function tensor in tau (imaginary time).", "type": { "type_kind": "numpy", "type_data": "complex128" @@ -11304,7 +12471,58 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 7, + "m_parent_index": 9, + "m_parent_sub_section": "quantities", + "name": "self_energy_freq", + "description": "Self-energy tensor in real frequencies.", + "type": { + "type_kind": "numpy", + "type_data": "complex128" + }, + "shape": [ + "n_atoms_per_unit_cell", + 2, + "n_correlated_orbitals", + "n_frequencies" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 10, + "m_parent_sub_section": "quantities", + "name": "greens_function_freq", + "description": "Green's function tensor in real frequencies.", + "type": { + "type_kind": "numpy", + "type_data": "complex128" + }, + "shape": [ + "n_atoms_per_unit_cell", + 2, + "n_correlated_orbitals", + "n_frequencies" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 11, + "m_parent_sub_section": "quantities", + "name": "hybridization_function_freq", + "description": "Hybridization function tensor in real frequencies.", + "type": { + "type_kind": "numpy", + "type_data": "complex128" + }, + "shape": [ + "n_atoms_per_unit_cell", + 2, + "n_correlated_orbitals", + "n_frequencies" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 12, "m_parent_sub_section": "quantities", "name": "orbital_occupations", "description": "Orbital occupation per correlated atom in the unit cell and per spin.", @@ -11320,7 +12538,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 8, + "m_parent_index": 13, "m_parent_sub_section": "quantities", "name": "quasiparticle_weights", "description": "Quasiparticle weights of each orbital per site and spin. Calculated from:\n Z = inv(1.0 - d [Re Sigma] / dw at w=0)\nit takes values \u2208 [0.0, 1.0], being Z=1 non-correlated, and Z=0 in a Mott state.", @@ -11450,7 +12668,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "raman", - "sub_section": "/packages/2/section_definitions/30", + "sub_section": "/packages/3/section_definitions/30", "repeats": false }, { @@ -11458,7 +12676,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "infrared", - "sub_section": "/packages/2/section_definitions/30", + "sub_section": "/packages/3/section_definitions/30", "repeats": false } ] @@ -11470,7 +12688,7 @@ window.nomadArtifacts = { "name": "RadiusOfGyrationValues", "description": "Section containing information regarding the values of radius of gyration (Rg).", "base_sections": [ - "/packages/2/section_definitions/3" + "/packages/3/section_definitions/3" ], "quantities": [ { @@ -11495,7 +12713,7 @@ window.nomadArtifacts = { "name": "RadiusOfGyration", "description": "Section containing information about the calculation of radius of gyration (Rg).", "base_sections": [ - "/packages/2/section_definitions/2" + "/packages/3/section_definitions/2" ], "sub_sections": [ { @@ -11503,7 +12721,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "radius_of_gyration_values", - "sub_section": "/packages/2/section_definitions/32", + "sub_section": "/packages/3/section_definitions/32", "repeats": true } ] @@ -11515,7 +12733,7 @@ window.nomadArtifacts = { "name": "BaseCalculation", "description": "Contains computed properties of a configuration as defined by the corresponding section system and with the simulation method defined by section method. The\nreferences to the system and method sections are given by system_ref and method_ref,\nrespectively.\n\nProperties derived from a group of configurations are not included in this section but\ncan be accessed in section workflow.", "base_sections": [ - "/packages/14/section_definitions/0" + "/packages/15/section_definitions/0" ], "quantities": [ { @@ -11525,11 +12743,11 @@ window.nomadArtifacts = { "name": "system_ref", "description": "Links the calculation to a section system.", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], "type": { "type_kind": "reference", - "type_data": "/packages/1/section_definitions/8" + "type_data": "/packages/2/section_definitions/8" }, "shape": [] }, @@ -11540,11 +12758,11 @@ window.nomadArtifacts = { "name": "method_ref", "description": "Links the calculation to a section method.", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], "type": { "type_kind": "reference", - "type_data": "/packages/0/section_definitions/39" + "type_data": "/packages/1/section_definitions/39" }, "shape": [] }, @@ -11555,11 +12773,11 @@ window.nomadArtifacts = { "name": "starting_calculation_ref", "description": "Links the current section calculation to the starting calculation.", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/36" + "type_data": "/packages/3/section_definitions/36" }, "shape": [] }, @@ -11582,11 +12800,11 @@ window.nomadArtifacts = { "name": "calculations_ref", "description": "Links the current section calculation to other section calculations. Such a link\nis necessary for example if the referenced calculation is a self-consistent\ncalculation that serves as a starting point or a calculation is part of a domain\ndecomposed simulation that needs to be connected.", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/36" + "type_data": "/packages/3/section_definitions/36" }, "shape": [ "n_references" @@ -11610,23 +12828,6 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 6, "m_parent_sub_section": "quantities", - "name": "time_calculation", - "description": "Stores the wall-clock time needed for a calculation i.e. the real time that has\nbeen elapsed from start to end.", - "categories": [ - "/packages/2/category_definitions/2", - "/packages/2/category_definitions/1" - ], - "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "second" - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 7, - "m_parent_sub_section": "quantities", "name": "calculation_converged", "description": "Indicates whether a the calculation is converged.", "type": { @@ -11637,7 +12838,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 8, + "m_parent_index": 7, "m_parent_sub_section": "quantities", "name": "hessian_matrix", "description": "The matrix with the second derivative of the energy with respect to atom\ndisplacements.", @@ -11654,7 +12855,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 9, + "m_parent_index": 8, "m_parent_sub_section": "quantities", "name": "spin_S2", "description": "Stores the value of the total spin moment operator $S^2$ for the converged\nwavefunctions calculated with the XC_method. It can be used to calculate the spin\ncontamination in spin-unrestricted calculations.", @@ -11664,15 +12865,32 @@ window.nomadArtifacts = { }, "shape": [] }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 9, + "m_parent_sub_section": "quantities", + "name": "time_calculation", + "description": "Stores the wall-clock time needed to complete the calculation i.e. the real time\nthat has elapsed from start to end of calculation.", + "categories": [ + "/packages/3/category_definitions/2", + "/packages/3/category_definitions/1" + ], + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [], + "unit": "second" + }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 10, "m_parent_sub_section": "quantities", "name": "time_physical", - "description": "The elapsed time with respect to the start of the simulation.", + "description": "The elapsed real time at the end of the calculation with respect to the start of\nthe simulation.", "type": { "type_kind": "numpy", - "type_data": "int32" + "type_data": "float64" }, "shape": [], "unit": "second" @@ -11694,6 +12912,19 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 12, "m_parent_sub_section": "quantities", + "name": "density", + "description": "Value of the density of the system.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [], + "unit": "kilogram / meter ** 3" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 13, + "m_parent_sub_section": "quantities", "name": "pressure", "description": "Value of the pressure of the system.", "type": { @@ -11705,7 +12936,52 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 13, + "m_parent_index": 14, + "m_parent_sub_section": "quantities", + "name": "pressure_tensor", + "description": "Value of the pressure in terms of the x, y, z components of the simulation cell.\nTypically calculated as the difference between the kinetic energy and the virial.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + 3, + 3 + ], + "unit": "pascal" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 15, + "m_parent_sub_section": "quantities", + "name": "virial_tensor", + "description": "Value of the virial in terms of the x, y, z components of the simulation cell.\nTypically calculated as the cross product between positions and forces.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + 3, + 3 + ], + "unit": "joule" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 16, + "m_parent_sub_section": "quantities", + "name": "enthalpy", + "description": "Value of the calculated enthalpy per cell i.e. energy_total + pressure * volume.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [], + "unit": "joule" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 17, "m_parent_sub_section": "quantities", "name": "temperature", "description": "Value of the temperature of the system.", @@ -11718,7 +12994,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 14, + "m_parent_index": 18, "m_parent_sub_section": "quantities", "name": "step", "description": "The number of time steps with respect to the start of the simulation.", @@ -11730,7 +13006,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 15, + "m_parent_index": 19, "m_parent_sub_section": "quantities", "name": "time", "description": "The elapsed simulated physical time since the start of the simulation.", @@ -11749,30 +13025,30 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "energy", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], - "sub_section": "/packages/2/section_definitions/5" + "sub_section": "/packages/3/section_definitions/5" }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "forces", - "sub_section": "/packages/2/section_definitions/7" + "sub_section": "/packages/3/section_definitions/7" }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 2, "m_parent_sub_section": "sub_sections", "name": "stress", - "sub_section": "/packages/2/section_definitions/9" + "sub_section": "/packages/3/section_definitions/9" }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 3, "m_parent_sub_section": "sub_sections", "name": "band_gap", - "sub_section": "/packages/2/section_definitions/19", + "sub_section": "/packages/3/section_definitions/19", "repeats": true }, { @@ -11780,7 +13056,7 @@ window.nomadArtifacts = { "m_parent_index": 4, "m_parent_sub_section": "sub_sections", "name": "dos_electronic", - "sub_section": "/packages/2/section_definitions/17", + "sub_section": "/packages/3/section_definitions/17", "repeats": true }, { @@ -11788,7 +13064,7 @@ window.nomadArtifacts = { "m_parent_index": 5, "m_parent_sub_section": "sub_sections", "name": "dos_phonon", - "sub_section": "/packages/2/section_definitions/17", + "sub_section": "/packages/3/section_definitions/17", "repeats": true }, { @@ -11796,7 +13072,7 @@ window.nomadArtifacts = { "m_parent_index": 6, "m_parent_sub_section": "sub_sections", "name": "eigenvalues", - "sub_section": "/packages/2/section_definitions/13", + "sub_section": "/packages/3/section_definitions/13", "repeats": true }, { @@ -11804,7 +13080,7 @@ window.nomadArtifacts = { "m_parent_index": 7, "m_parent_sub_section": "sub_sections", "name": "band_structure_electronic", - "sub_section": "/packages/2/section_definitions/14", + "sub_section": "/packages/3/section_definitions/14", "repeats": true }, { @@ -11812,7 +13088,7 @@ window.nomadArtifacts = { "m_parent_index": 8, "m_parent_sub_section": "sub_sections", "name": "band_structure_phonon", - "sub_section": "/packages/2/section_definitions/14", + "sub_section": "/packages/3/section_definitions/14", "repeats": true }, { @@ -11820,7 +13096,7 @@ window.nomadArtifacts = { "m_parent_index": 9, "m_parent_sub_section": "sub_sections", "name": "thermodynamics", - "sub_section": "/packages/2/section_definitions/23", + "sub_section": "/packages/3/section_definitions/23", "repeats": true }, { @@ -11828,7 +13104,7 @@ window.nomadArtifacts = { "m_parent_index": 10, "m_parent_sub_section": "sub_sections", "name": "hopping_matrix", - "sub_section": "/packages/0/section_definitions/24", + "sub_section": "/packages/1/section_definitions/24", "repeats": true }, { @@ -11836,7 +13112,7 @@ window.nomadArtifacts = { "m_parent_index": 11, "m_parent_sub_section": "sub_sections", "name": "spectra", - "sub_section": "/packages/2/section_definitions/28", + "sub_section": "/packages/3/section_definitions/28", "repeats": true }, { @@ -11844,7 +13120,7 @@ window.nomadArtifacts = { "m_parent_index": 12, "m_parent_sub_section": "sub_sections", "name": "greens_functions", - "sub_section": "/packages/2/section_definitions/29", + "sub_section": "/packages/3/section_definitions/29", "repeats": true }, { @@ -11852,7 +13128,7 @@ window.nomadArtifacts = { "m_parent_index": 13, "m_parent_sub_section": "sub_sections", "name": "vibrational_frequencies", - "sub_section": "/packages/2/section_definitions/31", + "sub_section": "/packages/3/section_definitions/31", "repeats": true }, { @@ -11860,7 +13136,7 @@ window.nomadArtifacts = { "m_parent_index": 14, "m_parent_sub_section": "sub_sections", "name": "potential", - "sub_section": "/packages/2/section_definitions/26", + "sub_section": "/packages/3/section_definitions/26", "repeats": true }, { @@ -11868,7 +13144,7 @@ window.nomadArtifacts = { "m_parent_index": 15, "m_parent_sub_section": "sub_sections", "name": "multipoles", - "sub_section": "/packages/2/section_definitions/22", + "sub_section": "/packages/3/section_definitions/22", "repeats": true }, { @@ -11876,7 +13152,7 @@ window.nomadArtifacts = { "m_parent_index": 16, "m_parent_sub_section": "sub_sections", "name": "charges", - "sub_section": "/packages/2/section_definitions/11", + "sub_section": "/packages/3/section_definitions/11", "repeats": true }, { @@ -11884,7 +13160,7 @@ window.nomadArtifacts = { "m_parent_index": 17, "m_parent_sub_section": "sub_sections", "name": "density_charge", - "sub_section": "/packages/2/section_definitions/27", + "sub_section": "/packages/3/section_definitions/27", "repeats": true }, { @@ -11892,7 +13168,7 @@ window.nomadArtifacts = { "m_parent_index": 18, "m_parent_sub_section": "sub_sections", "name": "radius_of_gyration", - "sub_section": "/packages/2/section_definitions/33", + "sub_section": "/packages/3/section_definitions/33", "repeats": true } ] @@ -11904,7 +13180,7 @@ window.nomadArtifacts = { "name": "ScfIteration", "description": "Every scf_iteration section represents a self-consistent field (SCF) iteration, and gives detailed information on the SCF procedure of the specified quantities.", "base_sections": [ - "/packages/2/section_definitions/34" + "/packages/3/section_definitions/34" ] }, { @@ -11914,7 +13190,7 @@ window.nomadArtifacts = { "name": "Calculation", "description": "Every calculation section contains the values computed during a *single configuration calculation*, i.e. a calculation performed on a given\nconfiguration of the system (as defined in section_system) and a given computational\nmethod (e.g., exchange-correlation method, basis sets, as defined in section_method).\n\nThe link between the current section calculation and the related\nsystem and method sections is established by the values stored in system_ref and\nmethod_ref, respectively.\n\nThe reason why information on the system configuration and computational method is\nstored separately is that several *single configuration calculations* can be performed\non the same system configuration, viz. several system configurations can be evaluated\nwith the same computational method. This storage strategy avoids redundancies.", "base_sections": [ - "/packages/2/section_definitions/34" + "/packages/3/section_definitions/34" ], "quantities": [ { @@ -11924,7 +13200,7 @@ window.nomadArtifacts = { "name": "n_scf_iterations", "description": "Gives the number of performed self-consistent field (SCF) iterations.", "categories": [ - "/packages/2/category_definitions/0" + "/packages/3/category_definitions/0" ], "type": { "type_kind": "python", @@ -11939,7 +13215,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "scf_iteration", - "sub_section": "/packages/2/section_definitions/35", + "sub_section": "/packages/3/section_definitions/35", "repeats": true } ] @@ -11967,7 +13243,7 @@ window.nomadArtifacts = { "name": "TimeInfo", "description": "Stores information on the date and timings of the calculation. They are useful for,\ne.g., debugging or visualization purposes.", "categories": [ - "/packages/2/category_definitions/1" + "/packages/3/category_definitions/1" ] }, { @@ -11984,7 +13260,7 @@ window.nomadArtifacts = { "name": "EnergyTypeReference", "description": "This metadata stores an energy used as reference point.", "categories": [ - "/packages/2/category_definitions/3" + "/packages/3/category_definitions/3" ] }, { @@ -11998,7 +13274,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Package", - "m_parent_index": 3, + "m_parent_index": 4, "m_parent_sub_section": "packages", "name": "nomad.datamodel.metainfo.simulation.run", "section_definitions": [ @@ -12016,8 +13292,8 @@ window.nomadArtifacts = { "name": "name", "description": "Specifies the name of the program that generated the data.", "categories": [ - "/packages/3/category_definitions/0", - "/packages/3/category_definitions/1" + "/packages/4/category_definitions/0", + "/packages/4/category_definitions/1" ], "type": { "type_kind": "python", @@ -12032,8 +13308,8 @@ window.nomadArtifacts = { "name": "version", "description": "Specifies the version of the program that was used. This should be the version\nnumber of an official release, the version tag or a commit id as well as the\nlocation of the repository.", "categories": [ - "/packages/3/category_definitions/0", - "/packages/3/category_definitions/1" + "/packages/4/category_definitions/0", + "/packages/4/category_definitions/1" ], "type": { "type_kind": "python", @@ -12048,8 +13324,8 @@ window.nomadArtifacts = { "name": "compilation_datetime", "description": "Contains the program compilation date and time from *Unix epoch* (00:00:00 UTC on\n1 January 1970) in seconds. For date and times without a timezone, the default\ntimezone GMT is used.", "categories": [ - "/packages/3/category_definitions/0", - "/packages/3/category_definitions/1" + "/packages/4/category_definitions/0", + "/packages/4/category_definitions/1" ], "type": { "type_kind": "numpy", @@ -12065,8 +13341,8 @@ window.nomadArtifacts = { "name": "compilation_host", "description": "Specifies the host on which the program was compiled.", "categories": [ - "/packages/3/category_definitions/0", - "/packages/3/category_definitions/1" + "/packages/4/category_definitions/0", + "/packages/4/category_definitions/1" ], "type": { "type_kind": "python", @@ -12203,7 +13479,7 @@ window.nomadArtifacts = { "name": "Run", "description": "Every section run represents a single call of a program.", "base_sections": [ - "/packages/14/section_definitions/0" + "/packages/15/section_definitions/0" ], "quantities": [ { @@ -12249,11 +13525,11 @@ window.nomadArtifacts = { "name": "starting_run_ref", "description": "Links the current section run to a section run containing the calculations from\nwhich the current section starts.", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], "type": { "type_kind": "reference", - "type_data": "/packages/3/section_definitions/3" + "type_data": "/packages/4/section_definitions/3" }, "shape": [] }, @@ -12276,11 +13552,11 @@ window.nomadArtifacts = { "name": "runs_ref", "description": "Links the the current section to other run sections. Such a link is necessary for\nexample for workflows that may contain a series of runs.", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], "type": { "type_kind": "reference", - "type_data": "/packages/3/section_definitions/3" + "type_data": "/packages/4/section_definitions/3" }, "shape": [ "n_references" @@ -12293,28 +13569,28 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "program", - "sub_section": "/packages/3/section_definitions/0" + "sub_section": "/packages/4/section_definitions/0" }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "time_run", - "sub_section": "/packages/3/section_definitions/1" + "sub_section": "/packages/4/section_definitions/1" }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 2, "m_parent_sub_section": "sub_sections", "name": "message", - "sub_section": "/packages/3/section_definitions/2" + "sub_section": "/packages/4/section_definitions/2" }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 3, "m_parent_sub_section": "sub_sections", "name": "method", - "sub_section": "/packages/0/section_definitions/39", + "sub_section": "/packages/1/section_definitions/39", "repeats": true }, { @@ -12322,7 +13598,7 @@ window.nomadArtifacts = { "m_parent_index": 4, "m_parent_sub_section": "sub_sections", "name": "system", - "sub_section": "/packages/1/section_definitions/8", + "sub_section": "/packages/2/section_definitions/8", "repeats": true }, { @@ -12330,7 +13606,7 @@ window.nomadArtifacts = { "m_parent_index": 5, "m_parent_sub_section": "sub_sections", "name": "calculation", - "sub_section": "/packages/2/section_definitions/36", + "sub_section": "/packages/3/section_definitions/36", "repeats": true } ] @@ -12351,123 +13627,91 @@ window.nomadArtifacts = { "name": "ProgramInfo", "description": "Contains information on the program that generated the data, i.e. the program_name,\nprogram_version, program_compilation_host and program_compilation_datetime as direct\nchildren of this field.", "categories": [ - "/packages/3/category_definitions/0" + "/packages/4/category_definitions/0" ] } ] }, { "m_def": "nomad.metainfo.metainfo.Package", - "m_parent_index": 4, + "m_parent_index": 5, "m_parent_sub_section": "packages", - "name": "nomad.datamodel.metainfo.measurements", + "name": "nomad.datamodel.results", "section_definitions": [ { "m_def": "nomad.metainfo.metainfo.Section", "m_parent_index": 0, "m_parent_sub_section": "section_definitions", - "name": "Sample", + "name": "BandGapDeprecated", + "base_sections": [ + "/packages/3/section_definitions/12" + ], "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "sample_id", - "description": "Identification number or signatures of the sample used.", + "name": "label", + "description": "Temporary label for GUI generating GUI artifacts.\nCan be left unpopulated.", "type": { "type_kind": "python", "type_data": "str" - } + }, + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", - "name": "name", - "description": "A human readable free text name for the sample.", + "m_annotations": { + "elasticsearch": [ + "results.properties.electronic.band_structure_electronic.band_gap.index" + ] + }, + "name": "index", + "description": "The spin channel index.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "int32" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 2, "m_parent_sub_section": "quantities", - "name": "description", - "description": "A description of the sample.", - "type": { - "type_kind": "python", - "type_data": "str" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, - "m_parent_sub_section": "quantities", - "name": "sample_state", - "description": "The physical state of the sample.", - "type": { - "type_kind": "python", - "type_data": "str" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 4, - "m_parent_sub_section": "quantities", - "name": "sample_temperature", - "description": "The temperature of the sample during the measurement.", + "m_annotations": { + "elasticsearch": [ + "results.properties.electronic.band_structure_electronic.band_gap.value" + ] + }, + "name": "value", + "description": "The actual value of the band gap. Value of zero indicates a vanishing band gap and\nis distinct from sources lacking any band gap measurement or calculation.", "type": { "type_kind": "numpy", "type_data": "float64" }, - "unit": "kelvin" - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, - "m_parent_sub_section": "quantities", - "name": "sample_microstructure", - "description": "The sample microstructure.", - "type": { - "type_kind": "python", - "type_data": "str" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 6, - "m_parent_sub_section": "quantities", - "name": "sample_constituents", - "description": "The constituents.", - "type": { - "type_kind": "python", - "type_data": "str" - } + "shape": [], + "unit": "joule" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 7, + "m_parent_index": 3, "m_parent_sub_section": "quantities", - "name": "elements", - "type": { - "type_kind": "python", - "type_data": "str" + "m_annotations": { + "elasticsearch": [ + "results.properties.electronic.band_structure_electronic.band_gap.type" + ] }, - "shape": [ - "*" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 8, - "m_parent_sub_section": "quantities", - "name": "chemical_formula", + "name": "type", + "description": "Band gap type.", "type": { - "type_kind": "python", - "type_data": "str" - } + "type_kind": "Enum", + "type_data": [ + "direct", + "indirect" + ] + }, + "shape": [] } ] }, @@ -12475,14 +13719,17 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Section", "m_parent_index": 1, "m_parent_sub_section": "section_definitions", - "name": "Experiment", + "name": "BandGap", + "base_sections": [ + "/packages/3/section_definitions/19" + ], "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "name", - "description": "A human readable free text name for the experiment.", + "name": "label", + "description": "Label to identify the band gap data, e.g. the method employed.", "type": { "type_kind": "python", "type_data": "str" @@ -12492,56 +13739,55 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", - "name": "description", - "description": "A description of the experiment.", + "m_annotations": { + "elasticsearch": [ + "results.properties.electronic.band_structure_electronic.band_gap.index" + ] + }, + "name": "index", + "description": "The spin channel index.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "int32" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 2, "m_parent_sub_section": "quantities", - "name": "steps", - "description": "Human readable experiment steps.", + "m_annotations": { + "elasticsearch": [ + "results.properties.electronic.band_structure_electronic.band_gap.value" + ] + }, + "name": "value", + "description": "The actual value of the band gap. Value of zero indicates a vanishing band gap and\nis distinct from sources lacking any band gap measurement or calculation.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [ - "*" - ] + "shape": [], + "unit": "joule" }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 3, "m_parent_sub_section": "quantities", - "name": "sample_ref", - "description": "Reference to the used sample.", + "m_annotations": { + "elasticsearch": [ + "results.properties.electronic.band_structure_electronic.band_gap.type" + ] + }, + "name": "type", + "description": "Band gap type.", "type": { - "type_kind": "reference", - "type_data": "/packages/4/section_definitions/0" - } - } - ], - "sub_sections": [ - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 0, - "m_parent_sub_section": "sub_sections", - "name": "sample", - "description": "The used sample.", - "sub_section": "/packages/4/section_definitions/0" - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 1, - "m_parent_sub_section": "sub_sections", - "name": "measurement", - "description": "Measurements performed in this experiment.", - "sub_section": "/packages/4/section_definitions/3", - "repeats": true + "type_kind": "Enum", + "type_data": [ + "direct", + "indirect" + ] + }, + "shape": [] } ] }, @@ -12549,39 +13795,190 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Section", "m_parent_index": 2, "m_parent_sub_section": "section_definitions", - "name": "Instrument", + "name": "ElementalComposition", + "description": "\n Section containing information about the concentration of an element,\n given by its atomic and mass fraction within the system or material.\n ", + "more": { + "label_quantity": "element" + }, "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "instrument_id", - "description": "Identification number or signatures of the instrument used.", + "m_annotations": { + "elasticsearch": [ + "results.material.topology.elemental_composition.element", + "results.material.topology.elemental_composition.element__suggestion.suggestion" + ] + }, + "name": "element", + "description": "The symbol of the element, e.g. 'Pb'.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "Enum", + "type_data": [ + "H", + "He", + "Li", + "Be", + "B", + "C", + "N", + "O", + "F", + "Ne", + "Na", + "Mg", + "Al", + "Si", + "P", + "S", + "Cl", + "Ar", + "K", + "Ca", + "Sc", + "Ti", + "V", + "Cr", + "Mn", + "Fe", + "Co", + "Ni", + "Cu", + "Zn", + "Ga", + "Ge", + "As", + "Se", + "Br", + "Kr", + "Rb", + "Sr", + "Y", + "Zr", + "Nb", + "Mo", + "Tc", + "Ru", + "Rh", + "Pd", + "Ag", + "Cd", + "In", + "Sn", + "Sb", + "Te", + "I", + "Xe", + "Cs", + "Ba", + "La", + "Ce", + "Pr", + "Nd", + "Pm", + "Sm", + "Eu", + "Gd", + "Tb", + "Dy", + "Ho", + "Er", + "Tm", + "Yb", + "Lu", + "Hf", + "Ta", + "W", + "Re", + "Os", + "Ir", + "Pt", + "Au", + "Hg", + "Tl", + "Pb", + "Bi", + "Po", + "At", + "Rn", + "Fr", + "Ra", + "Ac", + "Th", + "Pa", + "U", + "Np", + "Pu", + "Am", + "Cm", + "Bk", + "Cf", + "Es", + "Fm", + "Md", + "No", + "Lr", + "Rf", + "Db", + "Sg", + "Bh", + "Hs", + "Mt", + "Ds", + "Rg", + "Cn", + "Nh", + "Fl", + "Mc", + "Lv", + "Ts", + "Og" + ] } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", - "name": "name", - "description": "A human readable free text name for the instrument.", + "name": "mass", + "description": "The (average) mass of the element.", "type": { - "type_kind": "python", - "type_data": "str" - } + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "kilogram" }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 2, "m_parent_sub_section": "quantities", - "name": "description", - "description": "A description of the instrument.", + "m_annotations": { + "elasticsearch": [ + "results.material.topology.elemental_composition.atomic_fraction" + ] + }, + "name": "atomic_fraction", + "description": "The atomic fraction of the element in the system it is contained within.\nPer definition a positive value less than or equal to 1.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 3, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.material.topology.elemental_composition.mass_fraction" + ] + }, + "name": "mass_fraction", + "description": "The mass fraction of the element in the system it is contained within.\nPer definition a positive value less than or equal to 1.", + "type": { + "type_kind": "numpy", + "type_data": "float64" } } ] @@ -12590,146 +13987,187 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Section", "m_parent_index": 3, "m_parent_sub_section": "section_definitions", - "name": "Measurement", + "name": "LatticeParameters", + "description": "\n Lattice parameters of a cell.\n ", "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "measurement_id", + "m_annotations": { + "elasticsearch": [ + "results.properties.structures.structure_primitive.lattice_parameters.a" + ] + }, + "name": "a", + "description": "Length of the first basis vector.", "type": { - "type_kind": "python", - "type_data": "str" - } + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "meter" }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", - "name": "name", + "m_annotations": { + "elasticsearch": [ + "results.properties.structures.structure_primitive.lattice_parameters.b" + ] + }, + "name": "b", + "description": "Length of the second basis vector.", "type": { - "type_kind": "python", - "type_data": "str" - } + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "meter" }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 2, "m_parent_sub_section": "quantities", - "name": "description", - "type": { - "type_kind": "python", - "type_data": "str" - } + "m_annotations": { + "elasticsearch": [ + "results.properties.structures.structure_primitive.lattice_parameters.c" + ] + }, + "name": "c", + "description": "Length of the third basis vector.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "meter" }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 3, "m_parent_sub_section": "quantities", - "name": "method_name", + "m_annotations": { + "elasticsearch": [ + "results.properties.structures.structure_primitive.lattice_parameters.alpha" + ] + }, + "name": "alpha", + "description": "Angle between second and third basis vector.", "type": { - "type_kind": "python", - "type_data": "str" - } + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "radian" }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 4, "m_parent_sub_section": "quantities", - "name": "method_abbreviation", + "m_annotations": { + "elasticsearch": [ + "results.properties.structures.structure_primitive.lattice_parameters.beta" + ] + }, + "name": "beta", + "description": "Angle between first and third basis vector.", "type": { - "type_kind": "python", - "type_data": "str" - } + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "radian" }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 5, "m_parent_sub_section": "quantities", - "name": "start_time", - "description": "The datetime of the beginning of the measurement.", + "m_annotations": { + "elasticsearch": [ + "results.properties.structures.structure_primitive.lattice_parameters.gamma" + ] + }, + "name": "gamma", + "description": "Angle between first and second basis vector.", "type": { - "type_kind": "custom", - "type_data": "nomad.metainfo.metainfo._Datetime" + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "radian" + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 4, + "m_parent_sub_section": "section_definitions", + "name": "WyckoffSet", + "description": "\n Section for storing Wyckoff set information. Only available for\n conventional cells that have undergone symmetry analysis.\n ", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "wyckoff_letter", + "description": "The Wyckoff letter for this set.", + "type": { + "type_kind": "python", + "type_data": "str" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 6, + "m_parent_index": 1, "m_parent_sub_section": "quantities", - "name": "end_time", - "description": "The datetime of the measurement end.", + "name": "indices", + "description": "Indices of the atoms belonging to this group.", "type": { - "type_kind": "custom", - "type_data": "nomad.metainfo.metainfo._Datetime" - } + "type_kind": "numpy", + "type_data": "int32" + }, + "shape": [ + "1..*" + ] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 7, + "m_parent_index": 2, "m_parent_sub_section": "quantities", - "name": "facility", - "description": "Description of the facility (e.g. in full or an acronym) where\nthe measurement was conducted.", + "name": "element", + "description": "Chemical element at this Wyckoff position.", "type": { "type_kind": "python", "type_data": "str" } - } - ], - "sub_sections": [ - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 0, - "m_parent_sub_section": "sub_sections", - "name": "sample", - "sub_section": "/packages/4/section_definitions/0", - "repeats": true }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 1, - "m_parent_sub_section": "sub_sections", - "name": "instrument", - "sub_section": "/packages/4/section_definitions/2", - "repeats": true - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 0, - "m_parent_sub_section": "inner_section_definitions", - "name": "SpectrumChannel", - "description": "Provides the metadata for a generic additional spectrum channel. Do not use it for energy or count; they have their predefined channels.", - "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, + "m_parent_index": 3, "m_parent_sub_section": "quantities", - "name": "channel_id", + "name": "x", + "description": "The free parameter x if present.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, + "m_parent_index": 4, "m_parent_sub_section": "quantities", - "name": "label", + "name": "y", + "description": "The free parameter y if present.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, + "m_parent_index": 5, "m_parent_sub_section": "quantities", - "name": "unit", + "name": "z", + "description": "The free parameter z if present.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" } } ] @@ -12738,74 +14176,149 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Section", "m_parent_index": 5, "m_parent_sub_section": "section_definitions", - "name": "Spectrum", - "description": "Generic spectrum data with energies and counts. May include additional channels.", + "name": "Structure", + "description": "\n Describes an atomistic structure.\n ", "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "n_values", + "name": "dimension_types", + "description": "List of three integers. For each of the three directions indicated by\nthe three lattice vectors (see property lattice_vectors). This list\nindicates if the direction is periodic (value 1) or non-periodic (value\n0). Note: the elements in this list each refer to the direction of the\ncorresponding entry in lattice_vectors and not the Cartesian x, y, z\ndirections.", "type": { "type_kind": "python", "type_data": "int" }, - "virtual": true + "shape": [ + 3 + ], + "default": [ + 0, + 0, + 0 + ] }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", - "name": "count", - "description": "The count at each energy value, dimensionless", + "m_annotations": { + "elasticsearch": [ + "results.properties.structures.structure_primitive.nperiodic_dimensions" + ] + }, + "name": "nperiodic_dimensions", + "description": "An integer specifying the number of periodic dimensions in the\nstructure, equivalent to the number of non-zero entries in\ndimension_types.", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "int" }, - "shape": [ - "n_values" - ] + "virtual": true }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 2, "m_parent_sub_section": "quantities", - "name": "energy", - "description": "The energy range of the spectrum", + "name": "lattice_vectors", + "description": "The three lattice vectors in Cartesian coordinates.", "type": { "type_kind": "numpy", "type_data": "float64" }, "shape": [ - "n_values" + 3, + 3 ], - "unit": "joule" + "unit": "meter" }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 3, "m_parent_sub_section": "quantities", - "name": "additional_channel_data", - "description": "Data from additional channels. The channels are described in `additional channels`.", + "name": "cartesian_site_positions", + "description": "Cartesian positions of each site. A site is an atom, a site potentially\noccupied by an atom, or a placeholder for a virtual mixture of atoms\n(e.g., in a virtual crystal approximation).", "type": { "type_kind": "numpy", "type_data": "float64" }, "shape": [ - "n_channels", - "n_values" - ] + "n_sites", + 3 + ], + "unit": "meter" }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 4, "m_parent_sub_section": "quantities", - "name": "n_additional_channels", + "m_annotations": { + "elasticsearch": [ + "results.properties.structures.structure_primitive.n_sites" + ] + }, + "name": "n_sites", + "description": "An integer specifying the length of the cartesian_site_positions property.", "type": { "type_kind": "python", "type_data": "int" }, + "default": 0, "virtual": true + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 5, + "m_parent_sub_section": "quantities", + "name": "species_at_sites", + "description": "Name of the species at each site (where values for sites are specified with the same\norder of the cartesian_site_positions property). The properties of the species are\nfound in the species property.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [ + "n_sites" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 6, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.properties.structures.structure_primitive.cell_volume" + ] + }, + "name": "cell_volume", + "description": "Volume of the cell.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "meter ** 3" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 7, + "m_parent_sub_section": "quantities", + "name": "atomic_density", + "description": "Atomic density of the material (atoms/volume).'", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "1 / meter ** 3" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 8, + "m_parent_sub_section": "quantities", + "name": "mass_density", + "description": "Mass density of the material.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "kilogram / meter ** 3" } ], "sub_sections": [ @@ -12813,80 +14326,100 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 0, "m_parent_sub_section": "sub_sections", - "name": "additional_channels", - "description": "Metadata for additional channels. The order is the same as the channel data\nappears in `additional_channel_data`.", - "sub_section": "/packages/4/section_definitions/5/inner_section_definitions/0", + "name": "species", + "sub_section": "/packages/21/section_definitions/0", + "repeats": true + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", + "name": "lattice_parameters", + "sub_section": "/packages/5/section_definitions/3" + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 2, + "m_parent_sub_section": "sub_sections", + "name": "wyckoff_sets", + "sub_section": "/packages/5/section_definitions/4", "repeats": true } - ], - "inner_section_definitions": [ + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 6, + "m_parent_sub_section": "section_definitions", + "name": "Structures", + "description": "\n Contains full atomistic representations of the material in different\n forms.\n ", + "sub_sections": [ { - "m_def": "nomad.metainfo.metainfo.Section", + "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 0, - "m_parent_sub_section": "inner_section_definitions", - "name": "SpectrumChannel", - "description": "Provides the metadata for a generic additional spectrum channel. Do not use it for energy or count; they have their predefined channels.", - "quantities": [ - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, - "m_parent_sub_section": "quantities", - "name": "channel_id", - "type": { - "type_kind": "python", - "type_data": "str" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, - "m_parent_sub_section": "quantities", - "name": "label", - "type": { - "type_kind": "python", - "type_data": "str" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, - "m_parent_sub_section": "quantities", - "name": "unit", - "type": { - "type_kind": "python", - "type_data": "str" - } - } - ] + "m_parent_sub_section": "sub_sections", + "name": "structure_original", + "description": "Contains a selected representative structure from the the original\ndata.", + "sub_section": "/packages/5/section_definitions/5", + "repeats": false + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", + "name": "structure_conventional", + "description": "Contains the conventional structure that is derived from\nstructure_original. This conventional stucture has been idealized and\nthe conventions employed by spglib are used.", + "sub_section": "/packages/5/section_definitions/5", + "repeats": false + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 2, + "m_parent_sub_section": "sub_sections", + "name": "structure_primitive", + "description": "Contains the primitive structure that is derived from\nstructure_original. This primitive stucture has been idealized and the\nconventions employed by spglib are used.", + "sub_section": "/packages/5/section_definitions/5", + "repeats": false } ] - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Package", - "m_parent_index": 5, - "m_parent_sub_section": "packages", - "name": "nomad.datamodel.results", - "section_definitions": [ + }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 0, + "m_parent_index": 7, "m_parent_sub_section": "section_definitions", - "name": "BandGapDeprecated", - "base_sections": [ - "/packages/2/section_definitions/12" - ], + "name": "Symmetry", + "description": "\n Section containing information about the symmetry of the material. All\n of these properties are derived by running a symmetry analysis on a\n representative geometry from the original data. This original geometry\n is stored in results.properties together with the primitive and\n conventional structures.\n ", "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "label", - "description": "Temporary label for GUI generating GUI artifacts.\nCan be left unpopulated.", + "m_annotations": { + "elasticsearch": [ + "results.material.symmetry.bravais_lattice", + "results.material.symmetry.bravais_lattice__suggestion.suggestion" + ] + }, + "name": "bravais_lattice", + "description": "Identifier for the Bravais lattice in Pearson notation. The first lowercase letter\nidentifies the crystal family and can be one of the following: a (triclinic), b\n(monoclinic), o (orthorhombic), t (tetragonal), h (hexagonal) or c (cubic). The\nsecond uppercase letter identifies the centring and can be one of the following: P\n(primitive), S (face centred), I (body centred), R (rhombohedral centring) or F\n(all faces centred).", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "Enum", + "type_data": [ + "aP", + "mP", + "mS", + "oP", + "oS", + "oF", + "oI", + "tP", + "tI", + "hP", + "hR", + "cP", + "cF", + "cI" + ] }, "shape": [] }, @@ -12896,15 +14429,25 @@ window.nomadArtifacts = { "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.properties.electronic.band_structure_electronic.band_gap.index" + "results.material.symmetry.crystal_system", + "results.material.symmetry.crystal_system__suggestion.suggestion" ] }, - "name": "index", - "description": "The spin channel index.", + "name": "crystal_system", + "description": "Name of the crystal system.", "type": { - "type_kind": "numpy", - "type_data": "int32" - } + "type_kind": "Enum", + "type_data": [ + "triclinic", + "monoclinic", + "orthorhombic", + "tetragonal", + "trigonal", + "hexagonal", + "cubic" + ] + }, + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -12912,17 +14455,16 @@ window.nomadArtifacts = { "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.properties.electronic.band_structure_electronic.band_gap.value" + "results.material.symmetry.hall_number" ] }, - "name": "value", - "description": "The actual value of the band gap. Value of zero indicates a vanishing band gap and\nis distinct from sources lacking any band gap measurement or calculation.", + "name": "hall_number", + "description": "The Hall number for this system.", "type": { "type_kind": "numpy", - "type_data": "float64" + "type_data": "int32" }, - "shape": [], - "unit": "joule" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -12930,296 +14472,164 @@ window.nomadArtifacts = { "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.properties.electronic.band_structure_electronic.band_gap.type" + "results.material.symmetry.hall_symbol", + "results.material.symmetry.hall_symbol__suggestion.suggestion" ] }, - "name": "type", - "description": "Band gap type.", + "name": "hall_symbol", + "description": "The Hall symbol for this system.", "type": { - "type_kind": "Enum", - "type_data": [ - "direct", - "indirect" - ] + "type_kind": "python", + "type_data": "str" }, "shape": [] - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 1, - "m_parent_sub_section": "section_definitions", - "name": "BandGap", - "base_sections": [ - "/packages/2/section_definitions/19" - ], - "quantities": [ + }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, + "m_parent_index": 4, "m_parent_sub_section": "quantities", - "name": "label", - "description": "Label to identify the band gap data, e.g. the method employed.", + "m_annotations": { + "elasticsearch": [ + "results.material.symmetry.point_group", + "results.material.symmetry.point_group__suggestion.suggestion" + ] + }, + "name": "point_group", + "description": "Symbol of the crystallographic point group in the Hermann-Mauguin notation.", "type": { "type_kind": "python", "type_data": "str" - } + }, + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, + "m_parent_index": 5, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.properties.electronic.band_structure_electronic.band_gap.index" + "results.material.symmetry.space_group_number" ] }, - "name": "index", - "description": "The spin channel index.", + "name": "space_group_number", + "description": "Specifies the International Union of Crystallography (IUC) number of the 3D space\ngroup of this system.", "type": { "type_kind": "numpy", "type_data": "int32" - } + }, + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, + "m_parent_index": 6, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.properties.electronic.band_structure_electronic.band_gap.value" + "results.material.symmetry.space_group_symbol", + "results.material.symmetry.space_group_symbol__suggestion.suggestion" ] }, - "name": "value", - "description": "The actual value of the band gap. Value of zero indicates a vanishing band gap and\nis distinct from sources lacking any band gap measurement or calculation.", + "name": "space_group_symbol", + "description": "The International Union of Crystallography (IUC) short symbol of the 3D\nspace group of this system.", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [], - "unit": "joule" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, + "m_parent_index": 7, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.properties.electronic.band_structure_electronic.band_gap.type" + "results.material.symmetry.prototype_formula" ] }, - "name": "type", - "description": "Band gap type.", + "name": "prototype_formula", + "description": "The formula of the prototypical material for this structure.", "type": { - "type_kind": "Enum", - "type_data": [ - "direct", - "indirect" - ] - }, - "shape": [] - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 2, - "m_parent_sub_section": "section_definitions", - "name": "ElementalComposition", - "description": "\n Section containing information about the concentration of an element,\n given by its atomic and mass fraction within the system or material.\n ", - "more": { - "label_quantity": "element" - }, - "quantities": [ + "type_kind": "python", + "type_data": "str" + } + }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, + "m_parent_index": 8, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.material.topology.elemental_composition.element", - "results.material.topology.elemental_composition.element__suggestion.suggestion" + "results.material.symmetry.prototype_aflow_id", + "results.material.symmetry.prototype_aflow_id__suggestion.suggestion" ] }, - "name": "element", - "description": "The symbol of the element, e.g. 'Pb'.", + "name": "prototype_aflow_id", + "description": "The identifier of this structure in the AFLOW encyclopedia of\ncrystallographic prototypes:\nhttp://www.aflowlib.org/prototype-encyclopedia/index.html", "type": { - "type_kind": "Enum", - "type_data": [ - "H", - "He", - "Li", - "Be", - "B", - "C", - "N", - "O", - "F", - "Ne", - "Na", - "Mg", - "Al", - "Si", - "P", - "S", - "Cl", - "Ar", - "K", - "Ca", - "Sc", - "Ti", - "V", - "Cr", - "Mn", - "Fe", - "Co", - "Ni", - "Cu", - "Zn", - "Ga", - "Ge", - "As", - "Se", - "Br", - "Kr", - "Rb", - "Sr", - "Y", - "Zr", - "Nb", - "Mo", - "Tc", - "Ru", - "Rh", - "Pd", - "Ag", - "Cd", - "In", - "Sn", - "Sb", - "Te", - "I", - "Xe", - "Cs", - "Ba", - "La", - "Ce", - "Pr", - "Nd", - "Pm", - "Sm", - "Eu", - "Gd", - "Tb", - "Dy", - "Ho", - "Er", - "Tm", - "Yb", - "Lu", - "Hf", - "Ta", - "W", - "Re", - "Os", - "Ir", - "Pt", - "Au", - "Hg", - "Tl", - "Pb", - "Bi", - "Po", - "At", - "Rn", - "Fr", - "Ra", - "Ac", - "Th", - "Pa", - "U", - "Np", - "Pu", - "Am", - "Cm", - "Bk", - "Cf", - "Es", - "Fm", - "Md", - "No", - "Lr", - "Rf", - "Db", - "Sg", - "Bh", - "Hs", - "Mt", - "Ds", - "Rg", - "Cn", - "Nh", - "Fl", - "Mc", - "Lv", - "Ts", - "Og" - ] + "type_kind": "python", + "type_data": "str" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, - "m_parent_sub_section": "quantities", - "name": "mass", - "description": "The (average) mass of the element.", - "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "unit": "kilogram" - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, + "m_parent_index": 9, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.material.topology.elemental_composition.atomic_fraction" + "results.material.symmetry.structure_name", + "results.material.symmetry.structure_name__suggestion" ] }, - "name": "atomic_fraction", - "description": "The atomic fraction of the element in the system it is contained within.\nPer definition a positive value less than or equal to 1.", + "name": "structure_name", + "description": "A common name for this structure, e.g. fcc, bcc.", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "Enum", + "type_data": [ + "4-member ring", + "Heusler", + "bcc", + "bct", + "bct5", + "clathrate", + "cuprite", + "diamond", + "fcc", + "fct", + "half-Heusler", + "hcp", + "perovskite", + "rock salt", + "simple cubic", + "wurtzite", + "zincblende" + ] } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, + "m_parent_index": 10, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.material.topology.elemental_composition.mass_fraction" + "results.material.symmetry.strukturbericht_designation", + "results.material.symmetry.strukturbericht_designation__suggestion.suggestion" ] }, - "name": "mass_fraction", - "description": "The mass fraction of the element in the system it is contained within.\nPer definition a positive value less than or equal to 1.", + "name": "strukturbericht_designation", + "description": "Classification of the material according to the historically grown\n'strukturbericht'.", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" } } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 3, + "m_parent_index": 8, "m_parent_sub_section": "section_definitions", - "name": "LatticeParameters", - "description": "\n Lattice parameters of a cell.\n ", + "name": "Cell", + "description": "\n Properties of a unit cell.\n ", "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -13227,7 +14637,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.properties.structures.structure_primitive.lattice_parameters.a" + "results.material.topology.cell.a" ] }, "name": "a", @@ -13244,7 +14654,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.properties.structures.structure_primitive.lattice_parameters.b" + "results.material.topology.cell.b" ] }, "name": "b", @@ -13261,7 +14671,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.properties.structures.structure_primitive.lattice_parameters.c" + "results.material.topology.cell.c" ] }, "name": "c", @@ -13278,7 +14688,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.properties.structures.structure_primitive.lattice_parameters.alpha" + "results.material.topology.cell.alpha" ] }, "name": "alpha", @@ -13295,7 +14705,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.properties.structures.structure_primitive.lattice_parameters.beta" + "results.material.topology.cell.beta" ] }, "name": "beta", @@ -13312,7 +14722,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.properties.structures.structure_primitive.lattice_parameters.gamma" + "results.material.topology.cell.gamma" ] }, "name": "gamma", @@ -13322,193 +14732,6 @@ window.nomadArtifacts = { "type_data": "float64" }, "unit": "radian" - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 4, - "m_parent_sub_section": "section_definitions", - "name": "WyckoffSet", - "description": "\n Section for storing Wyckoff set information. Only available for\n conventional cells that have undergone symmetry analysis.\n ", - "quantities": [ - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, - "m_parent_sub_section": "quantities", - "name": "wyckoff_letter", - "description": "The Wyckoff letter for this set.", - "type": { - "type_kind": "python", - "type_data": "str" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, - "m_parent_sub_section": "quantities", - "name": "indices", - "description": "Indices of the atoms belonging to this group.", - "type": { - "type_kind": "numpy", - "type_data": "int32" - }, - "shape": [ - "1..*" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, - "m_parent_sub_section": "quantities", - "name": "element", - "description": "Chemical element at this Wyckoff position.", - "type": { - "type_kind": "python", - "type_data": "str" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, - "m_parent_sub_section": "quantities", - "name": "x", - "description": "The free parameter x if present.", - "type": { - "type_kind": "numpy", - "type_data": "float64" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 4, - "m_parent_sub_section": "quantities", - "name": "y", - "description": "The free parameter y if present.", - "type": { - "type_kind": "numpy", - "type_data": "float64" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, - "m_parent_sub_section": "quantities", - "name": "z", - "description": "The free parameter z if present.", - "type": { - "type_kind": "numpy", - "type_data": "float64" - } - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 5, - "m_parent_sub_section": "section_definitions", - "name": "Structure", - "description": "\n Describes an atomistic structure.\n ", - "quantities": [ - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, - "m_parent_sub_section": "quantities", - "name": "dimension_types", - "description": "List of three integers. For each of the three directions indicated by\nthe three lattice vectors (see property lattice_vectors). This list\nindicates if the direction is periodic (value 1) or non-periodic (value\n0). Note: the elements in this list each refer to the direction of the\ncorresponding entry in lattice_vectors and not the Cartesian x, y, z\ndirections.", - "type": { - "type_kind": "python", - "type_data": "int" - }, - "shape": [ - 3 - ], - "default": [ - 0, - 0, - 0 - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "results.properties.structures.structure_primitive.nperiodic_dimensions" - ] - }, - "name": "nperiodic_dimensions", - "description": "An integer specifying the number of periodic dimensions in the\nstructure, equivalent to the number of non-zero entries in\ndimension_types.", - "type": { - "type_kind": "python", - "type_data": "int" - }, - "virtual": true - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, - "m_parent_sub_section": "quantities", - "name": "lattice_vectors", - "description": "The three lattice vectors in Cartesian coordinates.", - "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [ - 3, - 3 - ], - "unit": "meter" - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, - "m_parent_sub_section": "quantities", - "name": "cartesian_site_positions", - "description": "Cartesian positions of each site. A site is an atom, a site potentially\noccupied by an atom, or a placeholder for a virtual mixture of atoms\n(e.g., in a virtual crystal approximation).", - "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [ - "n_sites", - 3 - ], - "unit": "meter" - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 4, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "results.properties.structures.structure_primitive.n_sites" - ] - }, - "name": "n_sites", - "description": "An integer specifying the length of the cartesian_site_positions property.", - "type": { - "type_kind": "python", - "type_data": "int" - }, - "default": 0, - "virtual": true - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, - "m_parent_sub_section": "quantities", - "name": "species_at_sites", - "description": "Name of the species at each site (where values for sites are specified with the same\norder of the cartesian_site_positions property). The properties of the species are\nfound in the species property.", - "type": { - "type_kind": "python", - "type_data": "str" - }, - "shape": [ - "n_sites" - ] }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -13516,10 +14739,10 @@ window.nomadArtifacts = { "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.properties.structures.structure_primitive.cell_volume" + "results.material.topology.cell.volume" ] }, - "name": "cell_volume", + "name": "volume", "description": "Volume of the cell.", "type": { "type_kind": "numpy", @@ -13531,6 +14754,11 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 7, "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.material.topology.cell.atomic_density" + ] + }, "name": "atomic_density", "description": "Atomic density of the material (atoms/volume).'", "type": { @@ -13543,6 +14771,11 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 8, "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.material.topology.cell.mass_density" + ] + }, "name": "mass_density", "description": "Mass density of the material.", "type": { @@ -13551,75 +14784,14 @@ window.nomadArtifacts = { }, "unit": "kilogram / meter ** 3" } - ], - "sub_sections": [ - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 0, - "m_parent_sub_section": "sub_sections", - "name": "species", - "sub_section": "/packages/20/section_definitions/0", - "repeats": true - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 1, - "m_parent_sub_section": "sub_sections", - "name": "lattice_parameters", - "sub_section": "/packages/5/section_definitions/3" - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 2, - "m_parent_sub_section": "sub_sections", - "name": "wyckoff_sets", - "sub_section": "/packages/5/section_definitions/4", - "repeats": true - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 6, - "m_parent_sub_section": "section_definitions", - "name": "Structures", - "description": "\n Contains full atomistic representations of the material in different\n forms.\n ", - "sub_sections": [ - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 0, - "m_parent_sub_section": "sub_sections", - "name": "structure_original", - "description": "Contains a selected representative structure from the the original\ndata.", - "sub_section": "/packages/5/section_definitions/5", - "repeats": false - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 1, - "m_parent_sub_section": "sub_sections", - "name": "structure_conventional", - "description": "Contains the conventional structure that is derived from\nstructure_original. This conventional stucture has been idealized and\nthe conventions employed by spglib are used.", - "sub_section": "/packages/5/section_definitions/5", - "repeats": false - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 2, - "m_parent_sub_section": "sub_sections", - "name": "structure_primitive", - "description": "Contains the primitive structure that is derived from\nstructure_original. This primitive stucture has been idealized and the\nconventions employed by spglib are used.", - "sub_section": "/packages/5/section_definitions/5", - "repeats": false - } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 7, + "m_parent_index": 9, "m_parent_sub_section": "section_definitions", - "name": "Symmetry", - "description": "\n Section containing information about the symmetry of the material. All\n of these properties are derived by running a symmetry analysis on a\n representative geometry from the original data. This original geometry\n is stored in results.properties together with the primitive and\n conventional structures.\n ", + "name": "SymmetryNew", + "description": "\n Section containing information about the symmetry properties of a\n conventional cell related to a system.\n ", "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -13627,8 +14799,8 @@ window.nomadArtifacts = { "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.material.symmetry.bravais_lattice", - "results.material.symmetry.bravais_lattice__suggestion.suggestion" + "results.material.topology.symmetry.bravais_lattice", + "results.material.topology.symmetry.bravais_lattice__suggestion.suggestion" ] }, "name": "bravais_lattice", @@ -13660,8 +14832,8 @@ window.nomadArtifacts = { "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.material.symmetry.crystal_system", - "results.material.symmetry.crystal_system__suggestion.suggestion" + "results.material.topology.symmetry.crystal_system", + "results.material.topology.symmetry.crystal_system__suggestion.suggestion" ] }, "name": "crystal_system", @@ -13686,7 +14858,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.material.symmetry.hall_number" + "results.material.topology.symmetry.hall_number" ] }, "name": "hall_number", @@ -13703,411 +14875,8 @@ window.nomadArtifacts = { "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.material.symmetry.hall_symbol", - "results.material.symmetry.hall_symbol__suggestion.suggestion" - ] - }, - "name": "hall_symbol", - "description": "The Hall symbol for this system.", - "type": { - "type_kind": "python", - "type_data": "str" - }, - "shape": [] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 4, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "results.material.symmetry.point_group", - "results.material.symmetry.point_group__suggestion.suggestion" - ] - }, - "name": "point_group", - "description": "Symbol of the crystallographic point group in the Hermann-Mauguin notation.", - "type": { - "type_kind": "python", - "type_data": "str" - }, - "shape": [] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "results.material.symmetry.space_group_number" - ] - }, - "name": "space_group_number", - "description": "Specifies the International Union of Crystallography (IUC) number of the 3D space\ngroup of this system.", - "type": { - "type_kind": "numpy", - "type_data": "int32" - }, - "shape": [] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 6, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "results.material.symmetry.space_group_symbol", - "results.material.symmetry.space_group_symbol__suggestion.suggestion" - ] - }, - "name": "space_group_symbol", - "description": "The International Union of Crystallography (IUC) short symbol of the 3D\nspace group of this system.", - "type": { - "type_kind": "python", - "type_data": "str" - }, - "shape": [] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 7, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "results.material.symmetry.prototype_formula" - ] - }, - "name": "prototype_formula", - "description": "The formula of the prototypical material for this structure.", - "type": { - "type_kind": "python", - "type_data": "str" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 8, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "results.material.symmetry.prototype_aflow_id", - "results.material.symmetry.prototype_aflow_id__suggestion.suggestion" - ] - }, - "name": "prototype_aflow_id", - "description": "The identifier of this structure in the AFLOW encyclopedia of\ncrystallographic prototypes:\nhttp://www.aflowlib.org/prototype-encyclopedia/index.html", - "type": { - "type_kind": "python", - "type_data": "str" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 9, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "results.material.symmetry.structure_name", - "results.material.symmetry.structure_name__suggestion" - ] - }, - "name": "structure_name", - "description": "A common name for this structure, e.g. fcc, bcc.", - "type": { - "type_kind": "Enum", - "type_data": [ - "4-member ring", - "Heusler", - "bcc", - "bct", - "bct5", - "clathrate", - "cuprite", - "diamond", - "fcc", - "fct", - "half-Heusler", - "hcp", - "perovskite", - "rock salt", - "simple cubic", - "wurtzite", - "zincblende" - ] - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 10, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "results.material.symmetry.strukturbericht_designation", - "results.material.symmetry.strukturbericht_designation__suggestion.suggestion" - ] - }, - "name": "strukturbericht_designation", - "description": "Classification of the material according to the historically grown\n'strukturbericht'.", - "type": { - "type_kind": "python", - "type_data": "str" - } - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 8, - "m_parent_sub_section": "section_definitions", - "name": "Cell", - "description": "\n Properties of a unit cell.\n ", - "quantities": [ - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "results.material.topology.cell.a" - ] - }, - "name": "a", - "description": "Length of the first basis vector.", - "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "unit": "meter" - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "results.material.topology.cell.b" - ] - }, - "name": "b", - "description": "Length of the second basis vector.", - "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "unit": "meter" - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "results.material.topology.cell.c" - ] - }, - "name": "c", - "description": "Length of the third basis vector.", - "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "unit": "meter" - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "results.material.topology.cell.alpha" - ] - }, - "name": "alpha", - "description": "Angle between second and third basis vector.", - "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "unit": "radian" - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 4, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "results.material.topology.cell.beta" - ] - }, - "name": "beta", - "description": "Angle between first and third basis vector.", - "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "unit": "radian" - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "results.material.topology.cell.gamma" - ] - }, - "name": "gamma", - "description": "Angle between first and second basis vector.", - "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "unit": "radian" - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 6, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "results.material.topology.cell.volume" - ] - }, - "name": "volume", - "description": "Volume of the cell.", - "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "unit": "meter ** 3" - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 7, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "results.material.topology.cell.atomic_density" - ] - }, - "name": "atomic_density", - "description": "Atomic density of the material (atoms/volume).'", - "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "unit": "1 / meter ** 3" - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 8, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "results.material.topology.cell.mass_density" - ] - }, - "name": "mass_density", - "description": "Mass density of the material.", - "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "unit": "kilogram / meter ** 3" - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 9, - "m_parent_sub_section": "section_definitions", - "name": "SymmetryNew", - "description": "\n Section containing information about the symmetry properties of a\n conventional cell related to a system.\n ", - "quantities": [ - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "results.material.topology.symmetry.bravais_lattice", - "results.material.topology.symmetry.bravais_lattice__suggestion.suggestion" - ] - }, - "name": "bravais_lattice", - "description": "Identifier for the Bravais lattice in Pearson notation. The first lowercase letter\nidentifies the crystal family and can be one of the following: a (triclinic), b\n(monoclinic), o (orthorhombic), t (tetragonal), h (hexagonal) or c (cubic). The\nsecond uppercase letter identifies the centring and can be one of the following: P\n(primitive), S (face centred), I (body centred), R (rhombohedral centring) or F\n(all faces centred).", - "type": { - "type_kind": "Enum", - "type_data": [ - "aP", - "mP", - "mS", - "oP", - "oS", - "oF", - "oI", - "tP", - "tI", - "hP", - "hR", - "cP", - "cF", - "cI" - ] - }, - "shape": [] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "results.material.topology.symmetry.crystal_system", - "results.material.topology.symmetry.crystal_system__suggestion.suggestion" - ] - }, - "name": "crystal_system", - "description": "Name of the crystal system.", - "type": { - "type_kind": "Enum", - "type_data": [ - "triclinic", - "monoclinic", - "orthorhombic", - "tetragonal", - "trigonal", - "hexagonal", - "cubic" - ] - }, - "shape": [] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "results.material.topology.symmetry.hall_number" - ] - }, - "name": "hall_number", - "description": "The Hall number for this system.", - "type": { - "type_kind": "numpy", - "type_data": "int32" - }, - "shape": [] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "results.material.topology.symmetry.hall_symbol", - "results.material.topology.symmetry.hall_symbol__suggestion.suggestion" + "results.material.topology.symmetry.hall_symbol", + "results.material.topology.symmetry.hall_symbol__suggestion.suggestion" ] }, "name": "hall_symbol", @@ -15080,7 +15849,7 @@ window.nomadArtifacts = { "description": "Reference to an atomistic structure that is associated with this\nsystem.", "type": { "type_kind": "reference", - "type_data": "/packages/1/section_definitions/1" + "type_data": "/packages/2/section_definitions/1" } }, { @@ -15317,7 +16086,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "atoms", "description": "The atomistic structure that is associated with this\nsystem.", - "sub_section": "/packages/1/section_definitions/1", + "sub_section": "/packages/2/section_definitions/1", "repeats": false }, { @@ -16518,22 +17287,6 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "results.method.simulation.dmft.total_filling" - ] - }, - "name": "total_filling", - "description": "Total filling of the correlated atoms in the unit cell per spin \u2208[0.0, 1.0]. E.g., half-filling\nis defined as 0.5.", - "type": { - "type_kind": "numpy", - "type_data": "float64" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, - "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ "results.method.simulation.dmft.inverse_temperature" @@ -16550,7 +17303,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, + "m_parent_index": 2, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ @@ -16572,7 +17325,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 4, + "m_parent_index": 3, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ @@ -16590,19 +17343,43 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, + "m_parent_index": 4, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.method.simulation.dmft.hunds_hubbard_ratio" + "results.method.simulation.dmft.jh" ] }, - "name": "hunds_hubbard_ratio", - "description": "Ratio JH/U, with JH being the Hunds coupling and U being the Hubbard local interaction.", + "name": "jh", + "description": "Value of the (interorbital) Hund's coupling.", "type": { "type_kind": "numpy", "type_data": "float64" - } + }, + "shape": [], + "unit": "joule" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 5, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.method.simulation.dmft.analytical_continuation" + ] + }, + "name": "analytical_continuation", + "description": "Analytical continuation used to continuate the imaginary space Green's functions into\nthe real frequencies space.\n\n| Name | Description | Reference |\n\n| -------------- | ------------------- | -------------------------------- |\n\n| `'Pade'` | Pade's approximant | https://www.sciencedirect.com/science/article/pii/0021999173901277?via%3Dihub |\n\n| `'MaxEnt'` | Maximum Entropy method | https://journals.aps.org/prb/abstract/10.1103/PhysRevB.41.2380 |\n\n| `'SVD'` | Singular value decomposition | https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.75.517 |\n\n| `'Stochastic'` | Stochastic method | https://journals.aps.org/prb/abstract/10.1103/PhysRevB.57.10287 |", + "type": { + "type_kind": "Enum", + "type_data": [ + "Pade", + "MaxEnt", + "SVD", + "" + ] + }, + "shape": [] } ] }, @@ -16945,6 +17722,57 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Section", "m_parent_index": 25, "m_parent_sub_section": "section_definitions", + "name": "XRDMethod", + "description": "\n Methodology for an X-Ray Diffraction measurement.\n ", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.method.measurement.xrd.diffraction_method_name", + "results.method.measurement.xrd.diffraction_method_name__suggestion" + ] + }, + "name": "diffraction_method_name", + "description": "The diffraction method used to obtain the diffraction pattern.\n| X-Ray Diffraction Method | Description |\n|------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| **Powder X-Ray Diffraction (PXRD)** | The term \"powder\" refers more to the random orientation of small crystallites than to the physical form of the sample. Can be used with non-powder samples if they present random crystallite orientations. |\n| **Single Crystal X-Ray Diffraction (SCXRD)** | Used for determining the atomic structure of a single crystal. |\n| **High-Resolution X-Ray Diffraction (HRXRD)** | A technique typically used for detailed characterization of epitaxial thin films using precise diffraction measurements. |\n| **Small-Angle X-Ray Scattering (SAXS)** | Used for studying nanostructures in the size range of 1-100 nm. Provides information on particle size, shape, and distribution. |\n| **X-Ray Reflectivity (XRR)** | Used to study thin film layers, interfaces, and multilayers. Provides info on film thickness, density, and roughness. |\n| **Grazing Incidence X-Ray Diffraction (GIXRD)** | Primarily used for the analysis of thin films with the incident beam at a fixed shallow angle. |", + "type": { + "type_kind": "Enum", + "type_data": [ + "Powder X-Ray Diffraction (PXRD)", + "Single Crystal X-Ray Diffraction (SCXRD)", + "High-Resolution X-Ray Diffraction (HRXRD)", + "Small-Angle X-Ray Scattering (SAXS)", + "X-Ray Reflectivity (XRR)", + "Grazing Incidence X-Ray Diffraction (GIXRD)", + "unavailable" + ] + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 26, + "m_parent_sub_section": "section_definitions", + "name": "MeasurementMethod", + "description": "\n Contains method details for a measurement entry.\n ", + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "xrd", + "sub_section": "/packages/5/section_definitions/25", + "repeats": false + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 27, + "m_parent_sub_section": "section_definitions", "name": "Method", "description": "\n Contains a summary of the methodology that has been used in this entry.\n This methodology applies to all of the reported properties and\n determines the result of a single energy evalution. The individual\n properties may be further methodological details affect e.g. the\n sampling.\n ", "quantities": [ @@ -17009,6 +17837,7 @@ window.nomadArtifacts = { "BSE", "EELS", "XPS", + "XRD", "unavailable" ] } @@ -17038,12 +17867,20 @@ window.nomadArtifacts = { "name": "simulation", "sub_section": "/packages/5/section_definitions/24", "repeats": false + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", + "name": "measurement", + "sub_section": "/packages/5/section_definitions/26", + "repeats": false } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 26, + "m_parent_index": 28, "m_parent_sub_section": "section_definitions", "name": "MolecularDynamics", "description": "\n Methodology for molecular dynamics.\n ", @@ -17092,12 +17929,12 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 27, + "m_parent_index": 29, "m_parent_sub_section": "section_definitions", "name": "MDProvenance", "description": "\n Contains provenance information for properties derived from molecular\n dynamics simulations.\n ", "base_sections": [ - "/packages/16/section_definitions/0" + "/packages/17/section_definitions/0" ], "sub_sections": [ { @@ -17105,19 +17942,19 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "molecular_dynamics", - "sub_section": "/packages/5/section_definitions/26", + "sub_section": "/packages/5/section_definitions/28", "repeats": false } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 28, + "m_parent_index": 30, "m_parent_sub_section": "section_definitions", "name": "MDPropertySection", "description": "\n Base class for referring to molecular dynamics properties.\n ", "base_sections": [ - "/packages/16/section_definitions/1" + "/packages/17/section_definitions/1" ], "sub_sections": [ { @@ -17125,17 +17962,17 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "provenance", - "sub_section": "/packages/5/section_definitions/27", + "sub_section": "/packages/5/section_definitions/29", "repeats": false } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 29, + "m_parent_index": 31, "m_parent_sub_section": "section_definitions", "name": "DOS", - "description": "\n Base class for density of states information.\n ", + "description": "\n Base class for density of states information.\n\n OLD VERSION: it will eventually be deprecated, please, don't use it!\n ", "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -17145,7 +17982,7 @@ window.nomadArtifacts = { "description": "Array containing the set of discrete energy values for the density of\nstates (DOS).", "type": { "type_kind": "quantity_reference", - "type_data": "/packages/2/section_definitions/17/quantities/1" + "type_data": "/packages/3/section_definitions/17/quantities/1" } }, { @@ -17156,7 +17993,7 @@ window.nomadArtifacts = { "description": "Density of states (DOS) values for the entire system and all species.", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/16" + "type_data": "/packages/3/section_definitions/16" }, "shape": [ "*" @@ -17166,22 +18003,12 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 30, - "m_parent_sub_section": "section_definitions", - "name": "DOSPhonon", - "description": "\n Contains the total phonon density of states.\n ", - "base_sections": [ - "/packages/5/section_definitions/29" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 31, + "m_parent_index": 32, "m_parent_sub_section": "section_definitions", "name": "DOSElectronic", - "description": "\n Contains the total electronic density of states.\n ", + "description": "\n Contains the total electronic density of states.\n\n OLD VERSION: it will eventually be deprecated.\n ", "base_sections": [ - "/packages/5/section_definitions/29" + "/packages/5/section_definitions/31" ], "quantities": [ { @@ -17243,7 +18070,205 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 32, + "m_parent_index": 33, + "m_parent_sub_section": "section_definitions", + "name": "DOSNew", + "description": "\n Section containign the density of states data.\n\n It includes the total DOS and the projected DOS values. We differentiate `species_projected` as the\n projected DOS for same atomic species, `atom_projected` as the projected DOS for different\n atoms in the cell, and `orbital_projected` as the projected DOS for the orbitals of each\n atom.\n ", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "energies", + "description": "Total DOS values for the entire system and all species.", + "type": { + "type_kind": "quantity_reference", + "type_data": "/packages/3/section_definitions/17/quantities/1" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "total", + "description": "Total DOS values for the entire system and all species.", + "type": { + "type_kind": "reference", + "type_data": "/packages/3/section_definitions/16" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "name": "species_projected", + "description": "Projected DOS values per species.", + "type": { + "type_kind": "reference", + "type_data": "/packages/3/section_definitions/16" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 3, + "m_parent_sub_section": "quantities", + "name": "atom_projected", + "description": "Projected DOS values per atom.", + "type": { + "type_kind": "reference", + "type_data": "/packages/3/section_definitions/16" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 4, + "m_parent_sub_section": "quantities", + "name": "orbital_projected", + "description": "Projected DOS values per orbital and per atom.", + "type": { + "type_kind": "reference", + "type_data": "/packages/3/section_definitions/16" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 5, + "m_parent_sub_section": "quantities", + "name": "spin_channel", + "description": "Spin channel of the corresponding DOS. It can take values of 0 or 1.", + "type": { + "type_kind": "numpy", + "type_data": "int32" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 6, + "m_parent_sub_section": "quantities", + "name": "energy_fermi", + "description": "Fermi energy.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [], + "unit": "joule" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 7, + "m_parent_sub_section": "quantities", + "name": "energy_ref", + "description": "Energy level denoting the origin along the energy axis, used for comparison and visualization.\nIt is defined as the energy_highest_occupied and does not necessarily coincide with energy_fermi.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [], + "unit": "joule" + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "m_annotations": { + "elasticsearch": [ + "band_gap" + ] + }, + "name": "band_gap", + "sub_section": "/packages/5/section_definitions/0", + "repeats": true + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 34, + "m_parent_sub_section": "section_definitions", + "name": "DOSPhonon", + "description": "\n Contains the phonon density of states.\n ", + "base_sections": [ + "/packages/5/section_definitions/31" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 35, + "m_parent_sub_section": "section_definitions", + "name": "DOSElectronicNew", + "description": "\n Contains the electronic Density of States (DOS). This section can be repeated to refer to\n different methodologies (e.g., label = 'DFT', 'GW', 'TB', etc.), and it can be spin-polarized\n or not. The sub-section data points to each (if present) spin channels.\n ", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "label", + "description": "Label to identify the method employed to obtain the DOS data ('DFT', 'GW', etc.).", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.properties.electronic.dos_electronic_new.spin_polarized" + ] + }, + "name": "spin_polarized", + "description": "Whether the DOS is spin-polarized, i.e. is contains channels for both\nspin values.", + "type": { + "type_kind": "python", + "type_data": "bool" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.properties.electronic.dos_electronic_new.has_projected" + ] + }, + "name": "has_projected", + "description": "Whether the DOS has information about projections (species-, atom-, and/or orbital-\nprojected).", + "type": { + "type_kind": "python", + "type_data": "bool" + } + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "data", + "sub_section": "/packages/5/section_definitions/33", + "repeats": true + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 36, "m_parent_sub_section": "section_definitions", "name": "BandStructure", "description": "\n Base class for band structure information.\n ", @@ -17267,7 +18292,7 @@ window.nomadArtifacts = { "description": "The reciprocal cell within which the band structure is calculated.", "type": { "type_kind": "quantity_reference", - "type_data": "/packages/2/section_definitions/14/quantities/1" + "type_data": "/packages/3/section_definitions/14/quantities/1" } }, { @@ -17278,7 +18303,7 @@ window.nomadArtifacts = { "description": "Collection of linear path segments in the reciprocal space. The\nsegments are represented as third-order tensors: one dimension for the\nspin channels, one for the sequence of reciprocal space points for the\nsegment, and one for the sequence of eigenvalues at a given point.", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/13" + "type_data": "/packages/3/section_definitions/13" }, "shape": [ "*" @@ -17300,22 +18325,22 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 33, + "m_parent_index": 37, "m_parent_sub_section": "section_definitions", "name": "BandStructurePhonon", "description": "\n This section stores information on a vibrational band structure\n evaluation along one-dimensional pathways in the reciprocal space.\n ", "base_sections": [ - "/packages/5/section_definitions/32" + "/packages/5/section_definitions/36" ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 34, + "m_parent_index": 38, "m_parent_sub_section": "section_definitions", "name": "BandStructureElectronic", "description": "\n This section stores information on a electonic band structure\n evaluation along one-dimensional pathways in the reciprocal space.\n ", "base_sections": [ - "/packages/5/section_definitions/32" + "/packages/5/section_definitions/36" ], "quantities": [ { @@ -17366,7 +18391,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 35, + "m_parent_index": 39, "m_parent_sub_section": "section_definitions", "name": "GreensFunctionsElectronic", "description": "\n Base class for Green's functions information.\n ", @@ -17375,124 +18400,164 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "label", - "description": "Label to identify the Greens functions data, e.g. the method employed.", + "name": "type", + "description": "Type of Green's function calculated from the mapping of the Hubbard-Kanamori model\ninto the Anderson impurity model. These calculations are converged if both types of\nGreen's functions converge to each other (G_impurity == G_lattice).", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "Enum", + "type_data": [ + "impurity", + "lattice" + ] } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", - "name": "tau", - "description": "Imaginary times.", + "name": "label", + "description": "Label to identify the Greens functions data, e.g. the method employed.", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [ - "n_tau" - ] + "type_kind": "python", + "type_data": "str" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 2, "m_parent_sub_section": "quantities", - "name": "real_greens_function_tau", - "description": "Real part (extraction done in normalizer) of the Green's function in tau (imaginary time).", + "name": "tau", + "description": "Array containing the set of discrete imaginary times.", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [ - "n_atoms_per_unit_cell", - 2, - "n_correlated_orbitals", - "n_tau" - ] + "type_kind": "quantity_reference", + "type_data": "/packages/3/section_definitions/29/quantities/2" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 3, "m_parent_sub_section": "quantities", "name": "matsubara_freq", - "description": "Matsubara frequencies (imaginary frequencies).", + "description": "Array containing the set of discrete imaginary (Matsubara) frequencies.", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [ - "2 * n_matsubara_freq" - ] + "type_kind": "quantity_reference", + "type_data": "/packages/3/section_definitions/29/quantities/1" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 4, "m_parent_sub_section": "quantities", - "name": "imag_self_energy_iw", - "description": "Imaginary part (extraction done in normalizer) of the Self energy in Matsubara (imaginary frequency).", + "name": "frequencies", + "description": "Array containing the set of discrete real frequencies.", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [ - "n_atoms_per_unit_cell", - 2, - "n_correlated_orbitals", - "2 * n_matsubara_freq" - ] + "type_kind": "quantity_reference", + "type_data": "/packages/3/section_definitions/29/quantities/3" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 5, "m_parent_sub_section": "quantities", + "name": "greens_function_tau", + "description": "Green's functions values in imaginary times.", + "type": { + "type_kind": "quantity_reference", + "type_data": "/packages/3/section_definitions/29/quantities/8" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 6, + "m_parent_sub_section": "quantities", + "name": "greens_function_iw", + "description": "Green's functions values in imaginary (Matsubara) frequencies.", + "type": { + "type_kind": "quantity_reference", + "type_data": "/packages/3/section_definitions/29/quantities/6" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 7, + "m_parent_sub_section": "quantities", + "name": "self_energy_iw", + "description": "Self-energy values in imaginary (Matsubara) frequencies.", + "type": { + "type_kind": "quantity_reference", + "type_data": "/packages/3/section_definitions/29/quantities/5" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 8, + "m_parent_sub_section": "quantities", + "name": "greens_function_freq", + "description": "Green's function values in real frequencies.", + "type": { + "type_kind": "quantity_reference", + "type_data": "/packages/3/section_definitions/29/quantities/10" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 9, + "m_parent_sub_section": "quantities", + "name": "self_energy_freq", + "description": "Self-energy values in real frequencies.", + "type": { + "type_kind": "quantity_reference", + "type_data": "/packages/3/section_definitions/29/quantities/9" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 10, + "m_parent_sub_section": "quantities", + "name": "hybridization_function_freq", + "description": "Hybridization function values in real frequencies.", + "type": { + "type_kind": "quantity_reference", + "type_data": "/packages/3/section_definitions/29/quantities/11" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 11, + "m_parent_sub_section": "quantities", "name": "orbital_occupations", "description": "Orbital occupation per correlated atom in the unit cell and per spin.", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [ - "n_atoms_per_unit_cell", - 2, - "n_correlated_orbitals" - ] + "type_kind": "quantity_reference", + "type_data": "/packages/3/section_definitions/29/quantities/12" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 6, + "m_parent_index": 12, "m_parent_sub_section": "quantities", "name": "quasiparticle_weights", "description": "Quasiparticle weights of each orbital per site and spin. Calculated from:\n Z = inv(1.0 - d [Re Sigma] / dw at w=0)\nit takes values \u2208 [0.0, 1.0], being Z=1 non-correlated, and Z=0 in a Mott state.", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [ - "n_atoms_per_unit_cell", - 2, - "n_correlated_orbitals" - ] + "type_kind": "quantity_reference", + "type_data": "/packages/3/section_definitions/29/quantities/13" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 7, + "m_parent_index": 13, "m_parent_sub_section": "quantities", "name": "chemical_potential", "description": "Chemical potential.", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "unit": "electron_volt" + "type_kind": "quantity_reference", + "type_data": "/packages/3/section_definitions/29/quantities/4" + } } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 36, + "m_parent_index": 40, "m_parent_sub_section": "section_definitions", "name": "HeatCapacityConstantVolume", "description": "\n Contains the values of the specific (per mass) and isochoric (constant\n volume) heat capacity at different temperatures.\n ", @@ -17505,7 +18570,7 @@ window.nomadArtifacts = { "description": "Specific heat capacity values at constant volume.", "type": { "type_kind": "quantity_reference", - "type_data": "/packages/18/section_definitions/5/quantities/5" + "type_data": "/packages/19/section_definitions/5/quantities/5" }, "shape": [] }, @@ -17517,14 +18582,14 @@ window.nomadArtifacts = { "description": "The temperatures at which heat capacities are calculated.", "type": { "type_kind": "quantity_reference", - "type_data": "/packages/18/section_definitions/5/quantities/1" + "type_data": "/packages/19/section_definitions/5/quantities/1" } } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 37, + "m_parent_index": 41, "m_parent_sub_section": "section_definitions", "name": "EnergyFreeHelmholtz", "description": "\n Contains the values of the Helmholtz free energy per atom at constant\n volume and at different temperatures.\n ", @@ -17537,7 +18602,7 @@ window.nomadArtifacts = { "description": "The Helmholtz free energies per atom at constant volume.", "type": { "type_kind": "quantity_reference", - "type_data": "/packages/18/section_definitions/5/quantities/7" + "type_data": "/packages/19/section_definitions/5/quantities/7" }, "shape": [] }, @@ -17549,14 +18614,14 @@ window.nomadArtifacts = { "description": "The temperatures at which Helmholtz free energies are calculated.", "type": { "type_kind": "quantity_reference", - "type_data": "/packages/18/section_definitions/5/quantities/1" + "type_data": "/packages/19/section_definitions/5/quantities/1" } } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 38, + "m_parent_index": 42, "m_parent_sub_section": "section_definitions", "name": "VibrationalProperties", "description": "\n Vibrational properties.\n ", @@ -17566,7 +18631,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "band_structure_phonon", - "sub_section": "/packages/5/section_definitions/33", + "sub_section": "/packages/5/section_definitions/37", "repeats": false }, { @@ -17574,7 +18639,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "dos_phonon", - "sub_section": "/packages/5/section_definitions/30", + "sub_section": "/packages/5/section_definitions/34", "repeats": false }, { @@ -17582,7 +18647,7 @@ window.nomadArtifacts = { "m_parent_index": 2, "m_parent_sub_section": "sub_sections", "name": "heat_capacity_constant_volume", - "sub_section": "/packages/5/section_definitions/36", + "sub_section": "/packages/5/section_definitions/40", "repeats": false }, { @@ -17590,14 +18655,14 @@ window.nomadArtifacts = { "m_parent_index": 3, "m_parent_sub_section": "sub_sections", "name": "energy_free_helmholtz", - "sub_section": "/packages/5/section_definitions/37", + "sub_section": "/packages/5/section_definitions/41", "repeats": false } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 39, + "m_parent_index": 43, "m_parent_sub_section": "section_definitions", "name": "EnergyVolumeCurve", "description": "\n Energy volume curve.\n ", @@ -17636,7 +18701,7 @@ window.nomadArtifacts = { "name": "volumes", "type": { "type_kind": "quantity_reference", - "type_data": "/packages/18/section_definitions/50/quantities/1" + "type_data": "/packages/19/section_definitions/56/quantities/1" } }, { @@ -17646,7 +18711,7 @@ window.nomadArtifacts = { "name": "energies_raw", "type": { "type_kind": "quantity_reference", - "type_data": "/packages/18/section_definitions/50/quantities/2" + "type_data": "/packages/19/section_definitions/56/quantities/2" } }, { @@ -17656,14 +18721,14 @@ window.nomadArtifacts = { "name": "energies_fit", "type": { "type_kind": "quantity_reference", - "type_data": "/packages/18/section_definitions/49/quantities/1" + "type_data": "/packages/19/section_definitions/55/quantities/1" } } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 40, + "m_parent_index": 44, "m_parent_sub_section": "section_definitions", "name": "BulkModulus", "description": "\n Contains bulk modulus values calculated with different methodologies.\n ", @@ -17719,7 +18784,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 41, + "m_parent_index": 45, "m_parent_sub_section": "section_definitions", "name": "ShearModulus", "description": "\n Contains shear modulus values calculated with different methodologies.\n ", @@ -17766,7 +18831,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 42, + "m_parent_index": 46, "m_parent_sub_section": "section_definitions", "name": "GeometryOptimization", "description": "\n Geometry optimization results and settings.\n ", @@ -17779,7 +18844,7 @@ window.nomadArtifacts = { "description": "List of references to each section_single_configuration_calculation in\nthe optimization trajectory.", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/36" + "type_data": "/packages/3/section_definitions/36" }, "shape": [ "0..*" @@ -17793,7 +18858,7 @@ window.nomadArtifacts = { "description": "List of energy_total values gathered from the single configuration\ncalculations that are a part of the optimization trajectory.", "type": { "type_kind": "quantity_reference", - "type_data": "/packages/18/section_definitions/12/quantities/1" + "type_data": "/packages/19/section_definitions/12/quantities/1" } }, { @@ -17804,7 +18869,7 @@ window.nomadArtifacts = { "description": "Contains the optimized geometry that is the result of a geometry optimization.", "type": { "type_kind": "reference", - "type_data": "/packages/1/section_definitions/8" + "type_data": "/packages/2/section_definitions/8" } }, { @@ -17919,7 +18984,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 43, + "m_parent_index": 47, "m_parent_sub_section": "section_definitions", "name": "MechanicalProperties", "description": "\n Mechanical properties.\n ", @@ -17929,7 +18994,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "energy_volume_curve", - "sub_section": "/packages/5/section_definitions/39", + "sub_section": "/packages/5/section_definitions/43", "repeats": true }, { @@ -17942,7 +19007,7 @@ window.nomadArtifacts = { ] }, "name": "bulk_modulus", - "sub_section": "/packages/5/section_definitions/40", + "sub_section": "/packages/5/section_definitions/44", "repeats": true }, { @@ -17955,14 +19020,14 @@ window.nomadArtifacts = { ] }, "name": "shear_modulus", - "sub_section": "/packages/5/section_definitions/41", + "sub_section": "/packages/5/section_definitions/45", "repeats": true } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 44, + "m_parent_index": 48, "m_parent_sub_section": "section_definitions", "name": "ElectronicProperties", "description": "\n Electronic properties.\n ", @@ -17985,30 +19050,38 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "dos_electronic", - "sub_section": "/packages/5/section_definitions/31", + "sub_section": "/packages/5/section_definitions/32", "repeats": true }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 2, "m_parent_sub_section": "sub_sections", - "name": "band_structure_electronic", - "sub_section": "/packages/5/section_definitions/34", + "name": "dos_electronic_new", + "sub_section": "/packages/5/section_definitions/35", "repeats": true }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 3, "m_parent_sub_section": "sub_sections", + "name": "band_structure_electronic", + "sub_section": "/packages/5/section_definitions/38", + "repeats": true + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 4, + "m_parent_sub_section": "sub_sections", "name": "greens_functions_electronic", - "sub_section": "/packages/5/section_definitions/35", + "sub_section": "/packages/5/section_definitions/39", "repeats": true } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 45, + "m_parent_index": 49, "m_parent_sub_section": "section_definitions", "name": "QuantityDynamic", "description": "\n Contains the values for a quantity at different times.\n ", @@ -18054,12 +19127,12 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 46, + "m_parent_index": 50, "m_parent_sub_section": "section_definitions", "name": "VolumeDynamic", "description": "\n Contains volume values evaluated at different times.\n ", "base_sections": [ - "/packages/5/section_definitions/45" + "/packages/5/section_definitions/49" ], "quantities": [ { @@ -18079,12 +19152,12 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 47, + "m_parent_index": 51, "m_parent_sub_section": "section_definitions", "name": "PressureDynamic", "description": "\n Contains pressure values evaluated at different times.\n ", "base_sections": [ - "/packages/5/section_definitions/45" + "/packages/5/section_definitions/49" ], "quantities": [ { @@ -18104,12 +19177,12 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 48, + "m_parent_index": 52, "m_parent_sub_section": "section_definitions", "name": "TemperatureDynamic", "description": "\n Contains temperature values evaluated at different times.\n ", "base_sections": [ - "/packages/5/section_definitions/45" + "/packages/5/section_definitions/49" ], "quantities": [ { @@ -18129,12 +19202,12 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 49, + "m_parent_index": 53, "m_parent_sub_section": "section_definitions", "name": "EnergyDynamic", "description": "\n Contains energy values evaluated at different times.\n ", "base_sections": [ - "/packages/5/section_definitions/45" + "/packages/5/section_definitions/49" ], "quantities": [ { @@ -18154,12 +19227,12 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 50, + "m_parent_index": 54, "m_parent_sub_section": "section_definitions", "name": "Trajectory", "description": "\n Thermodynamic properties reported for an ensemble evolving in time.\n ", "base_sections": [ - "/packages/5/section_definitions/28" + "/packages/5/section_definitions/30" ], "quantities": [ { @@ -18193,7 +19266,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "temperature", - "sub_section": "/packages/5/section_definitions/48", + "sub_section": "/packages/5/section_definitions/52", "repeats": false }, { @@ -18201,7 +19274,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "pressure", - "sub_section": "/packages/5/section_definitions/47", + "sub_section": "/packages/5/section_definitions/51", "repeats": false }, { @@ -18209,7 +19282,7 @@ window.nomadArtifacts = { "m_parent_index": 2, "m_parent_sub_section": "sub_sections", "name": "volume", - "sub_section": "/packages/5/section_definitions/46", + "sub_section": "/packages/5/section_definitions/50", "repeats": false }, { @@ -18217,14 +19290,14 @@ window.nomadArtifacts = { "m_parent_index": 3, "m_parent_sub_section": "sub_sections", "name": "energy_potential", - "sub_section": "/packages/5/section_definitions/49", + "sub_section": "/packages/5/section_definitions/53", "repeats": false } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 51, + "m_parent_index": 55, "m_parent_sub_section": "section_definitions", "name": "ThermodynamicProperties", "description": "\n Thermodynamic properties.\n ", @@ -18239,20 +19312,20 @@ window.nomadArtifacts = { ] }, "name": "trajectory", - "sub_section": "/packages/5/section_definitions/50", + "sub_section": "/packages/5/section_definitions/54", "repeats": true } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 52, + "m_parent_index": 56, "m_parent_sub_section": "section_definitions", "name": "RadiusOfGyration", "description": "\n Contains Radius of Gyration values as a trajectory.\n ", "base_sections": [ - "/packages/5/section_definitions/45", - "/packages/5/section_definitions/28" + "/packages/5/section_definitions/49", + "/packages/5/section_definitions/30" ], "quantities": [ { @@ -18299,7 +19372,7 @@ window.nomadArtifacts = { "description": "References to the atoms_group section containing the molecule for which Rg was calculated.", "type": { "type_kind": "reference", - "type_data": "/packages/1/section_definitions/0" + "type_data": "/packages/2/section_definitions/0" }, "shape": [ 1 @@ -18322,12 +19395,12 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 53, + "m_parent_index": 57, "m_parent_sub_section": "section_definitions", "name": "RadialDistributionFunction", "description": "\n Radial distribution function.\n ", "base_sections": [ - "/packages/5/section_definitions/28" + "/packages/5/section_definitions/30" ], "quantities": [ { @@ -18438,7 +19511,80 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 54, + "m_parent_index": 58, + "m_parent_sub_section": "section_definitions", + "name": "DiffractionPattern", + "description": "\n Diffraction pattern.\n ", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.properties.structural.diffraction_pattern.incident_beam_wavelength" + ] + }, + "name": "incident_beam_wavelength", + "description": "The wavelength of the incident beam.", + "links": [ + "https://manual.nexusformat.org/classes/base_classes/NXbeam.html#nxbeam-incident-wavelength-field" + ], + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "meter" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "two_theta_angles", + "description": "Array containing the set of 2-theta angles.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "*" + ], + "unit": "degree" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "name": "intensity", + "description": "Array containing the set of intensities.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 3, + "m_parent_sub_section": "quantities", + "name": "q_vector", + "description": "The scattering vector *Q*.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "*" + ], + "unit": "1 / meter" + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 59, "m_parent_sub_section": "section_definitions", "name": "StructuralProperties", "description": "\n Structural properties.\n ", @@ -18453,7 +19599,7 @@ window.nomadArtifacts = { ] }, "name": "radial_distribution_function", - "sub_section": "/packages/5/section_definitions/53", + "sub_section": "/packages/5/section_definitions/57", "repeats": true }, { @@ -18466,19 +19612,32 @@ window.nomadArtifacts = { ] }, "name": "radius_of_gyration", - "sub_section": "/packages/5/section_definitions/52", + "sub_section": "/packages/5/section_definitions/56", + "repeats": true + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 2, + "m_parent_sub_section": "sub_sections", + "m_annotations": { + "elasticsearch": [ + "diffraction_pattern" + ] + }, + "name": "diffraction_pattern", + "sub_section": "/packages/5/section_definitions/58", "repeats": true } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 55, + "m_parent_index": 60, "m_parent_sub_section": "section_definitions", "name": "MeanSquaredDisplacement", "description": "\n Mean Squared Displacements.\n ", "base_sections": [ - "/packages/5/section_definitions/28" + "/packages/5/section_definitions/30" ], "quantities": [ { @@ -18651,7 +19810,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 56, + "m_parent_index": 61, "m_parent_sub_section": "section_definitions", "name": "DynamicalProperties", "description": "\n Dynamical properties.\n ", @@ -18666,14 +19825,14 @@ window.nomadArtifacts = { ] }, "name": "mean_squared_displacement", - "sub_section": "/packages/5/section_definitions/55", + "sub_section": "/packages/5/section_definitions/60", "repeats": true } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 57, + "m_parent_index": 62, "m_parent_sub_section": "section_definitions", "name": "SolarCell", "description": "\n Properties of solar cells.\n ", @@ -18945,7 +20104,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 58, + "m_parent_index": 63, "m_parent_sub_section": "section_definitions", "name": "OptoelectronicProperties", "description": "\n Optoelectronic properties.\n ", @@ -18955,36 +20114,20 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "solar_cell", - "sub_section": "/packages/5/section_definitions/57", + "sub_section": "/packages/5/section_definitions/62", "repeats": false } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 59, - "m_parent_sub_section": "section_definitions", - "name": "SpectroscopyProperties", - "description": "\n Spectroscopic properties.\n ", - "quantities": [ - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, - "m_parent_sub_section": "quantities", - "name": "spectrum", - "type": { - "type_kind": "reference", - "type_data": "/packages/4/section_definitions/5" - } - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 60, + "m_parent_index": 64, "m_parent_sub_section": "section_definitions", - "name": "Properties", - "description": "\n Contains the physical properties that have been calculated or used in\n this entry.\n ", + "name": "Reactant", + "description": "\n A reactant in a catalytic test reaction. A reactant is identified by having a conversion.\n ", + "more": { + "label_quantity": "name" + }, "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -18992,15 +20135,16 @@ window.nomadArtifacts = { "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.properties.n_calculations" + "results.properties.catalytic.reactivity.reactants.name" ] }, - "name": "n_calculations", - "description": "The number of performed single configuration calculations.'", + "name": "name", + "description": "Name of the reactant.", "type": { "type_kind": "python", - "type_data": "int" - } + "type_data": "str" + }, + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -19008,110 +20152,62 @@ window.nomadArtifacts = { "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.properties.available_properties" + "results.properties.catalytic.reactivity.reactants.gas_concentration_in" ] }, - "name": "available_properties", - "description": "Subset of the property names that are present in this entry.", + "name": "gas_concentration_in", + "description": "Volumetric concentration of the reactant in the feed gas, value between 0 and 1.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [ - "0..*" - ], - "default": [], - "virtual": true - } - ], - "sub_sections": [ - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 0, - "m_parent_sub_section": "sub_sections", - "name": "structural", - "sub_section": "/packages/5/section_definitions/54", - "repeats": false - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 1, - "m_parent_sub_section": "sub_sections", - "name": "dynamical", - "sub_section": "/packages/5/section_definitions/56", - "repeats": false + "shape": [] }, { - "m_def": "nomad.metainfo.metainfo.SubSection", + "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 2, - "m_parent_sub_section": "sub_sections", - "name": "structures", - "sub_section": "/packages/5/section_definitions/6", - "repeats": false + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.properties.catalytic.reactivity.reactants.gas_concentration_out" + ] + }, + "name": "gas_concentration_out", + "description": "Volumetric concentration of the reactant after the reactor, value between 0 and 1.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [] }, { - "m_def": "nomad.metainfo.metainfo.SubSection", + "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 3, - "m_parent_sub_section": "sub_sections", - "name": "vibrational", - "sub_section": "/packages/5/section_definitions/38", - "repeats": false - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 4, - "m_parent_sub_section": "sub_sections", - "name": "electronic", - "sub_section": "/packages/5/section_definitions/44", - "repeats": false - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 5, - "m_parent_sub_section": "sub_sections", - "name": "optoelectronic", - "sub_section": "/packages/5/section_definitions/58", - "repeats": false - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 6, - "m_parent_sub_section": "sub_sections", - "name": "mechanical", - "sub_section": "/packages/5/section_definitions/43", - "repeats": false - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 7, - "m_parent_sub_section": "sub_sections", - "name": "thermodynamic", - "sub_section": "/packages/5/section_definitions/51", - "repeats": false - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 8, - "m_parent_sub_section": "sub_sections", - "name": "spectroscopy", - "sub_section": "/packages/5/section_definitions/59", - "repeats": false - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 9, - "m_parent_sub_section": "sub_sections", - "name": "geometry_optimization", - "sub_section": "/packages/5/section_definitions/42", - "repeats": false + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.properties.catalytic.reactivity.reactants.conversion" + ] + }, + "name": "conversion", + "description": "Conversion of the reactant, in %.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [] } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 61, + "m_parent_index": 65, "m_parent_sub_section": "section_definitions", - "name": "ELN", + "name": "Product", + "description": "\n A product of a catalytic test reaction. A product is identified by having a selectivity.\n ", + "more": { + "label_quantity": "name" + }, "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -19119,18 +20215,16 @@ window.nomadArtifacts = { "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.eln.sections" + "results.properties.catalytic.reactivity.products.name" ] }, - "name": "sections", - "description": "The type of sections used in entries to search for. By default these are the names\nof the used section definitions.", + "name": "name", + "description": "Name of the product.", "type": { "type_kind": "python", "type_data": "str" }, - "shape": [ - "*" - ] + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -19138,18 +20232,16 @@ window.nomadArtifacts = { "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.eln.tags" + "results.properties.catalytic.reactivity.products.gas_concentration_out" ] }, - "name": "tags", - "description": "Short tags that are useful to quickly search based on various\nuser defined criteria.", + "name": "gas_concentration_out", + "description": "Volumetric concentration of the product after the reactor, value between 0 and 1.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [ - "*" - ] + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -19157,18 +20249,16 @@ window.nomadArtifacts = { "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.eln.names" + "results.properties.catalytic.reactivity.products.selectivity" ] }, - "name": "names", - "description": "Short human readable and descriptive names that appear in\nELN entries.", + "name": "selectivity", + "description": "Selectivity of the product, in %.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [ - "*" - ] + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -19176,155 +20266,133 @@ window.nomadArtifacts = { "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.eln.descriptions" + "results.properties.catalytic.reactivity.products.space_time_yield" ] }, - "name": "descriptions", - "description": "'Human descriptions that appear in ELN entries.", + "name": "space_time_yield", + "description": "Space-time-yield of the product, in mass product per mass catalyst per time.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [ - "*" - ] - }, + "shape": [], + "unit": "1 / second" + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 66, + "m_parent_sub_section": "section_definitions", + "name": "Rate", + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 4, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.eln.instruments" + "results.properties.catalytic.reactivity.rates.reaction_rate" ] }, - "name": "instruments", - "description": "The name or type of instrument used in an activity, e.g. process or\nmeasurement.", + "name": "reaction_rate", + "description": "The rate of the number of reactant or product molecules converted/produced, per mass of total catalyst, per time.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [ - "*" - ] + "shape": [], + "unit": "mole / gram / second" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, + "m_parent_index": 1, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.eln.methods" + "results.properties.catalytic.reactivity.rates.specific_mass_rate" ] }, - "name": "methods", - "description": "The name or the applied method in an activity, e.g. process or measurement", + "name": "specific_mass_rate", + "description": "The specific rate of the reactant, per mass of active catalyst component (e.g. metal).", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [ - "*" - ] + "shape": [], + "unit": "mole / gram / second" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 6, + "m_parent_index": 2, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.eln.lab_ids", - "results.eln.lab_ids__suggestion" + "results.properties.catalytic.reactivity.rates.specific_surface_area_rate" ] }, - "name": "lab_ids", - "description": "The laboratory specific id for any item, e.g. sample, chemical, instrument.", + "name": "specific_surface_area_rate", + "description": "The specific rate of the reactant, per surface area of active catalyst.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [ - "*" - ] - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 62, - "m_parent_sub_section": "section_definitions", - "name": "Results", - "description": "\n Contains a summary of the entry contents.\n ", - "sub_sections": [ - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 0, - "m_parent_sub_section": "sub_sections", - "name": "material", - "sub_section": "/packages/5/section_definitions/13", - "repeats": false - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 1, - "m_parent_sub_section": "sub_sections", - "name": "method", - "sub_section": "/packages/5/section_definitions/25", - "repeats": false + "shape": [], + "unit": "mole / meter ** 2 / second" }, { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 2, - "m_parent_sub_section": "sub_sections", - "name": "properties", - "sub_section": "/packages/5/section_definitions/60", - "repeats": false + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 3, + "m_parent_sub_section": "quantities", + "name": "rate", + "description": "The rate calculated from the mass of reactant or product converted/produced, per total catalyst mass per time.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "*" + ], + "unit": "1 / second" }, { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 3, - "m_parent_sub_section": "sub_sections", - "name": "eln", - "sub_section": "/packages/5/section_definitions/61", - "repeats": false + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 4, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.properties.catalytic.reactivity.rates.turn_over_frequency" + ] + }, + "name": "turn_over_frequency", + "description": "The turn over frequency, calculated from mol of reactant or product per number of sites over time.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [], + "unit": "1 / second" } ] - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Package", - "m_parent_index": 6, - "m_parent_sub_section": "packages", - "name": "nomad.datamodel.metainfo.eln.perovskite_solar_cell_database", - "section_definitions": [ + }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 0, + "m_parent_index": 67, "m_parent_sub_section": "section_definitions", - "m_annotations": { - "eln": [ - { - "lane_width": "800px" - } - ] - }, - "name": "Ref", - "description": "Information about the source of the data. It describes who curated the data, the journal in which the data was published,\nthe DOI number of the publication, the lead author and the publication date.", + "name": "Reactivity", + "description": "\n Properties of a catalytic test reaction.\n ", "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { - "eln": [ - { - "component": "StringEditQuantity" - } + "elasticsearch": [ + "results.properties.catalytic.reactivity.reaction_name" ] }, - "name": "internal_sample_id", - "description": "This is your own unique cell identifier. With this text string alone, you should be able to identify this cell in your own internal data management system.", + "name": "reaction_name", + "description": "Name of the catalytic test reaction.", "type": { "type_kind": "python", "type_data": "str" @@ -19336,14 +20404,12 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "quantities", "m_annotations": { - "eln": [ - { - "component": "RichTextEditQuantity" - } + "elasticsearch": [ + "results.properties.catalytic.reactivity.reaction_class" ] }, - "name": "free_text_comment", - "description": "This could be anything given additional description to the cell that is not captured by any other field.", + "name": "reaction_class", + "description": "Classification of the catalytic test reaction such as Oxidation, Hydrogenation,\nIsomerization, Coupling...", "type": { "type_kind": "python", "type_data": "str" @@ -19354,119 +20420,177 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 2, "m_parent_sub_section": "quantities", - "name": "ID", - "description": "", + "m_annotations": { + "elasticsearch": [ + "results.properties.catalytic.reactivity.gas_hourly_space_velocity" + ] + }, + "name": "gas_hourly_space_velocity", + "description": "The gas hourly space velocity in 1/time (gas flow per catalyst volume).", "type": { "type_kind": "numpy", - "type_data": "int64" + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "1 / second" }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 3, "m_parent_sub_section": "quantities", - "name": "ID_temp", - "description": "", + "m_annotations": { + "elasticsearch": [ + "results.properties.catalytic.reactivity.flow_rate" + ] + }, + "name": "flow_rate", + "description": "The volumetric gas flow in volume per time", "type": { "type_kind": "numpy", - "type_data": "int64" + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "meter ** 3 / second" }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 4, "m_parent_sub_section": "quantities", - "name": "name_of_person_entering_the_data", - "description": "Your name.", + "m_annotations": { + "elasticsearch": [ + "results.properties.catalytic.reactivity.test_temperatures" + ] + }, + "name": "test_temperatures", + "description": "The reaction temperature(s) during the catalytic test reaction.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [ + "*" + ], + "unit": "kelvin" }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 5, "m_parent_sub_section": "quantities", "m_annotations": { - "eln": [ - { - "component": "BoolEditQuantity" - } + "elasticsearch": [ + "results.properties.catalytic.reactivity.time_on_stream" ] }, - "name": "data_entered_by_author", - "description": "TRUE if you how enter the data also was involved in making the device or if you are a co-author of the paper where the data is presented.", + "name": "time_on_stream", + "description": "The time on stream of the catalyst in the catalytic test reaction.", "type": { - "type_kind": "python", - "type_data": "bool" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [ + "*" + ], + "unit": "second" }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 6, "m_parent_sub_section": "quantities", "m_annotations": { - "eln": [ - { - "component": "EnumEditQuantity", - "props": { - "suggestions": [] - } - } + "elasticsearch": [ + "results.properties.catalytic.reactivity.total_time_on_stream" ] }, - "name": "DOI_number", - "description": "The DOI number referring to the published paper or dataset where the data can be found. If the data is unpublished, enter \u201cUnpublished\u201d\nExamples:\n10.1021/jp5126624\n10.1016/j.electacta.2017.06.032\nUnpublished", + "name": "total_time_on_stream", + "description": "The time on stream of the catalyst in the catalytic test reaction.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "second" }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 7, "m_parent_sub_section": "quantities", "m_annotations": { - "eln": [ - { - "component": "EnumEditQuantity", - "props": { - "suggestions": [] - } - } + "elasticsearch": [ + "results.properties.catalytic.reactivity.pressure" ] }, - "name": "lead_author", - "description": "The surname of the first author. If several authors, end with et al. If the DOI number is given correctly, this will be extracted automatically from www.crossref.org", + "name": "pressure", + "description": "The pressure set during the catalytic test reaction.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [ + "*" + ], + "unit": "pascal" + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "m_annotations": { + "elasticsearch": [ + "reactants" + ] + }, + "name": "reactants", + "sub_section": "/packages/5/section_definitions/64", + "repeats": true }, { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 8, - "m_parent_sub_section": "quantities", - "name": "publication_date", - "description": "Publication date. If the DOI number is given correctly, this will be extracted automatically from www.crossref.org", - "type": { - "type_kind": "custom", - "type_data": "nomad.metainfo.metainfo._Datetime" + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", + "m_annotations": { + "elasticsearch": [ + "products" + ] }, - "shape": [] + "name": "products", + "sub_section": "/packages/5/section_definitions/65", + "repeats": true }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 2, + "m_parent_sub_section": "sub_sections", + "m_annotations": { + "elasticsearch": [ + "rates" + ] + }, + "name": "rates", + "sub_section": "/packages/5/section_definitions/66", + "repeats": true + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 68, + "m_parent_sub_section": "section_definitions", + "name": "CatalystSynthesis", + "description": "\n Synthesis of a heterogeneous catalyst.\n ", + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 9, + "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "journal", - "description": "nan", + "m_annotations": { + "elasticsearch": [ + "results.properties.catalytic.catalyst_synthesis.catalyst_name" + ] + }, + "name": "catalyst_name", + "description": "Custom name of catalyst.", "type": { "type_kind": "python", "type_data": "str" @@ -19475,22 +20599,32 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 10, + "m_parent_index": 1, "m_parent_sub_section": "quantities", - "name": "part_of_initial_dataset", - "description": "nan", + "m_annotations": { + "elasticsearch": [ + "results.properties.catalytic.catalyst_synthesis.preparation_method" + ] + }, + "name": "preparation_method", + "description": "The main preparation method of the sample.", "type": { "type_kind": "python", - "type_data": "bool" + "type_data": "str" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 11, + "m_parent_index": 2, "m_parent_sub_section": "quantities", - "name": "original_filename_data_upload", - "description": "nan", + "m_annotations": { + "elasticsearch": [ + "results.properties.catalytic.catalyst_synthesis.catalyst_type" + ] + }, + "name": "catalyst_type", + "description": "The type of catalyst, wether metal or oxide, ...", "type": { "type_kind": "python", "type_data": "str" @@ -19501,32 +20635,1022 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 1, + "m_parent_index": 69, "m_parent_sub_section": "section_definitions", - "name": "Cell", - "description": "General information about the solar cell. It includes information about the device area, the layer stack sequence and the device architecture.", + "name": "CatalystCharacterization", + "description": "\n Properties of a heterogeneous catalyst.\n ", "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { - "eln": [ - { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "42P2O5-22Li2O-22ZnO-12Sm2O3-2CeO2 | FTO | Perovskite | Metal", - "A.R.C. | SLG | FTO | TiO2-c | Perovskite | PTAA | Au", - "A.R.C. | SLG | FTO | TiO2-c | Perovskite | Spiro-MeOTAD | Au", - "A.R.C. | SLG | FTO | TiO2-c | TiO2-mp | Perovskite | PTAA | Au | A.R.C.", - "A.R.C. | SLG | FTO | TiO2-c | TiO2-mp | Perovskite | Spiro-MeOTAD | Au", - "A.R.C. | SLG | ITO | 2PACz | Perovskite | C60 | BCP | Cu", - "A.R.C. | SLG | ITO | PTAA | Perovskite | C60 | BCP | Cu", - "A.R.C. | SLG | ITO | SnO2-c | Perovskite | Spiro-MeOTAD | Au", - "Ag-np | SLG | ITO | PEDOT:PSS | Perovskite | PCBM-60 | LiF | Al", - "Ag-nw; GFRHybrimer; ITO | PEDOT:PSS | Perovskite | PCBM-60 | BCP | Ag", - "Ag-nw; Graphene; Polycarbonate; Polystyrene | MoO3 | Perovskite | PCBM-60 | BCP | Ag", + "elasticsearch": [ + "results.properties.catalytic.catalyst_characterization.surface_area" + ] + }, + "name": "surface_area", + "description": "The surface area per catalyst mass.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [], + "unit": "meter ** 2 / gram" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.properties.catalytic.catalyst_characterization.method_surface_area" + ] + }, + "name": "method_surface_area", + "description": "The method with which the surface area per catalyst mass was determined, e.g. BET.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 70, + "m_parent_sub_section": "section_definitions", + "name": "CatalyticProperties", + "description": "\n Properties of Heterogeneous Catalysts.\n ", + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "reactivity", + "sub_section": "/packages/5/section_definitions/67", + "repeats": false + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", + "name": "catalyst_synthesis", + "sub_section": "/packages/5/section_definitions/68", + "repeats": false + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 2, + "m_parent_sub_section": "sub_sections", + "name": "catalyst_characterization", + "sub_section": "/packages/5/section_definitions/69", + "repeats": false + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 71, + "m_parent_sub_section": "section_definitions", + "name": "EELSInstrument", + "description": "\n Base class for an EELS instrument.\n ", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.properties.spectroscopic.spectra.provenance.eels.detector_type", + "results.properties.spectroscopic.spectra.provenance.eels.detector_type__suggestion" + ] + }, + "name": "detector_type", + "description": "Detector type.", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.properties.spectroscopic.spectra.provenance.eels.max_energy" + ] + }, + "name": "max_energy", + "description": "Maximum energy of the detector.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "joule" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.properties.spectroscopic.spectra.provenance.eels.min_energy" + ] + }, + "name": "min_energy", + "description": "Minimum energy of the detector.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "joule" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 3, + "m_parent_sub_section": "quantities", + "name": "guntype", + "description": "Gun type of the detector.", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 4, + "m_parent_sub_section": "quantities", + "name": "beam_energy", + "description": "Incoming beam energy.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "volt" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 5, + "m_parent_sub_section": "quantities", + "name": "beam_current", + "description": "Incoming beam current.", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 6, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.properties.spectroscopic.spectra.provenance.eels.resolution" + ] + }, + "name": "resolution", + "description": "Energy resolution of the detector.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "joule" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 7, + "m_parent_sub_section": "quantities", + "name": "step_size", + "description": "Step size for axes in units of energy / pixel.", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 8, + "m_parent_sub_section": "quantities", + "name": "acquisition_mode", + "description": "Acquisition mode for the counts in the detector.", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 9, + "m_parent_sub_section": "quantities", + "name": "dark_current", + "description": "Is dark current or noise to be substract included in the output?", + "type": { + "type_kind": "python", + "type_data": "bool" + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 72, + "m_parent_sub_section": "section_definitions", + "name": "EELSMethodology", + "description": "\n Base class for the EELS methodology.\n ", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.properties.spectroscopic.spectra.provenance.eels.detector_type", + "results.properties.spectroscopic.spectra.provenance.eels.detector_type__suggestion" + ] + }, + "name": "detector_type", + "description": "Detector type.", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.properties.spectroscopic.spectra.provenance.eels.resolution" + ] + }, + "name": "resolution", + "description": "Energy resolution of the detector.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "joule" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.properties.spectroscopic.spectra.provenance.eels.max_energy" + ] + }, + "name": "max_energy", + "description": "Maximum energy of the detector.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "joule" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 3, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.properties.spectroscopic.spectra.provenance.eels.min_energy" + ] + }, + "name": "min_energy", + "description": "Minimum energy of the detector.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "joule" + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 73, + "m_parent_sub_section": "section_definitions", + "name": "SpectraProvenance", + "description": "\n Contains provenance information (mainly the methodology section) for spectra properties\n derived from an experiment or a calculation.\n ", + "base_sections": [ + "/packages/17/section_definitions/0" + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "eels", + "sub_section": "/packages/5/section_definitions/72" + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", + "name": "electronic_structure", + "sub_section": "/packages/3/section_definitions/18", + "repeats": true + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 74, + "m_parent_sub_section": "section_definitions", + "name": "Spectra", + "description": "\n Base class for Spectra calculation information as obtained from an experiment or a computation.\n ", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.properties.spectroscopic.spectra.type", + "results.properties.spectroscopic.spectra.type__suggestion" + ] + }, + "name": "type", + "description": "Identifier for the methodology done to obtain the spectra data: EELS, XAS, XPS, etc.", + "type": { + "type_kind": "Enum", + "type_data": [ + "EELS", + "XAS", + "XANES", + "EXAFS", + "XES", + "XPS", + "RXIS", + "unavailable" + ] + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.properties.spectroscopic.spectra.label", + "results.properties.spectroscopic.spectra.label__suggestion" + ] + }, + "name": "label", + "description": "Identifier for the source of the spectra data, either 'computation' or 'experiment'.", + "type": { + "type_kind": "Enum", + "type_data": [ + "computation", + "experiment" + ] + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "name": "n_energies", + "description": "Number of excitation energies.", + "type": { + "type_kind": "numpy", + "type_data": "int32" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 3, + "m_parent_sub_section": "quantities", + "name": "energies", + "description": "Excitation energies for which the spectra is obtained.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "n_energies" + ], + "unit": "joule" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 4, + "m_parent_sub_section": "quantities", + "name": "intensities", + "description": "Intensitites obtained at each excitation energy. This can be computationally calculated,\nor electron counts coming from an experiment. In arbitrary units.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "n_energies" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 5, + "m_parent_sub_section": "quantities", + "name": "intensities_units", + "description": "Units in which the intensities of the spectra are returned. It can be `F/m` as for\nthe dielectric constant, or `counts` for the data of a CCD device.", + "type": { + "type_kind": "python", + "type_data": "str" + } + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "provenance", + "sub_section": "/packages/5/section_definitions/73" + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 75, + "m_parent_sub_section": "section_definitions", + "name": "SpectroscopicProperties", + "description": "\n Spectroscopic properties.\n ", + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "m_annotations": { + "elasticsearch": [ + "spectra" + ] + }, + "name": "spectra", + "sub_section": "/packages/5/section_definitions/74", + "repeats": true + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 76, + "m_parent_sub_section": "section_definitions", + "name": "Properties", + "description": "\n Contains the physical properties that have been calculated or used in\n this entry.\n ", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.properties.n_calculations" + ] + }, + "name": "n_calculations", + "description": "The number of performed single configuration calculations.'", + "type": { + "type_kind": "python", + "type_data": "int" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.properties.available_properties" + ] + }, + "name": "available_properties", + "description": "Subset of the property names that are present in this entry.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [ + "0..*" + ], + "default": [], + "virtual": true + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "structural", + "sub_section": "/packages/5/section_definitions/59", + "repeats": false + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", + "name": "dynamical", + "sub_section": "/packages/5/section_definitions/61", + "repeats": false + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 2, + "m_parent_sub_section": "sub_sections", + "name": "structures", + "sub_section": "/packages/5/section_definitions/6", + "repeats": false + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 3, + "m_parent_sub_section": "sub_sections", + "name": "vibrational", + "sub_section": "/packages/5/section_definitions/42", + "repeats": false + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 4, + "m_parent_sub_section": "sub_sections", + "name": "electronic", + "sub_section": "/packages/5/section_definitions/48", + "repeats": false + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 5, + "m_parent_sub_section": "sub_sections", + "name": "optoelectronic", + "sub_section": "/packages/5/section_definitions/63", + "repeats": false + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 6, + "m_parent_sub_section": "sub_sections", + "name": "catalytic", + "sub_section": "/packages/5/section_definitions/70", + "repeats": false + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 7, + "m_parent_sub_section": "sub_sections", + "name": "mechanical", + "sub_section": "/packages/5/section_definitions/47", + "repeats": false + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 8, + "m_parent_sub_section": "sub_sections", + "name": "thermodynamic", + "sub_section": "/packages/5/section_definitions/55", + "repeats": false + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 9, + "m_parent_sub_section": "sub_sections", + "name": "spectroscopic", + "sub_section": "/packages/5/section_definitions/75", + "repeats": false + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 10, + "m_parent_sub_section": "sub_sections", + "name": "geometry_optimization", + "sub_section": "/packages/5/section_definitions/46", + "repeats": false + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 77, + "m_parent_sub_section": "section_definitions", + "name": "ELN", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.eln.sections" + ] + }, + "name": "sections", + "description": "The type of sections used in entries to search for. By default these are the names\nof the used section definitions.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.eln.tags" + ] + }, + "name": "tags", + "description": "Short tags that are useful to quickly search based on various\nuser defined criteria.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.eln.names" + ] + }, + "name": "names", + "description": "Short human readable and descriptive names that appear in\nELN entries.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 3, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.eln.descriptions" + ] + }, + "name": "descriptions", + "description": "'Human descriptions that appear in ELN entries.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 4, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.eln.instruments" + ] + }, + "name": "instruments", + "description": "The name or type of instrument used in an activity, e.g. process or\nmeasurement.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 5, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.eln.methods" + ] + }, + "name": "methods", + "description": "The name or the applied method in an activity, e.g. process or measurement", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 6, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "results.eln.lab_ids", + "results.eln.lab_ids__suggestion" + ] + }, + "name": "lab_ids", + "description": "The laboratory specific id for any item, e.g. sample, chemical, instrument.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [ + "*" + ] + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 78, + "m_parent_sub_section": "section_definitions", + "name": "Results", + "description": "\n Contains a summary of the entry contents.\n ", + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "material", + "sub_section": "/packages/5/section_definitions/13", + "repeats": false + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", + "name": "method", + "sub_section": "/packages/5/section_definitions/27", + "repeats": false + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 2, + "m_parent_sub_section": "sub_sections", + "name": "properties", + "sub_section": "/packages/5/section_definitions/76", + "repeats": false + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 3, + "m_parent_sub_section": "sub_sections", + "name": "eln", + "sub_section": "/packages/5/section_definitions/77", + "repeats": false + } + ] + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Package", + "m_parent_index": 6, + "m_parent_sub_section": "packages", + "name": "nomad.datamodel.metainfo.eln.perovskite_solar_cell_database", + "section_definitions": [ + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 0, + "m_parent_sub_section": "section_definitions", + "m_annotations": { + "eln": [ + { + "lane_width": "800px" + } + ] + }, + "name": "Ref", + "description": "Information about the source of the data. It describes who curated the data, the journal in which the data was published,\nthe DOI number of the publication, the lead author and the publication date.", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "StringEditQuantity" + } + ] + }, + "name": "internal_sample_id", + "description": "This is your own unique cell identifier. With this text string alone, you should be able to identify this cell in your own internal data management system.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "RichTextEditQuantity" + } + ] + }, + "name": "free_text_comment", + "description": "This could be anything given additional description to the cell that is not captured by any other field.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "name": "ID", + "description": "", + "type": { + "type_kind": "numpy", + "type_data": "int64" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 3, + "m_parent_sub_section": "quantities", + "name": "ID_temp", + "description": "", + "type": { + "type_kind": "numpy", + "type_data": "int64" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 4, + "m_parent_sub_section": "quantities", + "name": "name_of_person_entering_the_data", + "description": "Your name.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 5, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "BoolEditQuantity" + } + ] + }, + "name": "data_entered_by_author", + "description": "TRUE if you how enter the data also was involved in making the device or if you are a co-author of the paper where the data is presented.", + "type": { + "type_kind": "python", + "type_data": "bool" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 6, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [] + } + } + ] + }, + "name": "DOI_number", + "description": "The DOI number referring to the published paper or dataset where the data can be found. If the data is unpublished, enter \u201cUnpublished\u201d\nExamples:\n10.1021/jp5126624\n10.1016/j.electacta.2017.06.032\nUnpublished", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 7, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [] + } + } + ] + }, + "name": "lead_author", + "description": "The surname of the first author. If several authors, end with et al. If the DOI number is given correctly, this will be extracted automatically from www.crossref.org", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 8, + "m_parent_sub_section": "quantities", + "name": "publication_date", + "description": "Publication date. If the DOI number is given correctly, this will be extracted automatically from www.crossref.org", + "type": { + "type_kind": "custom", + "type_data": "nomad.metainfo.metainfo._Datetime" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 9, + "m_parent_sub_section": "quantities", + "name": "journal", + "description": "nan", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 10, + "m_parent_sub_section": "quantities", + "name": "part_of_initial_dataset", + "description": "nan", + "type": { + "type_kind": "python", + "type_data": "bool" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 11, + "m_parent_sub_section": "quantities", + "name": "original_filename_data_upload", + "description": "nan", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 1, + "m_parent_sub_section": "section_definitions", + "name": "Cell", + "description": "General information about the solar cell. It includes information about the device area, the layer stack sequence and the device architecture.", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "42P2O5-22Li2O-22ZnO-12Sm2O3-2CeO2 | FTO | Perovskite | Metal", + "A.R.C. | SLG | FTO | TiO2-c | Perovskite | PTAA | Au", + "A.R.C. | SLG | FTO | TiO2-c | Perovskite | Spiro-MeOTAD | Au", + "A.R.C. | SLG | FTO | TiO2-c | TiO2-mp | Perovskite | PTAA | Au | A.R.C.", + "A.R.C. | SLG | FTO | TiO2-c | TiO2-mp | Perovskite | Spiro-MeOTAD | Au", + "A.R.C. | SLG | ITO | 2PACz | Perovskite | C60 | BCP | Cu", + "A.R.C. | SLG | ITO | PTAA | Perovskite | C60 | BCP | Cu", + "A.R.C. | SLG | ITO | SnO2-c | Perovskite | Spiro-MeOTAD | Au", + "Ag-np | SLG | ITO | PEDOT:PSS | Perovskite | PCBM-60 | LiF | Al", + "Ag-nw; GFRHybrimer; ITO | PEDOT:PSS | Perovskite | PCBM-60 | BCP | Ag", + "Ag-nw; Graphene; Polycarbonate; Polystyrene | MoO3 | Perovskite | PCBM-60 | BCP | Ag", "Au | 4-methoxythiophenol | Perovskite | 4-chlorothiophenol | Au", "Au | Ni | Al | Ti | GaN | Perovskite | Graphene aerogel | Spiro-MeOTAD | Au", "Au | Ni | Al | Ti | GaN | Perovskite | Spiro-MeOTAD | Au", @@ -44675,884 +46799,3250 @@ window.nomadArtifacts = { "CdZnSe@ZnSe-QDs", "Py-COF | PTAA", "Li-TFSI; TBP", - "XSln1453", - "2,8-bis-[2,2-bis(4-methoxyphenyl)ethenyl]-5,11-diethyl-5,11-dihidroindolo[3,2-b]carbazole", - "Polymer4", - "PolyTPD | PFN", - "SM13", - "2,5\u2010bis(4,4\u2032\u2010bis(methoxyphenyl)aminophen\u20104\u2032\u2032\u2010yl)\u20103,4\u2010ethylenedioxythiophene", - "Z3", - "2-((2-(4-(2-ethylhexyl)-4H-dithieno[3,2-b:2\u2032,3\u2032-d]pyrrol-2-yl) thiazol-5-yl)methylene) malononitrile", - "H7", - "Theophylline | Spiro-MeOTAD", - "BPAPF", - "Acetonitrile; B2; LiBr", - "OMETPA-BDT", - "CF-BTz-ThR", - "SDTFCz2", - "Si-OMeTPA", - "EGO-PPV | PFN-P2", - "PANI-PAMSA", - "SP-12", - "Ethyl acetate; I2; LiI; TBP; Urea", - "TPTPA | MoO3", - "MC8-TPA", + "XSln1453", + "2,8-bis-[2,2-bis(4-methoxyphenyl)ethenyl]-5,11-diethyl-5,11-dihidroindolo[3,2-b]carbazole", + "Polymer4", + "PolyTPD | PFN", + "SM13", + "2,5\u2010bis(4,4\u2032\u2010bis(methoxyphenyl)aminophen\u20104\u2032\u2032\u2010yl)\u20103,4\u2010ethylenedioxythiophene", + "Z3", + "2-((2-(4-(2-ethylhexyl)-4H-dithieno[3,2-b:2\u2032,3\u2032-d]pyrrol-2-yl) thiazol-5-yl)methylene) malononitrile", + "H7", + "Theophylline | Spiro-MeOTAD", + "BPAPF", + "Acetonitrile; B2; LiBr", + "OMETPA-BDT", + "CF-BTz-ThR", + "SDTFCz2", + "Si-OMeTPA", + "EGO-PPV | PFN-P2", + "PANI-PAMSA", + "SP-12", + "Ethyl acetate; I2; LiI; TBP; Urea", + "TPTPA | MoO3", + "MC8-TPA", + "CZTS-np", + "1,4-di(1H-imidazol-2-yl)benzene-C6", + "PbS-QDs | Spiro-MeOTAD", + "Spiro p-xylene", + "PEDOT:PSS | 4-bromobenzenediazonium tetrafluoroborate", + "3,6-Cz-TPA", + "TPTPA | TPTPA; MoO3", + "CuInS2 | ZnS-QDs", + "V1050", + "tri-TPA", + "H6", + "CzP", + "CuPc", + "F23", + "CsBiBr3-QDs", + "NiO-np | Spiro-MeOTAD", + "Triazine-Flu", + "PMMA; rGO", + "TB4-ZnPc", + "2,7-Bis(4,4\u2032-dimethoxydiphenylamine)-9- (bis(methylsulfanyl)methylene)fluorene", + "YT2", + "PhNa-1T", + "Ag:CuO-nanofibers | PEDOT:PSS", + "Chl\u20102", + "cyclopenta[2,1-b; 3,4-b\u2032]dithiophene", + "COPV6", + "PTAA | TFPPy-ETTA", + "DBFMT", + "Pt-np", + "BDT0FMeDPA", + "PtMePy", + "H-Bi", + "3,6-di(2H-imidazol-2-ylidene)cyclohexa 1,4-diene-C6", + "Z2", + "PDPP3T", + "NiO-c | Sn2O3-qd", + "MC8-9-NPC", + "PTAA-1F", + "HTM5", + "NiO-np | TPI-2MEO", + "Spiro-MeOTAD | CANP | Spiro-MeOTAD", + "br-4C", + "Carbozole @ S12", + "IDF-DiDPA | MoO3", + "TPE-S", + "CsPbBr3-np | Spiro-MeOTAD", + "Rubrene | PEDOT:PSS", + "HA2", + "V2Ox | PEDOT:PSS", + "TP-FTzF-TP", + "SFT-TPA", + "3,6-Ben", + "NH-2,6", + "FU7", + "MoS2-QDs | Spiro-MeOTAD", + "PCDTBT", + "NiO-c | MoOx", + "Polymer2", + "NiO-c | n-Butylamine", + "MoO3 | PTAA", + "TOPO", + "HBZ-71", + "DFBT(DTS-FBTTh2)2", + "Cobalt\u2013porphyrin", + "TPA-ANR-TPA", + "Spiro-OEtTAD", + "TTE-2", + "NiO-c | NiO-nw", + "MEH-PPV-20", + "PEH-3", + "CsSnBr3-QDs", + "3,6-PCzTPA", + "NiO-c | Mercaptoethylamine chlorate", + "HPB-OMeDPA", + "PTh; Graphene", + "SCZF-5", + "Titanylphthalocyanine", + "NiMgLiO", + "BTTP", + "Spiro-TAD", + "3-Butylthiophene | Spiro-MeOTAD", + "Graphene oxide; NiO-c", + "BDT-PTZ", + "PMA", + "Cu3SbS4-np", + "Ni-acetate", + "TcTa", + "Ph-TPA-2A", + "P1", + "D205 | Spiro-MeOTAD", + "PDPPT-TT", + "ATT-ODec", + "Spiro-CPDT", + "P3HT; PFN", + "CuPcNO2-OMFPh", + "BChl-1", + "Spiro-OPrTAD", + "Al2O3-c", + "Carbon", + "PDTSTTz-4", + "Spiro-MeOTAD | MWCNTs; Spiro-MeOTAD", + "2,7-triphenylamine-carbazole", + "NiO-c | Ni", + "V859", + "DPBTD-B[BMPDP]2", + "CuSCN | rGO", + "2,2\u2032-[(4,5-Bis(1-octylnonyl)-dithieno[2,3-d:2\u20323\u2032-d]thieno[3,2-b:4,5-b\u2032]dipyrrole-2,7-diyl)bis(thien-5,5\u2032-diyl)bis(methane-1-yl-1-ylidine)]dimalononitrile", + "F4-TCNQ", + "PyThTPA", + "PSS-g-PANI:PFI", + "Spiro-TBB | Spiro-TBB", + "PDMS", + "NiO-np | TPI-6MEO", + "Lignosulfonate; PEDOT:PSS; PDA", + "TAPbI3 | Spiro-MeOTAD", + "Spiro-MeOTAD | WO3", + "DPPZnP-TSEH; PCBM-60 | BCP", + "BI25", + "PANI", + "T80P", + "CDTh 1", + "Au-np; PEDOT:PSS", + "4-(4-Phenyl-4-alfa-naphthylbutadienyl)-N,N-di(4-tolyl)-phenylamine", + "FBA3", + "Spiro-MeOTAD | WOx", + "LCS01", + "MeO-FDPA", + "TiO2-np | NiO-np", + "BTT-TPA", + "Cu0.67Cr0.33O2", + "P(VDF-TrFE) | Spiro-MeOTAD", + "NPB", + "TQ2", + "alkylammonium bromide | Spiro-MeOTAD", + "TPE-2,7-Carbazole W1", + "H64", + "BTTI-C6", + "Z30", + "CZTPA-2", + "PCBM-60 | bis-C60", + "TPASB", + "NiO-np | PTAA", + "KTM3", + "S197", + "Au-np; Graphene oxide", + "JY6", + "NiO-c | CuGaO2-c", + "TCPBr | Spiro-MeOTAD", + "PET-OMeDPA", + "AIGS-QDs", + "Polyrotaxane", + "PSQ2", + "KM05", + "CPE-K", + "NiO-np | ME3", + "Unknown", + "TPL", + "pTPA-DBTP", + "OAI | DM", + "NPB; PTAA", + "PEDOT:PSS | Al2O3-mp", + "PO-Spiro-OMeTAD", + "Carbon-nt | Spiro-MeOTAD", + "CON-16 | PEDOT:PSS", + "LHTM-1", + "CuGaO2", + "COPV3", + "PFO", + "CIGS", + "NiMgO-c", + "P3TAA", + "Carbon-nt", + "PffBT4T-2OD | WOx", + "C12H10B2O4 | Spiro-MeOTAD", + "NTPA", + "PBT", + "Li4Ti5O12 | Spiro-MeOTAD", + "2,2\u2032-[(4,5-Bis(1-octylnonyl)-dithieno[2,3-d:2\u20323\u2032-d]thieno[3,2-b:4,5-b\u2032]dipyrrole-2,7-diyl)bis(2,3-dihydrothieno[3,4-b][1,4]dioxin-5,5\u2032-diyl)bis(methane-1-yl-1-ylidine)]dimalononitrile", + "CuP", + "YN3", + "ZnChl-4", + "Carbon-np; PEDOT:PSS", + "2PACz", + "Spiro-MeOTAD | PbS", + "BTT-1", + "BTF4", + "PTAA; Spiro-MeOTAD", + "Y2", + "DNA", + "NiO-c | SDBS", + "PTZ2", + "NP2", + "IEICO; PBDTTT-E-T | MoO3", + "OIPC-I", + "2-F-br-4C", + "T1", + "B3", + "B63", + "COPV7", + "PCDTBT1", + "PBDTT-SeDPP; PCBM-70", + "Graphene oxide", + "DMZ", + "PMMA", + "Yih-2", + "ZnNc", + "PEDOT:PSS | PFN-P1", + "TTE-1", + "PbS", + "DH-MeO-FDPA", + "TPP-SMeTAD", + "DTS", + "SGT-409", + "S,N-heteropentacene", + "Poly-N-vinylcarbazole | SP-12", + "Spiro-MeOTAD | SWCNTs", + "1F-SAM | PEDOT:PSS", + "CPEPh-Na", + "KR216", + "TaTm | MoO3", + "SFXDAnCBZ", + "Carbon-nt | PMMA", + "PTAA | Spiro-MeOTAD", + "CuCrO2", + "NiO-c | N749", + "NiO-c | PhNa-1T", + "TQ1", + "PbS-QDs", + "DM", + "DIPO-Ph4", + "DTh101", + "PPyra-XA", + "IDF-TeDPA | MoO3", + "NiPc | V2O5", + "HTM1", + "NiO-c | NiO-mp", + "CuSeCN", + "PTQ10 | PTAA", + "Th101", + "PolyTPD", + "PBDTT-SeDPP", + "EDOT-MPH", + "2,7-Cbz-EDOT", + "DR3TBDTT", + "V1221", + "BTT-3", + "P3HT; SWCNTs | Spiro-MeOTAD", + "Ni | NiMgO | PVP", + "2F-SAM | PEDOT:PSS", + "BDT:TT", + "AQ | Spiro-MeOTAD", + "Poly(1,4-phenylenevinylene)", + "PCPDTBT", + "PEDOT:PSS | Al2O3-np", + "2,7-Pyr", + "JK-216D", + "BTSe-1", + "S:DIB", + "KR321", + "Spiro-TTB", + "PEDOT:P(SS-co-TFPMA)", + "X62", + "(BMPA-EDOT)3-TPA", + "TPA-BPFN-TPA", + "CoTh-TTPA", + "THY-4", + "Fu-OMeTPA", + "PEDOT:PSS-NH2-OH", + "VOx", + "TPADPP-1", + "M6", + "WO3-nw@PEDOT | PEDOT:PSS", + "Al2O3-c | PEDOT:PSS", + "HfO2 | Acetonitrile; I2; LiI; TBP", + "T60P", + "Graphene oxide | PFNBr", + "Spiro-MeOTAD | rGO", + "Al2O3-mp | MeO-DATPA", + "NiO-c | BBA", + "YT1", + "BAI | DM", + "3F-SAM | PEDOT:PSS", + "P3HT | Al2O3-mp", + "SY1", + "Triazine-Th-OMeTPA", + "Co3O4", + "SGT-411", + "NiO-c | FDA", + "BDT-POZ", + "J61-ITIC", + "SWCNTs | Graphene oxide", + "Spiro-MeOTAD | MoO3", + "CuInSe2-QDss", + "P3OT", + "T(EDOT-TPA)2", + "H5", + "apv-T", + "Graphene | PEDOT:PSS", + "FB-OMeTPA", + "TT80", + "BDT-4MeOTPA", + "CGS", + "2,4-spiro", + "TSHBC", + "TCP-OC8", + "YC04", + "SGT-404", + "P1Z1", + "Nafion; PEDOT:PSS", + "T5H-OMeDPA", + "(n-BuO)4ZnPc", + "SBFCz2", + "Polymer1", + "M3; PCBM-60", + "CzPF", + "PEDOT:PSS | SrGO", + "n-octylammonium iodide | Spiro-mF", + "CuSCN-nw", + "Py | Spiro-MeOTAD", + "PTAA | MoS2", + "B186", + "P3HT; SWCNTs | PEDOT:PSS", + "Al2O3 | Spiro-MeOTAD", + "ZnO-nw | PEDOT:PSS", + "NiO-c | Mg(AcO)2", + "HTM", + "Au-nw | Spiro-MeOTAD", + "NiO | PS", + "NiO-c | EPA", + "MeO-TPD", + "PTB7-Th", + "CuI | PbPc", + "Cu0.2Cr0.8O2", + "1\u2010adamantylamine | Spiro-MeOTAD", + "NiO-c | DEA", + "Imidazolium iodide | P3HT", + "Graphene; TSHBC @ 5:1", + "TFM", + "YC01", + "PEDOT:PSS | NPB", + "BTPA-6", + "S,N-Heteroacene 2", + "Ag-np; PEDOT:PSS", + "COTT-1 | COTT-2", + "S7", + "WO3-nw", + "PdMe2Pc", + "PDCBT | WOx", + "PPDT2FBT", + "SWCNTs | Spiro-MeOTAD", + "CAS", + "Graphene; P3HT", + "Pentacene", + "Q219", + "Polythiophene", + "S,N-Heteroacene 1", + "CT3", + "MnS", + "PTAA | LiF", + "NiCoO", + "CuSCN | Spiro-MeOTAD", + "PDI", + "Tetrakis(4-methoxyphenyl)spiro[cyclopenta[1,2-b:5,4-b']dipyridine-5,9'-fluorene]-2',7'-diamine", + "V1207", + "Dispiro-OMeTAD", + "Au-np | Spiro-MeOTAD", + "PEDOT", + "SnS", + "NiO-np | Choline chloride; Glycerol", + "BEDCE | Spiro-MeOTAD", + "PZn-TPA-O", + "PTAA | PFN-Br", + "PP-Spiro", + "CuO2", + "MoO3 | TaTm", + "Phenethylamine | Spiro-MeOTAD", + "CdSe-QDs | Spiro-MeOTAD", + "PEDOT:PSS | MoO3", + "p-PFP-O | PTAA", + "PBTI-C", + "PTAA; TPFB", + "F6-TCNNQ; TaTm", + "NiO-c | SY1", + "TZ2", + "mDPA-DBTP", + "Montmorillonite | Spiro-MeOTAD", + "PCA-2", + "InP-np | Spiro-MeOTAD", + "TPA", + "H2", + "IEICO | MoO3", + "CsCuBr3-QDs", + "PolyTDP", + "NiPc-Cou", + "IDT1", + "TBC-1", + "PCPDTBT | PEDOT:PSS", + "Q197", + "P3HT | PEDOT:PSS", + "F16CuPc | Spiro-MeOTAD", + "TPB-4-MOTPA", + "TATSFHBP", + "ZnPc-p-ZnPc 1", + "HL-2", + "Tetracene | Spiro-MeOTAD", + "XOP", + "2,7-PCzTPA", + "SY4", + "TPDI", + "C60", + "BTTI-C12", + "Q205", + "YK1", + "PTB7:Th", + "ZnChl-1", + "NiO-c | PTAA", + "iDM1", + "THY-2", + "mp-SFX-3PA", + "CZ-STA; CZ-TA", + "AS37", + "TaTm", + "CuInS2 | Al2O3-np", + "P3HT | WOx", + "Azu-Oct", + "Imidazonium iodide | Spiro-MeOTAD", + "PEDOT; Spiro-MeOTAD", + "Al2O3-np | TPA-ZnPc", + "P3HT; SWCNTs-PhOMe", + "ADAHI", + "JW8", + "COPV5", + "NiO-c | PEAI", + "PTAA-2F", + "Cu2CoSn4-np", + "PBDT(2F)T", + "PEDOT:PSS | Black phosphorous QDs", + "PEDOT:PSS | VOx", + "BTT-2", + "Pentafluorobenzenethiol | Spiro-MeOTAD", + "TFB | Al2O3-np", + "CMO", + "NiCo2O4-np | Spiro-MeOTAD", + "TBC-2", + "1,3,6-tris-(N,N-di-p-methoxyphenylamine)pyrene", + "CuSCN | Graphene", + "C12-silane-SAM | Spiro-MeOTAD", + "Theophylline | PTAA", + "ZnPy", + "MPA-BTTI", + "Z1013", + "Ni | Au", + "P8TTT", + "CuSCN", + "P3OFHT", + "NH-2,7", + "NiO-c | CuGaO2", + "NiO-c | PMMA", + "PANI:PSS", + "P3HT | MoO3", + "CuAlO2 | PEDOT:PSS", + "CuSCN | Ta:Wox-np", + "No HTM", + "TPD-4EtCz", + "L-H", + "PT-DC", + "PDQT", + "DNA-CTMA", + "2EGO-PPV", + "Co0.695Cu0.305O", + "PDMS | CuSCN", + "PB2T-O", + "NiO-c", + "GO-nanoribbons", + "CMP", + "Azu-Me", + "Ag-nw; PEDOT:PSS", + "Ppy", + "YC06", + "TPD-4MeTPA", + "LGC-D013", + "NiO-np | KCl", + "M108", + "SiTP-OMeTPA", + "TBC-3", + "Cz-Pyr", + "PEDOT:PSS | PEDOT:PSS", + "10-butyl-3,7-diphenylphenoxazine", + "HTM-P1", + "apv-EC", + "Grafted rGO; Polyacrylonitrile", + "4C", + "CuI; CuSCN", + "P3HT; SWCNTs", + "JK-217D", + "NiO", + "ATT-OBu", + "DFH", + "NiO-c | SY2", + "HfO2 | CuI", + "DFTAB", + "0F", + "TAT-t BuSty", + "NiO-c | PTZ-1", + "DOR3T-TBDT", + "SWCNTs | PEDOT:PSS", + "PABA | Spiro-MeOTAD", + "BTBDT", + "PTAA | PMMA", + "PTZ1", + "M3", + "Cu2ZnSn4-np", + "KR374", + "P4", + "SGT-421", + "Al2O3-mp | Spiro-MeOTAD", + "V841", + "CuCrO2-np", + "BTX-OMeTAD", + "N1,N1',N1'',N1'''-(ethene-1,1,2,2-tetrayltetrakis(benzene-4,1-diyl))tetrakis(N1-(4-(dimethylamino)phenyl)-N4,N4-dimethylbenzene-1,4-diamine)", + "H-Ca", + "PTAA | Car-ETTA", + "TPA-BPV-TPA", + "MWCNTs; Spiro-MeOTAD", + "M107", + "PEDOT:PSS | Rubrene", + "H111", + "OTPA-ZnPc", + "PTPD | PFN", + "Azu-Bu", + "PEDOT:PSS | VB-DAAF", + "TRUX-E-T", + "DR3T", + "PEDOT:GSL", + "Fused-F (Tris[[4-[3,3'-dihexylsilylene-2,2'-bithiophene]-7-[5\u2032\u2032-n-hexyl-(2,2\u2032; 5\u2032,2\u2032\u2032-terthiophen\ne)-5-yl]-benzo[c]-[1,2,5]thiadiazole]-2,6,10-yl]-4,4,8,8,12,12-hexamethyl-4H,8H,12\nHbenzo[1,9]quinolizino [3,4,5,6,7,-defg]acridine )", + "PVDF-HFP | Spiro-MeOTAD", + "PEAI | PTAA", + "TS-CuPc", + "CsOAc | Spiro-MeOTAD", + "Ph-TPA-8A", + "ATT-OMe", + "PEDOT:PSS | PCPDTBT", + "PFN; PTPD", + "HPDI", + "PNP-BC", + "Oleylamine | Spiro-MeOTAD", + "CuOx", + "Z26", + "TPB(2-TPTZ)", + "P3CT-CH3NH2", + "CuMe2Pc", + "G2", + "KM07", + "JW6", + "MoO3 | TPA-2,7-FLTPA-TPA", + "HS-Ph-NO2 | Spiro-MeOTAD", + "DM1P", + "N2,N2,N12,N12-Tetrakis(4-methoxyphenyl)-9-methyl-9H-naphtho[2,1-c]carbazole-2,12-diamine", + "r-GO-NH", + "Ph-inv-OMeTPA", + "KR145", + "ZnP", + "3,6-triphenylamine-carbazole", + "Co-Porphyrin", + "D102", + "H-PheDOT", + "P-OR", + "Z33", + "Polypseudorotaxane", + "TDAB", + "Z29", + "TPA\u2010ANT\u2010TPA", + "SYN1", + "G1", + "HfO2 | Spiro-MeOTAD", + "V2O5 | PEDOT:PSS", + "CrO3", + "BV-FNPD", + "V1036:C4", + "Si-QDs | Spiro-MeOTAD", + "pDPP5T-2 | WOx", + "(2Z,2'Z)-2,2'-(((2,4-dimethylphenyl) azanediyl) bis([1,1'-biphenyl]-4',4-diyl)) bis(3-(4-(diphenylamino) phenyl) acrylonitrile", + "EH44", + "H2Pc-1", + "DPIE", + "DAI | DM", + "AZ1", + "D103", + "N-CuMe2Pc; P3HT", + "Cu2NiSn4-np", + "TT-3,6-TPA", + "Asy-PBTBDT", + "PTAA | PPNBr", + "PTA", + "CuPrPc", + "HA1", + "TPAC2M", + "M:OO", + "Cu:Ni acetate", + "YN1", + "ACE-QA-ACE", + "Spiro-OiPrTAD", + "PDCBT | Ta-Wox", + "tetra{4-[N,N-(4,4'-dimethoxydiphenylamino)]phenyl}ethene", + "Q222", + "DPP-Ome", + "P3CT-Na", + "PFN; TT", + "Spiro-MeOTAD | MoOx", + "CdSe-Qd | CsPbI3-QD | Spiro-MeOTAD", + "CoPcNO2-OPh", + "CW4", + "Selenium", + "3,6 \u00b4-BCz-OMeTAD", + "SAF\u2010OMe", + "2TPA-2-DP", + "LiF | PEDOT:PSS", + "NiO-c | PTZ-2", + "DM1", + "DPIO", + "PST1", + "PBDTP-DTDPP", + "BTPA-4", + "CsSnI2.95F0.05", + "P3TAA-co-P3HT", + "IDTC6-TPA", + "PBDTTT-C", + "2TPA-1-DP", + "NiO-c | Al2O3-mp; Au@SnO2-nw", + "4,4'-(5,10,11-Trihexyl-10,11-dihydro-5H-thieno[2\u2032,3':4,5]pyrrolo [3,2-g]thieno[3,2-b][1,2,3]triazolo[4,5-e]indole-2,8-diyl)bis(N,N-bis(4- methoxyphenyl)aniline)", + "FT55", + "BAI | Spiro-MeOTAD", + "Poly TPD-NPD", + "pentaerythritol tetrakis(3-mercaptopropionate) | Spiro-MeOTAD", + "C6Br | Spiro-MeOTAD", + "Spiro-MeOTAD | TS-CuPc", + "TT-2,5-TPA", + "DBC-OMeDPA", + "DPA-QA-DPA", + "PTB7-TH", + "Co(II)P", + "P1C1", + "MTDATA", + "CW3", + "V1225", + "FBA1", + "Spiro-MeOTAD", + "DTS(IIThThHEX)2", + "KR378", + "P3HT | WO3", + "EtheneTTPA", + "M105", + "CT4", + "VB-MeO-FDPA", + "THY-3", + "NiPc", + "MoS2 | Spiro-MeOTAD", + "pBBTa\u2010BDT1", + "Py-OMe", + "Cu:NiO-np", + "HTM-M1", + "CuSCN-2D", + "TT0", + "P3CT-Na | PASP", + "Spiro-MeOTAD | Cu2O", + "Graphene | AuCl3 | PEDOT:PSS", + "PTAA | CuSCN", + "rGO | PTAA", + "J2", + "DTPC8-ThDTPA", + "CF-Sp-BTh", + "TaTm | F6-TCNNQ; TaTm", + "PEDOT:PSS | Au@SiO2-nw", + "NiCo2O4-np", + "FH-0", + "FEH", + "IrTiOx-c", + "m-MTDATA", + "TPA-TPM", + "Spiro-OBuTAD", + "MoOx | Spiro-MeOTAD", + "Co(II)P; Co(III)P", + "H2Pc", + "Co(III)P", + "NiO-c | UiO-66", + "PQT-12", + "N,N-bis-[7-(4,4\u2032-dimethoxydiphenylamine)-9- (bis(methylsulfanyl)methylene)fluoren-2-yl]-4-methoxyaniline", + "CJ-02", + "M111", + "PVK", + "C202", + "MoO3 | TPA-3,6-FLTPA-TPA", + "P(BDTT-tPPD)", + "PTB7 | WOx", + "DIB; SeS2", + "Polyacrylonitrile", + "rGO | CuSCN", + "TT1", + "PTAA | NiO-c", + "MEH; PPV", + "PTAA | CuGaO2-mp", + "SnS-np | NiO-np", + "PEDOT:PSS | PFN", + "CuPc | PTAA", + "PBTTT-14", + "V1160", + "B2", + "PTB8", + "CuI", + "5,5',5''-(5,5',5''-(nitrilotris(benzene-4,1-diyl))tris(furan-5,2-diyl))tris(2-octylisoindoline-1,3-dione", + "1,6-di{3-[2-(4- methylphenyl)vinyl]carbazol-9-yl}hexane", + "RCP", + "PCBM-60 | BCP", + "Azu-EH", + "CuPs-TIPS", + "InP-np", + "Hexamethyl-substituted subphthalocyanine", + "Poly[4,8-bis(2-(4-(2-ethylhexyloxy)3-fluorophenyl)-5-thienyl)benzo[1,2-b:4,5-b'] dithiophenealt-1,3-bis(4-octylthien-2-yl)-5-(2-ethylhexyl)thieno[3,4-c]pyrrole-4,6-dione", + "HfO2 | Acetonitrile; I2; LiI; PMII; Propylene glycol; TBP", + "BPZTPA", + "PDO2", + "CrOx", + "Z35", + "F6-TCNNQ; TaTm | TaTm", + "ZnPor", + "TPA-NADT-TPA", + "Black phosphorous nanosheets | Spiro-MeOTAD", + "SP-02", + "PCBM-60 | Carbon", + "Spiro-N", + "PEDOT:PSS | TPD", + "3-Ethylthiophene | Spiro-MeOTAD", + "Spiro-E", + "CuAlO2", + "PdMePy", + "NDT", + "HS-Ph-OCH3 | Spiro-MeOTAD", + "TPE-2,7-Carbazole W2", + "CsSnBrI2-QDs", + "PEDOT:PSS | VB-MeO-FDPA", + "TTA2", + "TPA2C", + "BDT-2D", + "Vox", + "YC-2", + "Spiro-s", + "PII2T8TSi", + "PEDOT:PSS | CuSCN", + "SrCl2 | Spiro-MeOTAD", + "V852", + "2H-MoS2 | Spiro-MeOTAD", + "V866", + "ZnPc-DPP-ZnPc", + "PEA2PBI4", + "PTPAANT", + "FA-CN", + "Diazo-OMeTPA", + "EVA; SWCNTs | Spiro-MeOTAD", + "H3", + "Red Phosphorous-QDs", + "3EGO-PPV", + "Pyrmidine | Spiro-MeOTAD", + "WY-2", + "NiO-c | MOF-808", + "FDT", + "POSS-NH2 | Spiro-MeOTAD", + "MEH-PPV; PFN", + "dly-1", + "Spiro-MeOTAD | VOx", + "COPV2", + "ODA-FeS2-np", + "PEDOT:PSS | Pyrene", + "F8T2e", + "P3HT; PCBM-60", + "SM", + "N2',N2',N7',N7'-tetrakis(4-methoxyphenyl)spiro[fluorene-9,9'-xanthene]-2',7'-diamine", + "PPV", + "1-Donecyl Mercaptan | Spiro-MeOTAD", + "X25", + "PEDOT:PSS | Ca", + "F22", + "DPPS | Spiro-MeOTAD", + "TPA-MeOPh", + "BT41", + "NiO-nanowalls | Diethanolamine", + "S101", + "P3TI", + "3-Methylthiophene | Spiro-MeOTAD", + "H-Di", + "X26", + "NiO-np | Br-BPA-SAM", + "COPV1", + "MeO-BPZTPA", + "PEDOT:PSS | PTMA-BP", + "C5PcH2 | MoOx", + "BL07", + "Porphyrin", + "JW7", + "PEDOT:PSS | Na3C6H5O7", + "tetra-substituted azulene", + "X18", + "P-R", + "BDT-C1", + "Phosphor-QDs", + "PCBZANT", + "TPD-4MeOTPA", + "MoO3 | TPBi | TaTm", + "Bifluo-OMeTAD | MoO3", + "ACE\u2010ANT\u2010ACE", + "Cu2ZnSnS4", + "CIGGSe-np", + "DMF; I2; PVA; TBAI", + "PAH 1", + "NiO-c | Al2O3-mp; Au@SnO2-np", + "DORDTS\u2013TFBT", + "PEDOT:PSS | Graphene oxide; PEG", + "PEDOT:PSS | Graphene oxide", + "TPA-TVT-TPA", + "I2-electrolyte", + "PDBD-T", + "WO3 | Spiro-MeOTAD", + "TPA-AZO", + "YT4", + "Cs-oleate | Spiro-MeOTAD", + "TPDCN", + "YD2-o-C8 | Spiro-MeOTAD", + "Porphyrin-H2", + "PEDOT:PSS | PolyTPD", + "Th-OMeTPA", + "PDCBT | Ta:WOx", + "MoO3 | PEDOT:PSS", + "PVAc", + "Ph-TPM", + "CuPc | Spiro-MeOTAD", + "CuEtPc", + "TTA1", + "3,6-Pyr", + "CuGaO2-np | CuSCN", + "TPFPB | Spiro-MeOTAD", + "PhCz-4MeOTPA", + "EtheneDTPA", + "CDTh-EtHex 2", + "PZn-2FTPA", + "X22", + "NiO-c | PS", + "2F", + "PS | Spiro-MeOTAD", + "C101", + "NiO-nanowalls" + ] + } + } + ] + }, + "name": "stack_sequence", + "description": "The stack sequence describing the hole transport layer. Use the following formatting guidelines\n- With the HTL, we refer to any layer between the substrate and the perovskite in a pin-device, and any layer between the perovskite and the back contact in a nip-device.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- If two materials, e.g. A and B, are mixed in one layer, list the materials in alphabetic order and separate them with semicolons, as in (A; B)\n- If no hole transport layer, state that as \u2018non\u2019\n- Use common abbreviations when appropriate but spell it out if risk for confusion.\n- If a material is doped, or have an additive, state the pure material here and specify the doping in the columns specifically targeting the doping of those layers.\n- There is no sharp well-defined boundary between when a material is best considered as doped or as a mixture of two materials. When in doubt if your material is best described as doped or as a mixture, use the notation that best capture the metaphysical essence of the situation.\n- There are a lot of stack sequences described in the literature. Try to find your one in the list. If it is not there (i.e. you may have done something new) define a new stack sequence according to the instructions.\nExample:\nSpiro-MeOTAD\nPEDOT:PSS\nnone\nNiO-c\nPTAA", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "7.8", + "nan | 250.0", + "2.5 | 30.0", + "15.0 | 10.0", + "89.0", + "90.0", + "2.0 | 50.0", + "250.0 | 70.0", + "100.0 | 10.0", + "40.0 | nan", + "325.0", + "50.0", + "220.0", + "50.0 | 200.0", + "137.0", + "180.0", + "45.0", + "20.0 | 40.0", + "nan | 130.0", + "167.0", + "nan | 33.0", + "168.0", + "nan | 160.0", + "803.0", + "0.0", + "10.0 | 6.0 | 1.0", + "259.0", + "10.0 | 160.0", + "300.0 | 15.0", + "15.0 | 150.0", + "65.0 | 1400.0", + "35.6", + "60.0 | 10.0", + "14.0 | 3.0", + "300.0 | 5.0", + "25.0 | 4.0", + "95.0", + "nan | 44.0", + "2.4", + "5.0 | 2.0", + "87.0", + "10.0 | 90.0", + "70.0", + "41.0", + "127.0", + "193.0", + "150.0 | 40.0", + "11.0", + "25.0 | 260.0", + "5.7", + "500.0", + "5.0 | nan", + "2000.0 | nan", + "73.0", + "184.0", + "4.0 | nan", + "76.0", + "True", + "2000.0", + "1.0", + "54.0", + "234.0", + "10.0 | 5.0", + "0.7 | nan", + "260.0", + "175.0", + "267.0", + "20.5", + "2.0 | 400.0", + "240.0", + "50.0 | 50.0", + "2.5 | 20.0", + "9.0 | nan", + "35.0 | 8.0", + "600.0 | nan", + "1.5 | 180.0", + "330.0", + "810.0", + "21.0", + "80.0 | 280.0", + "26.0", + "101.0", + "809.0", + "85.0", + "250.0 | 40.0", + "321.0", + "30.0 | 40.0", + "80.0 | 120.0", + "nan | 150.0", + "9.0", + "12.0 | 3.0", + "5.0 | 40.0", + "176.0", + "136.0 | 5.0", + "8.0", + "10.0 | 7.0", + "nan | 8.0", + "nan | 3.0", + "278.0", + "13.0", + "56.0", + "nan | 80.0", + "35.0 | 10.0", + "nan | nan | nan", + "650.0", + "49.4", + "20.0", + "136.0", + "20.0 | 10.0", + "295.0", + "52.0", + "265.0", + "165.0", + "70.0 | nan", + "40.4", + "200.0 | nan", + "82.0", + "nan | 6.5", + "36.0", + "6.5", + "239.0", + "14.0", + "20.0 | 2.0", + "1.5 | nan", + "nan | 100.0", + "250.0", + "2.0 | 60.0", + "21.6 | nan", + "10.0 | 10.0", + "65.0", + "9.2 | 10.0", + "16.0 | 200.0", + "150.0", + "42.4 | nan", + "100.0 | 7.0", + "7.0 | 10.0", + "47.35", + "108.0", + "9.0 | 200.0", + "14.0 | 7.0", + "110.0 | 7.0", + "811.0", + "25.0 | 15.0", + "nan | 140.0", + "7.9", + "12.0 | 7.0", + "nan | 20.0", + "nan | 150.3", + "33.1", + "15.0 | nan", + "232.0", + "2.5 | 40.0", + "5.0 | 20.0", + "10.0 | 2.0", + "1.0 | 180.0", + "33.5", + "244.0", + "50000.0", + "40.0 | 10.0", + "47.0", + "nan | 7.0", + "35.0", + "111.0", + "750.0", + "57.0", + "135.0", + "2.0 | nan", + "805.0", + "1.0 | nan", + "30.0 | 10.0", + "258.0", + "33.0", + "nan | 2.0", + "51.0", + "2.5", + "282.0", + "uknnown", + "60.0 | nan", + "807.0", + "2.0 | 20.0", + "160.0 | nan", + "183.0", + "80.0 | 350.0", + "35.2 | nan", + "20.0 | 20.0", + "49.0", + "200.0 | 10.0", + "23.0", + "59.0", + "285.0", + "90.0 | 80.0", + "25.0", + "2.8 | nan", + "7.5", + "40.0 | 350.0", + "80.0 | 20.0", + "40.0", + "98.0", + "35.0 | nan", + "nan | 150.1", + "16.0 | 250.0", + "230.0", + "75.0", + "20.0 | 5.0", + "10.0 | nan", + "37.5", + "60.0 | 5.0", + "40.0 | 200.0", + "28.0", + "480.0", + "190.0", + "50.0 | nan", + "nan | 180.0", + "nan | 300.0", + "3.0 | nan", + "8.0 | 4.0", + "0.8 | 180.0", + "15000.0", + "10.0 | 325.0", + "380.0", + "700.0", + "155.0", + "211.0", + "14.0 | 14.0", + "22.0", + "10.0 | 40.0", + "145.0", + "131.0", + "63.0", + "60.0 | 3.0", + "34.0", + "0.8", + "1500.0", + "37.0", + "60.0 | 7.0", + "280.0", + "60.0", + "5.0", + "125.0", + "nan | 30.0", + "7.0", + "804.0", + "160.0 | 8.0", + "400.0", + "143.0", + "10.2", + "25000.0", + "nan | 15.0", + "71.0", + "115.0", + "2.0", + "30.0 | 14.0", + "20.0 | nan", + "250.0 | 50.0", + "130.0 | 10.0", + "315.0", + "4.0", + "50.0 | 150.0", + "253.0", + "15.0 | 40.0", + "34.4", + "242.0", + "40.9", + "352.0", + "nan | 200.0", + "12.0", + "600.0", + "300.0 | 8.0", + "100.0", + "105.0", + "8.0 | nan", + "485.0", + "120.0 | 350.0", + "252.0", + "48.0", + "96.0", + "10.0 | 2.0 | 5.0", + "200.0", + "70.0 | 10.0", + "150.0 | nan", + "113.0", + "80.0 | 8.0", + "24.0 | 3.0", + "1.2", + "350.0", + "290.0", + "8.0 | 130.0", + "3.0", + "178.0", + "10.0 | 30.0", + "50.0 | 100.0", + "10.0 | 120.0", + "200.0 | 350.0", + "nan | nan", + "48.3", + "0.0 | 700.0", + "806.0", + "340.0", + "35.0 | 210.0", + "94.0", + "181.0", + "160.0", + "38.0", + "nan | 15000.0", + "100.0 | 8.0", + "nan | 50.0", + "nan | 14.0", + "270.0", + "170.0", + "200.0 | 0.0", + "7.0 | 115.0", + "2.5 | 10.0", + "15.0 | 45.0", + "nan | 170.0", + "55.0", + "0.4 | 180.0", + "25.71", + "7.0 | 2.0 | 10.0", + "6.0", + "80.0 | nan", + "66.52", + "20.0 | 100.0", + "7.0 | nan", + "60.0 | 1.0", + "250.0 | 60.0", + "nan | 9.0", + "200.0 | 700.0", + "17.0", + "44.0", + "5.5 | 10.0", + "293.0", + "6.0 | 200.0", + "12.0 | 200.0", + "550.0", + "15.0", + "25.0 | 250.0", + "215.0", + "300.0", + "nan | 150.2", + "245.0", + "10.0 | 5.0 | 5.0", + "185.0", + "120.0", + "180.0 | 160.0", + "450.0", + "18.0", + "130.0", + "153.0", + "39.0", + "nan | 350.0", + "110.0", + "20.0 | 15.0", + "310.0", + "23.8", + "808.0", + "11000.0", + "58.0", + "345.0", + "5.3", + "3.0 | 10.0", + "31.6", + "1000.0", + "25.0 | nan", + "27.0", + "188.0", + "66.0", + "225.0", + "261.0", + "46.2", + "235.0", + "60000.0", + "nan | 4.0", + "802.0", + "1200.0", + "70.0 | 20.0", + "390.0", + "10.0", + "43.0", + "90.0 | 7.0", + "0.2 | 180.0", + "1.8 | 180.0", + "30.0 | nan", + "432.0", + "nan | 11.0", + "173.0", + "210.0", + "397.0", + "10.0 | 240.0", + "2.5 | nan", + "800.0", + "nan | 190.0", + "198.0", + "80.0 | 7.0", + "271.0", + "32.0", + "5.0 | 10.0", + "25.0 | 20.0", + "nan | 295.0", + "163.0", + "50.2", + "24.0", + "5.2", + "40.0 | 20.0", + "72.0", + "nan | 10.0", + "99.0", + "20.0 | 60.0", + "200.0 | 5.0", + "97.0", + "196.0", + "30.0", + "nan | 22.0", + "18.3 | 10.0", + "1.6", + "2.0 | 180.0", + "470.0", + "680.0", + "333.0", + "35.0 | 348.0", + "174.0", + "158.0", + "21.5", + "24.0 | 7.0", + "67.5", + "35.0 | 475.0", + "150.0 | 9.0", + "116.0", + "140.0", + "100.0 | nan", + "80.0", + "801.0", + "nan | 5.0", + "46.0", + "320.0", + "138.0", + "nan | 400.0", + "45.6", + "10.0 | 5.0 | 2.0", + "70.0 | 7.0" + ] + } + } + ] + }, + "name": "thickness_list", + "description": "A list of thicknesses of the individual layers in the stack.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- The layers must line up with the previous filed.\n- State thicknesses in nm\n- Every layer in the stack have a thickness. If it is unknown, state this as \u2018nan\u2019\n- If there are uncertainties, state the best estimate, e.g write 100 and not 90-110\nExample\n200\nnan |250\n100 | 5 | 8", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "Li-TFSI; PEG; TBP", + "Co2f; Li-TFSI; TBP", + "FK209; Li-TFSI; Rutin-Ag-np; TBP", + "AMH", + "AgNO3", + "D102; Li-TFSI; TBP", + "Cu | Ag; Cu", + "2,6-ludidine; Li-TFSI", + "Graphene Oxide", + "TBA-PF6", + "Ag-TFSI; Li-TFSI; TNP", + "Poly(ethylene glycol) tridecyl ether", + "Tb", + "Li(CF3SO2)2N; TBP", + "Co1f; Li-TFSI; TBP", + "NDP9", + "PSS-Na", + "TBP; Triphenylamine", + "B", + "Pb", + "DMPS", + "Zn(TFSI)2", + "Diethylene glycol", + "TBP | Unknown", + "rGO-PhOHex", + "EMIC", + "Unknown | T4-TCNQ", + "Carbon-nano onions", + "Pyridine", + "Y", + "Undoped | Undoped", + "Ag-TFSI; Li-TFSI; TBP", + "Unknown | FK209; Li-TFSI; TBP", + "Ni", + "Ag", + "LiN(SO2CF3)2; t-BtPy", + "Cu-2Cl; Li-TFSI; TBP", + "Mg", + "Pd-PVP", + "AgI; Li-TFSI; TBP", + "Co-TFSI; TBP", + "FK209; Li-TFSI; TBP; POM@Cu-BTC", + "2-6-lutidin; Li-TFSI", + "Unknown | Zn", + "Cs", + "Silane", + "MoS2", + "Li-TFSI; TPB", + "NH3", + "CSA", + "Mo(tfd-COCF3)3", + "NiOx", + "Undoped | Li-TFSI; TBP", + "Unknown | Li-TSFI; TBP", + "Li-bis; Li-TFSI; TBP", + "TFMS | Li-TFSI; TBP", + "Urea", + "BF4; TBP; TEMPO", + "Chlorobenzol; Li-TFSI; TBP", + "EDTA", + "K102; Li-TFSI", + "PTAA", + "Ethanolamine", + "FK209; Li-TFSI; TBP; CuPc", + "PEO", + "Ti", + "Unknown | 2-Py; Li-TFSI", + "BuPyIm-TFSI", + "FK269; Li-TFSI; nan; TBP", + "Sr", + "FK211", + "TBP; Li-TFSI; Co(III) TFSI", + "KMnO4; Li-TFSI; TBP", + "f-SWCNTs", + "acetylacetone", + "PSSH", + "GeO2-np", + "Co(PyPyz)3[TFSI]3; Li-TFSI; TBP", + "JQ3; Li-TFSI; TBP", + "Li-TFSI; PMo11V; TBP", + "aYF4:Yb,Er@NaYF4; Li-TFSI; TBP", + "PVA", + "Li-TFSI; Polystyrene; TBP", + "LiN(CF3SO2)2N; TBP", + "Li@C60-TFSI; TBP", + "CuSCN", + "Li-TFSI; TBP | Undoped | Li-TFSI; TBP", + "Nd", + "NaLuF4:Yb,Er@NaLuF4; Li-TFSI; TBP", + "FK212", + "TiO2@MoO3-np", + "ethanolamine", + "LiNO3", + "FK209; FN-Br; TBP", + "WOx", + "CMP", + "F8BT", + "nan | DPITPFB", + "Co-TFSI; Li-TFSI; TBP", + "TMAH", + "PFI", + "MoO3-np", + "Graphene; Li-TFSI; TBP", + "Co-TFSI", + "acetylacetonate", + "Co-TPTB; Li-TFSI; TBP", + "FK209; Li-TFIS; TBP", + "Rb", + "TCNQ | Unknown", + "Li-TFSI; TBP; FK102(II)PF6", + "Li", + "Ag-TFSI; TBP", + "Ag; Li", + "Tetrafluoro-tetracyanoquinodimethane", + "Li-TFSI; TBP", + "PZ0.020", + "F6-TCNNQ", + "Er; Yb | Li-TFSI; TBP", + "FK102", + "FK209; H3BTC; Li-TFSI; TBP; nan", + "Eu", + "PFN-P2", + "Li-TFSI; TBP; TEMPO", + "D2; Li-TFSI; TBP", + "Graphdiyne", + "NaYF4:Yb,Er; Li-TFSI; TBP", + "CNT", + "Li-TFSI; Ni-nanobelts; TBP", + "Li-TFSI; TPBA", + "AgOTf-doped GO", + "Cu(bpcm)2; Li-TFSI; TBP", + "TPFB", + "PMPS", + "TS-CuPc", + "Cu | Unknown", + "Yb", + "Li-TFSI; TBP; FK102", + "F-graphene", + "SrCl2", + "FK209; Li-TFSI; TBP | N", "CZTS-np", - "1,4-di(1H-imidazol-2-yl)benzene-C6", - "PbS-QDs | Spiro-MeOTAD", - "Spiro p-xylene", - "PEDOT:PSS | 4-bromobenzenediazonium tetrafluoroborate", - "3,6-Cz-TPA", - "TPTPA | TPTPA; MoO3", - "CuInS2 | ZnS-QDs", - "V1050", - "tri-TPA", - "H6", - "CzP", - "CuPc", - "F23", - "CsBiBr3-QDs", - "NiO-np | Spiro-MeOTAD", - "Triazine-Flu", - "PMMA; rGO", - "TB4-ZnPc", - "2,7-Bis(4,4\u2032-dimethoxydiphenylamine)-9- (bis(methylsulfanyl)methylene)fluorene", - "YT2", - "PhNa-1T", - "Ag:CuO-nanofibers | PEDOT:PSS", - "Chl\u20102", - "cyclopenta[2,1-b; 3,4-b\u2032]dithiophene", - "COPV6", - "PTAA | TFPPy-ETTA", - "DBFMT", - "Pt-np", - "BDT0FMeDPA", - "PtMePy", - "H-Bi", - "3,6-di(2H-imidazol-2-ylidene)cyclohexa 1,4-diene-C6", - "Z2", - "PDPP3T", - "NiO-c | Sn2O3-qd", - "MC8-9-NPC", - "PTAA-1F", - "HTM5", - "NiO-np | TPI-2MEO", - "Spiro-MeOTAD | CANP | Spiro-MeOTAD", - "br-4C", - "Carbozole @ S12", - "IDF-DiDPA | MoO3", - "TPE-S", - "CsPbBr3-np | Spiro-MeOTAD", - "Rubrene | PEDOT:PSS", - "HA2", - "V2Ox | PEDOT:PSS", - "TP-FTzF-TP", - "SFT-TPA", - "3,6-Ben", - "NH-2,6", - "FU7", - "MoS2-QDs | Spiro-MeOTAD", - "PCDTBT", - "NiO-c | MoOx", - "Polymer2", - "NiO-c | n-Butylamine", - "MoO3 | PTAA", - "TOPO", - "HBZ-71", - "DFBT(DTS-FBTTh2)2", - "Cobalt\u2013porphyrin", - "TPA-ANR-TPA", - "Spiro-OEtTAD", - "TTE-2", - "NiO-c | NiO-nw", - "MEH-PPV-20", - "PEH-3", - "CsSnBr3-QDs", - "3,6-PCzTPA", - "NiO-c | Mercaptoethylamine chlorate", - "HPB-OMeDPA", - "PTh; Graphene", - "SCZF-5", - "Titanylphthalocyanine", - "NiMgLiO", - "BTTP", - "Spiro-TAD", - "3-Butylthiophene | Spiro-MeOTAD", - "Graphene oxide; NiO-c", - "BDT-PTZ", - "PMA", - "Cu3SbS4-np", - "Ni-acetate", - "TcTa", - "Ph-TPA-2A", - "P1", - "D205 | Spiro-MeOTAD", - "PDPPT-TT", - "ATT-ODec", - "Spiro-CPDT", - "P3HT; PFN", - "CuPcNO2-OMFPh", - "BChl-1", - "Spiro-OPrTAD", - "Al2O3-c", - "Carbon", - "PDTSTTz-4", - "Spiro-MeOTAD | MWCNTs; Spiro-MeOTAD", - "2,7-triphenylamine-carbazole", - "NiO-c | Ni", - "V859", - "DPBTD-B[BMPDP]2", - "CuSCN | rGO", - "2,2\u2032-[(4,5-Bis(1-octylnonyl)-dithieno[2,3-d:2\u20323\u2032-d]thieno[3,2-b:4,5-b\u2032]dipyrrole-2,7-diyl)bis(thien-5,5\u2032-diyl)bis(methane-1-yl-1-ylidine)]dimalononitrile", + "C3-SAM", + "D-TBP; Li-TFSI", + "WO3-np", + "Li-TFSI", + "Li-TFSI; PTAA; TBP", + "ox-Carbon-nano onions", + "Thiourea", + "4-Py", + "TBFB", + "HCl", + "Li-TFSI; SpiroTFSI2; TBP", + "BCF", + "PFPPY", + "Li-bisLi-TFSI; TBP", + "Li; Co", + "FK209; 3PO4; Li-TFSI; TBP", + "NE", + "CrO3", + "D1; Li-TFSI; TBP", + "Undoped; Unknown", + "Sc3N@C80", + "DIO", + "Co(II)(dpzpyr)2; Li-TFSI; TBP", + "NaCl", + "Glycerol", + "Benzoyl peroxide", + "Glucose; Graphene oxide", + "EDA", + "PDA", + "Butylamine", + "Co(III)(pztbpy)3; Li-TFSI; TBP", + "Unknown | TPFB", + "Li-TFSI; MoS2; TBP", + "LAD", + "I2; Li-TFSI; TBP", + "H-TFSI; TBP", + "Zn(TFSI)2; TBP", + "nan | Graphene oxide", + "Ag-np", + "Cu; Li", + "Cu(Oac)2", + "F4-TCNQ | Undoped", + "Fe", + "Cu", + "Zn", + "EHCz-2EtCz-ox", + "DOPA", + "Unknown | Ta", + "GeO2", + "WOx | Unknown", + "Undoped", + "FK209; Li-TFSI; rGO; TBP", + "BMPyTFSI", + "TPACA", + "D-sorbitol", + "FK209; Li-TFS; TBP", + "Li-TFSI; TBP; V2O5", + "FK209; Li-TFSI", "F4-TCNQ", - "PyThTPA", - "PSS-g-PANI:PFI", - "Spiro-TBB | Spiro-TBB", + "LiClO4", + "2-amylpyridine; Li-TFSI", + "Ca", + "Unknown | Undoped", + "Glucose", + "MoO3", "PDMS", - "NiO-np | TPI-6MEO", - "Lignosulfonate; PEDOT:PSS; PDA", - "TAPbI3 | Spiro-MeOTAD", - "Spiro-MeOTAD | WO3", - "DPPZnP-TSEH; PCBM-60 | BCP", - "BI25", - "PANI", - "T80P", - "CDTh 1", - "Au-np; PEDOT:PSS", - "4-(4-Phenyl-4-alfa-naphthylbutadienyl)-N,N-di(4-tolyl)-phenylamine", - "FBA3", - "Spiro-MeOTAD | WOx", - "LCS01", - "MeO-FDPA", - "TiO2-np | NiO-np", - "BTT-TPA", - "Cu0.67Cr0.33O2", - "P(VDF-TrFE) | Spiro-MeOTAD", + "Li; Mg", + "Cu9S5-np", + "DOBD", + "Polydopamine", + "Carbon-nt-G; Li-TFSI; TBP", + "FK209; Li-TFSI; TBP | Er3+; Yb3+", + "Co-LTFSI; Li-LTFSI; TBP", + "Ce", + "Diphenyliodonium-hexafluorophosphat", + "PEG", + "Li-TFSI; Li(Gd, Y)F4-Yb; TBP", + "Li-TFSI; TBA", + "Li; Pb", "NPB", - "TQ2", - "alkylammonium bromide | Spiro-MeOTAD", - "TPE-2,7-Carbazole W1", - "H64", - "BTTI-C6", - "Z30", - "CZTPA-2", - "PCBM-60 | bis-C60", - "TPASB", - "NiO-np | PTAA", - "KTM3", - "S197", - "Au-np; Graphene oxide", - "JY6", - "NiO-c | CuGaO2-c", - "TCPBr | Spiro-MeOTAD", - "PET-OMeDPA", - "AIGS-QDs", - "Polyrotaxane", - "PSQ2", - "KM05", - "CPE-K", - "NiO-np | ME3", + "Pd", + "IrCp*Cl(PyPyz)[TFSI]; Li-TFSI; TBP", + "Unknown | AgSbF6", + "F4-TCNQ | Unknown", + "Li-TFSI; TBP; FK209", + "Co3f; Li-TFSI; TBP", + "Unknown | Li", + "CuH; Li-TFSI; TBP", + "Unknown | FK269; Li-TFSI; TBP", + "Unknown", + "FK209", + "Undoped | Cu", + "ClO4-", + "FK210", + "Undoped | glacial acetic acid", + "CuI; Li-TFSI", + "EHCz-MeFl-ox", + "CI", + "FK102; Li-TFS", + "K", + "Zonyl FS-300", + "GSL", + "Cu | Cu", + "Cu-2Cl; Li-TFSI", + "FK209; LiNO3", + "Graphene", + "F2-TCNQ | Unknown", + "FK209; Li-TFSI; TBP", + "EDT", + "Co; Li-TFSI; TBP", + "Mo(tfd-CO2Me)3", + "FK209; Zn(TFSI)2; TBP", + "EHCz-3EtCz-ox", + "Li-TFSI; TBP | D-sorbitol", + "Ba", + "Carbon-nt; Li-TFSI; TBP", + "Co(III)(pztbpy)3; LiNTf2; TBP", + "4-isopropyl-4\u2032-methyldiphenyliodonium tetrakis(pentafluorophenyl)borate", + "Au-np; Li-TFSI; TBP", + "JQ1; Li-TFSI; TBP", + "La", + "In10-2,4,6; Li-TFSI; TBP", + "FK102; Li-TFSI; TBP", + "CuPc; Li-TFSI; TBP", + "2-Py", + "Li-TFSI; O2; TBP", + "n-Butylamine", + "sGO", + "nan | Li-TFSI; TBP", + "CuI", + "Li-TFSI; TBP; TeCA", + "PMMA", + "P3HT | Unknown", + "Fe(ttb)(TFSI)3; Li-TFSI; TBP", + "Co-TFSI; Li-TFSI", + "N", + "Lithium acetate", + "TAPC", + "Unknown | MoO3", + "Co", + "Li-TFSI; TBP | Undoped", + "TPE-NM3; Mo(tfdCOCF3)3", + "JQ2; Li-TFSI; TBP", + "TBP", + "Unknown | TBP", + "FK102; TBP", + "Unknown | Et4N-TFSI; H-TFSI", + "D4; Li-TFSI; TBP", + "Unknown | JQ1; Li-TFSI; TBP", + "FK209; Li-TFSI; TBP | Undoped", + "CuAlO2", + "FK209; H2SO4; Li-TFSI; TBP", + "Li-TFSI; TBP | Undoped | Unknown", + "rGO", + "FK269; Li-TFSI; TBP", + "Unknown | VOx", + "HA", + "Unknown | Unknown | TBP", + "CF3PA; FK209; Li-TFSI; TBP", + "Li-TFSI; TBP | Cu2O", + "O2", + "Li-TFSI; Si NPs", + "FN-Br", + "CsI", + "TBA-BF4", + "N2", + "Ethylene glycol | Unknown", + "PolyTPD", + "Triethanolamine", + "Unknown | FK209; Li-TSFI; TBP", + "Carbon-QDs", + "Alanine", + "2-Py; Li-TFSI", + "Spiro-(TFSI)2; TBP", + "AuAg-np", + "Au-np", + "Li-TFSI; TBP; acetonitrile", + "Br-BA", + "NPh2O2C2H6", + "Unknown | FK102; Li-TFSI; TBP", + "DPITPFB", + "Cu-Bix; Li-TFSI; TBP", + "Amonia | Unknown", + "SrCl2 | Undoped", + "Li-TFSI; TBP | Li-TFSI; TBP", + "VOx", + "Spiro-(TFSI)2", + "Mo(tfd-COCF3)3; TBP", + "H2O2", + "Triton-X", + "Oleylamine | Li-TFSI; TBP", + "FK209; TBP", + "Sodium Citrate", + "PS", + "CTAB", + "RbCl", + "[In2(phen)3Cl6]CH3CN; Li-TFSI; TBP", + "BCF; Li-TFSI; TBP", + "Ox-SWCNTs", + "PCBTBT", + "SiO-np", + "Carbon-nt@G; Li-TFSI; TBP", + "Cu9S5@SiO2-np", + "FK209; Li-TFSI; Pb(NO3)2; TBP", + "PCDSA", + "Li-TFSI; TBP; MWCNTs", + "Graphydine-QDs; Li-TFSI; TBP; nan", + "Sb", + "FK102; Li-TFSI", + "Li-TFSI; TBP | Unknown", + "Li-TFSI; P4VP; TBP", + "Cu(TFSI)2", + "TEMPOL", + "FK209; Li-TFSI; Pb-MOFs; TBP", + "D3; Li-TFSI; TBP", + "PZ0.025", + "Li-TFSI; TBP; V2O5 | Undoped", + "Unknown | TBA", + "AcOH; FK209; Li-TFSI; TBP", + "F6-TCNNQ | Unknown", + "Cu-2Cl", + "DIO; PCDTBT", + "I2", + "DMC; F4-TCNQ", + "TPFPB", + "DPPS", + "PZ0.030", + "NaLuF4:Yb,Er; Li-TFSI; TBP", + "DMSO", + "FeCl3; Li-TFSI; TBP", + "D-TBP", + "Unknown | Cu", + "NiPcS4", + "rGO-PhBiTh", + "ETH44-ox", + "Unknown | TBP | Unknown", + "Unknown | Li-TFSI; TBP", + "GD-QDs; Li-TFSI; TBP", + "TBA-TFSI" + ] + } + } + ] + }, + "name": "additives_compounds", + "description": "List of the dopants and additives that are in each layer of the HTL-stack\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- The layers must line up with the previous fields.\n- If several dopants/additives, e.g. A and B, are present in one layer, list the dopants/additives in alphabetic order and separate them with semicolons, as in (A; B)\n- If no dopants/additives, state that as \u201cUndoped\u201d\n- If the doping situation is unknown, stat that as\u2018Unknown\u2019\nExample\nLi-TFSI; TBP\nFK209; Li-TFSI; TBP\nF4-TCNQ\nUndoped\nCu | Ag; Cu", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 3, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "0.1 %; nan", + "2 mg/ml; 520 mg/ml; 0.036 vol%", + "520 mg/ml; 0.036 mL", + "9 uL(520mg/mLACN); 15 uL", + "6.76 mg/ml; 0.5 vol%", + "1 %; nan", + "1.79 vol%; 2.5 vol%", + "0.90 vol%; 2.07 vol%; 3.60 vol%", + "11.4 mg/ml; 36 \u00b5l/ml", + "35 uL(260mg/1mLACN); 30 uL/mL", + "35 uL(260mg/mLACN); 30 uL", + "3 %", + "nan | 2 uL/mL", + "2.85 vol%; 1.75 vol% | nan", + "520 mg/ml; 2.88 vol%", + "11.7 mg/ml; 36 \u00b5l/ml", + "520 mg/ml; 0.0338 vol%", + "0.064 M; 0.198 M", + "0.6 %", + "8.7 mg/ml; 8.7 mg/ml; 2.88 vol%", + "0.064; 0.198 M; nan", + "50 vol%", + "nan | 1 vol%", + "0.29 vol%; 1.75 vol%; 2.88 vol%", + "0.2", + "17.5 uL(300mg/1mLACN); 28.8 uL", + "3 mol%; 50 mol%; 330 mol%", + "9.1 mg/ml; 30 \u00b5l/ml", + "67 vol%", + "30 mM; 30 mM", + "0.6 vol%", + "5 mg/ml; 520 mg/ml; 0.036 vol%", + "8 %", + "0.03 M; 0.5 M; 3.3 M", + "7 %", + "10 %; nan", + "32 mM; 28.5 \u00b5l/ml", + "33 vol%", + "0.029 vol%; 28.3 mg/ml; 0.0288 vol%", + "1.75 vol%; 2.85 vol%", + "6.24 mg/ml; 8 \u00b5l/ml", + "6 mol%", + "0.6 mg/ml", + "30 mM; 200 mM", + "0.32 mg/ml", + "10.4 mg/ml; 0.03 ml/ml", + "0.1", + "0.5 %; nan", + "nan; nan; 1 mol%", + "520 mg/ml; 0.036 vol%", + "9.1 mg/ml; 0.029 ml/ml", + "9.1 mg/ml; 28.8 \u00b5l/ml", + "1.7 vol%; 2.0 vol%", + "nan; nan; 2 mol%", + "5.2 mg/ml; 0.02 ml/ml", + "15.08 mg/ml; 9.1 mg/ml; 28.8 \u00b5l/ml", + "2.88 vol%", + "5 wt%; 1 wt%", + "0.32 mg/ml | nan", + "0.5 vol%; 6.76 mg/ml; 0.5 vol%", + "1.5 %", + "0.035 M; 0.231 M", + "nan; 0.8 wt%; nan", + "5.3 mol%", + "30 mol%; 80 mol%", + "7 %; nan", + "2 vol%; nan; nan", + "10 mol%", + "9.1 mg/ml; 0.028 ml/ml", + "54 uL(10mg/mLACN); 11.2 uL", + "1 mg/ml; 520 mg/ml; 0.036 vol%", + "0.05 M; 0.5 M; 3.3 M", + "4 wt%", + "9.1 mg/ml; 0.03 ml/ml", + "17.5 uL(520mg/mLACN); 28.8 uL", + "17.5 uL(520mg/mLACN); 29 uL", + "0.05", + "0.5 mg/ml", + "nan; 0.6 wt%; nan", + "45 uL(2mg/mLACN); 10.2 uL", + "12 \u00b5l/ml", + "2 wt%", + "30 mM.200mM", + "0.075", + "nan; nan; nan", + "0.05 wt%", + "40 uL(40mg/mLACN); 23 uL(520mg/mLACN); 40 uL", + "520 mg/ml; 2.85 vol%", + "nan; 0.4 wt%; nan", + "0.025", + "300 mg/ml; 520 mg/ml; 0.028 vol%", + "2 mM; 2.88 vol%", + "0.15", + "0.015", + "500 mg/ml; 0.03 vol%", + "1 vol%; nan; nan", + "0.01 %; nan; nan", + "2.45 mM; 40 mM; 270 mM", + "nan | 1.75 vol%; 2.88 vol%", + "520 mg/ml; 0.0288 vol%", + "40 mol%", + "7.8 mol%", + "6 wt%", + "3.38 mg/ml; 22.5 \u00b5l/ml", + "7.5 mg/ml; 7.65 mg/ml; 0.01 ml/ml", + "10 mg/ml", + "10 wt%", + "32 mM; 195 mM", + "520 mg/ml; 334 mol%", + "3.0 vol%; 3.6 vol%", + "1.8 mM; 30 mM; 200 mM", + "2.88 vol%; 1.75 vol%", + "12.3 mol%", + "0.01 %; nan", + "17.5 uL(520mg/mlACN); 28.8 uL", + "20 mol%", + "50 %; nan", + "170 mg/ml; nan", + "5.6 mg/ml; 30 mg/ml", + "35 mM; 210 mM", + "0.4 %", + "4 mM; 30 mM; 200 mM | nan", + "0.3 wt%", + "0.007", + "18 uL(1MACN); 29 uL(1MCB)", + "2.2 mg/ml", + "12 %", + "1.44 vol%; 2.88 vol%", + "0.5 mg/ml; 0.5 vol%", + "8.7 mg/ml; 9.8 mg/ml; 0.029 ml/ml", + "11 %", + "1 %", + "10 uL(300mg/mLACN); 17.5 uL(520mg/mLACN); 28.8 uL", + "4 %", + "1.5 mM; 14 mM; 56 mM", + "4 mM; 30 mM; 200 mM", + "3.0 wt%", + "29 uL(300mg/mL); 18 uL(520mg/mLACN); 29 uL", + "0.0018", + "9 mM; 55 mM", + "11.4 mg/ml; 0.036 ml/ml", + "nan | nan", + "20 uL(517mg/1mLACN); 36 uL; 8 uL(375mg/mLACN)", + "6 %", + "5.4 mg/ml; 9.36 mg/ml; 0.028 ml/ml", + "18 uL(520mg/1mLACN); 30 uL; 29 uL(300mg/MLACN)", + "11.34 mg/ml; 0.0176 ml/ml", + "2.0 mg/ml", + "0.0056 M; 0.031 M; 0.19 M", + "30 mol%", + "520 mg/ml; 0.285 vol%", + "20 uL(517mg/mLACN); 36 uL; 8 uL(376mg/mLACN)", + "nan; nan; 4 mol%", + "0.44 M", + "170 mg/ml; 0.5 vol%", + "31.5 uL(300mg/mLACN); 17.5 uL(520mg/mL/ACN); 28.8 uL", + "8.7 mg/m; 9.1 mg/ml; 0.029 ml/ml", + "7.5 uL(170mg/mLACN); 4 uL", + "8.7 mg/ml; 9.1 mg/ml; 28.8 \u00b5l/ml", + "9.1 mg/ml; 28.8 \u00b5l/ml | 9.1 mg/ml; 28.8 \u00b5l/ml", + "1.6 vol%; 2.1 vol%; 3.6 vol%", + "0.0175 mL/mL; 0.0285 mL/mL", + "10.1 mol%", + "0.1 wt%", + "22.5 uL; 15 uL", + "0.5 vol%; nan; nan", + "9 %", + "0.0175 vol%; 0.0288 vol%", + "nan | 17.5 uL(520mg/mLACN); 28.8 uL", + "7.65 mg/ml; 1 vol%", + "1.75 vol%; 3.1 vol%", + "35 uL(520mg/mLACN); 60 uL", + "1.7 mg/ml; 7 \u00b5l/ml", + "0.0035", + "170 mg/ml; 0.004 vol%", + "2 %", + "1.75 vol%; 2.88 vol%", + "0.82 mg/ml; 2 \u00b5l/ml", + "3 %; nan", + "9.1 mg/ml; 0.0288 ml/ml", + "0.15 wt%", + "23 uL(90.9mg/mLACN); 39 uL", + "nan; nan; 3 mol%", + "2.5 %", + "17.5 uL(520mg/mLACN); 28.5 uL", + "18.2 mg/ml; 8 \u00b5l/ml", + "1.0 wt%", + "nan; 0.2 wt%; nan", + "nan | 2 vol%", + "520 mg/ml; 1.4 vol%", + "5 mol%", + "0.5 wt%", + "0.019 M; 0.007 M; 0.2 wt% | nan", + "8.8 mg/ml; 0.028 vol%; 0.035 vol%", + "nan | 20 vol%", + "30.2 uL(1756mg/mLACN); 9.7 uL", + "1.5 wt%", + "11.44 mg/ml; 36 \u00b5l/ml", + "0.5 mg/ml; 520 mg/ml; 0.036 vol%", + "1 wt%", + "70 uL(170mg/1mLACN); 20 uL", + "5.0 mg/ml", + "10 uL(520mg/mLACN); 28 uL; 35 uL(18.8mg/50mLACN)", + "17.5 uL(520mg/mLACN); 28.8 uK", + "1.5 mg/ml", + "30 uL(270mg/mLACN); 35 uL", + "3 wt%", + "5 at%", + "5 %", + "10 uL(170mg/mLACN); 5 uL", + "nan | 5 vol%", + "9.14 uL(0.25MACN); 21.02 uL(1.8MACN); 35.65 uL", + "5 wt%", + "8.67 mg/ml; 9.1 mg/ml; 28.8 \u00b5l/ml", + "6.8 vol%; 3.4 vol%", + "0.0052", + "0.03; 3.3; 0.5", + "12 mol%", + "5 %; nan", + "0.8 %", + "nan | 10 vol%", + "520 mg/ml" + ] + } + } + ] + }, + "name": "additives_concentrations", + "description": "The concentration of the dopants/additives.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- If more than one dopant/additive in the layer, e.g. A and B, separate the concentration for each dopant/additive with semicolons, as in (A; B)\n- For each dopant/additive in the layer, state the concentration.\n- The order of the dopants/additives must be the same as in the previous filed.\n- For layers with no dopants/additives, state this as \u2018none\u2019\n- When concentrations are unknown, state that as \u2018nan\u2019\n- Concentrations can be stated in different units suited for different situations. Therefore, specify the unit used.\n- The preferred way to state the concentration of a dopant/additive is to refer to the amount in the final product, i.e. the material in the layer. When possible, use on the preferred units\no wt%, mol%, vol%, ppt, ppm, ppb\n- When the concentration of the dopant/additive in the final product is unknown, but where the concentration of the dopant/additive in the solution is known, state that concentration instead. When possible, use on the preferred units\no M, mM, molal; g/ml, mg/ml, \u00b5g/ml\n- For values with uncertainties, state the best estimate, e.g write 4 wt% and not 3-5 wt%.\nExample\n4 wt%\n5 vol%; nan | 10 mg/ml\n0.3 mol% | 2 mol%; 0.2 wt% | 0.3 M", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 4, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Spin-coating | Spin-coating >> Spin-coating", + "CBD | Dipp-coating", + "Spin-coating >> Spin-coating", + "Roller coating", + "Spin-coating >> Unknown", + "Spray-coating | Spray-coating", + "Electropolymerisation", + "Spin-coating | Spin-coating", + "Spray-pyrolys | Screen printing", + "Slot-die coating", + "Brush painting", + "Lamination | Spin-coating | Spin-coating", + "Spin-coating | Evaporation", + "Evaporation | Spin-coating", + "Ultrasonic spray", + "Sputtering", + "Spin-coating >> MeOH wash", + "Sputtering | Unknown", + "Spin-coating | Spray-coating | Spin-coating", + "Evaporation | Co-evaporation", + "CBD | Spin-coating", + "Doctor blading | Spin-coating", + "Dropcasting | Spin-coating", + "Spin-coating | Sputtering", + "Spin-coating | Unknown", + "Electrodeposition | Spin-coating", + "Evaporation | ALD", + "Magnetron sputtering >> Gas reaction", + "SILAR", + "Inkjet printing", + "Electrospinning | Spin-coating", + "Evaporation >> Oxidation", + "RF sputtering", + "Spin-coating >> Spin-coating >> Spin-coating", + "Spin-coating | Spin-coating >> Spin-coating >> Spin-coating", + "Evaoration | Spin-coating", + "Spin-coating | Lamination", + "Pulsed laser deposition | Sputtering", + "Evaporation | Evaporation", + "Spin-coating | RF sputtering", + "Electropolymerization", + "Spin-coating | Spin-coating | Lamination", + "Air brush spray", + "Spin-coating | Spray-coating", + "Spin-coating | Doctor blading", + "Sputtering | Sputtering", + "Sprinkling", + "Spray-coating | Spin-coating", + "Spin-coating | Spin-coating >> Spin-coating >> Spin-coating >> Spin-coating", + "Spin-coating | Spin-coating >> Lamination", + "Spin-coating | Spray-pyrolys", + "Spin-coating | Dipp-coating", + "Hydrothermal | Spin-coating", + "Spin-coating >> Blowing hot air", + "Lamination | Spin-coating", + "Spin-coating | Spin-coating | Spin-coating", + "Sputtering | Sputtering | Spin-coating", + "Magnetron sputtering | Spin-coating", + "Lamination", + "Evaporation >> Gas reaction", + "E-beam evaporation | Spin-coating", + "Evaporation | Evaporation | Evaporation", + "PVD", + "Press-transfer | Spin-coating | Spin-coating", + "Dipp-coating >> Spin-drying | Spin-coating", + "Dipp-coating", + "Cryo-controlled quasi-congealing spin-coating", + "Slot-die coating | Evaporation", + "Evaporation", + "Electrospraying", + "Spray-pyrolys", + "Unknown", + "CBD", + "DC Magnetron Sputtering | Spin-coating", + "Drop-infiltration", + "ALD | Spin-coating", + "CVD", + "Screen printing", + "Slot-die coating | Spin-coating", + "Centrifuge-casting", + "Doctor blading", + "Spin-coating | E-beam evaporation", + "Magnetron sputtering", + "Substrate vibration assisted dropcasting", + "Dropcasting | Lamination", + "Sputtering | Spin-coating", + "DC Sputtering >> Oxidation", + "E-beam evaporation", + "Spin-coating | Spin-coating >> Spin-coating >> Spin-coating >> Spin-coating >> Spin-coating", + "Unknown | Spin-coating", + "Spin-coating | Dropcasting", + "Spray-pyrolys | Dipp-coating", + "Dropcasting", + "Spin-coating >> Spin-coating >> Spin-coating >> Spin-coating", + "Pulsed laser deposition", + "DC Magnetron Sputtering", + "Evaporation >> Gas-reaction", + "Blow-drying", + "Hydrothermal", + "Electrodeposition", + "E-beam evaporation | E-beam evaporation", + "Spray-pyrolys | Spin-coating", + "Dipp-coating | Spin-coating", + "Evaporation >> Polymerisation", + "RF magnetron sputtering", + "Dipp-coating | Evaporation", + "Slot-die coating | Slot-die coating", + "Anti-solvent quenching | Spin-coating", + "Gelation", + "Spin-coating", + "Spin-coating | ALD", + "Doctor blading | Doctor blading", + "Spray-coating", + "Spin-coating | Evaporation | Evaporation", + "ALD", + "Co-evaporation | Evaporation", + "Spin-coating | Drop-infiltration", + "Reactive magnetron sputtering", + "Electrospraying | Spin-coating", + "Hydrolys | Drop-infiltration" + ] + } + } + ] + }, + "name": "deposition_procedure", + "description": "The deposition procedures for the HTL-stack.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate them by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- Thermal annealing is generally not considered as an individual reaction step. The philosophy behind this is that every deposition step has a thermal history, which is specified in a separate filed. In exceptional cases with thermal annealing procedures clearly disconnected from other procedures, state \u2018Thermal annealing\u2019 as a separate reaction step.\n- Please read the instructions under \u201cPerovskite. Deposition. Procedure\u201d for descriptions and distinctions between common deposition procedures and how they should be labelled for consistency in the database.\nExample\nSpin-coating\nSpin-coating | Spin-coating\nEvaporation\nSpray-pyrolys", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 5, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Solid", + "Liquid", + "Liquid | Liquid", + "Unknown", + "Liquid | Liquid | Liquid", + "Liquid | Liquid >> Liquid >> Liquid >> Liquid >> Liquid", + "Liquid >> Liquid", + "Gas", + "Gas >> Gas", + "Liquid | Liquid >> Liquid >> Liquid >> Liquid", + "Liquid | Liquid >> Liquid >> Liquid", + "Gas | Liquid", + "Gas | Gas", + "Liquid | Gas" + ] + } + } + ] + }, + "name": "deposition_aggregation_state_of_reactants", + "description": "The physical state of the reactants.\n- The three basic categories are Solid/Liquid/Gas\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the aggregation state associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- Most cases are clear cut, e.g. spin-coating involves species in solution and evaporation involves species in gas phase. For less clear-cut cases, consider where the reaction really is happening as in:\no For a spray-coating procedure, it is droplets of liquid that enters the substrate (thus a liquid phase reaction)\no For sputtering and thermal evaporation, it is species in gas phase that reaches the substrate (thus a gas phase reaction)\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nLiquid\nGas | Liquid\nLiquid | Liquid >> Liquid", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 6, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "N2 | Vacuum", + "Vacuum >> Air", + "N2", + "Vacuum | Ar", + "Unknown", + "Air | N2", + "N2 >> methanol", + "N2 >> N2", + "N2 | N2", + "Ar | Ar", + "Air | Vacuum", + "Ambient", + "Air | Air", + "Dry air", + "Vacuum | Vacuum", + "Air", + "Vacuum", + "Ar; O2", + "Ar" + ] + } + } + ] + }, + "name": "deposition_synthesis_atmosphere", + "description": "The synthesis atmosphere.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the atmospheres associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- If the synthesis atmosphere is a mixture of different gases, e.g. A and B, list the gases in alphabetic order and separate them with semicolons, as in (A; B)\n- \u201cDry air\u201d represent air with low relative humidity but where the relative humidity is not known\n- \u201cAmbient\u201d represent air where the relative humidity is not known. For ambient conditions where the relative humidity is known, state this as \u201cAir\u201d\n- \u201cVacuum\u201d (of unspecified pressure) is for this purpose considered as an atmospheric gas\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nN2\nVacuum | N2\nAir | Ar; H2O >> Ar", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 7, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "0.006 Torr", + "0.002 Pa", + "0.0001 Pa | nan", + "1 atm | 0.00004 Torr", + "0.000001 mbar | 0.000001 mbar", + "1 atm | 0.00003 mbar", + "1 atm | 1 atm", + "6 Pa", + "1 atm | 0.0001 Pa", + "1 atm | 0.000001 atm", + "1 atm | 0.000002 Torr", + "0.0001 Pa", + "1 atm", + "4 Pa", + "1 atm | 0.000001 Torr", + " N2", + "2 Pa" + ] + } + } + ] + }, + "name": "deposition_synthesis_atmosphere_pressure_total", + "description": "The total gas pressure during each reaction step\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the pressures associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- Pressures can be stated in different units suited for different situations. Therefore, specify the unit. The preferred units are:\no atm, bar, mbar, mmHg, Pa, torr, psi\n- If a pressure is not known, stat that as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 100 pa and not 80-120 pa.\nExample\n1 atm\n0.002 torr | 10000 Pa\nnan >> 1 atm | 1 atm", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 8, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "1 atm | 0.00004 Torr", + "0.000001 mbar | 0.000001 mbar", + "1 atm | 0.00003 mbar", + "0.003 Torr; 0.003 Torr", + "1 atm | 1 atm", + "1 atm | 0.000001 atm", + "1 atm | 0.000002 Torr", + "1 atm", + "1 atn", + "1 atm | 0.000001 Torr", + "1 atm | 0.0001 Pa" + ] + } + } + ] + }, + "name": "deposition_synthesis_atmosphere_pressure_partial", + "description": "The partial pressures for the gases present during each reaction step.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the pressures associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- If the synthesis atmosphere is a mixture of different gases, e.g. A and B, list the partial pressures and separate them with semicolons, as in (A; B). The list of partial pressures must line up with the gases they describe.\n- In cases where no gas mixtures are used, this field will be the same as the previous filed.\nExample\n1 atm\n0.002 torr | 10000 Pa\nnan >> 0.99 atm; 0.01 atm | 1 atm", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 9, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "30 | 30", + "0.9", + "25", + "15", + "30.0", + "90.0", + "20.0", + "30", + "0.35", + "30 | 0", + "50.0", + "65.0", + "10.0", + "80.0", + "0 | 0" + ] + } + } + ] + }, + "name": "deposition_synthesis_atmosphere_relative_humidity", + "description": "The relative humidity during each deposition step\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the relative humidity associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns\n- If the relative humidity for a step is not known, stat that as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 35 and not 30-40.\nExample\n35\n0 | 20\nnan >> 25 | 0", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 10, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Ethanol; Water", + "Chloroform", + "Ethylene glycol", + "2-methoxyethanol", + "Etyl cellulose; Terpineol", + "Diethyl sulfide", + "Dichlorobenzene", + "Unknown | Chlorobenzene", + "acetonitrile; Chlorobenzene", + "2-methoxyethanol; monoethanolamine", + "IPA | Chlorobenzene", "Unknown", - "TPL", - "pTPA-DBTP", - "OAI | DM", - "NPB; PTAA", - "PEDOT:PSS | Al2O3-mp", - "PO-Spiro-OMeTAD", - "Carbon-nt | Spiro-MeOTAD", - "CON-16 | PEDOT:PSS", - "LHTM-1", - "CuGaO2", - "COPV3", - "PFO", - "CIGS", - "NiMgO-c", - "P3TAA", - "Carbon-nt", - "PffBT4T-2OD | WOx", - "C12H10B2O4 | Spiro-MeOTAD", - "NTPA", - "PBT", - "Li4Ti5O12 | Spiro-MeOTAD", - "2,2\u2032-[(4,5-Bis(1-octylnonyl)-dithieno[2,3-d:2\u20323\u2032-d]thieno[3,2-b:4,5-b\u2032]dipyrrole-2,7-diyl)bis(2,3-dihydrothieno[3,4-b][1,4]dioxin-5,5\u2032-diyl)bis(methane-1-yl-1-ylidine)]dimalononitrile", - "CuP", - "YN3", - "ZnChl-4", - "Carbon-np; PEDOT:PSS", - "2PACz", - "Spiro-MeOTAD | PbS", - "BTT-1", - "BTF4", - "PTAA; Spiro-MeOTAD", - "Y2", - "DNA", - "NiO-c | SDBS", - "PTZ2", - "NP2", - "IEICO; PBDTTT-E-T | MoO3", - "OIPC-I", - "2-F-br-4C", - "T1", - "B3", - "B63", - "COPV7", - "PCDTBT1", - "PBDTT-SeDPP; PCBM-70", - "Graphene oxide", - "DMZ", - "PMMA", - "Yih-2", - "ZnNc", - "PEDOT:PSS | PFN-P1", - "TTE-1", - "PbS", - "DH-MeO-FDPA", - "TPP-SMeTAD", - "DTS", - "SGT-409", - "S,N-heteropentacene", - "Poly-N-vinylcarbazole | SP-12", - "Spiro-MeOTAD | SWCNTs", - "1F-SAM | PEDOT:PSS", - "CPEPh-Na", - "KR216", - "TaTm | MoO3", - "SFXDAnCBZ", - "Carbon-nt | PMMA", - "PTAA | Spiro-MeOTAD", - "CuCrO2", - "NiO-c | N749", - "NiO-c | PhNa-1T", - "TQ1", - "PbS-QDs", - "DM", - "DIPO-Ph4", - "DTh101", - "PPyra-XA", - "IDF-TeDPA | MoO3", - "NiPc | V2O5", - "HTM1", - "NiO-c | NiO-mp", - "CuSeCN", - "PTQ10 | PTAA", - "Th101", - "PolyTPD", - "PBDTT-SeDPP", - "EDOT-MPH", - "2,7-Cbz-EDOT", - "DR3TBDTT", - "V1221", - "BTT-3", - "P3HT; SWCNTs | Spiro-MeOTAD", - "Ni | NiMgO | PVP", - "2F-SAM | PEDOT:PSS", - "BDT:TT", - "AQ | Spiro-MeOTAD", - "Poly(1,4-phenylenevinylene)", - "PCPDTBT", - "PEDOT:PSS | Al2O3-np", - "2,7-Pyr", - "JK-216D", - "BTSe-1", - "S:DIB", - "KR321", - "Spiro-TTB", - "PEDOT:P(SS-co-TFPMA)", - "X62", - "(BMPA-EDOT)3-TPA", - "TPA-BPFN-TPA", - "CoTh-TTPA", - "THY-4", - "Fu-OMeTPA", - "PEDOT:PSS-NH2-OH", - "VOx", - "TPADPP-1", - "M6", - "WO3-nw@PEDOT | PEDOT:PSS", - "Al2O3-c | PEDOT:PSS", - "HfO2 | Acetonitrile; I2; LiI; TBP", - "T60P", - "Graphene oxide | PFNBr", - "Spiro-MeOTAD | rGO", - "Al2O3-mp | MeO-DATPA", - "NiO-c | BBA", - "YT1", - "BAI | DM", - "3F-SAM | PEDOT:PSS", - "P3HT | Al2O3-mp", - "SY1", - "Triazine-Th-OMeTPA", - "Co3O4", - "SGT-411", - "NiO-c | FDA", - "BDT-POZ", - "J61-ITIC", - "SWCNTs | Graphene oxide", - "Spiro-MeOTAD | MoO3", - "CuInSe2-QDss", - "P3OT", - "T(EDOT-TPA)2", - "H5", - "apv-T", - "Graphene | PEDOT:PSS", - "FB-OMeTPA", - "TT80", - "BDT-4MeOTPA", - "CGS", - "2,4-spiro", - "TSHBC", - "TCP-OC8", - "YC04", - "SGT-404", - "P1Z1", - "Nafion; PEDOT:PSS", - "T5H-OMeDPA", - "(n-BuO)4ZnPc", - "SBFCz2", - "Polymer1", - "M3; PCBM-60", - "CzPF", - "PEDOT:PSS | SrGO", - "n-octylammonium iodide | Spiro-mF", - "CuSCN-nw", - "Py | Spiro-MeOTAD", - "PTAA | MoS2", - "B186", - "P3HT; SWCNTs | PEDOT:PSS", - "Al2O3 | Spiro-MeOTAD", - "ZnO-nw | PEDOT:PSS", - "NiO-c | Mg(AcO)2", - "HTM", - "Au-nw | Spiro-MeOTAD", - "NiO | PS", - "NiO-c | EPA", - "MeO-TPD", - "PTB7-Th", - "CuI | PbPc", - "Cu0.2Cr0.8O2", - "1\u2010adamantylamine | Spiro-MeOTAD", - "NiO-c | DEA", - "Imidazolium iodide | P3HT", - "Graphene; TSHBC @ 5:1", - "TFM", - "YC01", - "PEDOT:PSS | NPB", - "BTPA-6", - "S,N-Heteroacene 2", - "Ag-np; PEDOT:PSS", - "COTT-1 | COTT-2", - "S7", - "WO3-nw", - "PdMe2Pc", - "PDCBT | WOx", - "PPDT2FBT", - "SWCNTs | Spiro-MeOTAD", - "CAS", - "Graphene; P3HT", - "Pentacene", - "Q219", - "Polythiophene", - "S,N-Heteroacene 1", - "CT3", - "MnS", - "PTAA | LiF", - "NiCoO", - "CuSCN | Spiro-MeOTAD", - "PDI", - "Tetrakis(4-methoxyphenyl)spiro[cyclopenta[1,2-b:5,4-b']dipyridine-5,9'-fluorene]-2',7'-diamine", - "V1207", - "Dispiro-OMeTAD", - "Au-np | Spiro-MeOTAD", - "PEDOT", - "SnS", - "NiO-np | Choline chloride; Glycerol", - "BEDCE | Spiro-MeOTAD", - "PZn-TPA-O", - "PTAA | PFN-Br", - "PP-Spiro", - "CuO2", - "MoO3 | TaTm", - "Phenethylamine | Spiro-MeOTAD", - "CdSe-QDs | Spiro-MeOTAD", - "PEDOT:PSS | MoO3", - "p-PFP-O | PTAA", - "PBTI-C", - "PTAA; TPFB", - "F6-TCNNQ; TaTm", - "NiO-c | SY1", - "TZ2", - "mDPA-DBTP", - "Montmorillonite | Spiro-MeOTAD", - "PCA-2", - "InP-np | Spiro-MeOTAD", - "TPA", - "H2", - "IEICO | MoO3", - "CsCuBr3-QDs", - "PolyTDP", - "NiPc-Cou", - "IDT1", - "TBC-1", - "PCPDTBT | PEDOT:PSS", - "Q197", - "P3HT | PEDOT:PSS", - "F16CuPc | Spiro-MeOTAD", - "TPB-4-MOTPA", - "TATSFHBP", - "ZnPc-p-ZnPc 1", - "HL-2", - "Tetracene | Spiro-MeOTAD", - "XOP", - "2,7-PCzTPA", - "SY4", - "TPDI", - "C60", - "BTTI-C12", - "Q205", - "YK1", - "PTB7:Th", - "ZnChl-1", - "NiO-c | PTAA", - "iDM1", - "THY-2", - "mp-SFX-3PA", - "CZ-STA; CZ-TA", - "AS37", - "TaTm", - "CuInS2 | Al2O3-np", - "P3HT | WOx", - "Azu-Oct", - "Imidazonium iodide | Spiro-MeOTAD", - "PEDOT; Spiro-MeOTAD", - "Al2O3-np | TPA-ZnPc", - "P3HT; SWCNTs-PhOMe", - "ADAHI", - "JW8", - "COPV5", - "NiO-c | PEAI", - "PTAA-2F", - "Cu2CoSn4-np", - "PBDT(2F)T", - "PEDOT:PSS | Black phosphorous QDs", - "PEDOT:PSS | VOx", - "BTT-2", - "Pentafluorobenzenethiol | Spiro-MeOTAD", - "TFB | Al2O3-np", - "CMO", - "NiCo2O4-np | Spiro-MeOTAD", - "TBC-2", - "1,3,6-tris-(N,N-di-p-methoxyphenylamine)pyrene", - "CuSCN | Graphene", - "C12-silane-SAM | Spiro-MeOTAD", - "Theophylline | PTAA", - "ZnPy", - "MPA-BTTI", - "Z1013", - "Ni | Au", - "P8TTT", - "CuSCN", - "P3OFHT", - "NH-2,7", - "NiO-c | CuGaO2", - "NiO-c | PMMA", - "PANI:PSS", - "P3HT | MoO3", - "CuAlO2 | PEDOT:PSS", - "CuSCN | Ta:Wox-np", - "No HTM", - "TPD-4EtCz", - "L-H", - "PT-DC", - "PDQT", - "DNA-CTMA", - "2EGO-PPV", - "Co0.695Cu0.305O", - "PDMS | CuSCN", - "PB2T-O", - "NiO-c", - "GO-nanoribbons", - "CMP", - "Azu-Me", - "Ag-nw; PEDOT:PSS", - "Ppy", - "YC06", - "TPD-4MeTPA", - "LGC-D013", - "NiO-np | KCl", - "M108", - "SiTP-OMeTPA", - "TBC-3", - "Cz-Pyr", - "PEDOT:PSS | PEDOT:PSS", - "10-butyl-3,7-diphenylphenoxazine", - "HTM-P1", - "apv-EC", - "Grafted rGO; Polyacrylonitrile", - "4C", - "CuI; CuSCN", - "P3HT; SWCNTs", - "JK-217D", - "NiO", - "ATT-OBu", - "DFH", - "NiO-c | SY2", - "HfO2 | CuI", - "DFTAB", - "0F", - "TAT-t BuSty", - "NiO-c | PTZ-1", - "DOR3T-TBDT", - "SWCNTs | PEDOT:PSS", - "PABA | Spiro-MeOTAD", - "BTBDT", - "PTAA | PMMA", - "PTZ1", - "M3", - "Cu2ZnSn4-np", - "KR374", - "P4", - "SGT-421", - "Al2O3-mp | Spiro-MeOTAD", - "V841", - "CuCrO2-np", - "BTX-OMeTAD", - "N1,N1',N1'',N1'''-(ethene-1,1,2,2-tetrayltetrakis(benzene-4,1-diyl))tetrakis(N1-(4-(dimethylamino)phenyl)-N4,N4-dimethylbenzene-1,4-diamine)", - "H-Ca", - "PTAA | Car-ETTA", - "TPA-BPV-TPA", - "MWCNTs; Spiro-MeOTAD", - "M107", - "PEDOT:PSS | Rubrene", - "H111", - "OTPA-ZnPc", - "PTPD | PFN", - "Azu-Bu", - "PEDOT:PSS | VB-DAAF", - "TRUX-E-T", - "DR3T", - "PEDOT:GSL", - "Fused-F (Tris[[4-[3,3'-dihexylsilylene-2,2'-bithiophene]-7-[5\u2032\u2032-n-hexyl-(2,2\u2032; 5\u2032,2\u2032\u2032-terthiophen\ne)-5-yl]-benzo[c]-[1,2,5]thiadiazole]-2,6,10-yl]-4,4,8,8,12,12-hexamethyl-4H,8H,12\nHbenzo[1,9]quinolizino [3,4,5,6,7,-defg]acridine )", - "PVDF-HFP | Spiro-MeOTAD", - "PEAI | PTAA", - "TS-CuPc", - "CsOAc | Spiro-MeOTAD", - "Ph-TPA-8A", - "ATT-OMe", - "PEDOT:PSS | PCPDTBT", - "PFN; PTPD", - "HPDI", - "PNP-BC", - "Oleylamine | Spiro-MeOTAD", - "CuOx", - "Z26", - "TPB(2-TPTZ)", - "P3CT-CH3NH2", - "CuMe2Pc", - "G2", - "KM07", - "JW6", - "MoO3 | TPA-2,7-FLTPA-TPA", - "HS-Ph-NO2 | Spiro-MeOTAD", - "DM1P", - "N2,N2,N12,N12-Tetrakis(4-methoxyphenyl)-9-methyl-9H-naphtho[2,1-c]carbazole-2,12-diamine", - "r-GO-NH", - "Ph-inv-OMeTPA", - "KR145", - "ZnP", - "3,6-triphenylamine-carbazole", - "Co-Porphyrin", - "D102", - "H-PheDOT", - "P-OR", - "Z33", - "Polypseudorotaxane", - "TDAB", - "Z29", - "TPA\u2010ANT\u2010TPA", - "SYN1", - "G1", - "HfO2 | Spiro-MeOTAD", - "V2O5 | PEDOT:PSS", - "CrO3", - "BV-FNPD", - "V1036:C4", - "Si-QDs | Spiro-MeOTAD", - "pDPP5T-2 | WOx", - "(2Z,2'Z)-2,2'-(((2,4-dimethylphenyl) azanediyl) bis([1,1'-biphenyl]-4',4-diyl)) bis(3-(4-(diphenylamino) phenyl) acrylonitrile", - "EH44", - "H2Pc-1", - "DPIE", - "DAI | DM", - "AZ1", - "D103", - "N-CuMe2Pc; P3HT", - "Cu2NiSn4-np", - "TT-3,6-TPA", - "Asy-PBTBDT", - "PTAA | PPNBr", - "PTA", - "CuPrPc", - "HA1", - "TPAC2M", - "M:OO", - "Cu:Ni acetate", - "YN1", - "ACE-QA-ACE", - "Spiro-OiPrTAD", - "PDCBT | Ta-Wox", - "tetra{4-[N,N-(4,4'-dimethoxydiphenylamino)]phenyl}ethene", - "Q222", - "DPP-Ome", + "Chlorobenzene | none", + "Ethanol | TMAOH solution", + "Chlorobenzene | Unknown", + "Toluene | Methanol", + "none", + "2-methoxyethanol; ethanolamine | none", + "acetonitrile", + "Methanol", + "IPA; Water", + "Water | Chlorobenzene", + "Water; Methanol", + "IPA | Diethyl sulfide", + "Toluene | DMF", + "DMF", + "Water | 2-metoxyethanol", + "1,2-dichlorobenzene", + "Chlorobenzene >> 2-Butanol", + "IPA | IPA", + "IPA | Unknown", + "Chlorobenzene", + "Chlorobenzene; acetonitrile", + "Hexanethiol", + "Ethyl acetate", + "2-methoxyethanol; ethanolamine", + "Water; IPA", + "DMF | Chlorobenzene", + "Toluene", + "Water", + "Chlorobenzene | Chlorobenzene", + "Ethanol", + "none | 2-metoxyethanol", + "Ethylene glycol | Methanol", + "Water | IPA", + "none | Chlorobenzene", + "Water | Water", + "IPA", + "none | none", + "Hexane | Unknown", + "Chlorobenzene | IPA" + ] + } + } + ] + }, + "name": "deposition_solvents", + "description": "The solvents used in each deposition procedure for each layer in the stack\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvents associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solvent is a mixture of different solvents, e.g. A and B, list the solvents in alphabetic order and separate them with semicolons, as in (A; B)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- For non-liquid processes with no solvents, state the solvent as \u2018none\u2019\n- If the solvent is not known, state this as \u2018Unknown\u2019\n- Use common abbreviations when appropriate but spell it out when risk for confusion\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nChlorobenzene\nAcetonitile; Ethanol | Chlorobenzene\nnone >> Ethanol; Methanol; H2O | DMF; DMSO", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 11, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "1; 8", + "0.1; 51", + "1 >> 1", + "1; 0.006 | nan", + "1 | nan", + "nan | 1", + "1", + "1; 0.006", + "5; 1", + "1 | 1", + "1; 0.012", + "1; 1", + "1; 0.1", + "1; 3" + ] + } + } + ] + }, + "name": "deposition_solvents_mixing_ratios", + "description": "The mixing ratios for mixed solvents\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvent mixing ratios associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- For pure solvents, state the mixing ratio as 1\n- For non-solvent processes, state the mixing ratio as 1\n- For unknown mixing ratios, state the mixing ratio as \u2018nan\u2019\n- For solvent mixtures, i.e. A and B, state the mixing ratios by using semicolons, as in (VA; VB)\n- The preferred metrics is the volume ratios. If that is not available, mass or mol ratios can be used instead, but it the analysis the mixing ratios will be assumed to be based on volumes.\nExample\n1\n4; 1 | 1\n1 >> 5; 2; 0.3 | 2; 1", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 12, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Unknown | Sigma Aldrich", + "Fisher Chemical | ACROS Organic", + "Unknown", + "Fisher Scientific", + "Heraeus", + "Guangzhou Seaside Technology", + "Nacalai Tesque; Wako Pure Chemical", + "Aladdin", + "Unknown; Sigma Aldrich", + "J&K", + "Sigma Aldrich; Sigma Aldrich", + "Sigma Aldrich", + "Xi'an Polymer Light Technology; Xi'an Polymer Light Technology" + ] + } + } + ] + }, + "name": "deposition_solvents_supplier", + "description": "The suppliers of all the solvents.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvent suppliers associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solvent is a mixture of different solvents, e.g. A and B, list the associated suppliers and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- For non-liquid processes with no solvents, mark the supplier as \u2018none\u2019\n- If the supplier for a solvent is unknown, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nSigma Aldrich\nSigma Aldrich; Fisher | Acros\nnone >> Sigma Aldrich; Sigma Aldrich | Unknown", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 13, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "anhydrous; 99%", + "Pro analysis", + "Unknown", + "Puris; Puris", + "0.998", + "99.8%; 99.8%", + "Puris" + ] + } + } + ] + }, + "name": "deposition_solvents_purity", + "description": "The purity of the solvents used.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvent purities associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solvent is a mixture of different solvents, e.g. A and B, list the associated purities and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- Use standard nomenclature for purities, e.g. pro analysis, puris, extra dry, etc.\n- For non-liquid processes with no solvents, state the purity as \u2018none\u2019\n- If the purity for a solvent is not known, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nPro analysis\nPuris; Puris| Tecnical\nnone >> Pro analysis; Pro analysis | Unknown", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 14, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "NiPc | Vanadium(V)\noxytriisopropoxide; IPA", + "FK209; Li-TFSI; CS03; TBP", + "Spiro-oF; Li-TFSI; Co-TFSI; TBP", + "FK209; Li-TFSI; CS01; TBP", + "(NiAc)4H2O", + "Spiro-MeOTAD; nan", + "Ni(Ac)2\u00b74H2O; SrCl2", "P3CT-Na", - "PFN; TT", "Spiro-MeOTAD | MoOx", - "CdSe-Qd | CsPbI3-QD | Spiro-MeOTAD", - "CoPcNO2-OPh", - "CW4", - "Selenium", - "3,6 \u00b4-BCz-OMeTAD", - "SAF\u2010OMe", - "2TPA-2-DP", - "LiF | PEDOT:PSS", - "NiO-c | PTZ-2", - "DM1", - "DPIO", - "PST1", - "PBDTP-DTDPP", - "BTPA-4", - "CsSnI2.95F0.05", - "P3TAA-co-P3HT", - "IDTC6-TPA", - "PBDTTT-C", - "2TPA-1-DP", - "NiO-c | Al2O3-mp; Au@SnO2-nw", - "4,4'-(5,10,11-Trihexyl-10,11-dihydro-5H-thieno[2\u2032,3':4,5]pyrrolo [3,2-g]thieno[3,2-b][1,2,3]triazolo[4,5-e]indole-2,8-diyl)bis(N,N-bis(4- methoxyphenyl)aniline)", - "FT55", - "BAI | Spiro-MeOTAD", - "Poly TPD-NPD", - "pentaerythritol tetrakis(3-mercaptopropionate) | Spiro-MeOTAD", - "C6Br | Spiro-MeOTAD", - "Spiro-MeOTAD | TS-CuPc", - "TT-2,5-TPA", - "DBC-OMeDPA", - "DPA-QA-DPA", - "PTB7-TH", - "Co(II)P", - "P1C1", - "MTDATA", - "CW3", - "V1225", - "FBA1", + "Clevios PVP Al 4083; Black phosphorous QDs", + "Li-TFSI; Spiro-MeOTAD", + "Ni; O2", + "NiO-np", + "Spiro-MeOTAD; Co(III)(pztbpy)3; Li-TFSI; TBP", + "P3HT; rGO-PhBiTh", + "NiO-np | PAS", + "FK209; Li-TFSI; LCS01; TBP", + "NaYF4:Yb,Er; Li-TFSI; TBP; PTAA", + "CuPc | PEI", + "Li-TFSI; H-Z3; TBP", + "FK209; Li-TFSI; H-Lin; TBP", + "Oleylamine | Li-TFSI; Spiro-MeOTAD; TBP", + "TRUX-E-T; Li-TFSI; TBP", + "PEDOT:PSS | TPA-NPA-TPA", + "P3HT; rGO-PhOHex", + "PTAA; Li-TFSI; TBP", + "aYF4:Yb,Er@NaYF4; Li-TFSI; TBP; PTAA", + "PTB7-Th | MoOx", + "PEDOT:PSS | MoO3", + "DIPO-Ph4", + "Nickel acetate tetrahydrate; ethanolamine", + "Spiro-MeOTAD; Li; Co", + "NiO Target", + "P3CT", + "Li-TFSI; NiPc; TBP", + "S; Oleylamine; 1-octadecane; diphenylphosphine; Indium acetate; CuI", + "Spiro-MeOTAD; Li-TFSI; TBP | MoO3", + "IEICO | MoO3", + "MoO3", + "FK209; Li-TFSI; B186; TBP", + "P3HT", + "H-Lin", + "PBTTTV-h", + "CuSO4; Lactic Acid; NaOH", + "Clevios PVP Al 4083", + "rGO-4FPH | Spiro-MeOTAD; Li-TFSI; TBP", + "Rubrene", + "M2; Li-TFSI; TBP", + "CF-BTz-ThR", + "Al(C2H5)3 | nan", + "MEH-PPV", + "Graphene oxide | Carbon dots", + "NiOx-np solution", + "Li-TFSI; H-Z2; TBP", + "Li-TFSI; Spiro-MeOTAD; TBP; Co-TFSI", + "Nickel acetate hexahydrate; ethanolamine | ethylphosphonic acid", + "NaLuF4:Yb,Er@NaLuF4; Li-TFSI; TBP; PTAA", + "Clevios PVP Al 4083 | PEI", "Spiro-MeOTAD", - "DTS(IIThThHEX)2", - "KR378", - "P3HT | WO3", - "EtheneTTPA", - "M105", - "CT4", - "VB-MeO-FDPA", - "THY-3", - "NiPc", - "MoS2 | Spiro-MeOTAD", - "pBBTa\u2010BDT1", - "Py-OMe", - "Cu:NiO-np", - "HTM-M1", - "CuSCN-2D", - "TT0", - "P3CT-Na | PASP", - "Spiro-MeOTAD | Cu2O", - "Graphene | AuCl3 | PEDOT:PSS", - "PTAA | CuSCN", - "rGO | PTAA", - "J2", - "DTPC8-ThDTPA", - "CF-Sp-BTh", + "Nickel Nitrate hexahydrate", + "CZ-TA; Li-TFSI; TBP", + "FK102; Li-TFSI; Spiro-MeOTAD; TBP", + "M1; Li-TFSI; TBP", + "Spiro-MeOTAD; Li-TFSI; TBP", + "Copper thiocyanate", + "Graphene oxide | PFNBr", + "Graphene oxide | PTAA", + "NiO-np | PTAA", + "CZTS-np", + "Li-TFSI; H-Z1; TBP", + "Spiro-MeOTAD; Li-TFSI; TBP | MoOx", + "Co(PyPz)3(TFSI)3; Li-TFSI; Spiro-MeOTAD; TBP", + "Li-TFSI; MWCNTs; Spiro-MeOTAD; TBP", + "PTAA | PFN", + "Nickel Chloride hexahydrate; HNO3", + "C102; FK209; Li-TFSI; TBP", + "Nickel acetate hexahydrate; ethanolamine", + "InP-np | Li-TFSI; Spiro-MeOTAD; TBP", + "C13-FAS | Spiro-MeOTAD", + "Li-TFSI; PTAA; TBP", "TaTm | F6-TCNNQ; TaTm", - "PEDOT:PSS | Au@SiO2-nw", - "NiCo2O4-np", - "FH-0", - "FEH", - "IrTiOx-c", - "m-MTDATA", - "TPA-TPM", - "Spiro-OBuTAD", - "MoOx | Spiro-MeOTAD", - "Co(II)P; Co(III)P", - "H2Pc", - "Co(III)P", - "NiO-c | UiO-66", - "PQT-12", - "N,N-bis-[7-(4,4\u2032-dimethoxydiphenylamine)-9- (bis(methylsulfanyl)methylene)fluoren-2-yl]-4-methoxyaniline", - "CJ-02", - "M111", - "PVK", - "C202", - "MoO3 | TPA-3,6-FLTPA-TPA", - "P(BDTT-tPPD)", - "PTB7 | WOx", - "DIB; SeS2", - "Polyacrylonitrile", - "rGO | CuSCN", - "TT1", - "PTAA | NiO-c", - "MEH; PPV", - "PTAA | CuGaO2-mp", - "SnS-np | NiO-np", - "PEDOT:PSS | PFN", - "CuPc | PTAA", - "PBTTT-14", - "V1160", - "B2", - "PTB8", - "CuI", - "5,5',5''-(5,5',5''-(nitrilotris(benzene-4,1-diyl))tris(furan-5,2-diyl))tris(2-octylisoindoline-1,3-dione", - "1,6-di{3-[2-(4- methylphenyl)vinyl]carbazol-9-yl}hexane", - "RCP", - "PCBM-60 | BCP", - "Azu-EH", - "CuPs-TIPS", - "InP-np", - "Hexamethyl-substituted subphthalocyanine", - "Poly[4,8-bis(2-(4-(2-ethylhexyloxy)3-fluorophenyl)-5-thienyl)benzo[1,2-b:4,5-b'] dithiophenealt-1,3-bis(4-octylthien-2-yl)-5-(2-ethylhexyl)thieno[3,4-c]pyrrole-4,6-dione", - "HfO2 | Acetonitrile; I2; LiI; PMII; Propylene glycol; TBP", - "BPZTPA", - "PDO2", - "CrOx", - "Z35", - "F6-TCNNQ; TaTm | TaTm", - "ZnPor", - "TPA-NADT-TPA", - "Black phosphorous nanosheets | Spiro-MeOTAD", - "SP-02", - "PCBM-60 | Carbon", - "Spiro-N", - "PEDOT:PSS | TPD", - "3-Ethylthiophene | Spiro-MeOTAD", - "Spiro-E", - "CuAlO2", - "PdMePy", - "NDT", - "HS-Ph-OCH3 | Spiro-MeOTAD", - "TPE-2,7-Carbazole W2", - "CsSnBrI2-QDs", - "PEDOT:PSS | VB-MeO-FDPA", - "TTA2", - "TPA2C", - "BDT-2D", - "Vox", - "YC-2", - "Spiro-s", - "PII2T8TSi", - "PEDOT:PSS | CuSCN", - "SrCl2 | Spiro-MeOTAD", - "V852", - "2H-MoS2 | Spiro-MeOTAD", - "V866", - "ZnPc-DPP-ZnPc", - "PEA2PBI4", - "PTPAANT", - "FA-CN", - "Diazo-OMeTPA", - "EVA; SWCNTs | Spiro-MeOTAD", - "H3", - "Red Phosphorous-QDs", - "3EGO-PPV", - "Pyrmidine | Spiro-MeOTAD", - "WY-2", - "NiO-c | MOF-808", - "FDT", - "POSS-NH2 | Spiro-MeOTAD", - "MEH-PPV; PFN", - "dly-1", - "Spiro-MeOTAD | VOx", - "COPV2", - "ODA-FeS2-np", - "PEDOT:PSS | Pyrene", - "F8T2e", - "P3HT; PCBM-60", - "SM", - "N2',N2',N7',N7'-tetrakis(4-methoxyphenyl)spiro[fluorene-9,9'-xanthene]-2',7'-diamine", - "PPV", - "1-Donecyl Mercaptan | Spiro-MeOTAD", - "X25", - "PEDOT:PSS | Ca", - "F22", - "DPPS | Spiro-MeOTAD", - "TPA-MeOPh", - "BT41", - "NiO-nanowalls | Diethanolamine", - "S101", - "P3TI", - "3-Methylthiophene | Spiro-MeOTAD", - "H-Di", - "X26", - "NiO-np | Br-BPA-SAM", - "COPV1", - "MeO-BPZTPA", - "PEDOT:PSS | PTMA-BP", - "C5PcH2 | MoOx", - "BL07", - "Porphyrin", - "JW7", - "PEDOT:PSS | Na3C6H5O7", - "tetra-substituted azulene", - "X18", - "P-R", - "BDT-C1", - "Phosphor-QDs", - "PCBZANT", - "TPD-4MeOTPA", - "MoO3 | TPBi | TaTm", - "Bifluo-OMeTAD | MoO3", - "ACE\u2010ANT\u2010ACE", - "Cu2ZnSnS4", - "CIGGSe-np", - "DMF; I2; PVA; TBAI", - "PAH 1", - "NiO-c | Al2O3-mp; Au@SnO2-np", - "DORDTS\u2013TFBT", - "PEDOT:PSS | Graphene oxide; PEG", - "PEDOT:PSS | Graphene oxide", - "TPA-TVT-TPA", - "I2-electrolyte", - "PDBD-T", - "WO3 | Spiro-MeOTAD", - "TPA-AZO", - "YT4", - "Cs-oleate | Spiro-MeOTAD", - "TPDCN", - "YD2-o-C8 | Spiro-MeOTAD", - "Porphyrin-H2", - "PEDOT:PSS | PolyTPD", - "Th-OMeTPA", - "PDCBT | Ta:WOx", - "MoO3 | PEDOT:PSS", - "PVAc", - "Ph-TPM", - "CuPc | Spiro-MeOTAD", - "CuEtPc", - "TTA1", - "3,6-Pyr", - "CuGaO2-np | CuSCN", - "TPFPB | Spiro-MeOTAD", - "PhCz-4MeOTPA", - "EtheneDTPA", - "CDTh-EtHex 2", - "PZn-2FTPA", - "X22", - "NiO-c | PS", - "2F", - "PS | Spiro-MeOTAD", - "C101", - "NiO-nanowalls" + "FK209; iDM1; Li-TFSI; TBP", + "P3HT; Li-TFSI; TBP", + "H-Star", + "polyacrylonitrile; rGO", + "Ni(CH3COO)2\u00b74H2O", + "Vanadium(V)\noxytriisopropoxide; IPA", + "PTAA", + "PBDT(T)(2F)T", + "CZTS-np; hexanethiol", + "FK209; Li-TFSI; Spiro-MeOTAD; TBP", + "PBDT(2F)T", + "PEDOT:PSS; PEG", + "Li-TFSI; Spiro-MeOTAD; TBP", + "Spiro-MeOTAD; Li-TFSI; Co-TFSI; TBP", + "FK209; Li-TFSI; H-Star; TBP", + "FK209; Li-TFSI; Spiro-MeOTAD; TBP | Vanadium(V)\noxytriisopropoxide; IPA", + "PBDT(2H)T", + "Ni(Ac)2\u00b74H2O; SrCl2 | nan", + "2PACz", + "B186", + "Li-TFSI; Spiro-MeOTAD; TBP; V2O3 | Clevios PVP Al 4083", + "Li-TFSI; P3HT; TBP", + "Carbon Paste", + "DTP-C6Th", + "Graphene oxide | PTFTS", + "Spiro-MeOTAD; TBP", + "IEICO; PBDTTT-E-T | MoO3", + "MeO-2PACz", + "nickel acetate tetrahydrate", + "PTAA >> Sb 2D-nanosheets", + "TPE-S", + "Rubrene | PEDOT:PSS", + "nickel acetylacetonate", + "HA2", + "Cu >> iodine", + "Nickel acetate tetrahydrate", + "Spiro-MeOTAD; Co(III)(pztbpy)3; LiNTf2; TBP", + "PEDOT:PSS", + "Graphene oxide", + "Li-TFSI; BTPA-3; TBP", + "HA1", + "Nickel acetate hexahydrate; ethanolamine | 4-Bromobenzoic acid", + "Li-TFSI; TBP; Spiro-MeOTAD; acetonitrile", + "Li-TFSI; Spiro-MeOTAD; TBP | Li-TFSI; MWCNTs; Spiro-MeOTAD; TBP", + "Cu-np; NiOx-np", + "C101; FK209; Li-TFSI; TBP", + "InP-np", + "Oleylamine", + "FK209; Li-TFSI; EP02; TBP", + "PBDTTT-E-T | MoO3", + "nickel (II) acetate tetrahydrate", + "ethanolamine; nickel acetate tetrahydrate", + "Nickel acetate; ethylene glycol; ethylenediamine", + "pentaerythritol tetrakis(3-mercaptopropionate) | Spiro-MeOTAD; Li-TFSI; TBP", + "PTAA | PFN-P2" + ] + } + } + ] + }, + "name": "deposition_reaction_solutions_compounds", + "description": "The non-solvent precursor chemicals used in each reaction step\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the non-solvent chemicals associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several compounds, e.g. A and B, list the associated compounds in alphabetic order and separate them with semicolons, as in (A; B)\n- Note that also dopants/additives should be included\n- When several precursor solutions are made and mixed before the reaction step, it is the properties of the final mixture used in the reaction we here describe.\n- The number and order of layers and reaction steps must line up with the previous columns.\n- For gas phase reactions, state the reaction gases as if they were in solution.\n- For solid-state reactions, state the compounds as if they were in solution.\n- For reaction steps involving only pure solvents, state this as \u2018none\u2019\n- If the compounds for a deposition step is not known, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nFK209; Li-TFSI; Spiro-MeOTAD; TBP\nNiO-np\nPTAA | CuSCN", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 15, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Heraeus | synthesized", + "Energy Chemical; Sigma Aldrich; Sigma Aldrich; Sigma Aldrich", + "Xi\u2019an p-OLED; Sigma Adrich; Xi\u2019an p-OLED; Sigma Adrich", + "Sigma Aldrich", + "Sigma Aldrich; Lumtec; Sigma Aldrich", + "Xi\u2019an p-OLED", + "Unknown", + "Lumtec, Sigma Aldrich, Lumtec, Sigma Aldrich", + "Reike Metals", + "Unknown >> 0.1 mg/ml", + "Clevios PVP", + "Xi'an Polymer Light Technology; Xi'an Polymer Light Technology; Xi'an Polymer Light Technology", + "Sigma Adrich; Shenzhen Feiming Science and Technology; Sigma Adrich; Dyesol", + "Dysole; Sigma Aldrich; Dyenamo; Sigma Aldrich", + "Unknown; Borun Chemical; Unknown", + "Clevious", + "Dyesol; Sigma Aldrich; Shenzen Feiminf Science and Technology; Sigma Aldrich", + "Sigma Aldrich; Merck; Sigma Aldrich", + "Sigma Aldrich; Sigma Aldrich; Dalian HeptaChroma SolarTech Co. Ltd.; Sigma Aldrich", + "Advanced Election Technology Co., Ltd; Unknown", + "Tokyo Chemical Industry; Wako Pure Chemical; Wako Pure Chemical", + "Sigma Adrich; Sigma Adrich; Sigma Adrich; Acros Organics", + "Aladdin; Aladdin; Aladdin", + "Alfa-Aesar", + "Unknown | Sigma Aldrich; Sigma Aldrich; Sigma Aldrich", + "Heraeus", + "1-Material", + "Kojundo Chemical Lab. Co.", + "1-Material, NICT-7", + "Sigma Adrich; Merck; Sigma Adrich", + "Showa Chemical | ACROS Organic", + "Dyesol; Sigma Aldrich; Shenzhen Feiming Science and Technology; Sigma Aldrich", + "Synthesized", + "Guangzhou Seaside Technology", + "Sigma Adrich; Sigma Adrich; Sigma Adrich", + "Dyesol; Aladdin; Merck; Aladdin", + "Tokyo Chemical Industry", + "Aladdin | Aladdin", + "Sigma Aldrich; Sigma Aldrich; Sigma Aldrich", + "Borun Chemicals; Sigma Aldrich; Unknown", + "Baytron", + "Clevios Heraeus", + "Ossila", + "Xi\u2019an p-OLED | Aladdin", + "1-Material >> synthesized", + "Synthesized; Synthesized", + "Shanghai Aladdin Bio-Chem. Technology; Shanghai Aladdin Bio-Chem. Technology; Shanghai Aladdin Bio-Chem. Technology; Sigma Aldrich; Sigma Aldrich", + "Sinopharm Chemical Reagent Co. Ltd.,", + "J&K Scientific; Merck; Sigma Aldrich", + "Derthon; Sigma Aldrich; Sigma Aldrich", + "Novaled GmbH | Novaled GmbH", + "1-Material; Unknown; Nichem Chemicals; 1-Material" + ] + } + } + ] + }, + "name": "deposition_reaction_solutions_compounds_supplier", + "description": "The suppliers of the non-solvent chemicals.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the non-solvent chemical suppliers associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several dissolved compounds, e.g. A and B, list the associated suppliers and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- For gas phase reactions, state the suppliers for the gases or the targets/evaporation sources that are evaporated/sputtered/etc.\n- For solid state reactions, state the suppliers for the compounds in the same way.\n- For reaction steps involving only pure solvents, state the supplier as \u2018none\u2019 (as that that is entered in a separate filed)\n- For chemicals that are lab made, state that as \u201cLab made\u201d or \u201cLab made (name of lab)\u201d\n- If the supplier for a compound is unknown, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nDysole; Sigma Aldrich; Dyenamo; Sigma Aldrich\nSigma Aldrich; Fisher | Acros\nLab made (EPFL) | Sigma Aldrich >> none", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 16, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Puris; Puris; Puris; Pro analysis", + "Unknown", + "Unknown; puris; puris", + "99%; 99%", + "Unknown; 96%; Unknown; 99%", + "Puris; Puris; Technical", + "99.5; 99.8; Unknown", + "99.95%; Unknown; 96%", + "0.98", + "Puris; Puris; Puris", + "99.9; Pro analysis; Tecnical; Puris", + "Unknown; Pro analysis; Puris; Puris", + "0.999" + ] + } + } + ] + }, + "name": "deposition_reaction_solutions_compounds_purity", + "description": "The purity of the non-solvent chemicals.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the compound purities associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several dissolved compounds, i.e. A and B, list the associated purities and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- Use standard nomenclature for purities, e.g. pro analysis, puris, extra dry, etc.\n- For reaction steps involving only pure solvents, state this as \u2018none\u2019 (as that is stated in another field)\n- If the purity for a compound is not known, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nPro analysis\n99.999; Puris| Tecnical\nUnknown >> Pro analysis; Pro analysis | none", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 17, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "35 mg/ml", + "1.75 vol%; 80 mg/ml; 2.85 vol%", + "1.55 wt%", + "0.15 M; 1 M", + "72 mg/ml; 1.7 vol%; 2.0 vol%", + "30 mM; 50 mg/ml; 200 mM", + "72.3 mg/ml; 2.85 vol%; 1.75 vol% | nan", + "20 mg/ml | 1 mg/ml", + "4 mM; 30 mM; 80 mg/ml; 200 mM", + "5.4 mg/ml; 9.36 mg/ml; 72.3 mg/ml; 0.028 ml/ml", + "30 mol%; 8 wt%; 80 mol%", + "0.14 wt%; 2.24 wt%", + "51.43 mg/ml; 1.79 vol%; 2.5 vol%", + "1 M; 6 mL; 6 mL; 6 mL; 1 mL; 0.3 mmol; 0.3 mmol", + "72.3 mg/ml; 6.76 mg/ml; 0.5 vol%", + "9.1 mg/ml; 90 mg/ml; 0.029 ml/ml", + "0.2 M", + "72 mg/ml; 91 mg/ml; 2.85 vol% | nan", + "1 mg/ml", + "0.82 mg/ml; 10 mg/ml; 2 \u00b5l/ml", + "15 mg/ml; 1.5 mg/ml", + "9.1 mg/ml; 80 mg/ml; 0.0288 ml/ml", + "18.2 mg/ml; 72.3 mg/ml; 8 \u00b5l/ml", + "5 mg/ml", + "25 mg/ml; 0.32 mg/ml | 2 mg/ml", + "9.1 mg/ml; 72.3 mg/ml; 0.029 ml/ml", + "1 mg/ml; 520 mg/ml; 0.036 vol%; 36 mg/ml", + "0.15 M; nan", + "9.1 mg/ml; 1 wt%; 72.3 mg/ml; 28.8 \u00b5l/ml", + "90 mg/ml", + "5.6 mg/ml; 56 mg/ml; 30 mg/ml", + "90 mg/ml; 7.65 mg/ml; 1 vol%", + "90 mg/ml; 0.0225 mL; 0.036 mL | nan", + "nan | 72.3 mg/ml; 1.75 vol%; 2.88 vol%", + "2 wt% | nan", + "70 mg/ml", + "72.3 mg/ml; 2.88 vol%; 1.75 vol%", + "520 mg/ml; 72.3 mg/ml; 0.0288 vol%", + "9.1 mg/ml; 70 mg/ml; 28.8 \u00b5l/ml", + "72.3 mg/ml; 520 mg/ml; 1", + "182 mg/ml; 6 vol%", + "11.44 mg/ml; 90 mg/ml; 36 \u00b5l/ml", + "2 mg/ml | nan", + "1.3 mg/ml", + "1 mg/ml | 0.05 mg/ml", + "17.5 mM", + "4 mg/ml", + "30 mg/ml; nan", + "40 mg/ml; 10 mg/ml", + "8.7 mg/ml; 9.1 mg/ml; 72.3 mg/ml; 0.029 ml/ml", + "1.5 wt% | 2 mg/ml >> 2 mg/ml >> 2 mg/ml >> 2 mg/ml", + "25 mg/ml; 0.32 mg/ml", + "11.4 mg/ml; 90 mg/ml; 36 \u00b5l/ml", + "520 mg/ml; 72.3 mg/ml; 2.88 vol%", + "20 mg/ml", + "5.2 mg/ml; 52.8 mg/ml; 0.02 ml/ml", + "70 mM", + "3.83 mg/ml; 50 mg/ml; 22.5 \u00b5l/ml", + "0.5 vol%; 6.76 mg/ml; 30 mg/ml; 0.5 vol%", + "12 \u00b5l/ml; 0.2 M", + "73 mg/ml", + "500 mg/ml; 80 mg/ml; 0.03 vol%", + "60 mg/ml", + "9.1 mg/ml; 72.3 mg/ml; 28.8 \u00b5l/ml | 9.1 mg/ml; 0.5 wt%; 72.3 mg/ml; 28.8 \u00b5l/ml", + "32 mM; 75 mg/ml; 28.5 \u00b5l/ml", + "8 mg/ml", + "9.1 mg/ml; 72.3 mg/ml; 0.0288 ml/ml", + "8.7 mg/ml; 9.8 mg/ml; 72.3 mg/ml; 0.029 ml/ml", + "30 mg/ml | 0.005 vol%; 0.995 vol%", + "0.5 vol%; 6.76 mg/ml; 10 mg/ml; 0.5 vol%", + "12.5 mg/ml | nan", + "73.2 mg/ml | 5 mg/ml", + "9.1 mg/ml; 2 wt%; 72.3 mg/ml; 28.8 \u00b5l/ml", + "1 mg/ml | 0.1 mg/ml", + "5 mg/ml >> nan", + "11.34 mg/ml; 72.3 mg/ml; 0.0176 ml/ml", + "1.5 wt% | 2 mg/ml >> 2 mg/ml >> 2 mg/ml", + "2.5 wt%", + "1.2 mg/ml", + "nan; nan; 70 mg/ml; nan", + "63 mg/ml; 170 mg/ml; 2 vol%", + "80 mg/ml; 1.45 mg/ml; 2.85 mg/ml", + "15 mg/ml; 0.75 vol%; 0.75 vol%", + "72 mg/ml; 1.44 vol%; 2.88 vol%", + "9.1 mg/ml; 80 mg/ml; 0.03 ml/ml", + "1.7 mg/ml; 10 mg/ml; 7 \u00b5l/ml", + "63 mg/ml", + "0.035 M; 0.07 M; 0.231 M", + "10 mg/ml", + "2 mg/ml; 520 mg/ml; 0.036 vol%; 36 mg/ml", + "0.3 M; 2 M; nan", + "12.5 mg/ml; 10 mg/ml | nan", + "0.2 M | 0.03 M", + "30 mM; 85 mg/ml; 30 mM", + "182 mg/ml; 6 vol% | 0.5 mg/ml", + "9.1 mg/ml; 80 mg/ml; 0.028 ml/ml", + "78 mM", + "8.8 mg/ml; 0.028 vol%; 70 mg/ml; 0.035 vol%", + "0.058 M; 0.0056 M; 0.031 M; 0.19 M", + "nan; 90 mg/ml; nan", + "9.1 mg/ml; 60 mM; 0.029 ml/ml", + "9.1 mg/ml; 72.3 mg/ml; 28.8 \u00b5l/ml", + "520 mg/ml; 82 mg/ml; 1.4 vol%", + "15 mg/ml; 0.5 mg/ml; 0.5 vol%", + "80 mg/ml; 5 mg/ml", + "25 mg/ml", + "0.2 M | 0.01 M", + "3 mol%; 50 mol%; 70 mM; 330 mol%", + "0.2 M | 0.05 M", + "10 mg/ml; 170 mg/ml; 0.004 vol%", + "35 mM", + "8.75 mM", + "200 mg/ml", + "72.3 mg/ml; 2.88 vol%", + "1.8 mM; 30 mM; 60 mM; 200 mM", + "72.5 mg/ml", + "1.5 mg/ml | 0.5 mg/ml", + "6.43 mg/ml", + "80 mg/ml", + "7.5 mg/ml; 7.65 mg/ml; 90 mg/ml; 0.01 ml/ml", + "0.064 M; 0.17 M; 0.198 M", + "8.7 mg/ml; 9.1 mg/ml; 72 mg/ml; 28.8 \u00b5l/ml", + "0.1 M", + "0.0175 vol%; 72.3 mg/ml; 0.0288 vol%", + "2 mg/ml", + "8.7 mg/ml; 8.7 mg/ml; 72.3 mg/ml; 2.88 vol%", + "9.1 mg/ml; 72.3 mg/ml; 30 \u00b5l/ml", + "0.3 mg/ml", + "1.5 wt% | 2 mg/ml >> 2 mg/ml >> 2 mg/ml >> 2 mg/ml >> 2 mg/ml", + "15 mM", + "10.4 mg/ml; 60 mg/ml; 0.03 mg/ml", + "102 mg/ml", + "2.5 mg/ml", + "10 mg/ml | nan", + "30 mg/ml", + "1 mg/ml | 0.025 mg/ml", + "72.3 mg/ml; 520 mg/ml; 0.3 vol%", + "0.44 M", + "11.4 mg/ml; 90 mg/ml; 0.036 mg/ml", + "0.90 vol%; 2.07 vol%; 0.091 mg/ml; 3.60 vol%", + "72.3 mg/ml; 1.75 vol%; 2.88 vol%", + "9.1 mg/ml; 72.3 mg/ml; 28.8 \u00b5l/ml | 9.1 mg/ml; 1 wt%; 72.3 mg/ml; 28.8 \u00b5l/ml", + "10.4 mg/ml; 80 mg/ml; 0.03 ml/ml", + "4 mM; 30 mM; 80 mg/ml; 200 mM | 0.005 vol%; 0.995 vol%", + "35 mM; 35 mM; 210 mM", + "72.3 mg/ml; 2 mM; 2.88 vol%", + "80 mg/ml; 10 mg/ml", + "68 mM; 9 mM; 55 mM", + "1.6 vol%mM; 2.1 vol%; 91 mg/ml; 3.6 vol%", + "2 mg/ml | 0.5 mg/ml", + "0.2 M | 0.02 M", + "0.2 M | 0.04 M", + "100 mg/ml", + "72.3 mg/ml; 0.029 vol%; 28.3 mg/ml; 0.0288 vol%", + "2.45 mM; 40 mM; 81.6 mM; 270 mM", + "72.3 mg/ml", + "60 mM; 32 mM; 195 mM", + "0.5 mg/ml; 520 mg/ml; 0.036 vol%; 36 mg/ml", + "9.1 mg/ml; 72 mg/ml; 0.028 mg/ml", + "0.170 M; 0.064 M; 0.198 M", + "9.1 mg/ml; 0.5 wt%; 72.3 mg/ml; 28.8 \u00b5l/ml", + "1.5 wt% | 2 mg/ml", + "2.38 wt%", + "300 mg/ml; 520 mg/ml; 72.3 mg/ml; 0.028 vol%", + "0.5 wt%", + "73.2 mg/ml", + "1.5 wt%", + "54 mol%; 30 mg/ml; 334 mol%", + "72.3 mg/ml; 1.7 vol%; 2.8 vol%", + "2.8 vol%mM; 1.85 vol%; 72.3 mg/ml; 2.9 vol%", + "8.67 mg/ml; 9.1 mg/ml; 72.3 mg/ml; 28.8 \u00b5l/ml", + "520 mg/ml; 83.2 mg/ml; 0.0338 vol%", + "0.175 vol%; 80 mg/ml; 0.285 vol%", + "1.5 wt% | 2 mg/ml >> 2 mg/ml", + "9.1 mg/ml; 72.5 mg/ml; 0.028 mg/ml", + "6 mg/ml", + "15 mg/ml", + "520 mg/ml; 36 mg/ml; 0.036 vol%", + "1 mg/ml; 1 mg/ml", + "9 mM; 68 mM; 55 mM", + "1.5 mg/ml", + "20 mg/ml; 170 mg/ml; 34.78 vol%", + "50 mg/ml", + "32 mM; 15 mg/ml; 28.5 \u00b5l/ml", + "72.3 mg/ml; 1.75 vol%; 3.1 vol%", + "72 mg/ml", + "97 mg/ml", + "30 mM; 72.3 mg/ml; 200 mM", + "15.08 mg/ml; 9.1 mg/ml; 72.3 mg/ml; 28.8 \u00b5l/ml", + "1 mM", + "6.24 mg/ml; 72 mg/ml; 8 \u00b5l/ml", + "0.005 vol%; 0.995 vol%", + "5 mg/ml; 520 mg/ml; 0.036 vol%; 36 mg/ml", + "9.1 mg/ml; 72.3 mg/ml; 28.8 \u00b5l/ml | 9.1 mg/ml; 2 wt%; 72.3 mg/ml; 28.8 \u00b5l/ml", + "20 mg/ml; 6.8 vol%; 3.4 vol%" + ] + } + } + ] + }, + "name": "deposition_reaction_solutions_concentrations", + "description": "The concentration of the non-solvent precursor chemicals.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the concentrations associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several dissolved compounds, e.g. A and B, list the associated concentrations and separate them with semicolons, as in (A; B)\n- The order of the compounds must be the same as in the previous filed.\n- For reaction steps involving only pure solvents, state this as \u2018none\u2019\n- When concentrations are unknown, state that as \u2018nan\u2019\n- Concentrations can be stated in different units suited for different situations. Therefore, specify the unit used. When possible, use one of the preferred units\no M, mM, molal; g/ml, mg/ml, \u00b5g/ml, wt%, mol%, vol%, ppt, ppm, ppb\n- For values with uncertainties, state the best estimate, e.g write 4 wt% and not 3-5 wt%.\nExample\n4 wt%\n0.2 M; 0.15 M| 10 mg/ml\n0.3 mol% | 2 mol%; 0.2 wt% | nan", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 18, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "0.02", + "0.045", + "33.0", + "0.0175; 0.9537; 0.0288", + "0.029; 0.0175; Unknown; 0.288", + "0.03; 0.94; 0.03", + "1.0; 0.015; 0.008", + "0.0088; 0.0144", + "0.05", + "Unknown", + "0.065", + "0.95; 0.0075; 0.004", + "0.035", + "0.018; 0.018; 0.936; 0.028", + "1.3", + "1.5", + "0.006; 0.0175; 0.9485; 0.028", + "1.7", + "0.06", + "19.0; 7.0; 8.0; 0.2 | 33.33", + "0.0175; Unknown; 0.0285", + "1.0", + "0.0075; 0.47; 0.0169", + "0.0175; 0.95; 0.0288", + "0.018; 0.94; 0.028; 0.018", + "0.018; Unknown; 0.028", + "0.0175; 0.028", + "0.92; 0.029; 0.0175; 0.0288" + ] + } + } + ] + }, + "name": "deposition_reaction_solutions_volumes", + "description": "The volume of the reaction solutions\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the volumes associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The volumes refer the volumes used, not the volume of the stock solutions. Thus if 0.15 ml of a solution is spin-coated, the volume is 0.15 ml\n- For reaction steps without solvents, state the volume as \u2018nan\u2019\n- When volumes are unknown, state that as \u2018nan\u2019\nExample\n0.1\n0.1 >> 0.05 | 0.05\nnan | 0.15", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 19, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "48.0", + "Unknown", + "0.33", + "10.0", + "0.0167", + "4.0", + "2.0", + "4.0 | 0.0", + "24.0", + "3.0", + "0.5" + ] + } + } + ] + }, + "name": "deposition_reaction_solutions_age", + "description": "The age of the solutions\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the age of the solutions associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- As a general guideline, the age refers to the time from the preparation of the final precursor mixture to the reaction procedure.\n- When the age of a solution is not known, state that as \u2018nan\u2019\n- For reaction steps where no solvents are involved, state this as \u2018nan\u2019\n- For solutions that is stored a long time, an order of magnitude estimate is adequate.\nExample\n2\n0.25 |1000 >> 10000\nnan | nan", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 20, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "70; 25", + "25", + "Unknown", + "70 | 25", + "90", + "60; 25", + "50", + "25 | Unknown", + "70 | Unknown", + "70", + "60", + "24", + "25 | 25" + ] + } + } + ] + }, + "name": "deposition_reaction_solutions_temperature", + "description": "The temperature of the reaction solutions.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the temperatures of the solutions associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a reaction solution undergoes a temperature program, list the temperatures (e.g. start, end, and other important points) and separate them with semicolons, e.g. 25; 100\n- When the temperature of a solution is unknown, state that as \u2018nan\u2019\n- For reaction steps where no solvents are involved, state the temperature of the gas or the solid if that make sense. Otherwise state this as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 120 and not 110-130.\n- Assume an undetermined room temperature to be 25\nExample\n25\n100; 50 | 25\nnan | 25 >> 25", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 21, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "25", + "Unknown", + "25 | 15", + "120 | 25", + "25 | 25 >> 25", + "120", + "25 >> 100", + "25 | 25 >> 25 >> 25", + "25 | 25 >> 25 >> 25 >> 25 >> 25", + "25 | 25 >> 25 >> 25 >> 25", + "25 | 25", + "21" + ] + } + } + ] + }, + "name": "deposition_substrate_temperature", + "description": "The temperature of the substrate.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the temperatures of the substrates (i.e. the last deposited layer) associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The temperature of the substrate refers to the temperature when the deposition of the layer is occurring.\n- If a substrate undergoes a temperature program before the deposition, list the temperatures (e.g. start, end, and other important points) and separate them with semicolons (e.g. 25; 100)\n- When the temperature of a substrate is not known, state that as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 120 and not 110-130.\n- Assume that an undetermined room temperature is 25\nExample\n25\nnan\n125; 325; 375; 450 | 25 >> 25", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 22, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "25", + "550", + "25 >> 80", + "300", + "475", + "13 | Unknown", + "18 | Unknown", + "160", + "25 >> 550", + "140 | 100", + "5", + "600", + "140 | 100 >> 100 >> 100 >> 100", + "650", + "5 | 0", + "25 >> 250", + "70", + "325", + "75; 120; 300", + "25 | 25", + "400", + "80", + "200", + "140 | 100 >> 100 >> 100 >> 100 >> 100", + "Unknown", + "130 | 60", + "100", + "130", + "120", + "500", + "150", + "235 | 15", + "165", + "100 | 100", + "110.0", + "60", + "25 | 55", + "25 >> 650", + "120 | 150", + "150 | Unknown", + "30 | Unknown", + "90", + "100 >> 100", + "100 | 25", + "25 >> 450", + "12 | Unknown", + "95", + "235", + "145", + "450", + "7 | Unknown", + "125", + "135", + "140 | 100 >> 100", + "235 | 25", + "300 | 120", + "140", + "25; 100", + "350", + "140 | 100 >> 100 >> 100", + "25 >> 100", + "11 | Unknown", + "50", + "120 | 60", + "9 | Unknown", + "15 | Unknown", + "130 | 25", + "200.0" ] } } ] }, - "name": "stack_sequence", - "description": "The stack sequence describing the hole transport layer. Use the following formatting guidelines\n- With the HTL, we refer to any layer between the substrate and the perovskite in a pin-device, and any layer between the perovskite and the back contact in a nip-device.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- If two materials, e.g. A and B, are mixed in one layer, list the materials in alphabetic order and separate them with semicolons, as in (A; B)\n- If no hole transport layer, state that as \u2018non\u2019\n- Use common abbreviations when appropriate but spell it out if risk for confusion.\n- If a material is doped, or have an additive, state the pure material here and specify the doping in the columns specifically targeting the doping of those layers.\n- There is no sharp well-defined boundary between when a material is best considered as doped or as a mixture of two materials. When in doubt if your material is best described as doped or as a mixture, use the notation that best capture the metaphysical essence of the situation.\n- There are a lot of stack sequences described in the literature. Try to find your one in the list. If it is not there (i.e. you may have done something new) define a new stack sequence according to the instructions.\nExample:\nSpiro-MeOTAD\nPEDOT:PSS\nnone\nNiO-c\nPTAA", + "name": "deposition_thermal_annealing_temperature", + "description": "The temperatures of the thermal annealing program associated with depositing the layers\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the annealing temperatures associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If the thermal annealing involves a temperature program with multiple temperature stages, list the temperatures (e.g. start, end, and other important points) and separate them with semicolons (e.g. 25; 100)\n- For values with uncertainties, state the best estimate, e.g. write 120 and not 110-130.\n- If no thermal annealing is occurring after the deposition of a layer, state that by stating the room temperature (assumed to 25\u00b0C if not further specified)\n- If the thermal annealing program is not known, state that by \u2018nan\u2019\nExample\n25\n50 | nan\n450 | 125; 325; 375; 450 >> 125; 325; 375; 450", "type": { "type_kind": "python", "type_data": "str" @@ -45561,7 +50051,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, + "m_parent_index": 23, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -45569,453 +50059,521 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "", - "7.8", - "nan | 250.0", - "2.5 | 30.0", - "15.0 | 10.0", - "89.0", - "90.0", - "2.0 | 50.0", - "250.0 | 70.0", - "100.0 | 10.0", - "40.0 | nan", - "325.0", - "50.0", - "220.0", - "50.0 | 200.0", - "137.0", - "180.0", - "45.0", - "20.0 | 40.0", - "nan | 130.0", - "167.0", - "nan | 33.0", - "168.0", - "nan | 160.0", - "803.0", - "0.0", - "10.0 | 6.0 | 1.0", - "259.0", - "10.0 | 160.0", - "300.0 | 15.0", - "15.0 | 150.0", - "65.0 | 1400.0", - "35.6", - "60.0 | 10.0", - "14.0 | 3.0", - "300.0 | 5.0", - "25.0 | 4.0", - "95.0", - "nan | 44.0", - "2.4", - "5.0 | 2.0", - "87.0", - "10.0 | 90.0", - "70.0", - "41.0", - "127.0", - "193.0", - "150.0 | 40.0", - "11.0", - "25.0 | 260.0", - "5.7", - "500.0", - "5.0 | nan", - "2000.0 | nan", - "73.0", - "184.0", - "4.0 | nan", - "76.0", - "True", - "2000.0", - "1.0", - "54.0", - "234.0", - "10.0 | 5.0", - "0.7 | nan", - "260.0", - "175.0", - "267.0", - "20.5", - "2.0 | 400.0", - "240.0", - "50.0 | 50.0", - "2.5 | 20.0", - "9.0 | nan", - "35.0 | 8.0", - "600.0 | nan", - "1.5 | 180.0", - "330.0", - "810.0", - "21.0", - "80.0 | 280.0", - "26.0", - "101.0", - "809.0", - "85.0", - "250.0 | 40.0", - "321.0", - "30.0 | 40.0", - "80.0 | 120.0", - "nan | 150.0", - "9.0", - "12.0 | 3.0", - "5.0 | 40.0", - "176.0", - "136.0 | 5.0", - "8.0", - "10.0 | 7.0", - "nan | 8.0", - "nan | 3.0", - "278.0", - "13.0", - "56.0", - "nan | 80.0", - "35.0 | 10.0", - "nan | nan | nan", - "650.0", - "49.4", - "20.0", - "136.0", - "20.0 | 10.0", - "295.0", - "52.0", - "265.0", - "165.0", - "70.0 | nan", - "40.4", - "200.0 | nan", - "82.0", - "nan | 6.5", - "36.0", - "6.5", - "239.0", - "14.0", - "20.0 | 2.0", - "1.5 | nan", - "nan | 100.0", - "250.0", - "2.0 | 60.0", - "21.6 | nan", - "10.0 | 10.0", - "65.0", - "9.2 | 10.0", - "16.0 | 200.0", - "150.0", - "42.4 | nan", - "100.0 | 7.0", - "7.0 | 10.0", - "47.35", - "108.0", - "9.0 | 200.0", - "14.0 | 7.0", - "110.0 | 7.0", - "811.0", - "25.0 | 15.0", - "nan | 140.0", - "7.9", - "12.0 | 7.0", - "nan | 20.0", - "nan | 150.3", - "33.1", - "15.0 | nan", - "232.0", - "2.5 | 40.0", - "5.0 | 20.0", - "10.0 | 2.0", - "1.0 | 180.0", - "33.5", - "244.0", - "50000.0", - "40.0 | 10.0", - "47.0", - "nan | 7.0", - "35.0", - "111.0", - "750.0", - "57.0", - "135.0", - "2.0 | nan", - "805.0", - "1.0 | nan", - "30.0 | 10.0", - "258.0", - "33.0", - "nan | 2.0", - "51.0", - "2.5", - "282.0", - "uknnown", - "60.0 | nan", - "807.0", - "2.0 | 20.0", - "160.0 | nan", - "183.0", - "80.0 | 350.0", - "35.2 | nan", - "20.0 | 20.0", - "49.0", - "200.0 | 10.0", - "23.0", - "59.0", - "285.0", - "90.0 | 80.0", - "25.0", - "2.8 | nan", - "7.5", - "40.0 | 350.0", - "80.0 | 20.0", "40.0", - "98.0", - "35.0 | nan", - "nan | 150.1", - "16.0 | 250.0", - "230.0", - "75.0", - "20.0 | 5.0", - "10.0 | nan", - "37.5", - "60.0 | 5.0", - "40.0 | 200.0", - "28.0", - "480.0", - "190.0", - "50.0 | nan", - "nan | 180.0", - "nan | 300.0", - "3.0 | nan", - "8.0 | 4.0", - "0.8 | 180.0", - "15000.0", - "10.0 | 325.0", - "380.0", - "700.0", - "155.0", - "211.0", - "14.0 | 14.0", - "22.0", - "10.0 | 40.0", - "145.0", - "131.0", - "63.0", - "60.0 | 3.0", - "34.0", - "0.8", - "1500.0", - "37.0", - "60.0 | 7.0", - "280.0", - "60.0", + "10.0 | 5.0 >> 5.0 >> 5.0", + "10.0 | 5.0 >> 5.0 >> 5.0 >> 5.0 >> 5.0", + "10.0", "5.0", - "125.0", - "nan | 30.0", - "7.0", - "804.0", - "160.0 | 8.0", - "400.0", - "143.0", - "10.2", - "25000.0", - "nan | 15.0", - "71.0", - "115.0", - "2.0", - "30.0 | 14.0", - "20.0 | nan", - "250.0 | 50.0", - "130.0 | 10.0", - "315.0", - "4.0", - "50.0 | 150.0", - "253.0", - "15.0 | 40.0", - "34.4", - "242.0", - "40.9", - "352.0", - "nan | 200.0", + "60.0", + "45.0 | 0.0", "12.0", - "600.0", - "300.0 | 8.0", - "100.0", - "105.0", - "8.0 | nan", - "485.0", - "120.0 | 350.0", - "252.0", - "48.0", - "96.0", - "10.0 | 2.0 | 5.0", - "200.0", - "70.0 | 10.0", - "150.0 | nan", - "113.0", - "80.0 | 8.0", - "24.0 | 3.0", - "1.2", - "350.0", - "290.0", - "8.0 | 130.0", - "3.0", - "178.0", - "10.0 | 30.0", - "50.0 | 100.0", - "10.0 | 120.0", - "200.0 | 350.0", - "nan | nan", - "48.3", - "0.0 | 700.0", - "806.0", - "340.0", - "35.0 | 210.0", - "94.0", - "181.0", - "160.0", - "38.0", - "nan | 15000.0", - "100.0 | 8.0", - "nan | 50.0", - "nan | 14.0", - "270.0", - "170.0", - "200.0 | 0.0", - "7.0 | 115.0", - "2.5 | 10.0", - "15.0 | 45.0", - "nan | 170.0", - "55.0", - "0.4 | 180.0", - "25.71", - "7.0 | 2.0 | 10.0", - "6.0", - "80.0 | nan", - "66.52", - "20.0 | 100.0", - "7.0 | nan", - "60.0 | 1.0", - "250.0 | 60.0", - "nan | 9.0", - "200.0 | 700.0", - "17.0", - "44.0", - "5.5 | 10.0", - "293.0", - "6.0 | 200.0", - "12.0 | 200.0", - "550.0", - "15.0", - "25.0 | 250.0", - "215.0", - "300.0", - "nan | 150.2", - "245.0", - "10.0 | 5.0 | 5.0", - "185.0", + "Unknown", + "5.0 >> 2.0", "120.0", - "180.0 | 160.0", - "450.0", - "18.0", - "130.0", - "153.0", - "39.0", - "nan | 350.0", - "110.0", - "20.0 | 15.0", - "310.0", - "23.8", - "808.0", - "11000.0", - "58.0", - "345.0", - "5.3", - "3.0 | 10.0", - "31.6", - "1000.0", - "25.0 | nan", - "27.0", - "188.0", - "66.0", - "225.0", - "261.0", - "46.2", - "235.0", - "60000.0", - "nan | 4.0", - "802.0", - "1200.0", - "70.0 | 20.0", - "390.0", - "10.0", - "43.0", - "90.0 | 7.0", - "0.2 | 180.0", - "1.8 | 180.0", - "30.0 | nan", - "432.0", - "nan | 11.0", - "173.0", - "210.0", - "397.0", - "10.0 | 240.0", - "2.5 | nan", - "800.0", - "nan | 190.0", - "198.0", - "80.0 | 7.0", - "271.0", - "32.0", - "5.0 | 10.0", - "25.0 | 20.0", - "nan | 295.0", - "163.0", - "50.2", - "24.0", - "5.2", - "40.0 | 20.0", - "72.0", - "nan | 10.0", - "99.0", - "20.0 | 60.0", - "200.0 | 5.0", - "97.0", - "196.0", + "45.0", + "10.0 | 0.0", + "15.0 | 25.0", + "10.0 | 5.0", "30.0", - "nan | 22.0", - "18.3 | 10.0", - "1.6", - "2.0 | 180.0", - "470.0", - "680.0", - "333.0", - "35.0 | 348.0", - "174.0", - "158.0", - "21.5", - "24.0 | 7.0", - "67.5", - "35.0 | 475.0", - "150.0 | 9.0", - "116.0", - "140.0", - "100.0 | nan", - "80.0", - "801.0", - "nan | 5.0", - "46.0", - "320.0", - "138.0", - "nan | 400.0", - "45.6", - "10.0 | 5.0 | 2.0", - "70.0 | 7.0" + "10.0 | 10.0", + "0.0 >> 30.0", + "Unknown | 25.0", + "30.0; 30.0", + "10.0; 15.0; 60.0", + "10.0 | Unknown", + "60.0 | 15.0", + "10.0 | 5.0 >> 5.0 >> 5.0 >> 5.0", + "15.0 | 5.0", + "1.0", + "25.0", + "20.0", + "20.0 | 10.0", + "10.0 | 5.0 >> 5.0", + "2.0 | 2.0", + "15.0" + ] + } + } + ] + }, + "name": "deposition_thermal_annealing_time", + "description": "The time program associated to the thermal annealing program.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the annealing times associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If the thermal annealing involves a temperature program with multiple temperature stages, list the associated times at those temperatures and separate them with semicolons.\n- The annealing times must align in terms of layers\u00b8 reaction steps and annealing temperatures in the previous filed.\n- If a time is not known, state that by \u2018nan\u2019\n- If no thermal annealing is occurring after the deposition of a layer, state that by \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 20 and not 10-30.\nExample\nnan\n60 | 1000\n30 | 5; 5; 5; 30 >> 5; 5; 5; 30", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 24, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Dry air", + "Unknown", + "Air | Vacuum", + "Air | N2", + "Air", + "Ambient", + "N2", + "Ambient | Ar", + "O2", + "Vacuum", + "N2 >> N2", + "Air | Air", + "N2 | N2", + "Ar | Ar", + "Ar" + ] + } + } + ] + }, + "name": "deposition_thermal_annealing_atmosphere", + "description": "The atmosphere during thermal annealing\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the atmospheres associated to each annealing step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- If the atmosphere is a mixture of different gases, i.e. A and B, list the gases in alphabetic order and separate them with semicolons, as in (A; B)\n- \u201cDry air\u201d represent air with low relative humidity but where the relative humidity is not known\n- \u201cAmbient\u201d represent air where the relative humidity is not known. For ambient conditions where the relative humidity is known, state this as \u201cAir\u201d\n- \u201cVacuum\u201d (of unspecified pressure) is for this purpose considered as an atmospheric gas.\n- This is often the same as the atmosphere under which the deposition is occurring, but not always.\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nN2\nVacuum | N2\nAir | Ar >> Ar", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 25, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "12.0", + "Unknown", + "20.0", + "24.0", + "4.0", + "15.0" + ] + } + } + ] + }, + "name": "storage_time_until_next_deposition_step", + "description": "The time between the HTL stack is finalised and the next layer is deposited\n- If there are uncertainties, only state the best estimate, e.g. write 35 and not 20-50.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 26, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Dry air", + "Unknown", + "Air", + "Ambient", + "Vacuum", + "N2", + "O2" + ] + } + } + ] + }, + "name": "storage_atmosphere", + "description": "The atmosphere in which the sample with the finalised HTL stack is stored until the next deposition step.\nExample\nAir\nN2\nVacuum", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 27, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "20.0", + "10.0" + ] + } + } + ] + }, + "name": "storage_relative_humidity", + "description": "The relive humidity under which the sample with the finalised HTL stack is stored until next deposition step\n- If there are uncertainties, only state the best estimate, e.g write 35 and not 20-50.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 28, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "Plasma", + "Ar plasma", + "Ozone", + "UV-Ozone", + "He plasma", + "Washed with methanol", + "IPA dipping", + "DMF" + ] + } + } + ] + }, + "name": "surface_treatment_before_next_deposition_step", + "description": "Description of any type of surface treatment or other treatment the sample with the finalised HTL stack undergoes before the next deposition step.\n- If more than one treatment, list the treatments and separate them by a double forward angel bracket (\u2018 >> \u2018)\n- If no special treatment, state that as \u2018none\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample:\nnone\nAr plasma\nUV-ozone", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 8, + "m_parent_sub_section": "section_definitions", + "name": "Backcontact", + "description": "A section to describe information related to the back contact of the solar cell.", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Au | ITO", + "rGO | Au", + "MoO3 | Ag | WO3", + "Carbon; WO3-np", + "ITO | MgF2", + "Al | Al2O3", + "Ag | Alq3", + "AgAu", + "MoOx | Ag", + "Carbon-nt; PCBM-60", + "ITO", + "AgAl", + "Cr | Cu", + "AgZn | Al", + "Mo | Ag", + "Cu-CFN", + "Field's metal", + "Al | Ag", + "Ag-nw | ZnO-np", + "Carbon; NiS", + "PEDOT:PSS | PDMS", + "Carbon; Graphite; PANI", + "MoOx | Au", + "Ni-grid", + "GaIn", + "Cu", + "Ag | MoO3", + "CNTs", + "none", + "MoOx | Al", + "MWCNTs; ONC1", + "Cu | Au", + "Cr | Au", + "MoOx | Au | Cu | MoOx", + "Pt-sheet", + "MoO3 | Ag", + "Carbon | IPA", + "KIPIG", + "T-MWCNTs", + "AZO", + "CSCNT@SnO2", + "B-MWCNTs", + "Carbon black | Carbon", + "Ag | SiO2 | ZnS | Ag | ZnS", + "Carbon-nt | PMMA", + "MoO3 | Ag | MoO3", + "PEDOT:PSS | Graphene", + "Pb", + "ITO | SLG", + "Carbon; NiO:rGO", + "Carbon; NiO", + "NiO", + "Cu; Cu2O", + "Graphene | PDMS", + "Carbon black; Graphite", + "N-Graphene", + "CuPc | Carbon", + "Carbon", + "Carbon-paper", + "Au | Al", + "Carbon; WO2-np", + "FTO", + "CNTs | Mxene", + "Graphite | Cu-tape", + "H2PtCl6", + "PTAA | FTO | SLG", + "PEI | PEDOT:PSS | PDMS", + "Bi2Te3", + "Pt", + "Carbon-nw", + "Cu | Ag | MoO3", + "MoO2 | ITO", + "Ca | Al", + "AZO | Ni | Al | Ni", + "MoOx | Cu", + "Carbon-tape", + "Carbon | Au", + "Carbon | CuSCN", + "PEDOT:PSS | Al", + "TFSA-Graphene | PET | Ag", + "ITO | Ag-grid", + "Ca", + "Mo2O3 | Ag", + "SnO2-c | Ag | SnO2-c", + "Candle soot | FTO | SLG", + "MoOx | IZO", + "Au | Ag-nw", + "Au", + "TETA-Graphene | PET", + "W", + "Transparent Conductive Adhesive | PET:Ni mesh", + "Graphene | PMMA | PDMS", + "MoO3 | Au | MoO3", + "Au | LiF", + "MoO3 \u2223 ITO", + "Au-np", + "Mg | Al", + "Carbon | Ag", + "TETA-Graphene | PET | Ag", + "Graphite | Cu", + "Ag-nw", + "Ni", + "Na@Carbon-nanowalls", + "Carbon black", + "Au | Organosilicate", + "AZO-c", + "Carbon; NiO-np", + "Ag", + "Ag | FTO", + "IZTO", + "ITO | MWCNTs", + "Ag-nw | PCBM-60", + "PEDOT:PSS | PEDOT:PSS | PDMS", + "Carbon | FTO | SLG", + "SWCNTs", + "Cr", + "IZO | Ag", + "FTO | SLG", + "Graphite | FTO", + "AZO | Ni | Al", + "Pd", + "Carbon | FAAc", + "Carbon black; Carbon-nt; Graphite", + "Carbon black; Graphite | MWCNTs", + "TeO2 | Ag", + "Au | MoO3", + "AZO | NiAl", + "Bi | Au", + "Carbon; MAI | Carbon", + "NiO | Ag | NiO", + "MoO3 | ITO | MgF2", + "PH 1000", + "Ag | ITO | Ag", + "ITO | LiF", + "Ag | IZO", + "LiF | Al", + "H:MoO3-nanobelts", + "Carbon | CNTs", + "Ti | Au", + "Carbon | Al", + "MoOx | Au | MoOx", + "Ag-sheet", + "TFSA-Graphene | PET", + "Graphene | PET", + "Graphene | PEDOT", + "MoOx | Ag | MoOx", + "MoO3 | AuAg | MoO3", + "Carbon | Carbon-fibre", + "MoO3 | Au | Ag", + "Ba | Ag", + "Graphen", + "Mg | Ag", + "Carbon | MAAc", + "MoO3 | Au", + "MoOx | ITO", + "Graphite | Pt", + "MWCNTs; ONC2", + "IZO", + "Ag | Ni", + "PANI | FTO | SLG", + "Al | Au", + "MoO3 \u2223 Au \u2223 Ag \u2223 MoO3 | Alq3", + "PEDOT:PSS | Ag-nw | PDMS", + "MWCNTs", + "Cr | Pt | FTO", + "SnO2-c | Ag", + "Carbon | Sn", + "Unknown", + "Carbon; PEMA", + "Carbon | Graphite", + "MoP3 | Ag", + "Ag | Ta2O3", + "Cr2O3:Cr", + "Graphene | Au", + "PEDOT:PSS | FTO | SLG", + "Carbon | CNTs | Mxene", + "AlAg", + "AZO | Au", + "AV-Carbon; MAI", + "Graphite; Carbon black@5:1", + "NiO | Ag | NiO | NaYF4 | Ag", + "AV-carbon; MAI", + "SWCNTs | PMMA", + "Ba | Al", + "Pt-Carbon-nt", + "Sb", + "Carbon-epoxy | Ag", + "ITO | Ni | Al", + "Ni | Al", + "Ag | V2O5", + "Pt | FTO | SLG", + "PEDOT:PSS | ITO | SLG", + "Graphene", + "Cu | Au | BCP", + "IZO | Au", + "Au | Ni", + "Au | ITO | Au", + "MoO3 | AZO | AlNi-grid", + "WO3 | Ag", + "Au | Ag", + "SnO2-c | Cu | SnO2-c", + "Carbon | FTO", + "CSCNT@Al2O3-c | CSCNT@SnO2", + "Ti", + "Carbon-nt", + "AZO-np | Ag", + "Carbon; NiPt-nw", + "D-Sorbito; PEDOT:PSSl | Ag-nw | PET", + "Carbon; LPP", + "MoOx | Cu | MoOx", + "PEDOT:PSS | ITO | PET", + "In", + "Carbon-nanowalls", + "NiS | Cr | Pt | FTO | SLG", + "Ag | ITO", + "Ca | Ag", + "Ag-nw | C60", + "MoOx | Ag | ZnS", + "Au | FTO", + "Pt | Si", + "Al", + "Ag@Au-np", + "Graphite", + "PEDOT:PSS:PSA", + "MnO3 | Ag", + "AgAu-mp", + "ITO | Al", + "Ag | SnO2-c", + "ICO", + "Ti-grid", + "ITO | Au", + "MoO3 | Au | Ag | MoO3 | Alq3", + "Au-np; NiO", + "Carbon-nt | Carbon", + "MoOx | ITO | Au", + "PEDOT:PSS; Sorbitol | Ag-grid | PET", + "MoO3 | ITO", + "Pt | FTO", + "MoOx | IO | ITO | Au", + "Carbon | Galinstan", + "P3HT | FTO | SLG", + "ITO | Ag", + "Ni | Au", + "Ag | Au", + "SWCNTs | Ag", + "Ag | Al", + "MoOx | IAI", + "Cu | Ag", + "Perovskite | PEDOT:PSS | ITO | SLG", + "Graphene oxide | Carbon", + "Ag-nanocubes | Ag | MoO3", + "MoO3 | IZO", + "Carbon-mp", + "MoOx | ITO | MgF2", + "NbS2", + "MoO3 | Al", + "Ti3C2", + "MWCNTs; ONC3", + "Carbon | PEDOT:PSS | FTO | SLG", + "MoOx | IZO | Au", + "LiF | Ag", + "ITO | Au-grid", + "PEDOT:PSS", + "3D potassium-ion preintercalated graphene (KIPIG)", + "PEI | PH 1000", + "Filed's metal", + "Ti | Cu", + "Au | Au-wire", + "AlNi-grid", + "Carbon-nt | PMMA | Au", + "ITO | PEN", + "Carbon black; MWCNTs", + "Carbon | Silica gel electrolyte | Carbon", + "CSCNT@Al2O3-c | CSCNT", + "Ag-np | ITO", + "Carbon; MAI", + "PTCBI | Ag | WO3 | PTCBI | Ag", + "Carbon | KAc", + "Ag | CsF", + "Liq | Al", + "Graphite | FTO | SLG", + "Cu-ribbon", + "ITO | Cu", + "Mo", + "Metal", + "AZO | Ag | AZO", + "Graphite ribbon", + "Pt-np | FTO | SLG", + "Carbon | CsAc" ] } } ] }, - "name": "thickness_list", - "description": "A list of thicknesses of the individual layers in the stack.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- The layers must line up with the previous filed.\n- State thicknesses in nm\n- Every layer in the stack have a thickness. If it is unknown, state this as \u2018nan\u2019\n- If there are uncertainties, state the best estimate, e.g write 100 and not 90-110\nExample\n200\nnan |250\n100 | 5 | 8", + "name": "stack_sequence", + "description": "The stack sequence describing the back contact.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- If two materials, e.g. A and B, are mixed in one layer, list the materials in alphabetic order and separate them with semicolons, as in (A; B)\n- If no back contact, state that as \u2018non\u2019\n- Use common abbreviations when appropriate but spell it out if risk for confusion.\n- If a material is doped, or have an additive, state the pure material here and specify the doping in the columns specifically targeting the doping of those layers.\n- There is no sharp well-defined boundary between when a material is best considered as doped or as a mixture of two materials. When in doubt if your material is best described as doped or as a mixture, use the notation that best capture the metaphysical essence of the situation.\n- There are a lot of stack sequences described in the literature. Try to find your one in the list. If it is not there (i.e. you may have done something new) define a new stack sequence according to the instructions.\nExample:\nAu\nAg\nAl\nCarbon\nMoO3 | Ag", "type": { "type_kind": "python", "type_data": "str" @@ -46024,7 +50582,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, + "m_parent_index": 1, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -46033,393 +50591,397 @@ window.nomadArtifacts = { "props": { "suggestions": [ "", - "Li-TFSI; PEG; TBP", - "Co2f; Li-TFSI; TBP", - "FK209; Li-TFSI; Rutin-Ag-np; TBP", - "AMH", - "AgNO3", - "D102; Li-TFSI; TBP", - "Cu | Ag; Cu", - "2,6-ludidine; Li-TFSI", - "Graphene Oxide", - "TBA-PF6", - "Ag-TFSI; Li-TFSI; TNP", - "Poly(ethylene glycol) tridecyl ether", - "Tb", - "Li(CF3SO2)2N; TBP", - "Co1f; Li-TFSI; TBP", - "NDP9", - "PSS-Na", - "TBP; Triphenylamine", - "B", - "Pb", - "DMPS", - "Zn(TFSI)2", - "Diethylene glycol", - "TBP | Unknown", - "rGO-PhOHex", - "EMIC", - "Unknown | T4-TCNQ", - "Carbon-nano onions", - "Pyridine", - "Y", - "Undoped | Undoped", - "Ag-TFSI; Li-TFSI; TBP", - "Unknown | FK209; Li-TFSI; TBP", - "Ni", - "Ag", - "LiN(SO2CF3)2; t-BtPy", - "Cu-2Cl; Li-TFSI; TBP", - "Mg", - "Pd-PVP", - "AgI; Li-TFSI; TBP", - "Co-TFSI; TBP", - "FK209; Li-TFSI; TBP; POM@Cu-BTC", - "2-6-lutidin; Li-TFSI", - "Unknown | Zn", - "Cs", - "Silane", - "MoS2", - "Li-TFSI; TPB", - "NH3", - "CSA", - "Mo(tfd-COCF3)3", - "NiOx", - "Undoped | Li-TFSI; TBP", - "Unknown | Li-TSFI; TBP", - "Li-bis; Li-TFSI; TBP", - "TFMS | Li-TFSI; TBP", - "Urea", - "BF4; TBP; TEMPO", - "Chlorobenzol; Li-TFSI; TBP", - "EDTA", - "K102; Li-TFSI", - "PTAA", - "Ethanolamine", - "FK209; Li-TFSI; TBP; CuPc", - "PEO", - "Ti", - "Unknown | 2-Py; Li-TFSI", - "BuPyIm-TFSI", - "FK269; Li-TFSI; nan; TBP", - "Sr", - "FK211", - "TBP; Li-TFSI; Co(III) TFSI", - "KMnO4; Li-TFSI; TBP", - "f-SWCNTs", - "acetylacetone", - "PSSH", - "GeO2-np", - "Co(PyPyz)3[TFSI]3; Li-TFSI; TBP", - "JQ3; Li-TFSI; TBP", - "Li-TFSI; PMo11V; TBP", - "aYF4:Yb,Er@NaYF4; Li-TFSI; TBP", - "PVA", - "Li-TFSI; Polystyrene; TBP", - "LiN(CF3SO2)2N; TBP", - "Li@C60-TFSI; TBP", - "CuSCN", - "Li-TFSI; TBP | Undoped | Li-TFSI; TBP", - "Nd", - "NaLuF4:Yb,Er@NaLuF4; Li-TFSI; TBP", - "FK212", - "TiO2@MoO3-np", - "ethanolamine", - "LiNO3", - "FK209; FN-Br; TBP", - "WOx", - "CMP", - "F8BT", - "nan | DPITPFB", - "Co-TFSI; Li-TFSI; TBP", - "TMAH", - "PFI", - "MoO3-np", - "Graphene; Li-TFSI; TBP", - "Co-TFSI", - "acetylacetonate", - "Co-TPTB; Li-TFSI; TBP", - "FK209; Li-TFIS; TBP", - "Rb", - "TCNQ | Unknown", - "Li-TFSI; TBP; FK102(II)PF6", - "Li", - "Ag-TFSI; TBP", - "Ag; Li", - "Tetrafluoro-tetracyanoquinodimethane", - "Li-TFSI; TBP", - "PZ0.020", - "F6-TCNNQ", - "Er; Yb | Li-TFSI; TBP", - "FK102", - "FK209; H3BTC; Li-TFSI; TBP; nan", - "Eu", - "PFN-P2", - "Li-TFSI; TBP; TEMPO", - "D2; Li-TFSI; TBP", - "Graphdiyne", - "NaYF4:Yb,Er; Li-TFSI; TBP", - "CNT", - "Li-TFSI; Ni-nanobelts; TBP", - "Li-TFSI; TPBA", - "AgOTf-doped GO", - "Cu(bpcm)2; Li-TFSI; TBP", - "TPFB", - "PMPS", - "TS-CuPc", - "Cu | Unknown", - "Yb", - "Li-TFSI; TBP; FK102", - "F-graphene", - "SrCl2", - "FK209; Li-TFSI; TBP | N", - "CZTS-np", - "C3-SAM", - "D-TBP; Li-TFSI", - "WO3-np", - "Li-TFSI", - "Li-TFSI; PTAA; TBP", - "ox-Carbon-nano onions", - "Thiourea", - "4-Py", - "TBFB", - "HCl", - "Li-TFSI; SpiroTFSI2; TBP", - "BCF", - "PFPPY", - "Li-bisLi-TFSI; TBP", - "Li; Co", - "FK209; 3PO4; Li-TFSI; TBP", - "NE", - "CrO3", - "D1; Li-TFSI; TBP", - "Undoped; Unknown", - "Sc3N@C80", - "DIO", - "Co(II)(dpzpyr)2; Li-TFSI; TBP", - "NaCl", - "Glycerol", - "Benzoyl peroxide", - "Glucose; Graphene oxide", - "EDA", - "PDA", - "Butylamine", - "Co(III)(pztbpy)3; Li-TFSI; TBP", - "Unknown | TPFB", - "Li-TFSI; MoS2; TBP", - "LAD", - "I2; Li-TFSI; TBP", - "H-TFSI; TBP", - "Zn(TFSI)2; TBP", - "nan | Graphene oxide", - "Ag-np", - "Cu; Li", - "Cu(Oac)2", - "F4-TCNQ | Undoped", - "Fe", - "Cu", - "Zn", - "EHCz-2EtCz-ox", - "DOPA", - "Unknown | Ta", - "GeO2", - "WOx | Unknown", - "Undoped", - "FK209; Li-TFSI; rGO; TBP", - "BMPyTFSI", - "TPACA", - "D-sorbitol", - "FK209; Li-TFS; TBP", - "Li-TFSI; TBP; V2O5", - "FK209; Li-TFSI", - "F4-TCNQ", - "LiClO4", - "2-amylpyridine; Li-TFSI", - "Ca", - "Unknown | Undoped", - "Glucose", - "MoO3", - "PDMS", - "Li; Mg", - "Cu9S5-np", - "DOBD", - "Polydopamine", - "Carbon-nt-G; Li-TFSI; TBP", - "FK209; Li-TFSI; TBP | Er3+; Yb3+", - "Co-LTFSI; Li-LTFSI; TBP", - "Ce", - "Diphenyliodonium-hexafluorophosphat", - "PEG", - "Li-TFSI; Li(Gd, Y)F4-Yb; TBP", - "Li-TFSI; TBA", - "Li; Pb", - "NPB", - "Pd", - "IrCp*Cl(PyPyz)[TFSI]; Li-TFSI; TBP", - "Unknown | AgSbF6", - "F4-TCNQ | Unknown", - "Li-TFSI; TBP; FK209", - "Co3f; Li-TFSI; TBP", - "Unknown | Li", - "CuH; Li-TFSI; TBP", - "Unknown | FK269; Li-TFSI; TBP", - "Unknown", - "FK209", - "Undoped | Cu", - "ClO4-", - "FK210", - "Undoped | glacial acetic acid", - "CuI; Li-TFSI", - "EHCz-MeFl-ox", - "CI", - "FK102; Li-TFS", - "K", - "Zonyl FS-300", - "GSL", - "Cu | Cu", - "Cu-2Cl; Li-TFSI", - "FK209; LiNO3", - "Graphene", - "F2-TCNQ | Unknown", - "FK209; Li-TFSI; TBP", - "EDT", - "Co; Li-TFSI; TBP", - "Mo(tfd-CO2Me)3", - "FK209; Zn(TFSI)2; TBP", - "EHCz-3EtCz-ox", - "Li-TFSI; TBP | D-sorbitol", - "Ba", - "Carbon-nt; Li-TFSI; TBP", - "Co(III)(pztbpy)3; LiNTf2; TBP", - "4-isopropyl-4\u2032-methyldiphenyliodonium tetrakis(pentafluorophenyl)borate", - "Au-np; Li-TFSI; TBP", - "JQ1; Li-TFSI; TBP", - "La", - "In10-2,4,6; Li-TFSI; TBP", - "FK102; Li-TFSI; TBP", - "CuPc; Li-TFSI; TBP", - "2-Py", - "Li-TFSI; O2; TBP", - "n-Butylamine", - "sGO", - "nan | Li-TFSI; TBP", - "CuI", - "Li-TFSI; TBP; TeCA", - "PMMA", - "P3HT | Unknown", - "Fe(ttb)(TFSI)3; Li-TFSI; TBP", - "Co-TFSI; Li-TFSI", - "N", - "Lithium acetate", - "TAPC", - "Unknown | MoO3", - "Co", - "Li-TFSI; TBP | Undoped", - "TPE-NM3; Mo(tfdCOCF3)3", - "JQ2; Li-TFSI; TBP", - "TBP", - "Unknown | TBP", - "FK102; TBP", - "Unknown | Et4N-TFSI; H-TFSI", - "D4; Li-TFSI; TBP", - "Unknown | JQ1; Li-TFSI; TBP", - "FK209; Li-TFSI; TBP | Undoped", - "CuAlO2", - "FK209; H2SO4; Li-TFSI; TBP", - "Li-TFSI; TBP | Undoped | Unknown", - "rGO", - "FK269; Li-TFSI; TBP", - "Unknown | VOx", - "HA", - "Unknown | Unknown | TBP", - "CF3PA; FK209; Li-TFSI; TBP", - "Li-TFSI; TBP | Cu2O", - "O2", - "Li-TFSI; Si NPs", - "FN-Br", - "CsI", - "TBA-BF4", - "N2", - "Ethylene glycol | Unknown", - "PolyTPD", - "Triethanolamine", - "Unknown | FK209; Li-TSFI; TBP", - "Carbon-QDs", - "Alanine", - "2-Py; Li-TFSI", - "Spiro-(TFSI)2; TBP", - "AuAg-np", - "Au-np", - "Li-TFSI; TBP; acetonitrile", - "Br-BA", - "NPh2O2C2H6", - "Unknown | FK102; Li-TFSI; TBP", - "DPITPFB", - "Cu-Bix; Li-TFSI; TBP", - "Amonia | Unknown", - "SrCl2 | Undoped", - "Li-TFSI; TBP | Li-TFSI; TBP", - "VOx", - "Spiro-(TFSI)2", - "Mo(tfd-COCF3)3; TBP", - "H2O2", - "Triton-X", - "Oleylamine | Li-TFSI; TBP", - "FK209; TBP", - "Sodium Citrate", - "PS", - "CTAB", - "RbCl", - "[In2(phen)3Cl6]CH3CN; Li-TFSI; TBP", - "BCF; Li-TFSI; TBP", - "Ox-SWCNTs", - "PCBTBT", - "SiO-np", - "Carbon-nt@G; Li-TFSI; TBP", - "Cu9S5@SiO2-np", - "FK209; Li-TFSI; Pb(NO3)2; TBP", - "PCDSA", - "Li-TFSI; TBP; MWCNTs", - "Graphydine-QDs; Li-TFSI; TBP; nan", - "Sb", - "FK102; Li-TFSI", - "Li-TFSI; TBP | Unknown", - "Li-TFSI; P4VP; TBP", - "Cu(TFSI)2", - "TEMPOL", - "FK209; Li-TFSI; Pb-MOFs; TBP", - "D3; Li-TFSI; TBP", - "PZ0.025", - "Li-TFSI; TBP; V2O5 | Undoped", - "Unknown | TBA", - "AcOH; FK209; Li-TFSI; TBP", - "F6-TCNNQ | Unknown", - "Cu-2Cl", - "DIO; PCDTBT", - "I2", - "DMC; F4-TCNQ", - "TPFPB", - "DPPS", - "PZ0.030", - "NaLuF4:Yb,Er; Li-TFSI; TBP", - "DMSO", - "FeCl3; Li-TFSI; TBP", - "D-TBP", - "Unknown | Cu", - "NiPcS4", - "rGO-PhBiTh", - "ETH44-ox", - "Unknown | TBP | Unknown", - "Unknown | Li-TFSI; TBP", - "GD-QDs; Li-TFSI; TBP", - "TBA-TFSI" + "89.0", + "90.0", + "40.0 | 11.0", + "5.0 | 130.0", + "50.0", + "70.0 | 10.0 | 10.0", + "220.0", + "230.0 | 100.0", + "81.0", + "180.0", + "45.0", + "15.0 | 80.0", + "14000.0", + "50.0 | 4000.0", + "7.0 | 80.0", + "24.0 | 15.0 | 20.0 | 480.0 | 8.0", + "10.0 | 100.0 | 200.0", + "203.0", + "10.0 | 120.0 | 70.0", + "11.0 | 30.0", + "1.0 | 200.0", + "30.0 | 120.0 | nan", + "60.9", + "11000.0 | nan", + "1.3 | 100.0", + "300.0 | 250.0", + "2.0 | 1.0 | 7.0 | 5.0 | 50.0", + "15.0 | 150.0", + "60.4", + "35.0 | 103.0 | 35.0", + "2.5 | 154.0", + "6.0 | 11.0 | 20.0", + "1800.0", + "22000.0", + "11.0 | 50.0", + "60.5", + "95.0", + "20.0 | 10.0 | 20.0", + "10.0 | 110.0", + "20.0 | 14.0", + "87.0", + "10.0 | 90.0", + "70.0", + "12.0 | 40.0", + "21.0 | 250.0", + "11.0", + "500.0", + "2000.0 | nan", + "5.0 | nan", + "53150.0", + "2000.0", + "20.0 | 15.0 | 20.0 | 480.0 | 8.0", + "10.0 | 80.0", + "1.0 | 7.0 | 40.0", + "21.0 | 15.0 | 20.0 | 480.0 | 8.0", + "8.0 | 120.0", + "5.0 | 150.0", + "nan | 6.0 | nan", + "61210.0", + "260.0", + "201.0", + "3.0 | 1.0 | 7.0 | 5.0 | 50.0", + "2.0 | 100.0", + "7.0 | 60.0", + "100.0 | 1000.0", + "16500.0 | nan", + "10.0 | 15.0 | 30.0", + "240.0", + "7.2 | 70.0", + "50.0 | 50.0", + "11.0 | nan", + "9.0 | nan", + "35.0 | 95.0 | 35.0", + "330.0", + "10.0 | 30000.0", + "60.3", + "85.0", + "60.1", + "130.0 | 100.0", + "2.5 | 154.0 | 50.0", + "nan | 150.0", + "15.0 | 12.0", + "10.0 | 70.0", + "9.0", + "15.0 | 12.0 | 60.0", + "150.0 | 500.0", + "8.0", + "0.5 | 60.0", + "10.0 | 200.0", + "13.0", + "7.0 | 12.0 | 30.0", + "820.0", + "1.0 | 6.0", + "nan | 80.0", + "13.0 | 80.0", + "25.0 | 15.0 | 20.0 | 480.0 | 8.0", + "2.0 | 250.0", + "93.2", + "500.0 | 150.0", + "5000.0", + "20.0", + "52.0", + "7.0 | 18.0 | 30.0", + "21.0 | 7.0 | 20.0", + "60.11", + "82.0", + "15.0 | 12.0 | 20.0", + "6.0 | 1.5 | 9.5 | 20.0", + "7870.0", + "8.0 | 20.0 | 115.0 | 8.0 | 20.0", + "30.0 | 120.0", + "30.0 | 80.0", + "10.0 | 20.0", + "14.0", + "8.0 | 20.0 | 65.0 | 8.0 | 20.0", + "80.0 | 10.0", + "2001.0 | nan", + "nan | 100.0", + "250.0", + "10.0 | 10.0", + "nan | 220.0", + "65.0", + "150.0", + "15.0 | 50.0", + "4000000000.0", + "15.0 | 200.0", + "46530.0", + "nan | 70.0", + "23.0 | 15.0 | 20.0 | 480.0 | 8.0", + "35.0 | 10.0 | 35.0", + "100000.0 | nan", + "88.0 | 700.0", + "5.0 | 12.0 | 40.0", + "1.0 | 250.0", + "8000.0 | nan", + "60.8", + "12000.0", + "15.0 | nan", + "60.7", + "nan | 25000.0", + "1.0 | 100.0", + "30.0 | 70.0", + "50000.0", + "30.0 | 135.0", + "8.0 | 200.0", + "35.0", + "180.0 | 50.0", + "30.0 | 7.0 | 80.0", + "750.0", + "32000.0", + "1.0 | nan", + "5.0 | 90.0", + "8.0 | 80.0", + "150.0 | 4900.0", + "90.0 | 200.0", + "51.0", + "22.0 | 15.0 | 20.0 | 480.0 | 8.0", + "4500.0", + "16000.0", + "24000.0", + "30000.0", + "10.0 | 60.0", + "12.0 | 100.0", + "7.0 | 120.0", + "9.0 | 100.0", + "6.7 | 100.0", + "154.0 | 50.0", + "25.0", + "10.0 | 202.0", + "20.0 | 10.0 | 35.0", + "80.0 | 20.0", + "40.0", + "65.0 | nan", + "83.0", + "11200.0", + "8.0 | 90.0", + "20.0 | 7.0 | 20.0", + "230.0", + "75.0", + "8.0 | 60.0", + "190.0", + "6.0 | 100.0", + "7.0 | 1.0", + "3.0 | nan", + "15000.0", + "35.0 | 84.0 | 35.0", + "60.6", + "9.0 | 80.0", + "nan | 400.0 | 500.0", + "10.0 | 40.0", + "145.0", + "nan | 50.0 | 4000.0", + "1500.0", + "100.0 | 125.0", + "2.0 | 200.0", + "28.0 | 15.0 | 20.0 | 480.0 | 8.0", + "7.0 | 70.0", + "60.0", + "125.0", + "5.0", + "40000.0", + "45.0 | nan", + "35.0 | 76.0 | 35.0", + "900.0", + "400.0", + "105.0 | 90.0", + "25000.0", + "8.0 | 30.0 | 100.0", + "180.0 | 100.0", + "2.0", + "20.0 | nan", + "80.0 | 150.0", + "30.0 | 100.0", + "11.0 | 10.0", + "5.0 | 120.0", + "4.0", + "1.0 | 10.0 | 20.0", + "14.0 | 20.0", + "15.0 | 40.0", + "40.0 | 120.0", + "20.0 | 250.0", + "600.0", + "nan | 200.0", + "12.0", + "12000.0 | nan", + "6.0 | nan", + "100.0", + "105.0", + "8.0 | 110.0", + "15.0 | 120.0", + "37500.0", + "23000.0 | nan", + "5.0 | 10.0 | 35.0", + "10.0 | 40.0 | nan", + "80.0 | 50.0", + "10000.0 | nan", + "8.0 | 20.0 | 85.0 | 8.0 | 20.0", + "28000.0", + "21000.0", + "48.0", + "9.0 | 25.0", + "4.0 | 80.0", + "15.0 | 100.0", + "96.0", + "3.0 | 80.0", + "200.0", + "70.0 | 10.0", + "4000.0 | nan", + "150.0 | nan", + "80.0 | 8.0", + "350.0", + "110.0 | 120.0", + "1.0 | 10.0 | 35.0", + "90.0 | 100.0", + "50.0 | 100.0", + "80000.0", + "10.0 | 120.0", + "202.0", + "200000.0", + "8000.0", + "35.0 | 120.0 | 70.0", + "160.0", + "10.0 | 55.0", + "3.5 | 100.0", + "2000.0 | 100.0 | nan", + "10.0 | 150.0", + "25.0 | 100.0", + "12.0 | 80.0", + "5.0 | 10.0 | 40.0", + "170.0", + "35.0 | 64.0 | 35.0", + "1500-2000", + "55.0", + "9000.0", + "6.0", + "4900.0", + "10.0 | 100.0 | 10.0 | 100.0", + "100.0 | 20.0", + "20.0 | 100.0", + "7.0 | nan", + "34.0 | 20.0 | 25.0 | nan | 8.0", + "3333.0", + "2.5 | 80.0", + "20.0 | 80.0", + "18.0 | 10.0 | 19.0", + "150.0 | 100.0", + "5.0 | 60.0", + "6.0 | 10.0 | 35.0", + "3500.0", + "550.0", + "15.0", + "12500.0", + "35.0 | 120.0", + "8.0 | 100.0", + "7.0 | 24.0 | 30.0", + "300.0", + "11.0 | 80.0", + "50.0 | 101.0", + "185.0", + "71600.0", + "77.0 | nan", + "5.0 | 100.0", + "120.0", + "88.0", + "130.0", + "3000.0", + "110.0", + "20.0 | 15.0", + "120000.0", + "300000.0", + "10.0 | 100.0", + "26.0 | 15.0 | 20.0 | 480.0 | 8.0", + "11000.0", + "6500.0", + "1000.0", + "5.0 | 10.0 | 5.0", + "10.0 | 1.0 | 10.0 | 40.0", + "34.0 | 20.0 | 55.0 | nan | 15.0", + "6.3 | 70.0", + "60000.0", + "100.0 | 100.0", + "10.0 | 35.0", + "1200.0", + "60.2", + "390.0", + "10.0", + "11.0 | 20.0", + "25800.0", + "35.0 | 160.0", + "35.0 | 53.0 | 35.0", + "30.0 | nan", + "1.0 | 120.0", + "120.0 | 70.0", + "20000.0", + "5.0 | 20.0 | 35.0", + "210.0", + "2500.0", + "5.0 | 300.0", + "5.0 | 80.0", + "10.0 | 10.0 | 35.0", + "800.0", + "1.9 | 70.0", + "1.45 | nan", + "9.0 | 110.0", + "40.0 | 4000.0", + "3.0 | 100.0", + "20.0 | 14.0 | 20.0", + "15.0 | 350.0", + "53.0", + "70.0 | 30.0", + "250.0 | 50.0 | 1000.0", + "86.0", + "1600.0", + "3.0 | 200.0", + "7000.0", + "97.0", + "30.0", + "6.0 | 60.0", + "7.0 | 100.0", + "3.0 | 150.0", + "10.0 | nan | nan", + "10.0 | 75.0", + "10.0 | 50.0", + "70000.0", + "9600.0", + "140.0", + "50.0 | 120.0", + "100.0 | nan", + "80.0", + "nan | 5.0", + "27.0 | 15.0 | 20.0 | 480.0 | 8.0", + "80.0 | 80.0", + "6.0 | 80.0", + "13000.0", + "35.0 | 88.0 | 35.0", + "4000.0", + "100000.0", + "60.0 | 40.0", + "84.0", + "16.0", + "10.0 | 201.0", + "10000.0", + "34.0 | 20.0 | 75.0 | nan | 35.0", + "10.0 | 8.5 | 10.0" ] } } ] }, - "name": "additives_compounds", - "description": "List of the dopants and additives that are in each layer of the HTL-stack\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- The layers must line up with the previous fields.\n- If several dopants/additives, e.g. A and B, are present in one layer, list the dopants/additives in alphabetic order and separate them with semicolons, as in (A; B)\n- If no dopants/additives, state that as \u201cUndoped\u201d\n- If the doping situation is unknown, stat that as\u2018Unknown\u2019\nExample\nLi-TFSI; TBP\nFK209; Li-TFSI; TBP\nF4-TCNQ\nUndoped\nCu | Ag; Cu", + "name": "thickness_list", + "description": "A list of thicknesses of the individual layers in the stack.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- The layers must line up with the previous filed.\n- State thicknesses in nm\n- Every layer in the stack have a thickness. If it is unknown, state this as \u2018nan\u2019\n- If there are uncertainties, state the best estimate, e.g write 100 and not 90-110\nExample\n100\n10 | 80\nnan | 100", "type": { "type_kind": "python", "type_data": "str" @@ -46428,7 +50990,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, + "m_parent_index": 2, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -46437,228 +50999,53 @@ window.nomadArtifacts = { "props": { "suggestions": [ "", - "0.1 %; nan", - "2 mg/ml; 520 mg/ml; 0.036 vol%", - "520 mg/ml; 0.036 mL", - "9 uL(520mg/mLACN); 15 uL", - "6.76 mg/ml; 0.5 vol%", - "1 %; nan", - "1.79 vol%; 2.5 vol%", - "0.90 vol%; 2.07 vol%; 3.60 vol%", - "11.4 mg/ml; 36 \u00b5l/ml", - "35 uL(260mg/1mLACN); 30 uL/mL", - "35 uL(260mg/mLACN); 30 uL", - "3 %", - "nan | 2 uL/mL", - "2.85 vol%; 1.75 vol% | nan", - "520 mg/ml; 2.88 vol%", - "11.7 mg/ml; 36 \u00b5l/ml", - "520 mg/ml; 0.0338 vol%", - "0.064 M; 0.198 M", - "0.6 %", - "8.7 mg/ml; 8.7 mg/ml; 2.88 vol%", - "0.064; 0.198 M; nan", - "50 vol%", - "nan | 1 vol%", - "0.29 vol%; 1.75 vol%; 2.88 vol%", - "0.2", - "17.5 uL(300mg/1mLACN); 28.8 uL", - "3 mol%; 50 mol%; 330 mol%", - "9.1 mg/ml; 30 \u00b5l/ml", - "67 vol%", - "30 mM; 30 mM", - "0.6 vol%", - "5 mg/ml; 520 mg/ml; 0.036 vol%", - "8 %", - "0.03 M; 0.5 M; 3.3 M", - "7 %", - "10 %; nan", - "32 mM; 28.5 \u00b5l/ml", - "33 vol%", - "0.029 vol%; 28.3 mg/ml; 0.0288 vol%", - "1.75 vol%; 2.85 vol%", - "6.24 mg/ml; 8 \u00b5l/ml", - "6 mol%", - "0.6 mg/ml", - "30 mM; 200 mM", - "0.32 mg/ml", - "10.4 mg/ml; 0.03 ml/ml", - "0.1", - "0.5 %; nan", - "nan; nan; 1 mol%", - "520 mg/ml; 0.036 vol%", - "9.1 mg/ml; 0.029 ml/ml", - "9.1 mg/ml; 28.8 \u00b5l/ml", - "1.7 vol%; 2.0 vol%", - "nan; nan; 2 mol%", - "5.2 mg/ml; 0.02 ml/ml", - "15.08 mg/ml; 9.1 mg/ml; 28.8 \u00b5l/ml", - "2.88 vol%", - "5 wt%; 1 wt%", - "0.32 mg/ml | nan", - "0.5 vol%; 6.76 mg/ml; 0.5 vol%", - "1.5 %", - "0.035 M; 0.231 M", - "nan; 0.8 wt%; nan", - "5.3 mol%", - "30 mol%; 80 mol%", - "7 %; nan", - "2 vol%; nan; nan", - "10 mol%", - "9.1 mg/ml; 0.028 ml/ml", - "54 uL(10mg/mLACN); 11.2 uL", - "1 mg/ml; 520 mg/ml; 0.036 vol%", - "0.05 M; 0.5 M; 3.3 M", - "4 wt%", - "9.1 mg/ml; 0.03 ml/ml", - "17.5 uL(520mg/mLACN); 28.8 uL", - "17.5 uL(520mg/mLACN); 29 uL", - "0.05", - "0.5 mg/ml", - "nan; 0.6 wt%; nan", - "45 uL(2mg/mLACN); 10.2 uL", - "12 \u00b5l/ml", - "2 wt%", - "30 mM.200mM", - "0.075", - "nan; nan; nan", - "0.05 wt%", - "40 uL(40mg/mLACN); 23 uL(520mg/mLACN); 40 uL", - "520 mg/ml; 2.85 vol%", - "nan; 0.4 wt%; nan", - "0.025", - "300 mg/ml; 520 mg/ml; 0.028 vol%", - "2 mM; 2.88 vol%", - "0.15", - "0.015", - "500 mg/ml; 0.03 vol%", - "1 vol%; nan; nan", - "0.01 %; nan; nan", - "2.45 mM; 40 mM; 270 mM", - "nan | 1.75 vol%; 2.88 vol%", - "520 mg/ml; 0.0288 vol%", - "40 mol%", - "7.8 mol%", - "6 wt%", - "3.38 mg/ml; 22.5 \u00b5l/ml", - "7.5 mg/ml; 7.65 mg/ml; 0.01 ml/ml", - "10 mg/ml", - "10 wt%", - "32 mM; 195 mM", - "520 mg/ml; 334 mol%", - "3.0 vol%; 3.6 vol%", - "1.8 mM; 30 mM; 200 mM", - "2.88 vol%; 1.75 vol%", - "12.3 mol%", - "0.01 %; nan", - "17.5 uL(520mg/mlACN); 28.8 uL", - "20 mol%", - "50 %; nan", - "170 mg/ml; nan", - "5.6 mg/ml; 30 mg/ml", - "35 mM; 210 mM", - "0.4 %", - "4 mM; 30 mM; 200 mM | nan", - "0.3 wt%", - "0.007", - "18 uL(1MACN); 29 uL(1MCB)", - "2.2 mg/ml", - "12 %", - "1.44 vol%; 2.88 vol%", - "0.5 mg/ml; 0.5 vol%", - "8.7 mg/ml; 9.8 mg/ml; 0.029 ml/ml", - "11 %", - "1 %", - "10 uL(300mg/mLACN); 17.5 uL(520mg/mLACN); 28.8 uL", - "4 %", - "1.5 mM; 14 mM; 56 mM", - "4 mM; 30 mM; 200 mM", - "3.0 wt%", - "29 uL(300mg/mL); 18 uL(520mg/mLACN); 29 uL", - "0.0018", - "9 mM; 55 mM", - "11.4 mg/ml; 0.036 ml/ml", - "nan | nan", - "20 uL(517mg/1mLACN); 36 uL; 8 uL(375mg/mLACN)", - "6 %", - "5.4 mg/ml; 9.36 mg/ml; 0.028 ml/ml", - "18 uL(520mg/1mLACN); 30 uL; 29 uL(300mg/MLACN)", - "11.34 mg/ml; 0.0176 ml/ml", - "2.0 mg/ml", - "0.0056 M; 0.031 M; 0.19 M", - "30 mol%", - "520 mg/ml; 0.285 vol%", - "20 uL(517mg/mLACN); 36 uL; 8 uL(376mg/mLACN)", - "nan; nan; 4 mol%", - "0.44 M", - "170 mg/ml; 0.5 vol%", - "31.5 uL(300mg/mLACN); 17.5 uL(520mg/mL/ACN); 28.8 uL", - "8.7 mg/m; 9.1 mg/ml; 0.029 ml/ml", - "7.5 uL(170mg/mLACN); 4 uL", - "8.7 mg/ml; 9.1 mg/ml; 28.8 \u00b5l/ml", - "9.1 mg/ml; 28.8 \u00b5l/ml | 9.1 mg/ml; 28.8 \u00b5l/ml", - "1.6 vol%; 2.1 vol%; 3.6 vol%", - "0.0175 mL/mL; 0.0285 mL/mL", - "10.1 mol%", - "0.1 wt%", - "22.5 uL; 15 uL", - "0.5 vol%; nan; nan", - "9 %", - "0.0175 vol%; 0.0288 vol%", - "nan | 17.5 uL(520mg/mLACN); 28.8 uL", - "7.65 mg/ml; 1 vol%", - "1.75 vol%; 3.1 vol%", - "35 uL(520mg/mLACN); 60 uL", - "1.7 mg/ml; 7 \u00b5l/ml", - "0.0035", - "170 mg/ml; 0.004 vol%", - "2 %", - "1.75 vol%; 2.88 vol%", - "0.82 mg/ml; 2 \u00b5l/ml", - "3 %; nan", - "9.1 mg/ml; 0.0288 ml/ml", - "0.15 wt%", - "23 uL(90.9mg/mLACN); 39 uL", - "nan; nan; 3 mol%", - "2.5 %", - "17.5 uL(520mg/mLACN); 28.5 uL", - "18.2 mg/ml; 8 \u00b5l/ml", - "1.0 wt%", - "nan; 0.2 wt%; nan", - "nan | 2 vol%", - "520 mg/ml; 1.4 vol%", - "5 mol%", - "0.5 wt%", - "0.019 M; 0.007 M; 0.2 wt% | nan", - "8.8 mg/ml; 0.028 vol%; 0.035 vol%", - "nan | 20 vol%", - "30.2 uL(1756mg/mLACN); 9.7 uL", - "1.5 wt%", - "11.44 mg/ml; 36 \u00b5l/ml", - "0.5 mg/ml; 520 mg/ml; 0.036 vol%", - "1 wt%", - "70 uL(170mg/1mLACN); 20 uL", - "5.0 mg/ml", - "10 uL(520mg/mLACN); 28 uL; 35 uL(18.8mg/50mLACN)", - "17.5 uL(520mg/mLACN); 28.8 uK", - "1.5 mg/ml", - "30 uL(270mg/mLACN); 35 uL", - "3 wt%", - "5 at%", - "5 %", - "10 uL(170mg/mLACN); 5 uL", - "nan | 5 vol%", - "9.14 uL(0.25MACN); 21.02 uL(1.8MACN); 35.65 uL", + "Undoped | Undoped", + "TiO2-np", + "Undoped | Undoped | Undoped | Undoped | Undoped", + "B; P", + "C; NiO", + "B4C", + "WO3-np", + "P", + "B", + "Undoped", + "CuS" + ] + } + } + ] + }, + "name": "additives_compounds", + "description": "List of the dopants and additives that are in each layer of the HTL-stack\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- The layers must line up with the previous fields.\n- If several dopants/additives, e.g. A and B, are present in one layer, list the dopants/additives in alphabetic order and separate them with semicolons, as in (A; B)\n- If no dopants/additives, state that as \u201cUndoped\u201d\n- If the doping situation is unknown, stat that as\u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template, even if to most common back contacts is undoped metals\nExample\nCuS\nB; P\nAu-np | Undoped", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 3, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "4; 1", + "10 wt%", + "2 wt%", + "7; 3", "5 wt%", - "8.67 mg/ml; 9.1 mg/ml; 28.8 \u00b5l/ml", - "6.8 vol%; 3.4 vol%", - "0.0052", - "0.03; 3.3; 0.5", - "12 mol%", - "5 %; nan", - "0.8 %", - "nan | 10 vol%", - "520 mg/ml" + "0.1 wt%", + "9; 1", + "3.5 wt%", + "7.5 wt%", + "8 wt%", + "6.5 wt%", + "0.5 wt%" ] } } @@ -46682,133 +51069,444 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Spin-coating | Spin-coating >> Spin-coating", - "CBD | Dipp-coating", - "Spin-coating >> Spin-coating", - "Roller coating", - "Spin-coating >> Unknown", + "Evaporation | Evaporation | Evaporation | Evaporation", + "Doctor blading | Doctor blading | Doctor blading", + "Pressed", "Spray-coating | Spray-coating", - "Electropolymerisation", "Spin-coating | Spin-coating", - "Spray-pyrolys | Screen printing", - "Slot-die coating", + "Electropolymerisation | Sandwiching", "Brush painting", - "Lamination | Spin-coating | Spin-coating", + "Evaporation | DC Sputtering", + "Screen printing | Lamination", "Spin-coating | Evaporation", + "Sputtering | Sputtering | Sputtering", "Evaporation | Spin-coating", - "Ultrasonic spray", "Sputtering", - "Spin-coating >> MeOH wash", - "Sputtering | Unknown", - "Spin-coating | Spray-coating | Spin-coating", - "Evaporation | Co-evaporation", - "CBD | Spin-coating", + "Screen printing | Spray-coating", + "DC Sputtering", + "Evaporation | Sputtering | Sputtering", + "Evaporation | RF sputtering | E-beam evaporation", "Doctor blading | Spin-coating", - "Dropcasting | Spin-coating", - "Spin-coating | Sputtering", - "Spin-coating | Unknown", - "Electrodeposition | Spin-coating", + "Dropp casting", + "Lamination | Lamination", + "RF sputtering | Evaporation | Evaporation", "Evaporation | ALD", - "Magnetron sputtering >> Gas reaction", - "SILAR", "Inkjet printing", - "Electrospinning | Spin-coating", - "Evaporation >> Oxidation", "RF sputtering", - "Spin-coating >> Spin-coating >> Spin-coating", - "Spin-coating | Spin-coating >> Spin-coating >> Spin-coating", - "Evaoration | Spin-coating", - "Spin-coating | Lamination", - "Pulsed laser deposition | Sputtering", + "E-beam evaporation | E-beam evaporation | E-beam evaporation | PVD | Evaporation", + "Sputtering | Spray-coating", + "Candle burning | Sandwiching", + "Brush painting | Brush painting", "Evaporation | Evaporation", - "Spin-coating | RF sputtering", - "Electropolymerization", - "Spin-coating | Spin-coating | Lamination", - "Air brush spray", - "Spin-coating | Spray-coating", + "E-beam evaporation | E-beam evaporation | E-beam evaporation", + "CVD | Spin-coating >> reactive ion etching", + "Evaporation | Activated reactive evaporation", "Spin-coating | Doctor blading", "Sputtering | Sputtering", - "Sprinkling", - "Spray-coating | Spin-coating", - "Spin-coating | Spin-coating >> Spin-coating >> Spin-coating >> Spin-coating", - "Spin-coating | Spin-coating >> Lamination", - "Spin-coating | Spray-pyrolys", - "Spin-coating | Dipp-coating", - "Hydrothermal | Spin-coating", - "Spin-coating >> Blowing hot air", + "Drop coated", + "Sandwithcing", + "CVD >> Lamination", + "Unknown | Ultrasonic welding", + "Sputtering | Evaporation | Evaporation | Evaporation", + "Evaporation | Magnetron sputtering", + "Candel burning >> Sandwiching | Unknown | Unknown", + "Evaporation | RF magnetron sputtering", + "Candle burning | Lamination", + "ALD | Evaporation | ALD", + "Spray-pyrolys | Sandwiching", + "Spin-coating | Screen printing", "Lamination | Spin-coating", - "Spin-coating | Spin-coating | Spin-coating", - "Sputtering | Sputtering | Spin-coating", - "Magnetron sputtering | Spin-coating", + "Evaporation | DC Magnetron Sputtering", + "Lamination | Painting", "Lamination", - "Evaporation >> Gas reaction", - "E-beam evaporation | Spin-coating", + "Doctor blading | Ultrasonic welding", "Evaporation | Evaporation | Evaporation", + "Brush painting | Unknown", + "Evaporation | Sputtering", "PVD", - "Press-transfer | Spin-coating | Spin-coating", - "Dipp-coating >> Spin-drying | Spin-coating", "Dipp-coating", - "Cryo-controlled quasi-congealing spin-coating", - "Slot-die coating | Evaporation", + "Screen printing >> Lamination", + "Springkling | Sandwiching", + "Magnetron sputtering | Magnetron sputtering", + "Sputtering | Lamination", + "Spin-coating | Sandwiching", "Evaporation", - "Electrospraying", - "Spray-pyrolys", "Unknown", - "CBD", - "DC Magnetron Sputtering | Spin-coating", - "Drop-infiltration", - "ALD | Spin-coating", + "Unknown | Doctor blading", + "Evaporation | Magnetron sputtering | E-beam evaporation", + "Lamination | Evaporation", "CVD", + "Lamination >> Isostatic pressing", + "ALD | Evaporation", "Screen printing", - "Slot-die coating | Spin-coating", - "Centrifuge-casting", + "Evaporation | Sputtering | Evaporation", + "Unknown | Evaporation", + "Evaporation | Sputtering | Sputtering | Evaporation", "Doctor blading", - "Spin-coating | E-beam evaporation", "Magnetron sputtering", - "Substrate vibration assisted dropcasting", + "Evaporation | Evaporation | Evaporation | Evaporation | Evaporation", + "RF Magnetron Sputtering", + "DC Sputtering | Evaporation", + "Candle burning >> Sandwiching", "Dropcasting | Lamination", - "Sputtering | Spin-coating", - "DC Sputtering >> Oxidation", + "Lamination | Dropcasting", + "Electrospinning", + "Suttering", "E-beam evaporation", - "Spin-coating | Spin-coating >> Spin-coating >> Spin-coating >> Spin-coating >> Spin-coating", - "Unknown | Spin-coating", - "Spin-coating | Dropcasting", - "Spray-pyrolys | Dipp-coating", + "Candle burning >> Lamination", + "Screen printing | Painting", + "Evaporation >> Evaporation >> Oxidation", + "Evaporation | E-beam evaporation | E-beam evaporation | E-beam evaporation | E-beam evaporation", + "DC Magnetron Sputtering | Evaporation", + "Sputtering >> Lamination", + "Evaporation | Sandwiching", "Dropcasting", - "Spin-coating >> Spin-coating >> Spin-coating >> Spin-coating", "Pulsed laser deposition", "DC Magnetron Sputtering", - "Evaporation >> Gas-reaction", - "Blow-drying", - "Hydrothermal", - "Electrodeposition", + "Screen printing | Unknown", "E-beam evaporation | E-beam evaporation", - "Spray-pyrolys | Spin-coating", - "Dipp-coating | Spin-coating", - "Evaporation >> Polymerisation", - "RF magnetron sputtering", - "Dipp-coating | Evaporation", - "Slot-die coating | Slot-die coating", - "Anti-solvent quenching | Spin-coating", - "Gelation", + "Sputtering | Evaporation", + "Lamination | Spin-coating | Evaporation", + "Brush painting | Sandwiching", "Spin-coating", - "Spin-coating | ALD", + "Sputtering | E-beam evaporation | E-beam evaporation", "Doctor blading | Doctor blading", "Spray-coating", "Spin-coating | Evaporation | Evaporation", - "ALD", - "Co-evaporation | Evaporation", - "Spin-coating | Drop-infiltration", - "Reactive magnetron sputtering", - "Electrospraying | Spin-coating", - "Hydrolys | Drop-infiltration" + "Doctor blading | Sandwhiching", + "Sandwiching", + "Painting", + "Mechanical clipping", + "Evaporation | Spray-coating", + "Candel burning | Sandwiching", + "Doctor blading | Lamination", + "Screen printing | Screen printing", + "Evaporation | DC Magnetron Sputtering | E-beam evaporation" + ] + } + } + ] + }, + "name": "deposition_procedure", + "description": "The deposition procedures for the HTL-stack.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate them by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- Thermal annealing is generally not considered as an individual reaction step. The philosophy behind this is that every deposition step has a thermal history, which is specified in a separate filed. In exceptional cases with thermal annealing procedures clearly disconnected from other procedures, state \u2018Thermal annealing\u2019 as a separate reaction step.\n- Please read the instructions under \u201cPerovskite. Deposition. Procedure\u201d for descriptions and distinctions between common deposition procedures and how they should be labelled for consistency in the database.\n- A few additional clarifications:\n- Lamination\no A readymade film is transferred directly to the device stack. A rather broad concept. An everyday kitchen related example of lamination would eb to place a thin plastic film over a slice of pie.\n- Sandwiching\no When a readymade top stack simply is placed on top of the device stack. Could be held together with clams. The typical example is a when a \u201cCarbon | FTO | SLG\u201d is placed on top of the device stack. Standard procedure in the DSSC filed.\nExample\nEvaporation\nEvaporation | Evaporation\nDoctor blading\nScreen printing\nSputtering\nLamination\nE-beam evaporation\nSandwiching", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 5, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Solid", + "Liquid", + "Unknown", + "Gas | Gas | Gas | Gas | Gas", + "Solid | Gas", + "Solid | Solid | Solid", + "Liquid | Gas | Gas", + "Liquid | Solid", + "Gas", + "Liquid >> Solid", + "Gas | Gas", + "Liquid | Gas" + ] + } + } + ] + }, + "name": "deposition_aggregation_state_of_reactants", + "description": "The physical state of the reactants.\n- The three basic categories are Solid/Liquid/Gas\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the aggregation state associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- Most cases are clear cut, e.g. spin-coating involves species in solution and evaporation involves species in gas phase. For less clear-cut cases, consider where the reaction really is happening as in:\no For a spray-coating procedure, it is droplets of liquid that enters the substrate (thus a liquid phase reaction)\no For sputtering and thermal evaporation, it is species in gas phase that reaches the substrate (thus a gas phase reaction)\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nLiquid\nGas | Liquid\nLiquid | Liquid >> Liquid", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 6, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "N2 | Vacuum", + "Vacuum | Vacuum", + "Unknown", + "Air", + "Vacuum", + "Vacuum | Vacuum | Vacuum | Vacuum | Vacuum", + "Air | Vacuum | Vacuum", + "Air >> Air", + "Ar", + "Ar | O2" + ] + } + } + ] + }, + "name": "deposition_synthesis_atmosphere", + "description": "The synthesis atmosphere.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the atmospheres associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- If the synthesis atmosphere is a mixture of different gases, e.g. A and B, list the gases in alphabetic order and separate them with semicolons, as in (A; B)\n- \u201cDry air\u201d represent air with low relative humidity but where the relative humidity is not known\n- \u201cAmbient\u201d represent air where the relative humidity is not known. For ambient conditions where the relative humidity is known, state this as \u201cAir\u201d\n- \u201cVacuum\u201d (of unspecified pressure) is for this purpose considered as an atmospheric gas\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nVacuum\nVacuum | N2\nAir | Ar; H2O >> Ar", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 7, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "0.0006 Pa", + "0.000009 mbar", + "0.0001 Torr", + "0.01 Torr", + "0.0000002 Torr", + "0.000005 mbar", + "0.000002 bar", + "0.0001 mbar", + "0.0001 Pa | 0.0001 Pa", + "0.0005 Pa", + "0.00001 mbar", + "0.0004 Pa", + "0.00005 Torr", + "0.0003 bar", + "0.0000019 Torr", + "0.1 Torr", + "0.000001 mbar", + "1 atm >> 0.2 MPa", + "0.0000001 Torr", + "0.00001 Pa", + "0.000001 bar", + "0.000000001 bar", + "0.000006 Torr", + "0.000007 Torr", + "1.2 mTorr", + "0.006 Torr", + "0.000004 Torr", + "10 E-7Torr", + "0.00005 mbar", + "0.00001 Torr", + "2 e-05", + "2 E-10Torr", + "0.00005 Pa", + "0.000008 bar", + "0.00000003 Torr", + "0.0001 Pa", + "0.000001 Torr", + "0.0002 Pa", + "0.0000048 Torr", + "0.000002 Torr", + "0.0003 Pa", + "0.00003 mbar", + "0.0000001 mbar", + "0.000002 mbar", + "1 atm", + "0.000005 Torr" + ] + } + } + ] + }, + "name": "deposition_synthesis_atmosphere_pressure_total", + "description": "The total gas pressure during each reaction step\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the pressures associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- Pressures can be stated in different units suited for different situations. Therefore, specify the unit. The preferred units are:\no atm, bar, mbar, mmHg, Pa, torr, psi\n- If a pressure is not known, stat that as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 100 pa and not 80-120 pa.\nExample\n1 atm\n0.002 torr | 10000 Pa\nnan >> 1 atm | 1 atm", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 8, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "0.0001 mbar", + "0.0001 Pa | 0.0001 Pa", + "0.00001 mbar", + "0.0004 Pa", + "0.0003 bar", + "0.000001 mbar", + "1 atm >> 0.2 MPa", + "0.00001 Pa", + "0.000006 Torr", + "0.000007 Torr", + "0.006 Torr", + "0.000004 Torr", + "0.00001 Torr", + "0.000001 Torr", + "0.000002 Torr", + "0.00003 mbar", + "0.0003 Pa", + "0.0000001 mbar", + "0.000002 mbar", + "1 atm", + "0.000005 Torr" + ] + } + } + ] + }, + "name": "deposition_synthesis_atmosphere_pressure_partial", + "description": "The partial pressures for the gases present during each reaction step.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the pressures associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- If the synthesis atmosphere is a mixture of different gases, e.g. A and B, list the partial pressures and separate them with semicolons, as in (A; B). The list of partial pressures must line up with the gases they describe.\n- In cases where no gas mixtures are used, this field will be the same as the previous filed.\nExample\n1 atm\n0.002 torr | 10000 Pa\nnan >> 0.99 atm; 0.01 atm | 1 atm", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 9, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "25.0", + "30 >> 30", + "30.0", + "50 | nan | nan", + "50.0" + ] + } + } + ] + }, + "name": "deposition_synthesis_atmosphere_relative_humidity", + "description": "The relative humidity during each deposition step\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the relative humidity associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns\n- If the relative humidity for a step is not known, stat that as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 35 and not 30-40.\nExample\n35\n0 | 20\nnan >> 25 | 0", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 10, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Unknown", + "none", + "Methanol | none | none", + "Ethyl cellulose; Terpineol", + "IPA | none", + "Ethyl cellulose; Terpineol | Unknown" + ] + } + } + ] + }, + "name": "deposition_solvents", + "description": "The solvents used in each deposition procedure for each layer in the stack\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvents associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solvent is a mixture of different solvents, e.g. A and B, list the solvents in alphabetic order and separate them with semicolons, as in (A; B)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- For non-liquid processes with no solvents, state the solvent as \u2018none\u2019\n- If the solvent is not known, state this as \u2018Unknown\u2019\n- Use common abbreviations when appropriate but spell it out when risk for confusion\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nnone\nAcetonitile; Ethanol | Chlorobenzene\nnone >> Ethanol; Methanol; H2O | DMF; DMSO", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 11, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "1", + "1 | 1", + "1 | nan | nan" + ] + } + } + ] + }, + "name": "deposition_solvents_mixing_ratios", + "description": "The mixing ratios for mixed solvents\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvent mixing ratios associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- For pure solvents, state the mixing ratio as 1\n- For non-solvent processes, state the mixing ratio as 1\n- For unknown mixing ratios, state the mixing ratio as \u2018nan\u2019\n- For solvent mixtures, i.e. A and B, state the mixing ratios by using semicolons, as in (VA; VB)\n- The preferred metrics is the volume ratios. If that is not available, mass or mol ratios can be used instead, but it the analysis the mixing ratios will be assumed to be based on volumes.\nExample\n1\n4; 1 | 1\n1 >> 5; 2; 0.3 | 2; 1", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 12, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Shanghai MaterWin New Material", + "Guangzhou Seaside Technology", + "Unknown" + ] + } + } + ] + }, + "name": "deposition_solvents_supplier", + "description": "The suppliers of all the solvents.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvent suppliers associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solvent is a mixture of different solvents, e.g. A and B, list the associated suppliers and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- For non-liquid processes with no solvents, mark the supplier as \u2018none\u2019\n- If the supplier for a solvent is unknown, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nSigma Aldrich\nSigma Aldrich; Fisher | Acros\nnone >> Sigma Aldrich; Sigma Aldrich | Unknown", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 13, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Unknown" ] } } ] }, - "name": "deposition_procedure", - "description": "The deposition procedures for the HTL-stack.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate them by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- Thermal annealing is generally not considered as an individual reaction step. The philosophy behind this is that every deposition step has a thermal history, which is specified in a separate filed. In exceptional cases with thermal annealing procedures clearly disconnected from other procedures, state \u2018Thermal annealing\u2019 as a separate reaction step.\n- Please read the instructions under \u201cPerovskite. Deposition. Procedure\u201d for descriptions and distinctions between common deposition procedures and how they should be labelled for consistency in the database.\nExample\nSpin-coating\nSpin-coating | Spin-coating\nEvaporation\nSpray-pyrolys", + "name": "deposition_solvents_purity", + "description": "The purity of the solvents used.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvent purities associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solvent is a mixture of different solvents, e.g. A and B, list the associated purities and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- Use standard nomenclature for purities, e.g. pro analysis, puris, extra dry, etc.\n- For non-liquid processes with no solvents, state the purity as \u2018none\u2019\n- If the purity for a solvent is not known, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nPro analysis\nPuris; Puris| Tecnical\nnone >> Pro analysis; Pro analysis | Unknown", "type": { "type_kind": "python", "type_data": "str" @@ -46817,7 +51515,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, + "m_parent_index": 14, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -46825,27 +51523,73 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Solid", - "Liquid", - "Liquid | Liquid", + "", + "Al", + "Graphite", + "Mg | Ag", + "Carbon Paste", + "ITO", + "AgAl", + "Carbon | nan | nan", + "IZO", + "Au", + "Ag | Au", + "Cu", + "Ag | MoO3", + "Cu | Ag", + "Cr | Au", + "Ag-nanocubes | Ag | MoO3", + "Carbon | Ag", + "MoO3 | Al", + "Ag", + "IZTO", + "PEDOT:PSS", + "AZO", + "Adhesive; PEDOT:PSS | PET; Ni-mesh", + "PTCBI | Ag | WO3 | PTCBI | Ag", + "AZO-np | Ag", + "Carbon", + "PEDOT:PSS | Al" + ] + } + } + ] + }, + "name": "deposition_reaction_solutions_compounds", + "description": "The non-solvent precursor chemicals used in each reaction step\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the non-solvent chemicals associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several compounds, e.g. A and B, list the associated compounds in alphabetic order and separate them with semicolons, as in (A; B)\n- Note that also dopants/additives should be included\n- When several precursor solutions are made and mixed before the reaction step, it is the properties of the final mixture used in the reaction we here describe.\n- The number and order of layers and reaction steps must line up with the previous columns.\n- For gas phase reactions, state the reaction gases as if they were in solution.\n- For solid-state reactions, state the compounds as if they were in solution.\n- For reaction steps involving only pure solvents, state this as \u2018none\u2019\n- If the compounds for a deposition step is not known, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nAu\nCuI\nAg", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 15, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "DongDaLai company", "Unknown", - "Liquid | Liquid | Liquid", - "Liquid | Liquid >> Liquid >> Liquid >> Liquid >> Liquid", - "Liquid >> Liquid", - "Gas", - "Gas >> Gas", - "Liquid | Liquid >> Liquid >> Liquid >> Liquid", - "Liquid | Liquid >> Liquid >> Liquid", - "Gas | Liquid", - "Gas | Gas", - "Liquid | Gas" + "Solaronix", + "Styccobond; Agfa | Epigem", + "Heraeus", + "Guangzhou Seaside Technology", + "Sigma Aldrich | Unknown", + "Sigma Aldrich", + "Ulet", + "Shanghai MaterWin New Materials Co., Ltd" ] } } ] }, - "name": "deposition_aggregation_state_of_reactants", - "description": "The physical state of the reactants.\n- The three basic categories are Solid/Liquid/Gas\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the aggregation state associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- Most cases are clear cut, e.g. spin-coating involves species in solution and evaporation involves species in gas phase. For less clear-cut cases, consider where the reaction really is happening as in:\no For a spray-coating procedure, it is droplets of liquid that enters the substrate (thus a liquid phase reaction)\no For sputtering and thermal evaporation, it is species in gas phase that reaches the substrate (thus a gas phase reaction)\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nLiquid\nGas | Liquid\nLiquid | Liquid >> Liquid", + "name": "deposition_reaction_solutions_compounds_supplier", + "description": "The suppliers of the non-solvent chemicals.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the non-solvent chemical suppliers associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several dissolved compounds, e.g. A and B, list the associated suppliers and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- For gas phase reactions, state the suppliers for the gases or the targets/evaporation sources that are evaporated/sputtered/etc.\n- For solid state reactions, state the suppliers for the compounds in the same way.\n- For reaction steps involving only pure solvents, state the supplier as \u2018none\u2019 (as that that is entered in a separate filed)\n- For chemicals that are lab made, state that as \u201cLab made\u201d or \u201cLab made (name of lab)\u201d\n- If the supplier for a compound is unknown, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nDysole; Sigma Aldrich; Dyenamo; Sigma Aldrich\nSigma Aldrich; Fisher | Acros\nLab made (EPFL) | Sigma Aldrich >> none", "type": { "type_kind": "python", "type_data": "str" @@ -46854,7 +51598,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 6, + "m_parent_index": 16, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -46862,32 +51606,15 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "N2 | Vacuum", - "Vacuum >> Air", - "N2", - "Vacuum | Ar", "Unknown", - "Air | N2", - "N2 >> methanol", - "N2 >> N2", - "N2 | N2", - "Ar | Ar", - "Air | Vacuum", - "Ambient", - "Air | Air", - "Dry air", - "Vacuum | Vacuum", - "Air", - "Vacuum", - "Ar; O2", - "Ar" + "99.99" ] } } ] }, - "name": "deposition_synthesis_atmosphere", - "description": "The synthesis atmosphere.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the atmospheres associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- If the synthesis atmosphere is a mixture of different gases, e.g. A and B, list the gases in alphabetic order and separate them with semicolons, as in (A; B)\n- \u201cDry air\u201d represent air with low relative humidity but where the relative humidity is not known\n- \u201cAmbient\u201d represent air where the relative humidity is not known. For ambient conditions where the relative humidity is known, state this as \u201cAir\u201d\n- \u201cVacuum\u201d (of unspecified pressure) is for this purpose considered as an atmospheric gas\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nN2\nVacuum | N2\nAir | Ar; H2O >> Ar", + "name": "deposition_reaction_solutions_compounds_purity", + "description": "The purity of the non-solvent chemicals.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the compound purities associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several dissolved compounds, i.e. A and B, list the associated purities and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- Use standard nomenclature for purities, e.g. pro analysis, puris, extra dry, etc.\n- For reaction steps involving only pure solvents, state this as \u2018none\u2019 (as that is stated in another field)\n- If the purity for a compound is not known, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nPro analysis\n99.999; Puris| Tecnical\nUnknown >> Pro analysis; Pro analysis | none", "type": { "type_kind": "python", "type_data": "str" @@ -46896,7 +51623,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 7, + "m_parent_index": 17, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -46905,30 +51632,15 @@ window.nomadArtifacts = { "props": { "suggestions": [ "", - "0.006 Torr", - "0.002 Pa", - "0.0001 Pa | nan", - "1 atm | 0.00004 Torr", - "0.000001 mbar | 0.000001 mbar", - "1 atm | 0.00003 mbar", - "1 atm | 1 atm", - "6 Pa", - "1 atm | 0.0001 Pa", - "1 atm | 0.000001 atm", - "1 atm | 0.000002 Torr", - "0.0001 Pa", - "1 atm", - "4 Pa", - "1 atm | 0.000001 Torr", - " N2", - "2 Pa" + "57.2 wt%; 42.8 wt% | nan", + "8 mg/ml | nan" ] } } ] }, - "name": "deposition_synthesis_atmosphere_pressure_total", - "description": "The total gas pressure during each reaction step\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the pressures associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- Pressures can be stated in different units suited for different situations. Therefore, specify the unit. The preferred units are:\no atm, bar, mbar, mmHg, Pa, torr, psi\n- If a pressure is not known, stat that as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 100 pa and not 80-120 pa.\nExample\n1 atm\n0.002 torr | 10000 Pa\nnan >> 1 atm | 1 atm", + "name": "deposition_reaction_solutions_concentrations", + "description": "The concentration of the non-solvent precursor chemicals.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the concentrations associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several dissolved compounds, e.g. A and B, list the associated concentrations and separate them with semicolons, as in (A; B)\n- The order of the compounds must be the same as in the previous filed.\n- For reaction steps involving only pure solvents, state this as \u2018none\u2019\n- When concentrations are unknown, state that as \u2018nan\u2019\n- Concentrations can be stated in different units suited for different situations. Therefore, specify the unit used. When possible, use one of the preferred units\no M, mM, molal; g/ml, mg/ml, \u00b5g/ml, wt%, mol%, vol%, ppt, ppm, ppb\n- For values with uncertainties, state the best estimate, e.g write 4 wt% and not 3-5 wt%.\nExample\n4 wt%\n0.2 M; 0.15 M| 10 mg/ml\n0.3 mol% | 2 mol%; 0.2 wt% | nan", "type": { "type_kind": "python", "type_data": "str" @@ -46937,7 +51649,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 8, + "m_parent_index": 18, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -46945,25 +51657,15 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "", - "1 atm | 0.00004 Torr", - "0.000001 mbar | 0.000001 mbar", - "1 atm | 0.00003 mbar", - "0.003 Torr; 0.003 Torr", - "1 atm | 1 atm", - "1 atm | 0.000001 atm", - "1 atm | 0.000002 Torr", - "1 atm", - "1 atn", - "1 atm | 0.000001 Torr", - "1 atm | 0.0001 Pa" + "15.0 | Unknown | Unknown", + "Unknown" ] } } ] }, - "name": "deposition_synthesis_atmosphere_pressure_partial", - "description": "The partial pressures for the gases present during each reaction step.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the pressures associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- If the synthesis atmosphere is a mixture of different gases, e.g. A and B, list the partial pressures and separate them with semicolons, as in (A; B). The list of partial pressures must line up with the gases they describe.\n- In cases where no gas mixtures are used, this field will be the same as the previous filed.\nExample\n1 atm\n0.002 torr | 10000 Pa\nnan >> 0.99 atm; 0.01 atm | 1 atm", + "name": "deposition_reaction_solutions_volumes", + "description": "The volume of the reaction solutions\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the volumes associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The volumes refer the volumes used, not the volume of the stock solutions. Thus if 0.15 ml of a solution is spin-coated, the volume is 0.15 ml\n- For reaction steps without solvents, state the volume as \u2018nan\u2019\n- When volumes are unknown, state that as \u2018nan\u2019\nExample\n0.1\n0.1 >> 0.05 | 0.05\nnan | 0.15", "type": { "type_kind": "python", "type_data": "str" @@ -46972,7 +51674,31 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 9, + "m_parent_index": 19, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Unknown" + ] + } + } + ] + }, + "name": "deposition_reaction_solutions_age", + "description": "The age of the solutions\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the age of the solutions associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- As a general guideline, the age refers to the time from the preparation of the final precursor mixture to the reaction procedure.\n- When the age of a solution is not known, state that as \u2018nan\u2019\n- For reaction steps where no solvents are involved, state this as \u2018nan\u2019\n- For solutions that is stored a long time, an order of magnitude estimate is adequate.\nExample\n2\n0.25 |1000 >> 10000\nnan | nan", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 20, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -46980,29 +51706,16 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "", - "30 | 30", - "0.9", "25", - "15", - "30.0", - "90.0", - "20.0", - "30", - "0.35", - "30 | 0", - "50.0", - "65.0", - "10.0", - "80.0", - "0 | 0" + "Unknown", + "25 | 25" ] } } ] }, - "name": "deposition_synthesis_atmosphere_relative_humidity", - "description": "The relative humidity during each deposition step\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the relative humidity associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns\n- If the relative humidity for a step is not known, stat that as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 35 and not 30-40.\nExample\n35\n0 | 20\nnan >> 25 | 0", + "name": "deposition_reaction_solutions_temperature", + "description": "The temperature of the reaction solutions.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the temperatures of the solutions associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a reaction solution undergoes a temperature program, list the temperatures (e.g. start, end, and other important points) and separate them with semicolons, e.g. 25; 100\n- When the temperature of a solution is unknown, state that as \u2018nan\u2019\n- For reaction steps where no solvents are involved, state the temperature of the gas or the solid if that make sense. Otherwise state this as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 120 and not 110-130.\n- Assume an undetermined room temperature to be 25\nExample\n25\n100; 50 | 25\nnan | 25 >> 25", "type": { "type_kind": "python", "type_data": "str" @@ -47011,7 +51724,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 10, + "m_parent_index": 21, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -47019,64 +51732,23 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Ethanol; Water", - "Chloroform", - "Ethylene glycol", - "2-methoxyethanol", - "Etyl cellulose; Terpineol", - "Diethyl sulfide", - "Dichlorobenzene", - "Unknown | Chlorobenzene", - "acetonitrile; Chlorobenzene", - "2-methoxyethanol; monoethanolamine", - "IPA | Chlorobenzene", + "25", "Unknown", - "Chlorobenzene | none", - "Ethanol | TMAOH solution", - "Chlorobenzene | Unknown", - "Toluene | Methanol", - "none", - "2-methoxyethanol; ethanolamine | none", - "acetonitrile", - "Methanol", - "IPA; Water", - "Water | Chlorobenzene", - "Water; Methanol", - "IPA | Diethyl sulfide", - "Toluene | DMF", - "DMF", - "Water | 2-metoxyethanol", - "1,2-dichlorobenzene", - "Chlorobenzene >> 2-Butanol", - "IPA | IPA", - "IPA | Unknown", - "Chlorobenzene", - "Chlorobenzene; acetonitrile", - "Hexanethiol", - "Ethyl acetate", - "2-methoxyethanol; ethanolamine", - "Water; IPA", - "DMF | Chlorobenzene", - "Toluene", - "Water", - "Chlorobenzene | Chlorobenzene", - "Ethanol", - "none | 2-metoxyethanol", - "Ethylene glycol | Methanol", - "Water | IPA", - "none | Chlorobenzene", - "Water | Water", - "IPA", - "none | none", - "Hexane | Unknown", - "Chlorobenzene | IPA" + "15", + "100", + "100 | 25", + "60", + "40", + "22", + "25 | 25", + "80" ] } } ] }, - "name": "deposition_solvents", - "description": "The solvents used in each deposition procedure for each layer in the stack\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvents associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solvent is a mixture of different solvents, e.g. A and B, list the solvents in alphabetic order and separate them with semicolons, as in (A; B)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- For non-liquid processes with no solvents, state the solvent as \u2018none\u2019\n- If the solvent is not known, state this as \u2018Unknown\u2019\n- Use common abbreviations when appropriate but spell it out when risk for confusion\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nChlorobenzene\nAcetonitile; Ethanol | Chlorobenzene\nnone >> Ethanol; Methanol; H2O | DMF; DMSO", + "name": "deposition_substrate_temperature", + "description": "The temperature of the substrate.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the temperatures of the substrates (i.e. the last deposited layer) associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The temperature of the substrate refers to the temperature when the deposition of the layer is occurring.\n- If a substrate undergoes a temperature program before the deposition, list the temperatures (e.g. start, end, and other important points) and separate them with semicolons (e.g. 25; 100)\n- When the temperature of a substrate is not known, state that as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 120 and not 110-130.\n- Assume that an undetermined room temperature is 25\nExample\n25\nnan\n125; 325; 375; 450 | 25 >> 25", "type": { "type_kind": "python", "type_data": "str" @@ -47085,7 +51757,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 11, + "m_parent_index": 22, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -47094,27 +51766,32 @@ window.nomadArtifacts = { "props": { "suggestions": [ "", - "1; 8", - "0.1; 51", - "1 >> 1", - "1; 0.006 | nan", - "1 | nan", - "nan | 1", - "1", - "1; 0.006", - "5; 1", - "1 | 1", - "1; 0.012", - "1; 1", - "1; 0.1", - "1; 3" + "25", + "350.0", + "85", + "120 >> 120", + "400", + "80", + "Unknown", + "450.0", + "100", + "120", + "450 | 25", + "60", + "250.0", + "60; 120", + "450", + "150.0", + "25; 100", + "100 | Unknown", + "550.0" ] } } ] }, - "name": "deposition_solvents_mixing_ratios", - "description": "The mixing ratios for mixed solvents\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvent mixing ratios associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- For pure solvents, state the mixing ratio as 1\n- For non-solvent processes, state the mixing ratio as 1\n- For unknown mixing ratios, state the mixing ratio as \u2018nan\u2019\n- For solvent mixtures, i.e. A and B, state the mixing ratios by using semicolons, as in (VA; VB)\n- The preferred metrics is the volume ratios. If that is not available, mass or mol ratios can be used instead, but it the analysis the mixing ratios will be assumed to be based on volumes.\nExample\n1\n4; 1 | 1\n1 >> 5; 2; 0.3 | 2; 1", + "name": "deposition_thermal_annealing_temperature", + "description": "The temperatures of the thermal annealing program associated with depositing the layers\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the annealing temperatures associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If the thermal annealing involves a temperature program with multiple temperature stages, list the temperatures (e.g. start, end, and other important points) and separate them with semicolons (e.g. 25; 100)\n- For values with uncertainties, state the best estimate, e.g. write 120 and not 110-130.\n- If no thermal annealing is occurring after the deposition of a layer, state that by stating the room temperature (assumed to 25\u00b0C if not further specified)\n- If the thermal annealing program is not known, state that by \u2018nan\u2019\nExample\n25\n50 | nan\n450 | 125; 325; 375; 450 >> 125; 325; 375; 450", "type": { "type_kind": "python", "type_data": "str" @@ -47123,7 +51800,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 12, + "m_parent_index": 23, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -47131,26 +51808,26 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Unknown | Sigma Aldrich", - "Fisher Chemical | ACROS Organic", + "40.0", "Unknown", - "Fisher Scientific", - "Heraeus", - "Guangzhou Seaside Technology", - "Nacalai Tesque; Wako Pure Chemical", - "Aladdin", - "Unknown; Sigma Aldrich", - "J&K", - "Sigma Aldrich; Sigma Aldrich", - "Sigma Aldrich", - "Xi'an Polymer Light Technology; Xi'an Polymer Light Technology" + "30.0", + "20.0", + "15.0; 5.0", + "100.0", + "30.0; 30.0", + "60.0", + "15.0 >> 5.0", + "10.0", + "10.0 | Unknown", + "15.0", + "30.0 | Unknown" ] } } ] }, - "name": "deposition_solvents_supplier", - "description": "The suppliers of all the solvents.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvent suppliers associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solvent is a mixture of different solvents, e.g. A and B, list the associated suppliers and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- For non-liquid processes with no solvents, mark the supplier as \u2018none\u2019\n- If the supplier for a solvent is unknown, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nSigma Aldrich\nSigma Aldrich; Fisher | Acros\nnone >> Sigma Aldrich; Sigma Aldrich | Unknown", + "name": "deposition_thermal_annealing_time", + "description": "The time program associated to the thermal annealing program.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the annealing times associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If the thermal annealing involves a temperature program with multiple temperature stages, list the associated times at those temperatures and separate them with semicolons.\n- The annealing times must align in terms of layers\u00b8 reaction steps and annealing temperatures in the previous filed.\n- If a time is not known, state that by \u2018nan\u2019\n- If no thermal annealing is occurring after the deposition of a layer, state that by \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 20 and not 10-30.\nExample\nnan\n60 | 1000\n30 | 5; 5; 5; 30 >> 5; 5; 5; 30", "type": { "type_kind": "python", "type_data": "str" @@ -47159,7 +51836,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 13, + "m_parent_index": 24, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -47167,20 +51844,18 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "anhydrous; 99%", - "Pro analysis", "Unknown", - "Puris; Puris", - "0.998", - "99.8%; 99.8%", - "Puris" + "Air", + "Vacuum", + "N2", + "Air >> Air" ] } } ] }, - "name": "deposition_solvents_purity", - "description": "The purity of the solvents used.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvent purities associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solvent is a mixture of different solvents, e.g. A and B, list the associated purities and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- Use standard nomenclature for purities, e.g. pro analysis, puris, extra dry, etc.\n- For non-liquid processes with no solvents, state the purity as \u2018none\u2019\n- If the purity for a solvent is not known, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nPro analysis\nPuris; Puris| Tecnical\nnone >> Pro analysis; Pro analysis | Unknown", + "name": "deposition_thermal_annealing_atmosphere", + "description": "The atmosphere during thermal annealing\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the atmospheres associated to each annelaing step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- If the atmosphere is a mixture of different gases, i.e. A and B, list the gases in alphabetic order and separate them with semicolons, as in (A; B)\n- \u201cDry air\u201d represent air with low relative humidity but where the relative humidity is not known\n- \u201cAmbient\u201d represent air where the relative humidity is not known. For ambient conditions where the relative humidity is known, state this as \u201cAir\u201d\n- \u201cVacuum\u201d (of unspecified pressure) is for this purpose considered as an atmospheric gas.\n- This is often the same as the atmosphere under which the deposition is occurring, but not always.\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nN2\nVacuum | N2\nAir | Ar >> Ar", "type": { "type_kind": "python", "type_data": "str" @@ -47189,7 +51864,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 14, + "m_parent_index": 25, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -47197,150 +51872,42 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "", - "NiPc | Vanadium(V)\noxytriisopropoxide; IPA", - "FK209; Li-TFSI; CS03; TBP", - "Spiro-oF; Li-TFSI; Co-TFSI; TBP", - "FK209; Li-TFSI; CS01; TBP", - "(NiAc)4H2O", - "Spiro-MeOTAD; nan", - "Ni(Ac)2\u00b74H2O; SrCl2", - "P3CT-Na", - "Spiro-MeOTAD | MoOx", - "Clevios PVP Al 4083; Black phosphorous QDs", - "Li-TFSI; Spiro-MeOTAD", - "Ni; O2", - "NiO-np", - "Spiro-MeOTAD; Co(III)(pztbpy)3; Li-TFSI; TBP", - "P3HT; rGO-PhBiTh", - "NiO-np | PAS", - "FK209; Li-TFSI; LCS01; TBP", - "NaYF4:Yb,Er; Li-TFSI; TBP; PTAA", - "CuPc | PEI", - "Li-TFSI; H-Z3; TBP", - "FK209; Li-TFSI; H-Lin; TBP", - "Oleylamine | Li-TFSI; Spiro-MeOTAD; TBP", - "TRUX-E-T; Li-TFSI; TBP", - "PEDOT:PSS | TPA-NPA-TPA", - "P3HT; rGO-PhOHex", - "PTAA; Li-TFSI; TBP", - "aYF4:Yb,Er@NaYF4; Li-TFSI; TBP; PTAA", - "PTB7-Th | MoOx", - "PEDOT:PSS | MoO3", - "DIPO-Ph4", - "Nickel acetate tetrahydrate; ethanolamine", - "Spiro-MeOTAD; Li; Co", - "NiO Target", - "P3CT", - "Li-TFSI; NiPc; TBP", - "S; Oleylamine; 1-octadecane; diphenylphosphine; Indium acetate; CuI", - "Spiro-MeOTAD; Li-TFSI; TBP | MoO3", - "IEICO | MoO3", - "MoO3", - "FK209; Li-TFSI; B186; TBP", - "P3HT", - "H-Lin", - "PBTTTV-h", - "CuSO4; Lactic Acid; NaOH", - "Clevios PVP Al 4083", - "rGO-4FPH | Spiro-MeOTAD; Li-TFSI; TBP", - "Rubrene", - "M2; Li-TFSI; TBP", - "CF-BTz-ThR", - "Al(C2H5)3 | nan", - "MEH-PPV", - "Graphene oxide | Carbon dots", - "NiOx-np solution", - "Li-TFSI; H-Z2; TBP", - "Li-TFSI; Spiro-MeOTAD; TBP; Co-TFSI", - "Nickel acetate hexahydrate; ethanolamine | ethylphosphonic acid", - "NaLuF4:Yb,Er@NaLuF4; Li-TFSI; TBP; PTAA", - "Clevios PVP Al 4083 | PEI", - "Spiro-MeOTAD", - "Nickel Nitrate hexahydrate", - "CZ-TA; Li-TFSI; TBP", - "FK102; Li-TFSI; Spiro-MeOTAD; TBP", - "M1; Li-TFSI; TBP", - "Spiro-MeOTAD; Li-TFSI; TBP", - "Copper thiocyanate", - "Graphene oxide | PFNBr", - "Graphene oxide | PTAA", - "NiO-np | PTAA", - "CZTS-np", - "Li-TFSI; H-Z1; TBP", - "Spiro-MeOTAD; Li-TFSI; TBP | MoOx", - "Co(PyPz)3(TFSI)3; Li-TFSI; Spiro-MeOTAD; TBP", - "Li-TFSI; MWCNTs; Spiro-MeOTAD; TBP", - "PTAA | PFN", - "Nickel Chloride hexahydrate; HNO3", - "C102; FK209; Li-TFSI; TBP", - "Nickel acetate hexahydrate; ethanolamine", - "InP-np | Li-TFSI; Spiro-MeOTAD; TBP", - "C13-FAS | Spiro-MeOTAD", - "Li-TFSI; PTAA; TBP", - "TaTm | F6-TCNNQ; TaTm", - "FK209; iDM1; Li-TFSI; TBP", - "P3HT; Li-TFSI; TBP", - "H-Star", - "polyacrylonitrile; rGO", - "Ni(CH3COO)2\u00b74H2O", - "Vanadium(V)\noxytriisopropoxide; IPA", - "PTAA", - "PBDT(T)(2F)T", - "CZTS-np; hexanethiol", - "FK209; Li-TFSI; Spiro-MeOTAD; TBP", - "PBDT(2F)T", - "PEDOT:PSS; PEG", - "Li-TFSI; Spiro-MeOTAD; TBP", - "Spiro-MeOTAD; Li-TFSI; Co-TFSI; TBP", - "FK209; Li-TFSI; H-Star; TBP", - "FK209; Li-TFSI; Spiro-MeOTAD; TBP | Vanadium(V)\noxytriisopropoxide; IPA", - "PBDT(2H)T", - "Ni(Ac)2\u00b74H2O; SrCl2 | nan", - "2PACz", - "B186", - "Li-TFSI; Spiro-MeOTAD; TBP; V2O3 | Clevios PVP Al 4083", - "Li-TFSI; P3HT; TBP", - "Carbon Paste", - "DTP-C6Th", - "Graphene oxide | PTFTS", - "Spiro-MeOTAD; TBP", - "IEICO; PBDTTT-E-T | MoO3", - "MeO-2PACz", - "nickel acetate tetrahydrate", - "PTAA >> Sb 2D-nanosheets", - "TPE-S", - "Rubrene | PEDOT:PSS", - "nickel acetylacetonate", - "HA2", - "Cu >> iodine", - "Nickel acetate tetrahydrate", - "Spiro-MeOTAD; Co(III)(pztbpy)3; LiNTf2; TBP", - "PEDOT:PSS", - "Graphene oxide", - "Li-TFSI; BTPA-3; TBP", - "HA1", - "Nickel acetate hexahydrate; ethanolamine | 4-Bromobenzoic acid", - "Li-TFSI; TBP; Spiro-MeOTAD; acetonitrile", - "Li-TFSI; Spiro-MeOTAD; TBP | Li-TFSI; MWCNTs; Spiro-MeOTAD; TBP", - "Cu-np; NiOx-np", - "C101; FK209; Li-TFSI; TBP", - "InP-np", - "Oleylamine", - "FK209; Li-TFSI; EP02; TBP", - "PBDTTT-E-T | MoO3", - "nickel (II) acetate tetrahydrate", - "ethanolamine; nickel acetate tetrahydrate", - "Nickel acetate; ethylene glycol; ethylenediamine", - "pentaerythritol tetrakis(3-mercaptopropionate) | Spiro-MeOTAD; Li-TFSI; TBP", - "PTAA | PFN-P2" + "Unknown", + "24.0" + ] + } + } + ] + }, + "name": "storage_time_until_next_deposition_step", + "description": "The time between the back contact is finalised and the next layer is deposited\n- If there are uncertainties, only state the best estimate, e.g. write 35 and not 20-50.\n- If this is the last layer in the stack, state this as \u2018nan\u2019", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 26, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Dry air", + "N2", + "Unknown", + "Air" ] } } ] }, - "name": "deposition_reaction_solutions_compounds", - "description": "The non-solvent precursor chemicals used in each reaction step\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the non-solvent chemicals associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several compounds, e.g. A and B, list the associated compounds in alphabetic order and separate them with semicolons, as in (A; B)\n- Note that also dopants/additives should be included\n- When several precursor solutions are made and mixed before the reaction step, it is the properties of the final mixture used in the reaction we here describe.\n- The number and order of layers and reaction steps must line up with the previous columns.\n- For gas phase reactions, state the reaction gases as if they were in solution.\n- For solid-state reactions, state the compounds as if they were in solution.\n- For reaction steps involving only pure solvents, state this as \u2018none\u2019\n- If the compounds for a deposition step is not known, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nFK209; Li-TFSI; Spiro-MeOTAD; TBP\nNiO-np\nPTAA | CuSCN", + "name": "storage_atmosphere", + "description": "The atmosphere in which the sample with the finalised back contact is stored until the next deposition step or device performance measurement\nExample\nAir\nN2\nVacuum", "type": { "type_kind": "python", "type_data": "str" @@ -47349,7 +51916,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 15, + "m_parent_index": 27, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -47357,65 +51924,102 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Heraeus | synthesized", - "Energy Chemical; Sigma Aldrich; Sigma Aldrich; Sigma Aldrich", - "Xi\u2019an p-OLED; Sigma Adrich; Xi\u2019an p-OLED; Sigma Adrich", - "Sigma Aldrich", - "Sigma Aldrich; Lumtec; Sigma Aldrich", - "Xi\u2019an p-OLED", + "", + "5.0", + "10", + "10.0" + ] + } + } + ] + }, + "name": "storage_relative_humidity", + "description": "The relive humidity under which the sample with the finalised back contact is stored until the next deposition step or device performance measurement\n- If there are uncertainties, only state the best estimate, e.g write 35 and not 20-50.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 28, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "EDA gas", + "DEDA gas", + "MEA immersion >> 125C 20 min", + "TETA gas" + ] + } + } + ] + }, + "name": "surface_treatment_before_next_deposition_step", + "description": "Description of any type of surface treatment or other treatment the sample with the finalised back contact is stored until the next deposition step or device performance measurement\n- If more than one treatment, list the treatments and separate them by a double forward angel bracket (\u2018 >> \u2018)\n- If no special treatment, state that as \u2018none\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample:\nnone\nAr plasma\nUV-ozone", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 9, + "m_parent_sub_section": "section_definitions", + "name": "Add", + "description": "A section to describe **additional layers** present in the device besides the *Substrate*, *ETL*, *Perovskite*, *HTL* and *back contact*.", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "BoolEditQuantity" + } + ] + }, + "name": "lay_front", + "description": "TRUE if there is a functional layer below the substrate, i.e. on the opposite side of the substrate from with respect to the perovskite.", + "type": { + "type_kind": "python", + "type_data": "bool" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "Antireflection", "Unknown", - "Lumtec, Sigma Aldrich, Lumtec, Sigma Aldrich", - "Reike Metals", - "Unknown >> 0.1 mg/ml", - "Clevios PVP", - "Xi'an Polymer Light Technology; Xi'an Polymer Light Technology; Xi'an Polymer Light Technology", - "Sigma Adrich; Shenzhen Feiming Science and Technology; Sigma Adrich; Dyesol", - "Dysole; Sigma Aldrich; Dyenamo; Sigma Aldrich", - "Unknown; Borun Chemical; Unknown", - "Clevious", - "Dyesol; Sigma Aldrich; Shenzen Feiminf Science and Technology; Sigma Aldrich", - "Sigma Aldrich; Merck; Sigma Aldrich", - "Sigma Aldrich; Sigma Aldrich; Dalian HeptaChroma SolarTech Co. Ltd.; Sigma Aldrich", - "Advanced Election Technology Co., Ltd; Unknown", - "Tokyo Chemical Industry; Wako Pure Chemical; Wako Pure Chemical", - "Sigma Adrich; Sigma Adrich; Sigma Adrich; Acros Organics", - "Aladdin; Aladdin; Aladdin", - "Alfa-Aesar", - "Unknown | Sigma Aldrich; Sigma Aldrich; Sigma Aldrich", - "Heraeus", - "1-Material", - "Kojundo Chemical Lab. Co.", - "1-Material, NICT-7", - "Sigma Adrich; Merck; Sigma Adrich", - "Showa Chemical | ACROS Organic", - "Dyesol; Sigma Aldrich; Shenzhen Feiming Science and Technology; Sigma Aldrich", - "Synthesized", - "Guangzhou Seaside Technology", - "Sigma Adrich; Sigma Adrich; Sigma Adrich", - "Dyesol; Aladdin; Merck; Aladdin", - "Tokyo Chemical Industry", - "Aladdin | Aladdin", - "Sigma Aldrich; Sigma Aldrich; Sigma Aldrich", - "Borun Chemicals; Sigma Aldrich; Unknown", - "Baytron", - "Clevios Heraeus", - "Ossila", - "Xi\u2019an p-OLED | Aladdin", - "1-Material >> synthesized", - "Synthesized; Synthesized", - "Shanghai Aladdin Bio-Chem. Technology; Shanghai Aladdin Bio-Chem. Technology; Shanghai Aladdin Bio-Chem. Technology; Sigma Aldrich; Sigma Aldrich", - "Sinopharm Chemical Reagent Co. Ltd.,", - "J&K Scientific; Merck; Sigma Aldrich", - "Derthon; Sigma Aldrich; Sigma Aldrich", - "Novaled GmbH | Novaled GmbH", - "1-Material; Unknown; Nichem Chemicals; 1-Material" + "Down conversion", + "A.R.C.", + "Light management" ] } } ] }, - "name": "deposition_reaction_solutions_compounds_supplier", - "description": "The suppliers of the non-solvent chemicals.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the non-solvent chemical suppliers associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several dissolved compounds, e.g. A and B, list the associated suppliers and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- For gas phase reactions, state the suppliers for the gases or the targets/evaporation sources that are evaporated/sputtered/etc.\n- For solid state reactions, state the suppliers for the compounds in the same way.\n- For reaction steps involving only pure solvents, state the supplier as \u2018none\u2019 (as that that is entered in a separate filed)\n- For chemicals that are lab made, state that as \u201cLab made\u201d or \u201cLab made (name of lab)\u201d\n- If the supplier for a compound is unknown, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nDysole; Sigma Aldrich; Dyenamo; Sigma Aldrich\nSigma Aldrich; Fisher | Acros\nLab made (EPFL) | Sigma Aldrich >> none", + "name": "lay_front_function", + "description": "The function of the additional layers on the substrate side\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- If a layer has more than one function, e.g. A and B, list the functions in order and separate them with semicolons, as in (A; B)\nExample:\nA.R.C.\nBack reflection\nDown conversion\nEncapsulation\nLight management\nUpconversion", "type": { "type_kind": "python", "type_data": "str" @@ -47424,7 +52028,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 16, + "m_parent_index": 2, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -47432,26 +52036,34 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Puris; Puris; Puris; Pro analysis", + "ZnSe-QDs", + "N-Graphene-QDs", + "Ag-np", + "Moth eye PDMS", + "Polyimide", + "PDMS", "Unknown", - "Unknown; puris; puris", - "99%; 99%", - "Unknown; 96%; Unknown; 99%", - "Puris; Puris; Technical", - "99.5; 99.8; Unknown", - "99.95%; Unknown; 96%", - "0.98", - "Puris; Puris; Puris", - "99.9; Pro analysis; Tecnical; Puris", - "Unknown; Pro analysis; Puris; Puris", - "0.999" + "NaYF4:Eu-np", + "NaF", + "Eu(TTA)2(Phen)MAA", + "MgF2", + "Y2O3:Eu3", + "CdSeS-QDs", + "Y2O3:Eu3 | Au-np", + "Mica", + "Eu-complex LDL", + "textured antireflective foil", + "Phosphor-in-glass", + "INVAR", + "Mn:CsPbCl3-QDs", + "LiF" ] } } ] }, - "name": "deposition_reaction_solutions_compounds_purity", - "description": "The purity of the non-solvent chemicals.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the compound purities associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several dissolved compounds, i.e. A and B, list the associated purities and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- Use standard nomenclature for purities, e.g. pro analysis, puris, extra dry, etc.\n- For reaction steps involving only pure solvents, state this as \u2018none\u2019 (as that is stated in another field)\n- If the purity for a compound is not known, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nPro analysis\n99.999; Puris| Tecnical\nUnknown >> Pro analysis; Pro analysis | none", + "name": "lay_front_stack_sequence", + "description": "The stack sequence describing the additional layers on the substrate side\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- If two materials, e.g. A and B, are mixed in one layer, list the materials in alphabetic order and separate them with semicolons, as in (A; B)\n- Use common abbreviations when appropriate but spell it out if risk for confusion.\n- There are separate filed for doping. Indicate doping with colons. E.g. wither aluminium doped NiO-np as Al:NiO-np\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample:\nMgF2\nAu-np\nNaYF4:Eu-np", "type": { "type_kind": "python", "type_data": "str" @@ -47460,7 +52072,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 17, + "m_parent_index": 3, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -47469,208 +52081,17 @@ window.nomadArtifacts = { "props": { "suggestions": [ "", - "35 mg/ml", - "1.75 vol%; 80 mg/ml; 2.85 vol%", - "1.55 wt%", - "0.15 M; 1 M", - "72 mg/ml; 1.7 vol%; 2.0 vol%", - "30 mM; 50 mg/ml; 200 mM", - "72.3 mg/ml; 2.85 vol%; 1.75 vol% | nan", - "20 mg/ml | 1 mg/ml", - "4 mM; 30 mM; 80 mg/ml; 200 mM", - "5.4 mg/ml; 9.36 mg/ml; 72.3 mg/ml; 0.028 ml/ml", - "30 mol%; 8 wt%; 80 mol%", - "0.14 wt%; 2.24 wt%", - "51.43 mg/ml; 1.79 vol%; 2.5 vol%", - "1 M; 6 mL; 6 mL; 6 mL; 1 mL; 0.3 mmol; 0.3 mmol", - "72.3 mg/ml; 6.76 mg/ml; 0.5 vol%", - "9.1 mg/ml; 90 mg/ml; 0.029 ml/ml", - "0.2 M", - "72 mg/ml; 91 mg/ml; 2.85 vol% | nan", - "1 mg/ml", - "0.82 mg/ml; 10 mg/ml; 2 \u00b5l/ml", - "15 mg/ml; 1.5 mg/ml", - "9.1 mg/ml; 80 mg/ml; 0.0288 ml/ml", - "18.2 mg/ml; 72.3 mg/ml; 8 \u00b5l/ml", - "5 mg/ml", - "25 mg/ml; 0.32 mg/ml | 2 mg/ml", - "9.1 mg/ml; 72.3 mg/ml; 0.029 ml/ml", - "1 mg/ml; 520 mg/ml; 0.036 vol%; 36 mg/ml", - "0.15 M; nan", - "9.1 mg/ml; 1 wt%; 72.3 mg/ml; 28.8 \u00b5l/ml", - "90 mg/ml", - "5.6 mg/ml; 56 mg/ml; 30 mg/ml", - "90 mg/ml; 7.65 mg/ml; 1 vol%", - "90 mg/ml; 0.0225 mL; 0.036 mL | nan", - "nan | 72.3 mg/ml; 1.75 vol%; 2.88 vol%", - "2 wt% | nan", - "70 mg/ml", - "72.3 mg/ml; 2.88 vol%; 1.75 vol%", - "520 mg/ml; 72.3 mg/ml; 0.0288 vol%", - "9.1 mg/ml; 70 mg/ml; 28.8 \u00b5l/ml", - "72.3 mg/ml; 520 mg/ml; 1", - "182 mg/ml; 6 vol%", - "11.44 mg/ml; 90 mg/ml; 36 \u00b5l/ml", - "2 mg/ml | nan", - "1.3 mg/ml", - "1 mg/ml | 0.05 mg/ml", - "17.5 mM", - "4 mg/ml", - "30 mg/ml; nan", - "40 mg/ml; 10 mg/ml", - "8.7 mg/ml; 9.1 mg/ml; 72.3 mg/ml; 0.029 ml/ml", - "1.5 wt% | 2 mg/ml >> 2 mg/ml >> 2 mg/ml >> 2 mg/ml", - "25 mg/ml; 0.32 mg/ml", - "11.4 mg/ml; 90 mg/ml; 36 \u00b5l/ml", - "520 mg/ml; 72.3 mg/ml; 2.88 vol%", - "20 mg/ml", - "5.2 mg/ml; 52.8 mg/ml; 0.02 ml/ml", - "70 mM", - "3.83 mg/ml; 50 mg/ml; 22.5 \u00b5l/ml", - "0.5 vol%; 6.76 mg/ml; 30 mg/ml; 0.5 vol%", - "12 \u00b5l/ml; 0.2 M", - "73 mg/ml", - "500 mg/ml; 80 mg/ml; 0.03 vol%", - "60 mg/ml", - "9.1 mg/ml; 72.3 mg/ml; 28.8 \u00b5l/ml | 9.1 mg/ml; 0.5 wt%; 72.3 mg/ml; 28.8 \u00b5l/ml", - "32 mM; 75 mg/ml; 28.5 \u00b5l/ml", - "8 mg/ml", - "9.1 mg/ml; 72.3 mg/ml; 0.0288 ml/ml", - "8.7 mg/ml; 9.8 mg/ml; 72.3 mg/ml; 0.029 ml/ml", - "30 mg/ml | 0.005 vol%; 0.995 vol%", - "0.5 vol%; 6.76 mg/ml; 10 mg/ml; 0.5 vol%", - "12.5 mg/ml | nan", - "73.2 mg/ml | 5 mg/ml", - "9.1 mg/ml; 2 wt%; 72.3 mg/ml; 28.8 \u00b5l/ml", - "1 mg/ml | 0.1 mg/ml", - "5 mg/ml >> nan", - "11.34 mg/ml; 72.3 mg/ml; 0.0176 ml/ml", - "1.5 wt% | 2 mg/ml >> 2 mg/ml >> 2 mg/ml", - "2.5 wt%", - "1.2 mg/ml", - "nan; nan; 70 mg/ml; nan", - "63 mg/ml; 170 mg/ml; 2 vol%", - "80 mg/ml; 1.45 mg/ml; 2.85 mg/ml", - "15 mg/ml; 0.75 vol%; 0.75 vol%", - "72 mg/ml; 1.44 vol%; 2.88 vol%", - "9.1 mg/ml; 80 mg/ml; 0.03 ml/ml", - "1.7 mg/ml; 10 mg/ml; 7 \u00b5l/ml", - "63 mg/ml", - "0.035 M; 0.07 M; 0.231 M", - "10 mg/ml", - "2 mg/ml; 520 mg/ml; 0.036 vol%; 36 mg/ml", - "0.3 M; 2 M; nan", - "12.5 mg/ml; 10 mg/ml | nan", - "0.2 M | 0.03 M", - "30 mM; 85 mg/ml; 30 mM", - "182 mg/ml; 6 vol% | 0.5 mg/ml", - "9.1 mg/ml; 80 mg/ml; 0.028 ml/ml", - "78 mM", - "8.8 mg/ml; 0.028 vol%; 70 mg/ml; 0.035 vol%", - "0.058 M; 0.0056 M; 0.031 M; 0.19 M", - "nan; 90 mg/ml; nan", - "9.1 mg/ml; 60 mM; 0.029 ml/ml", - "9.1 mg/ml; 72.3 mg/ml; 28.8 \u00b5l/ml", - "520 mg/ml; 82 mg/ml; 1.4 vol%", - "15 mg/ml; 0.5 mg/ml; 0.5 vol%", - "80 mg/ml; 5 mg/ml", - "25 mg/ml", - "0.2 M | 0.01 M", - "3 mol%; 50 mol%; 70 mM; 330 mol%", - "0.2 M | 0.05 M", - "10 mg/ml; 170 mg/ml; 0.004 vol%", - "35 mM", - "8.75 mM", - "200 mg/ml", - "72.3 mg/ml; 2.88 vol%", - "1.8 mM; 30 mM; 60 mM; 200 mM", - "72.5 mg/ml", - "1.5 mg/ml | 0.5 mg/ml", - "6.43 mg/ml", - "80 mg/ml", - "7.5 mg/ml; 7.65 mg/ml; 90 mg/ml; 0.01 ml/ml", - "0.064 M; 0.17 M; 0.198 M", - "8.7 mg/ml; 9.1 mg/ml; 72 mg/ml; 28.8 \u00b5l/ml", - "0.1 M", - "0.0175 vol%; 72.3 mg/ml; 0.0288 vol%", - "2 mg/ml", - "8.7 mg/ml; 8.7 mg/ml; 72.3 mg/ml; 2.88 vol%", - "9.1 mg/ml; 72.3 mg/ml; 30 \u00b5l/ml", - "0.3 mg/ml", - "1.5 wt% | 2 mg/ml >> 2 mg/ml >> 2 mg/ml >> 2 mg/ml >> 2 mg/ml", - "15 mM", - "10.4 mg/ml; 60 mg/ml; 0.03 mg/ml", - "102 mg/ml", - "2.5 mg/ml", - "10 mg/ml | nan", - "30 mg/ml", - "1 mg/ml | 0.025 mg/ml", - "72.3 mg/ml; 520 mg/ml; 0.3 vol%", - "0.44 M", - "11.4 mg/ml; 90 mg/ml; 0.036 mg/ml", - "0.90 vol%; 2.07 vol%; 0.091 mg/ml; 3.60 vol%", - "72.3 mg/ml; 1.75 vol%; 2.88 vol%", - "9.1 mg/ml; 72.3 mg/ml; 28.8 \u00b5l/ml | 9.1 mg/ml; 1 wt%; 72.3 mg/ml; 28.8 \u00b5l/ml", - "10.4 mg/ml; 80 mg/ml; 0.03 ml/ml", - "4 mM; 30 mM; 80 mg/ml; 200 mM | 0.005 vol%; 0.995 vol%", - "35 mM; 35 mM; 210 mM", - "72.3 mg/ml; 2 mM; 2.88 vol%", - "80 mg/ml; 10 mg/ml", - "68 mM; 9 mM; 55 mM", - "1.6 vol%mM; 2.1 vol%; 91 mg/ml; 3.6 vol%", - "2 mg/ml | 0.5 mg/ml", - "0.2 M | 0.02 M", - "0.2 M | 0.04 M", - "100 mg/ml", - "72.3 mg/ml; 0.029 vol%; 28.3 mg/ml; 0.0288 vol%", - "2.45 mM; 40 mM; 81.6 mM; 270 mM", - "72.3 mg/ml", - "60 mM; 32 mM; 195 mM", - "0.5 mg/ml; 520 mg/ml; 0.036 vol%; 36 mg/ml", - "9.1 mg/ml; 72 mg/ml; 0.028 mg/ml", - "0.170 M; 0.064 M; 0.198 M", - "9.1 mg/ml; 0.5 wt%; 72.3 mg/ml; 28.8 \u00b5l/ml", - "1.5 wt% | 2 mg/ml", - "2.38 wt%", - "300 mg/ml; 520 mg/ml; 72.3 mg/ml; 0.028 vol%", - "0.5 wt%", - "73.2 mg/ml", - "1.5 wt%", - "54 mol%; 30 mg/ml; 334 mol%", - "72.3 mg/ml; 1.7 vol%; 2.8 vol%", - "2.8 vol%mM; 1.85 vol%; 72.3 mg/ml; 2.9 vol%", - "8.67 mg/ml; 9.1 mg/ml; 72.3 mg/ml; 28.8 \u00b5l/ml", - "520 mg/ml; 83.2 mg/ml; 0.0338 vol%", - "0.175 vol%; 80 mg/ml; 0.285 vol%", - "1.5 wt% | 2 mg/ml >> 2 mg/ml", - "9.1 mg/ml; 72.5 mg/ml; 0.028 mg/ml", - "6 mg/ml", - "15 mg/ml", - "520 mg/ml; 36 mg/ml; 0.036 vol%", - "1 mg/ml; 1 mg/ml", - "9 mM; 68 mM; 55 mM", - "1.5 mg/ml", - "20 mg/ml; 170 mg/ml; 34.78 vol%", - "50 mg/ml", - "32 mM; 15 mg/ml; 28.5 \u00b5l/ml", - "72.3 mg/ml; 1.75 vol%; 3.1 vol%", - "72 mg/ml", - "97 mg/ml", - "30 mM; 72.3 mg/ml; 200 mM", - "15.08 mg/ml; 9.1 mg/ml; 72.3 mg/ml; 28.8 \u00b5l/ml", - "1 mM", - "6.24 mg/ml; 72 mg/ml; 8 \u00b5l/ml", - "0.005 vol%; 0.995 vol%", - "5 mg/ml; 520 mg/ml; 0.036 vol%; 36 mg/ml", - "9.1 mg/ml; 72.3 mg/ml; 28.8 \u00b5l/ml | 9.1 mg/ml; 2 wt%; 72.3 mg/ml; 28.8 \u00b5l/ml", - "20 mg/ml; 6.8 vol%; 3.4 vol%" + "90.0", + "100.0", + "50.0", + "80.0" ] } } ] }, - "name": "deposition_reaction_solutions_concentrations", - "description": "The concentration of the non-solvent precursor chemicals.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the concentrations associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several dissolved compounds, e.g. A and B, list the associated concentrations and separate them with semicolons, as in (A; B)\n- The order of the compounds must be the same as in the previous filed.\n- For reaction steps involving only pure solvents, state this as \u2018none\u2019\n- When concentrations are unknown, state that as \u2018nan\u2019\n- Concentrations can be stated in different units suited for different situations. Therefore, specify the unit used. When possible, use one of the preferred units\no M, mM, molal; g/ml, mg/ml, \u00b5g/ml, wt%, mol%, vol%, ppt, ppm, ppb\n- For values with uncertainties, state the best estimate, e.g write 4 wt% and not 3-5 wt%.\nExample\n4 wt%\n0.2 M; 0.15 M| 10 mg/ml\n0.3 mol% | 2 mol%; 0.2 wt% | nan", + "name": "lay_front_thickness_list", + "description": "A list of thicknesses of the individual layers in the stack.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- The layers must line up with the previous filed.\n- State thicknesses in nm\n- Every layer in the stack have a thickness. If it is unknown, state this as \u2018nan\u2019\n- If there are uncertainties, state the best estimate, e.g write 100 and not 90-110\nExample\n200\nnan |250\n100 | 5 | 8", "type": { "type_kind": "python", "type_data": "str" @@ -47679,7 +52100,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 18, + "m_parent_index": 4, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -47687,41 +52108,14 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "0.02", - "0.045", - "33.0", - "0.0175; 0.9537; 0.0288", - "0.029; 0.0175; Unknown; 0.288", - "0.03; 0.94; 0.03", - "1.0; 0.015; 0.008", - "0.0088; 0.0144", - "0.05", - "Unknown", - "0.065", - "0.95; 0.0075; 0.004", - "0.035", - "0.018; 0.018; 0.936; 0.028", - "1.3", - "1.5", - "0.006; 0.0175; 0.9485; 0.028", - "1.7", - "0.06", - "19.0; 7.0; 8.0; 0.2 | 33.33", - "0.0175; Unknown; 0.0285", - "1.0", - "0.0075; 0.47; 0.0169", - "0.0175; 0.95; 0.0288", - "0.018; 0.94; 0.028; 0.018", - "0.018; Unknown; 0.028", - "0.0175; 0.028", - "0.92; 0.029; 0.0175; 0.0288" + "" ] } } ] }, - "name": "deposition_reaction_solutions_volumes", - "description": "The volume of the reaction solutions\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the volumes associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The volumes refer the volumes used, not the volume of the stock solutions. Thus if 0.15 ml of a solution is spin-coated, the volume is 0.15 ml\n- For reaction steps without solvents, state the volume as \u2018nan\u2019\n- When volumes are unknown, state that as \u2018nan\u2019\nExample\n0.1\n0.1 >> 0.05 | 0.05\nnan | 0.15", + "name": "lay_front_additives_compounds", + "description": "List of the dopants and additives that are in each layer of the HTL-stack\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- The layers must line up with the previous fields.\n- If several dopants/additives, e.g. A and B, are present in one layer, list the dopants/additives in alphabetic order and separate them with semicolons, as in (A; B)\n- If no dopants/additives, state that as \u201cUndoped\u201d\n- If the doping situation is unknown, stat that as\u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template, even if to most common back contacts is undoped metals\nExample\nCuS\nB; P\nAu-np | Undoped", "type": { "type_kind": "python", "type_data": "str" @@ -47730,7 +52124,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 19, + "m_parent_index": 5, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -47738,24 +52132,14 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "48.0", - "Unknown", - "0.33", - "10.0", - "0.0167", - "4.0", - "2.0", - "4.0 | 0.0", - "24.0", - "3.0", - "0.5" + "" ] } } ] }, - "name": "deposition_reaction_solutions_age", - "description": "The age of the solutions\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the age of the solutions associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- As a general guideline, the age refers to the time from the preparation of the final precursor mixture to the reaction procedure.\n- When the age of a solution is not known, state that as \u2018nan\u2019\n- For reaction steps where no solvents are involved, state this as \u2018nan\u2019\n- For solutions that is stored a long time, an order of magnitude estimate is adequate.\nExample\n2\n0.25 |1000 >> 10000\nnan | nan", + "name": "lay_front_additives_concentrations", + "description": "The concentration of the dopants/additives.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- If more than one dopant/additive in the layer, e.g. A and B, separate the concentration for each dopant/additive with semicolons, as in (A; B)\n- For each dopant/additive in the layer, state the concentration.\n- The order of the dopants/additives must be the same as in the previous filed.\n- For layers with no dopants/additives, state this as \u2018none\u2019\n- When concentrations are unknown, state that as \u2018nan\u2019\n- Concentrations can be stated in different units suited for different situations. Therefore, specify the unit used.\n- The preferred way to state the concentration of a dopant/additive is to refer to the amount in the final product, i.e. the material in the layer. When possible, use on the preferred units\no wt%, mol%, vol%, ppt, ppm, ppb\n- When the concentration of the dopant/additive in the final product is unknown, but where the concentration of the dopant/additive in the solution is known, state that concentration instead. When possible, use on the preferred units\no M, mM, molal; g/ml, mg/ml, \u00b5g/ml\n- For values with uncertainties, state the best estimate, e.g write 4 wt% and not 3-5 wt%.\nExample\n4 wt%\n5 vol%; nan | 10 mg/ml\n0.3 mol% | 2 mol%; 0.2 wt% | 0.3 M", "type": { "type_kind": "python", "type_data": "str" @@ -47764,7 +52148,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 20, + "m_parent_index": 6, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -47772,26 +52156,15 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "70; 25", - "25", - "Unknown", - "70 | 25", - "90", - "60; 25", - "50", - "25 | Unknown", - "70 | Unknown", - "70", - "60", - "24", - "25 | 25" + "Evaporation", + "Unknown" ] } } ] }, - "name": "deposition_reaction_solutions_temperature", - "description": "The temperature of the reaction solutions.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the temperatures of the solutions associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a reaction solution undergoes a temperature program, list the temperatures (e.g. start, end, and other important points) and separate them with semicolons, e.g. 25; 100\n- When the temperature of a solution is unknown, state that as \u2018nan\u2019\n- For reaction steps where no solvents are involved, state the temperature of the gas or the solid if that make sense. Otherwise state this as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 120 and not 110-130.\n- Assume an undetermined room temperature to be 25\nExample\n25\n100; 50 | 25\nnan | 25 >> 25", + "name": "lay_front_deposition_procedure", + "description": "The deposition procedures for the HTL-stack.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate them by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- Thermal annealing is generally not considered as an individual reaction step. The philosophy behind this is that every deposition step has a thermal history, which is specified in a separate filed. In exceptional cases with thermal annealing procedures clearly disconnected from other procedures, state \u2018Thermal annealing\u2019 as a separate reaction step.\n- Please read the instructions under \u201cPerovskite. Deposition. Procedure\u201d for descriptions and distinctions between common deposition procedures and how they should be labelled for consistency in the database.\n- A few additional clarifications:\n- Lamination\no A readymade film is transferred directly to the device stack. A rather broad concept. An everyday kitchen related example of lamination would eb to place a thin plastic film over a slice of pie.\n- Sandwiching\no When a readymade top stack simply is placed on top of the device stack. Could be held together with clams. The typical example is a when a \u201cCarbon | FTO | SLG\u201d is placed on top of the device stack. Standard procedure in the DSSC filed.\nExample\nEvaporation\nEvaporation | Evaporation\nDoctor blading\nScreen printing\nSputtering\nLamination\nE-beam evaporation\nSandwiching", "type": { "type_kind": "python", "type_data": "str" @@ -47800,7 +52173,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 21, + "m_parent_index": 7, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -47808,26 +52181,38 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "", - "25", - "Unknown", - "25 | 15", - "120 | 25", - "25 | 25 >> 25", - "120", - "25 >> 100", - "25 | 25 >> 25 >> 25", - "25 | 25 >> 25 >> 25 >> 25 >> 25", - "25 | 25 >> 25 >> 25 >> 25", - "25 | 25", - "21" + "Unknown" ] } } ] }, - "name": "deposition_substrate_temperature", - "description": "The temperature of the substrate.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the temperatures of the substrates (i.e. the last deposited layer) associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The temperature of the substrate refers to the temperature when the deposition of the layer is occurring.\n- If a substrate undergoes a temperature program before the deposition, list the temperatures (e.g. start, end, and other important points) and separate them with semicolons (e.g. 25; 100)\n- When the temperature of a substrate is not known, state that as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 120 and not 110-130.\n- Assume that an undetermined room temperature is 25\nExample\n25\nnan\n125; 325; 375; 450 | 25 >> 25", + "name": "lay_front_deposition_aggregation_state_of_reactants", + "description": "The physical state of the reactants.\n- The three basic categories are Solid/Liquid/Gas\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the aggregation state associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- Most cases are clear cut, e.g. spin-coating involves species in solution and evaporation involves species in gas phase. For less clear-cut cases, consider where the reaction really is happening as in:\no For a spray-coating procedure, it is droplets of liquid that enters the substrate (thus a liquid phase reaction)\no For sputtering and thermal evaporation, it is species in gas phase that reaches the substrate (thus a gas phase reaction)\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nLiquid\nGas | Liquid\nLiquid | Liquid >> Liquid", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 8, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Unknown" + ] + } + } + ] + }, + "name": "lay_front_deposition_synthesis_atmosphere", + "description": "The synthesis atmosphere.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the atmospheres associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- If the synthesis atmosphere is a mixture of different gases, e.g. A and B, list the gases in alphabetic order and separate them with semicolons, as in (A; B)\n- \u201cDry air\u201d represent air with low relative humidity but where the relative humidity is not known\n- \u201cAmbient\u201d represent air where the relative humidity is not known. For ambient conditions where the relative humidity is known, state this as \u201cAir\u201d\n- \u201cVacuum\u201d (of unspecified pressure) is for this purpose considered as an atmospheric gas\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nVacuum\nVacuum | N2\nAir | Ar; H2O >> Ar", "type": { "type_kind": "python", "type_data": "str" @@ -47836,7 +52221,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 22, + "m_parent_index": 9, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -47844,81 +52229,14 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "25", - "550", - "25 >> 80", - "300", - "475", - "13 | Unknown", - "18 | Unknown", - "160", - "25 >> 550", - "140 | 100", - "5", - "600", - "140 | 100 >> 100 >> 100 >> 100", - "650", - "5 | 0", - "25 >> 250", - "70", - "325", - "75; 120; 300", - "25 | 25", - "400", - "80", - "200", - "140 | 100 >> 100 >> 100 >> 100 >> 100", - "Unknown", - "130 | 60", - "100", - "130", - "120", - "500", - "150", - "235 | 15", - "165", - "100 | 100", - "110.0", - "60", - "25 | 55", - "25 >> 650", - "120 | 150", - "150 | Unknown", - "30 | Unknown", - "90", - "100 >> 100", - "100 | 25", - "25 >> 450", - "12 | Unknown", - "95", - "235", - "145", - "450", - "7 | Unknown", - "125", - "135", - "140 | 100 >> 100", - "235 | 25", - "300 | 120", - "140", - "25; 100", - "350", - "140 | 100 >> 100 >> 100", - "25 >> 100", - "11 | Unknown", - "50", - "120 | 60", - "9 | Unknown", - "15 | Unknown", - "130 | 25", - "200.0" + "" ] } } ] }, - "name": "deposition_thermal_annealing_temperature", - "description": "The temperatures of the thermal annealing program associated with depositing the layers\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the annealing temperatures associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If the thermal annealing involves a temperature program with multiple temperature stages, list the temperatures (e.g. start, end, and other important points) and separate them with semicolons (e.g. 25; 100)\n- For values with uncertainties, state the best estimate, e.g. write 120 and not 110-130.\n- If no thermal annealing is occurring after the deposition of a layer, state that by stating the room temperature (assumed to 25\u00b0C if not further specified)\n- If the thermal annealing program is not known, state that by \u2018nan\u2019\nExample\n25\n50 | nan\n450 | 125; 325; 375; 450 >> 125; 325; 375; 450", + "name": "lay_front_deposition_synthesis_atmosphere_pressure_total", + "description": "The total gas pressure during each reaction step\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the pressures associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- Pressures can be stated in different units suited for different situations. Therefore, specify the unit. The preferred units are:\no atm, bar, mbar, mmHg, Pa, torr, psi\n- If a pressure is not known, stat that as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 100 pa and not 80-120 pa.\nExample\n1 atm\n0.002 torr | 10000 Pa\nnan >> 1 atm | 1 atm", "type": { "type_kind": "python", "type_data": "str" @@ -47927,7 +52245,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 23, + "m_parent_index": 10, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -47935,45 +52253,14 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "40.0", - "10.0 | 5.0 >> 5.0 >> 5.0", - "10.0 | 5.0 >> 5.0 >> 5.0 >> 5.0 >> 5.0", - "10.0", - "5.0", - "60.0", - "45.0 | 0.0", - "12.0", - "Unknown", - "5.0 >> 2.0", - "120.0", - "45.0", - "10.0 | 0.0", - "15.0 | 25.0", - "10.0 | 5.0", - "30.0", - "10.0 | 10.0", - "0.0 >> 30.0", - "Unknown | 25.0", - "30.0; 30.0", - "10.0; 15.0; 60.0", - "10.0 | Unknown", - "60.0 | 15.0", - "10.0 | 5.0 >> 5.0 >> 5.0 >> 5.0", - "15.0 | 5.0", - "1.0", - "25.0", - "20.0", - "20.0 | 10.0", - "10.0 | 5.0 >> 5.0", - "2.0 | 2.0", - "15.0" + "" ] } } ] }, - "name": "deposition_thermal_annealing_time", - "description": "The time program associated to the thermal annealing program.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the annealing times associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If the thermal annealing involves a temperature program with multiple temperature stages, list the associated times at those temperatures and separate them with semicolons.\n- The annealing times must align in terms of layers\u00b8 reaction steps and annealing temperatures in the previous filed.\n- If a time is not known, state that by \u2018nan\u2019\n- If no thermal annealing is occurring after the deposition of a layer, state that by \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 20 and not 10-30.\nExample\nnan\n60 | 1000\n30 | 5; 5; 5; 30 >> 5; 5; 5; 30", + "name": "lay_front_deposition_synthesis_atmosphere_pressure_partial", + "description": "The partial pressures for the gases present during each reaction step.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the pressures associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- If the synthesis atmosphere is a mixture of different gases, e.g. A and B, list the partial pressures and separate them with semicolons, as in (A; B). The list of partial pressures must line up with the gases they describe.\n- In cases where no gas mixtures are used, this field will be the same as the previous filed.\nExample\n1 atm\n0.002 torr | 10000 Pa\nnan >> 0.99 atm; 0.01 atm | 1 atm", "type": { "type_kind": "python", "type_data": "str" @@ -47982,7 +52269,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 24, + "m_parent_index": 11, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -47990,28 +52277,14 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Dry air", - "Unknown", - "Air | Vacuum", - "Air | N2", - "Air", - "Ambient", - "N2", - "Ambient | Ar", - "O2", - "Vacuum", - "N2 >> N2", - "Air | Air", - "N2 | N2", - "Ar | Ar", - "Ar" + "" ] } } ] }, - "name": "deposition_thermal_annealing_atmosphere", - "description": "The atmosphere during thermal annealing\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the atmospheres associated to each annealing step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- If the atmosphere is a mixture of different gases, i.e. A and B, list the gases in alphabetic order and separate them with semicolons, as in (A; B)\n- \u201cDry air\u201d represent air with low relative humidity but where the relative humidity is not known\n- \u201cAmbient\u201d represent air where the relative humidity is not known. For ambient conditions where the relative humidity is known, state this as \u201cAir\u201d\n- \u201cVacuum\u201d (of unspecified pressure) is for this purpose considered as an atmospheric gas.\n- This is often the same as the atmosphere under which the deposition is occurring, but not always.\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nN2\nVacuum | N2\nAir | Ar >> Ar", + "name": "lay_front_deposition_synthesis_atmosphere_relative_humidity", + "description": "The relative humidity during each deposition step\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the relative humidity associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns\n- If the relative humidity for a step is not known, stat that as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 35 and not 30-40.\nExample\n35\n0 | 20\nnan >> 25 | 0", "type": { "type_kind": "python", "type_data": "str" @@ -48020,7 +52293,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 25, + "m_parent_index": 12, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -48028,19 +52301,14 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "12.0", - "Unknown", - "20.0", - "24.0", - "4.0", - "15.0" + "Unknown" ] } } ] }, - "name": "storage_time_until_next_deposition_step", - "description": "The time between the HTL stack is finalised and the next layer is deposited\n- If there are uncertainties, only state the best estimate, e.g. write 35 and not 20-50.", + "name": "lay_front_deposition_solvents", + "description": "The solvents used in each deposition procedure for each layer in the stack\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvents associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solvent is a mixture of different solvents, e.g. A and B, list the solvents in alphabetic order and separate them with semicolons, as in (A; B)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- For non-liquid processes with no solvents, state the solvent as \u2018none\u2019\n- If the solvent is not known, state this as \u2018Unknown\u2019\n- Use common abbreviations when appropriate but spell it out when risk for confusion\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nnone\nAcetonitile; Ethanol | Chlorobenzene\nnone >> Ethanol; Methanol; H2O | DMF; DMSO", "type": { "type_kind": "python", "type_data": "str" @@ -48049,7 +52317,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 26, + "m_parent_index": 13, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -48057,20 +52325,14 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Dry air", - "Unknown", - "Air", - "Ambient", - "Vacuum", - "N2", - "O2" + "" ] } } ] }, - "name": "storage_atmosphere", - "description": "The atmosphere in which the sample with the finalised HTL stack is stored until the next deposition step.\nExample\nAir\nN2\nVacuum", + "name": "lay_front_deposition_solvents_mixing_ratios", + "description": "The mixing ratios for mixed solvents\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvent mixing ratios associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- For pure solvents, state the mixing ratio as 1\n- For non-solvent processes, state the mixing ratio as 1\n- For unknown mixing ratios, state the mixing ratio as \u2018nan\u2019\n- For solvent mixtures, i.e. A and B, state the mixing ratios by using semicolons, as in (VA; VB)\n- The preferred metrics is the volume ratios. If that is not available, mass or mol ratios can be used instead, but it the analysis the mixing ratios will be assumed to be based on volumes.\nExample\n1\n4; 1 | 1\n1 >> 5; 2; 0.3 | 2; 1", "type": { "type_kind": "python", "type_data": "str" @@ -48079,7 +52341,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 27, + "m_parent_index": 14, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -48087,16 +52349,14 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "", - "20.0", - "10.0" + "Unknown" ] } } ] }, - "name": "storage_relative_humidity", - "description": "The relive humidity under which the sample with the finalised HTL stack is stored until next deposition step\n- If there are uncertainties, only state the best estimate, e.g write 35 and not 20-50.", + "name": "lay_front_deposition_solvents_supplier", + "description": "The suppliers of all the solvents.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvent suppliers associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solvent is a mixture of different solvents, e.g. A and B, list the associated suppliers and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- For non-liquid processes with no solvents, mark the supplier as \u2018none\u2019\n- If the supplier for a solvent is unknown, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nSigma Aldrich\nSigma Aldrich; Fisher | Acros\nnone >> Sigma Aldrich; Sigma Aldrich | Unknown", "type": { "type_kind": "python", "type_data": "str" @@ -48105,7 +52365,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 28, + "m_parent_index": 15, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -48113,40 +52373,23 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "", - "Plasma", - "Ar plasma", - "Ozone", - "UV-Ozone", - "He plasma", - "Washed with methanol", - "IPA dipping", - "DMF" + "Unknown" ] } } ] }, - "name": "surface_treatment_before_next_deposition_step", - "description": "Description of any type of surface treatment or other treatment the sample with the finalised HTL stack undergoes before the next deposition step.\n- If more than one treatment, list the treatments and separate them by a double forward angel bracket (\u2018 >> \u2018)\n- If no special treatment, state that as \u2018none\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample:\nnone\nAr plasma\nUV-ozone", + "name": "lay_front_deposition_solvents_purity", + "description": "The purity of the solvents used.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvent purities associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solvent is a mixture of different solvents, e.g. A and B, list the associated purities and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- Use standard nomenclature for purities, e.g. pro analysis, puris, extra dry, etc.\n- For non-liquid processes with no solvents, state the purity as \u2018none\u2019\n- If the purity for a solvent is not known, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nPro analysis\nPuris; Puris| Tecnical\nnone >> Pro analysis; Pro analysis | Unknown", "type": { "type_kind": "python", "type_data": "str" }, "shape": [] - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 8, - "m_parent_sub_section": "section_definitions", - "name": "Backcontact", - "description": "A section to describe information related to the back contact of the solar cell.", - "quantities": [ + }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, + "m_parent_index": 16, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -48154,302 +52397,38 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Au | ITO", - "rGO | Au", - "MoO3 | Ag | WO3", - "Carbon; WO3-np", - "ITO | MgF2", - "Al | Al2O3", - "Ag | Alq3", - "AgAu", - "MoOx | Ag", - "Carbon-nt; PCBM-60", - "ITO", - "AgAl", - "Cr | Cu", - "AgZn | Al", - "Mo | Ag", - "Cu-CFN", - "Field's metal", - "Al | Ag", - "Ag-nw | ZnO-np", - "Carbon; NiS", - "PEDOT:PSS | PDMS", - "Carbon; Graphite; PANI", - "MoOx | Au", - "Ni-grid", - "GaIn", - "Cu", - "Ag | MoO3", - "CNTs", - "none", - "MoOx | Al", - "MWCNTs; ONC1", - "Cu | Au", - "Cr | Au", - "MoOx | Au | Cu | MoOx", - "Pt-sheet", - "MoO3 | Ag", - "Carbon | IPA", - "KIPIG", - "T-MWCNTs", - "AZO", - "CSCNT@SnO2", - "B-MWCNTs", - "Carbon black | Carbon", - "Ag | SiO2 | ZnS | Ag | ZnS", - "Carbon-nt | PMMA", - "MoO3 | Ag | MoO3", - "PEDOT:PSS | Graphene", - "Pb", - "ITO | SLG", - "Carbon; NiO:rGO", - "Carbon; NiO", - "NiO", - "Cu; Cu2O", - "Graphene | PDMS", - "Carbon black; Graphite", - "N-Graphene", - "CuPc | Carbon", - "Carbon", - "Carbon-paper", - "Au | Al", - "Carbon; WO2-np", - "FTO", - "CNTs | Mxene", - "Graphite | Cu-tape", - "H2PtCl6", - "PTAA | FTO | SLG", - "PEI | PEDOT:PSS | PDMS", - "Bi2Te3", - "Pt", - "Carbon-nw", - "Cu | Ag | MoO3", - "MoO2 | ITO", - "Ca | Al", - "AZO | Ni | Al | Ni", - "MoOx | Cu", - "Carbon-tape", - "Carbon | Au", - "Carbon | CuSCN", - "PEDOT:PSS | Al", - "TFSA-Graphene | PET | Ag", - "ITO | Ag-grid", - "Ca", - "Mo2O3 | Ag", - "SnO2-c | Ag | SnO2-c", - "Candle soot | FTO | SLG", - "MoOx | IZO", - "Au | Ag-nw", - "Au", - "TETA-Graphene | PET", - "W", - "Transparent Conductive Adhesive | PET:Ni mesh", - "Graphene | PMMA | PDMS", - "MoO3 | Au | MoO3", - "Au | LiF", - "MoO3 \u2223 ITO", - "Au-np", - "Mg | Al", - "Carbon | Ag", - "TETA-Graphene | PET | Ag", - "Graphite | Cu", - "Ag-nw", - "Ni", - "Na@Carbon-nanowalls", - "Carbon black", - "Au | Organosilicate", - "AZO-c", - "Carbon; NiO-np", - "Ag", - "Ag | FTO", - "IZTO", - "ITO | MWCNTs", - "Ag-nw | PCBM-60", - "PEDOT:PSS | PEDOT:PSS | PDMS", - "Carbon | FTO | SLG", - "SWCNTs", - "Cr", - "IZO | Ag", - "FTO | SLG", - "Graphite | FTO", - "AZO | Ni | Al", - "Pd", - "Carbon | FAAc", - "Carbon black; Carbon-nt; Graphite", - "Carbon black; Graphite | MWCNTs", - "TeO2 | Ag", - "Au | MoO3", - "AZO | NiAl", - "Bi | Au", - "Carbon; MAI | Carbon", - "NiO | Ag | NiO", - "MoO3 | ITO | MgF2", - "PH 1000", - "Ag | ITO | Ag", - "ITO | LiF", - "Ag | IZO", - "LiF | Al", - "H:MoO3-nanobelts", - "Carbon | CNTs", - "Ti | Au", - "Carbon | Al", - "MoOx | Au | MoOx", - "Ag-sheet", - "TFSA-Graphene | PET", - "Graphene | PET", - "Graphene | PEDOT", - "MoOx | Ag | MoOx", - "MoO3 | AuAg | MoO3", - "Carbon | Carbon-fibre", - "MoO3 | Au | Ag", - "Ba | Ag", - "Graphen", - "Mg | Ag", - "Carbon | MAAc", - "MoO3 | Au", - "MoOx | ITO", - "Graphite | Pt", - "MWCNTs; ONC2", - "IZO", - "Ag | Ni", - "PANI | FTO | SLG", - "Al | Au", - "MoO3 \u2223 Au \u2223 Ag \u2223 MoO3 | Alq3", - "PEDOT:PSS | Ag-nw | PDMS", - "MWCNTs", - "Cr | Pt | FTO", - "SnO2-c | Ag", - "Carbon | Sn", - "Unknown", - "Carbon; PEMA", - "Carbon | Graphite", - "MoP3 | Ag", - "Ag | Ta2O3", - "Cr2O3:Cr", - "Graphene | Au", - "PEDOT:PSS | FTO | SLG", - "Carbon | CNTs | Mxene", - "AlAg", - "AZO | Au", - "AV-Carbon; MAI", - "Graphite; Carbon black@5:1", - "NiO | Ag | NiO | NaYF4 | Ag", - "AV-carbon; MAI", - "SWCNTs | PMMA", - "Ba | Al", - "Pt-Carbon-nt", - "Sb", - "Carbon-epoxy | Ag", - "ITO | Ni | Al", - "Ni | Al", - "Ag | V2O5", - "Pt | FTO | SLG", - "PEDOT:PSS | ITO | SLG", - "Graphene", - "Cu | Au | BCP", - "IZO | Au", - "Au | Ni", - "Au | ITO | Au", - "MoO3 | AZO | AlNi-grid", - "WO3 | Ag", - "Au | Ag", - "SnO2-c | Cu | SnO2-c", - "Carbon | FTO", - "CSCNT@Al2O3-c | CSCNT@SnO2", - "Ti", - "Carbon-nt", - "AZO-np | Ag", - "Carbon; NiPt-nw", - "D-Sorbito; PEDOT:PSSl | Ag-nw | PET", - "Carbon; LPP", - "MoOx | Cu | MoOx", - "PEDOT:PSS | ITO | PET", - "In", - "Carbon-nanowalls", - "NiS | Cr | Pt | FTO | SLG", - "Ag | ITO", - "Ca | Ag", - "Ag-nw | C60", - "MoOx | Ag | ZnS", - "Au | FTO", - "Pt | Si", - "Al", - "Ag@Au-np", - "Graphite", - "PEDOT:PSS:PSA", - "MnO3 | Ag", - "AgAu-mp", - "ITO | Al", - "Ag | SnO2-c", - "ICO", - "Ti-grid", - "ITO | Au", - "MoO3 | Au | Ag | MoO3 | Alq3", - "Au-np; NiO", - "Carbon-nt | Carbon", - "MoOx | ITO | Au", - "PEDOT:PSS; Sorbitol | Ag-grid | PET", - "MoO3 | ITO", - "Pt | FTO", - "MoOx | IO | ITO | Au", - "Carbon | Galinstan", - "P3HT | FTO | SLG", - "ITO | Ag", - "Ni | Au", - "Ag | Au", - "SWCNTs | Ag", - "Ag | Al", - "MoOx | IAI", - "Cu | Ag", - "Perovskite | PEDOT:PSS | ITO | SLG", - "Graphene oxide | Carbon", - "Ag-nanocubes | Ag | MoO3", - "MoO3 | IZO", - "Carbon-mp", - "MoOx | ITO | MgF2", - "NbS2", - "MoO3 | Al", - "Ti3C2", - "MWCNTs; ONC3", - "Carbon | PEDOT:PSS | FTO | SLG", - "MoOx | IZO | Au", - "LiF | Ag", - "ITO | Au-grid", - "PEDOT:PSS", - "3D potassium-ion preintercalated graphene (KIPIG)", - "PEI | PH 1000", - "Filed's metal", - "Ti | Cu", - "Au | Au-wire", - "AlNi-grid", - "Carbon-nt | PMMA | Au", - "ITO | PEN", - "Carbon black; MWCNTs", - "Carbon | Silica gel electrolyte | Carbon", - "CSCNT@Al2O3-c | CSCNT", - "Ag-np | ITO", - "Carbon; MAI", - "PTCBI | Ag | WO3 | PTCBI | Ag", - "Carbon | KAc", - "Ag | CsF", - "Liq | Al", - "Graphite | FTO | SLG", - "Cu-ribbon", - "ITO | Cu", - "Mo", - "Metal", - "AZO | Ag | AZO", - "Graphite ribbon", - "Pt-np | FTO | SLG", - "Carbon | CsAc" + "" + ] + } + } + ] + }, + "name": "lay_front_deposition_reaction_solutions_compounds", + "description": "The non-solvent precursor chemicals used in each reaction step\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the non-solvent chemicals associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several compounds, e.g. A and B, list the associated compounds in alphabetic order and separate them with semicolons, as in (A; B)\n- Note that also dopants/additives should be included\n- When several precursor solutions are made and mixed before the reaction step, it is the properties of the final mixture used in the reaction we here describe.\n- The number and order of layers and reaction steps must line up with the previous columns.\n- For gas phase reactions, state the reaction gases as if they were in solution.\n- For solid-state reactions, state the compounds as if they were in solution.\n- For reaction steps involving only pure solvents, state this as \u2018none\u2019\n- If the compounds for a deposition step is not known, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nAu\nCuI\nAg", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 17, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Unknown" ] } } ] }, - "name": "stack_sequence", - "description": "The stack sequence describing the back contact.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- If two materials, e.g. A and B, are mixed in one layer, list the materials in alphabetic order and separate them with semicolons, as in (A; B)\n- If no back contact, state that as \u2018non\u2019\n- Use common abbreviations when appropriate but spell it out if risk for confusion.\n- If a material is doped, or have an additive, state the pure material here and specify the doping in the columns specifically targeting the doping of those layers.\n- There is no sharp well-defined boundary between when a material is best considered as doped or as a mixture of two materials. When in doubt if your material is best described as doped or as a mixture, use the notation that best capture the metaphysical essence of the situation.\n- There are a lot of stack sequences described in the literature. Try to find your one in the list. If it is not there (i.e. you may have done something new) define a new stack sequence according to the instructions.\nExample:\nAu\nAg\nAl\nCarbon\nMoO3 | Ag", + "name": "lay_front_deposition_reaction_solutions_compounds_supplier", + "description": "The suppliers of the non-solvent chemicals.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the non-solvent chemical suppliers associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several dissolved compounds, e.g. A and B, list the associated suppliers and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- For gas phase reactions, state the suppliers for the gases or the targets/evaporation sources that are evaporated/sputtered/etc.\n- For solid state reactions, state the suppliers for the compounds in the same way.\n- For reaction steps involving only pure solvents, state the supplier as \u2018none\u2019 (as that that is entered in a separate filed)\n- For chemicals that are lab made, state that as \u201cLab made\u201d or \u201cLab made (name of lab)\u201d\n- If the supplier for a compound is unknown, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nDysole; Sigma Aldrich; Dyenamo; Sigma Aldrich\nSigma Aldrich; Fisher | Acros\nLab made (EPFL) | Sigma Aldrich >> none", "type": { "type_kind": "python", "type_data": "str" @@ -48458,7 +52437,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, + "m_parent_index": 18, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -48466,398 +52445,134 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "", - "89.0", - "90.0", - "40.0 | 11.0", - "5.0 | 130.0", - "50.0", - "70.0 | 10.0 | 10.0", - "220.0", - "230.0 | 100.0", - "81.0", - "180.0", - "45.0", - "15.0 | 80.0", - "14000.0", - "50.0 | 4000.0", - "7.0 | 80.0", - "24.0 | 15.0 | 20.0 | 480.0 | 8.0", - "10.0 | 100.0 | 200.0", - "203.0", - "10.0 | 120.0 | 70.0", - "11.0 | 30.0", - "1.0 | 200.0", - "30.0 | 120.0 | nan", - "60.9", - "11000.0 | nan", - "1.3 | 100.0", - "300.0 | 250.0", - "2.0 | 1.0 | 7.0 | 5.0 | 50.0", - "15.0 | 150.0", - "60.4", - "35.0 | 103.0 | 35.0", - "2.5 | 154.0", - "6.0 | 11.0 | 20.0", - "1800.0", - "22000.0", - "11.0 | 50.0", - "60.5", - "95.0", - "20.0 | 10.0 | 20.0", - "10.0 | 110.0", - "20.0 | 14.0", - "87.0", - "10.0 | 90.0", - "70.0", - "12.0 | 40.0", - "21.0 | 250.0", - "11.0", - "500.0", - "2000.0 | nan", - "5.0 | nan", - "53150.0", - "2000.0", - "20.0 | 15.0 | 20.0 | 480.0 | 8.0", - "10.0 | 80.0", - "1.0 | 7.0 | 40.0", - "21.0 | 15.0 | 20.0 | 480.0 | 8.0", - "8.0 | 120.0", - "5.0 | 150.0", - "nan | 6.0 | nan", - "61210.0", - "260.0", - "201.0", - "3.0 | 1.0 | 7.0 | 5.0 | 50.0", - "2.0 | 100.0", - "7.0 | 60.0", - "100.0 | 1000.0", - "16500.0 | nan", - "10.0 | 15.0 | 30.0", - "240.0", - "7.2 | 70.0", - "50.0 | 50.0", - "11.0 | nan", - "9.0 | nan", - "35.0 | 95.0 | 35.0", - "330.0", - "10.0 | 30000.0", - "60.3", - "85.0", - "60.1", - "130.0 | 100.0", - "2.5 | 154.0 | 50.0", - "nan | 150.0", - "15.0 | 12.0", - "10.0 | 70.0", - "9.0", - "15.0 | 12.0 | 60.0", - "150.0 | 500.0", - "8.0", - "0.5 | 60.0", - "10.0 | 200.0", - "13.0", - "7.0 | 12.0 | 30.0", - "820.0", - "1.0 | 6.0", - "nan | 80.0", - "13.0 | 80.0", - "25.0 | 15.0 | 20.0 | 480.0 | 8.0", - "2.0 | 250.0", - "93.2", - "500.0 | 150.0", - "5000.0", - "20.0", - "52.0", - "7.0 | 18.0 | 30.0", - "21.0 | 7.0 | 20.0", - "60.11", - "82.0", - "15.0 | 12.0 | 20.0", - "6.0 | 1.5 | 9.5 | 20.0", - "7870.0", - "8.0 | 20.0 | 115.0 | 8.0 | 20.0", - "30.0 | 120.0", - "30.0 | 80.0", - "10.0 | 20.0", - "14.0", - "8.0 | 20.0 | 65.0 | 8.0 | 20.0", - "80.0 | 10.0", - "2001.0 | nan", - "nan | 100.0", - "250.0", - "10.0 | 10.0", - "nan | 220.0", - "65.0", - "150.0", - "15.0 | 50.0", - "4000000000.0", - "15.0 | 200.0", - "46530.0", - "nan | 70.0", - "23.0 | 15.0 | 20.0 | 480.0 | 8.0", - "35.0 | 10.0 | 35.0", - "100000.0 | nan", - "88.0 | 700.0", - "5.0 | 12.0 | 40.0", - "1.0 | 250.0", - "8000.0 | nan", - "60.8", - "12000.0", - "15.0 | nan", - "60.7", - "nan | 25000.0", - "1.0 | 100.0", - "30.0 | 70.0", - "50000.0", - "30.0 | 135.0", - "8.0 | 200.0", - "35.0", - "180.0 | 50.0", - "30.0 | 7.0 | 80.0", - "750.0", - "32000.0", - "1.0 | nan", - "5.0 | 90.0", - "8.0 | 80.0", - "150.0 | 4900.0", - "90.0 | 200.0", - "51.0", - "22.0 | 15.0 | 20.0 | 480.0 | 8.0", - "4500.0", - "16000.0", - "24000.0", - "30000.0", - "10.0 | 60.0", - "12.0 | 100.0", - "7.0 | 120.0", - "9.0 | 100.0", - "6.7 | 100.0", - "154.0 | 50.0", - "25.0", - "10.0 | 202.0", - "20.0 | 10.0 | 35.0", - "80.0 | 20.0", - "40.0", - "65.0 | nan", - "83.0", - "11200.0", - "8.0 | 90.0", - "20.0 | 7.0 | 20.0", - "230.0", - "75.0", - "8.0 | 60.0", - "190.0", - "6.0 | 100.0", - "7.0 | 1.0", - "3.0 | nan", - "15000.0", - "35.0 | 84.0 | 35.0", - "60.6", - "9.0 | 80.0", - "nan | 400.0 | 500.0", - "10.0 | 40.0", - "145.0", - "nan | 50.0 | 4000.0", - "1500.0", - "100.0 | 125.0", - "2.0 | 200.0", - "28.0 | 15.0 | 20.0 | 480.0 | 8.0", - "7.0 | 70.0", - "60.0", - "125.0", - "5.0", - "40000.0", - "45.0 | nan", - "35.0 | 76.0 | 35.0", - "900.0", - "400.0", - "105.0 | 90.0", - "25000.0", - "8.0 | 30.0 | 100.0", - "180.0 | 100.0", - "2.0", - "20.0 | nan", - "80.0 | 150.0", - "30.0 | 100.0", - "11.0 | 10.0", - "5.0 | 120.0", - "4.0", - "1.0 | 10.0 | 20.0", - "14.0 | 20.0", - "15.0 | 40.0", - "40.0 | 120.0", - "20.0 | 250.0", - "600.0", - "nan | 200.0", - "12.0", - "12000.0 | nan", - "6.0 | nan", - "100.0", - "105.0", - "8.0 | 110.0", - "15.0 | 120.0", - "37500.0", - "23000.0 | nan", - "5.0 | 10.0 | 35.0", - "10.0 | 40.0 | nan", - "80.0 | 50.0", - "10000.0 | nan", - "8.0 | 20.0 | 85.0 | 8.0 | 20.0", - "28000.0", - "21000.0", - "48.0", - "9.0 | 25.0", - "4.0 | 80.0", - "15.0 | 100.0", - "96.0", - "3.0 | 80.0", - "200.0", - "70.0 | 10.0", - "4000.0 | nan", - "150.0 | nan", - "80.0 | 8.0", - "350.0", - "110.0 | 120.0", - "1.0 | 10.0 | 35.0", - "90.0 | 100.0", - "50.0 | 100.0", - "80000.0", - "10.0 | 120.0", - "202.0", - "200000.0", - "8000.0", - "35.0 | 120.0 | 70.0", - "160.0", - "10.0 | 55.0", - "3.5 | 100.0", - "2000.0 | 100.0 | nan", - "10.0 | 150.0", - "25.0 | 100.0", - "12.0 | 80.0", - "5.0 | 10.0 | 40.0", - "170.0", - "35.0 | 64.0 | 35.0", - "1500-2000", - "55.0", - "9000.0", - "6.0", - "4900.0", - "10.0 | 100.0 | 10.0 | 100.0", - "100.0 | 20.0", - "20.0 | 100.0", - "7.0 | nan", - "34.0 | 20.0 | 25.0 | nan | 8.0", - "3333.0", - "2.5 | 80.0", - "20.0 | 80.0", - "18.0 | 10.0 | 19.0", - "150.0 | 100.0", - "5.0 | 60.0", - "6.0 | 10.0 | 35.0", - "3500.0", - "550.0", - "15.0", - "12500.0", - "35.0 | 120.0", - "8.0 | 100.0", - "7.0 | 24.0 | 30.0", - "300.0", - "11.0 | 80.0", - "50.0 | 101.0", - "185.0", - "71600.0", - "77.0 | nan", - "5.0 | 100.0", - "120.0", - "88.0", - "130.0", - "3000.0", - "110.0", - "20.0 | 15.0", - "120000.0", - "300000.0", - "10.0 | 100.0", - "26.0 | 15.0 | 20.0 | 480.0 | 8.0", - "11000.0", - "6500.0", - "1000.0", - "5.0 | 10.0 | 5.0", - "10.0 | 1.0 | 10.0 | 40.0", - "34.0 | 20.0 | 55.0 | nan | 15.0", - "6.3 | 70.0", - "60000.0", - "100.0 | 100.0", - "10.0 | 35.0", - "1200.0", - "60.2", - "390.0", - "10.0", - "11.0 | 20.0", - "25800.0", - "35.0 | 160.0", - "35.0 | 53.0 | 35.0", - "30.0 | nan", - "1.0 | 120.0", - "120.0 | 70.0", - "20000.0", - "5.0 | 20.0 | 35.0", - "210.0", - "2500.0", - "5.0 | 300.0", - "5.0 | 80.0", - "10.0 | 10.0 | 35.0", - "800.0", - "1.9 | 70.0", - "1.45 | nan", - "9.0 | 110.0", - "40.0 | 4000.0", - "3.0 | 100.0", - "20.0 | 14.0 | 20.0", - "15.0 | 350.0", - "53.0", - "70.0 | 30.0", - "250.0 | 50.0 | 1000.0", - "86.0", - "1600.0", - "3.0 | 200.0", - "7000.0", - "97.0", - "30.0", - "6.0 | 60.0", - "7.0 | 100.0", - "3.0 | 150.0", - "10.0 | nan | nan", - "10.0 | 75.0", - "10.0 | 50.0", - "70000.0", - "9600.0", - "140.0", - "50.0 | 120.0", - "100.0 | nan", - "80.0", - "nan | 5.0", - "27.0 | 15.0 | 20.0 | 480.0 | 8.0", - "80.0 | 80.0", - "6.0 | 80.0", - "13000.0", - "35.0 | 88.0 | 35.0", - "4000.0", - "100000.0", - "60.0 | 40.0", - "84.0", - "16.0", - "10.0 | 201.0", - "10000.0", - "34.0 | 20.0 | 75.0 | nan | 35.0", - "10.0 | 8.5 | 10.0" + "Unknown" + ] + } + } + ] + }, + "name": "lay_front_deposition_reaction_solutions_compounds_purity", + "description": "The purity of the non-solvent chemicals.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the compound purities associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several dissolved compounds, i.e. A and B, list the associated purities and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- Use standard nomenclature for purities, e.g. pro analysis, puris, extra dry, etc.\n- For reaction steps involving only pure solvents, state this as \u2018none\u2019 (as that is stated in another field)\n- If the purity for a compound is not known, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nPro analysis\n99.999; Puris| Tecnical\nUnknown >> Pro analysis; Pro analysis | none", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 19, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "" + ] + } + } + ] + }, + "name": "lay_front_deposition_reaction_solutions_concentrations", + "description": "The concentration of the non-solvent precursor chemicals.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the concentrations associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several dissolved compounds, e.g. A and B, list the associated concentrations and separate them with semicolons, as in (A; B)\n- The order of the compounds must be the same as in the previous filed.\n- For reaction steps involving only pure solvents, state this as \u2018none\u2019\n- When concentrations are unknown, state that as \u2018nan\u2019\n- Concentrations can be stated in different units suited for different situations. Therefore, specify the unit used. When possible, use one of the preferred units\no M, mM, molal; g/ml, mg/ml, \u00b5g/ml, wt%, mol%, vol%, ppt, ppm, ppb\n- For values with uncertainties, state the best estimate, e.g write 4 wt% and not 3-5 wt%.\nExample\n4 wt%\n0.2 M; 0.15 M| 10 mg/ml\n0.3 mol% | 2 mol%; 0.2 wt% | nan", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 20, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Unknown" + ] + } + } + ] + }, + "name": "lay_front_deposition_reaction_solutions_volumes", + "description": "The volume of the reaction solutions\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the volumes associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The volumes refer the volumes used, not the volume of the stock solutions. Thus if 0.15 ml of a solution is spin-coated, the volume is 0.15 ml\n- For reaction steps without solvents, state the volume as \u2018nan\u2019\n- When volumes are unknown, state that as \u2018nan\u2019\nExample\n0.1\n0.1 >> 0.05 | 0.05\nnan | 0.15", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 21, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Unknown" + ] + } + } + ] + }, + "name": "lay_front_deposition_reaction_solutions_age", + "description": "The age of the solutions\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the age of the solutions associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- As a general guideline, the age refers to the time from the preparation of the final precursor mixture to the reaction procedure.\n- When the age of a solution is not known, state that as \u2018nan\u2019\n- For reaction steps where no solvents are involved, state this as \u2018nan\u2019\n- For solutions that is stored a long time, an order of magnitude estimate is adequate.\nExample\n2\n0.25 |1000 >> 10000\nnan | nan", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 22, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Unknown" + ] + } + } + ] + }, + "name": "lay_front_deposition_reaction_solutions_temperature", + "description": "The temperature of the reaction solutions.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the temperatures of the solutions associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a reaction solution undergoes a temperature program, list the temperatures (e.g. start, end, and other important points) and separate them with semicolons, e.g. 25; 100\n- When the temperature of a solution is unknown, state that as \u2018nan\u2019\n- For reaction steps where no solvents are involved, state the temperature of the gas or the solid if that make sense. Otherwise state this as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 120 and not 110-130.\n- Assume an undetermined room temperature to be 25\nExample\n25\n100; 50 | 25\nnan | 25 >> 25", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 23, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Unknown" ] } } ] }, - "name": "thickness_list", - "description": "A list of thicknesses of the individual layers in the stack.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- The layers must line up with the previous filed.\n- State thicknesses in nm\n- Every layer in the stack have a thickness. If it is unknown, state this as \u2018nan\u2019\n- If there are uncertainties, state the best estimate, e.g write 100 and not 90-110\nExample\n100\n10 | 80\nnan | 100", + "name": "lay_front_deposition_substrate_temperature", + "description": "The temperature of the substrate.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the temperatures of the substrates (i.e. the last deposited layer) associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The temperature of the substrate refers to the temperature when the deposition of the layer is occurring.\n- If a substrate undergoes a temperature program before the deposition, list the temperatures (e.g. start, end, and other important points) and separate them with semicolons (e.g. 25; 100)\n- When the temperature of a substrate is not known, state that as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 120 and not 110-130.\n- Assume that an undetermined room temperature is 25\nExample\n25\nnan\n125; 325; 375; 450 | 25 >> 25", "type": { "type_kind": "python", "type_data": "str" @@ -48866,7 +52581,194 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, + "m_parent_index": 24, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Unknown" + ] + } + } + ] + }, + "name": "lay_front_deposition_thermal_annealing_temperature", + "description": "The temperatures of the thermal annealing program associated with depositing the layers\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the annealing temperatures associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If the thermal annealing involves a temperature program with multiple temperature stages, list the temperatures (e.g. start, end, and other important points) and separate them with semicolons (e.g. 25; 100)\n- For values with uncertainties, state the best estimate, e.g. write 120 and not 110-130.\n- If no thermal annealing is occurring after the deposition of a layer, state that by stating the room temperature (assumed to 25\u00b0C if not further specified)\n- If the thermal annealing program is not known, state that by \u2018nan\u2019\nExample\n25\n50 | nan\n450 | 125; 325; 375; 450 >> 125; 325; 375; 450", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 25, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Unknown" + ] + } + } + ] + }, + "name": "lay_front_deposition_thermal_annealing_time", + "description": "The time program associated to the thermal annealing program.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the annealing times associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If the thermal annealing involves a temperature program with multiple temperature stages, list the associated times at those temperatures and separate them with semicolons.\n- The annealing times must align in terms of layers\u00b8 reaction steps and annealing temperatures in the previous filed.\n- If a time is not known, state that by \u2018nan\u2019\n- If no thermal annealing is occurring after the deposition of a layer, state that by \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 20 and not 10-30.\nExample\nnan\n60 | 1000\n30 | 5; 5; 5; 30 >> 5; 5; 5; 30", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 26, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Unknown" + ] + } + } + ] + }, + "name": "lay_front_deposition_thermal_annealing_atmosphere", + "description": "The atmosphere during thermal annealing\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the atmospheres associated to each annelaing step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- If the atmosphere is a mixture of different gases, i.e. A and B, list the gases in alphabetic order and separate them with semicolons, as in (A; B)\n- \u201cDry air\u201d represent air with low relative humidity but where the relative humidity is not known\n- \u201cAmbient\u201d represent air where the relative humidity is not known. For ambient conditions where the relative humidity is known, state this as \u201cAir\u201d\n- \u201cVacuum\u201d (of unspecified pressure) is for this purpose considered as an atmospheric gas.\n- This is often the same as the atmosphere under which the deposition is occurring, but not always.\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nN2\nVacuum | N2\nAir | Ar >> Ar", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 27, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Unknown" + ] + } + } + ] + }, + "name": "lay_front_storage_time_until_next_deposition_step", + "description": "The time between the back contact is finalised and the next layer is deposited\n- If there are uncertainties, only state the best estimate, e.g. write 35 and not 20-50.\n- If this is the last layer in the stack, state this as \u2018nan\u2019", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 28, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Unknown" + ] + } + } + ] + }, + "name": "lay_front_storage_atmosphere", + "description": "The atmosphere in which the sample with the finalised back contact is stored until the next deposition step or device performance measurement\nExample\nAir\nN2\nVacuum", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 29, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "" + ] + } + } + ] + }, + "name": "lay_front_storage_relative_humidity", + "description": "The relive humidity under which the sample with the finalised back contact is stored until the next deposition step or device performance measurement\n- If there are uncertainties, only state the best estimate, e.g write 35 and not 20-50.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 30, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "" + ] + } + } + ] + }, + "name": "lay_front_surface_treatment_before_next_deposition_step", + "description": "Description of any type of surface treatment or other treatment the sample with the finalised back contact is stored until the next deposition step or device performance measurement\n- If more than one treatment, list the treatments and separate them by a double forward angel bracket (\u2018 >> \u2018)\n- If no special treatment, state that as \u2018none\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample:\nnone\nAr plasma\nUV-ozone", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 31, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "BoolEditQuantity" + } + ] + }, + "name": "lay_back", + "description": "TRUE if there is a functional layer above the back contact, i.e. layers deposited after the back contact has been finalised.", + "type": { + "type_kind": "python", + "type_data": "bool" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 32, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -48875,24 +52777,16 @@ window.nomadArtifacts = { "props": { "suggestions": [ "", - "Undoped | Undoped", - "TiO2-np", - "Undoped | Undoped | Undoped | Undoped | Undoped", - "B; P", - "C; NiO", - "B4C", - "WO3-np", - "P", - "B", - "Undoped", - "CuS" + "Upconversion", + "Dielectric mirror", + "Antireflection" ] } } ] }, - "name": "additives_compounds", - "description": "List of the dopants and additives that are in each layer of the HTL-stack\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- The layers must line up with the previous fields.\n- If several dopants/additives, e.g. A and B, are present in one layer, list the dopants/additives in alphabetic order and separate them with semicolons, as in (A; B)\n- If no dopants/additives, state that as \u201cUndoped\u201d\n- If the doping situation is unknown, stat that as\u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template, even if to most common back contacts is undoped metals\nExample\nCuS\nB; P\nAu-np | Undoped", + "name": "lay_back_function", + "description": "The function of the additional layers on the backcontact side.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- If a layer has more than one function, e.g. A and B, list the functions in order and separate them with semicolons, as in (A; B)\nExample:\nA.R.C.\nBack reflection\nDown conversion\nEncapsulation\nLight management\nUpconversion", "type": { "type_kind": "python", "type_data": "str" @@ -48901,7 +52795,32 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, + "m_parent_index": 33, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "MgF2", + "Unknown" + ] + } + } + ] + }, + "name": "lay_back_stack_sequence", + "description": "The stack sequence describing the additional layers on the backcontact side.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- If two materials, e.g. A and B, are mixed in one layer, list the materials in alphabetic order and separate them with semicolons, as in (A; B)\n- Use common abbreviations when appropriate but spell it out if risk for confusion.\n- There are now separate filed for doping. Indicate doping with colons. E.g. wither aluminium doped NiO-np as Al:NiO-np\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 34, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -48910,24 +52829,62 @@ window.nomadArtifacts = { "props": { "suggestions": [ "", - "4; 1", - "10 wt%", - "2 wt%", - "7; 3", - "5 wt%", - "0.1 wt%", - "9; 1", - "3.5 wt%", - "7.5 wt%", - "8 wt%", - "6.5 wt%", - "0.5 wt%" + "105.0", + "90.0" ] } } ] }, - "name": "additives_concentrations", + "name": "lay_back_thickness_list", + "description": "A list of thicknesses of the individual layers in the stack.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- The layers must line up with the previous filed.\n- State thicknesses in nm\n- Every layer in the stack have a thickness. If it is unknown, state this as \u2018nan\u2019\n- If there are uncertainties, state the best estimate, e.g write 100 and not 90-110", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 35, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "" + ] + } + } + ] + }, + "name": "lay_back_additives_compounds", + "description": "List of the dopants and additives that are in each layer of the HTL-stack\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- The layers must line up with the previous fields.\n- If several dopants/additives, e.g. A and B, are present in one layer, list the dopants/additives in alphabetic order and separate them with semicolons, as in (A; B)\n- If no dopants/additives, state that as \u201cUndoped\u201d\n- If the doping situation is unknown, stat that as\u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template, even if to most common back contacts is undoped metals\nExample\nCuS\nB; P\nAu-np | Undoped", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 36, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "" + ] + } + } + ] + }, + "name": "lay_back_additives_concentrations", "description": "The concentration of the dopants/additives.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- If more than one dopant/additive in the layer, e.g. A and B, separate the concentration for each dopant/additive with semicolons, as in (A; B)\n- For each dopant/additive in the layer, state the concentration.\n- The order of the dopants/additives must be the same as in the previous filed.\n- For layers with no dopants/additives, state this as \u2018none\u2019\n- When concentrations are unknown, state that as \u2018nan\u2019\n- Concentrations can be stated in different units suited for different situations. Therefore, specify the unit used.\n- The preferred way to state the concentration of a dopant/additive is to refer to the amount in the final product, i.e. the material in the layer. When possible, use on the preferred units\no wt%, mol%, vol%, ppt, ppm, ppb\n- When the concentration of the dopant/additive in the final product is unknown, but where the concentration of the dopant/additive in the solution is known, state that concentration instead. When possible, use on the preferred units\no M, mM, molal; g/ml, mg/ml, \u00b5g/ml\n- For values with uncertainties, state the best estimate, e.g write 4 wt% and not 3-5 wt%.\nExample\n4 wt%\n5 vol%; nan | 10 mg/ml\n0.3 mol% | 2 mol%; 0.2 wt% | 0.3 M", "type": { "type_kind": "python", @@ -48937,7 +52894,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 4, + "m_parent_index": 37, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -48945,125 +52902,14 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Evaporation | Evaporation | Evaporation | Evaporation", - "Doctor blading | Doctor blading | Doctor blading", - "Pressed", - "Spray-coating | Spray-coating", - "Spin-coating | Spin-coating", - "Electropolymerisation | Sandwiching", - "Brush painting", - "Evaporation | DC Sputtering", - "Screen printing | Lamination", - "Spin-coating | Evaporation", - "Sputtering | Sputtering | Sputtering", - "Evaporation | Spin-coating", - "Sputtering", - "Screen printing | Spray-coating", - "DC Sputtering", - "Evaporation | Sputtering | Sputtering", - "Evaporation | RF sputtering | E-beam evaporation", - "Doctor blading | Spin-coating", - "Dropp casting", - "Lamination | Lamination", - "RF sputtering | Evaporation | Evaporation", - "Evaporation | ALD", - "Inkjet printing", - "RF sputtering", - "E-beam evaporation | E-beam evaporation | E-beam evaporation | PVD | Evaporation", - "Sputtering | Spray-coating", - "Candle burning | Sandwiching", - "Brush painting | Brush painting", - "Evaporation | Evaporation", - "E-beam evaporation | E-beam evaporation | E-beam evaporation", - "CVD | Spin-coating >> reactive ion etching", - "Evaporation | Activated reactive evaporation", - "Spin-coating | Doctor blading", - "Sputtering | Sputtering", - "Drop coated", - "Sandwithcing", - "CVD >> Lamination", - "Unknown | Ultrasonic welding", - "Sputtering | Evaporation | Evaporation | Evaporation", - "Evaporation | Magnetron sputtering", - "Candel burning >> Sandwiching | Unknown | Unknown", - "Evaporation | RF magnetron sputtering", - "Candle burning | Lamination", - "ALD | Evaporation | ALD", - "Spray-pyrolys | Sandwiching", - "Spin-coating | Screen printing", - "Lamination | Spin-coating", - "Evaporation | DC Magnetron Sputtering", - "Lamination | Painting", - "Lamination", - "Doctor blading | Ultrasonic welding", - "Evaporation | Evaporation | Evaporation", - "Brush painting | Unknown", - "Evaporation | Sputtering", - "PVD", - "Dipp-coating", - "Screen printing >> Lamination", - "Springkling | Sandwiching", - "Magnetron sputtering | Magnetron sputtering", - "Sputtering | Lamination", - "Spin-coating | Sandwiching", "Evaporation", - "Unknown", - "Unknown | Doctor blading", - "Evaporation | Magnetron sputtering | E-beam evaporation", - "Lamination | Evaporation", - "CVD", - "Lamination >> Isostatic pressing", - "ALD | Evaporation", - "Screen printing", - "Evaporation | Sputtering | Evaporation", - "Unknown | Evaporation", - "Evaporation | Sputtering | Sputtering | Evaporation", - "Doctor blading", - "Magnetron sputtering", - "Evaporation | Evaporation | Evaporation | Evaporation | Evaporation", - "RF Magnetron Sputtering", - "DC Sputtering | Evaporation", - "Candle burning >> Sandwiching", - "Dropcasting | Lamination", - "Lamination | Dropcasting", - "Electrospinning", - "Suttering", - "E-beam evaporation", - "Candle burning >> Lamination", - "Screen printing | Painting", - "Evaporation >> Evaporation >> Oxidation", - "Evaporation | E-beam evaporation | E-beam evaporation | E-beam evaporation | E-beam evaporation", - "DC Magnetron Sputtering | Evaporation", - "Sputtering >> Lamination", - "Evaporation | Sandwiching", - "Dropcasting", - "Pulsed laser deposition", - "DC Magnetron Sputtering", - "Screen printing | Unknown", - "E-beam evaporation | E-beam evaporation", - "Sputtering | Evaporation", - "Lamination | Spin-coating | Evaporation", - "Brush painting | Sandwiching", - "Spin-coating", - "Sputtering | E-beam evaporation | E-beam evaporation", - "Doctor blading | Doctor blading", - "Spray-coating", - "Spin-coating | Evaporation | Evaporation", - "Doctor blading | Sandwhiching", - "Sandwiching", - "Painting", - "Mechanical clipping", - "Evaporation | Spray-coating", - "Candel burning | Sandwiching", - "Doctor blading | Lamination", - "Screen printing | Screen printing", - "Evaporation | DC Magnetron Sputtering | E-beam evaporation" + "Unknown" ] } } ] }, - "name": "deposition_procedure", + "name": "lay_back_deposition_procedure", "description": "The deposition procedures for the HTL-stack.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate them by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- Thermal annealing is generally not considered as an individual reaction step. The philosophy behind this is that every deposition step has a thermal history, which is specified in a separate filed. In exceptional cases with thermal annealing procedures clearly disconnected from other procedures, state \u2018Thermal annealing\u2019 as a separate reaction step.\n- Please read the instructions under \u201cPerovskite. Deposition. Procedure\u201d for descriptions and distinctions between common deposition procedures and how they should be labelled for consistency in the database.\n- A few additional clarifications:\n- Lamination\no A readymade film is transferred directly to the device stack. A rather broad concept. An everyday kitchen related example of lamination would eb to place a thin plastic film over a slice of pie.\n- Sandwiching\no When a readymade top stack simply is placed on top of the device stack. Could be held together with clams. The typical example is a when a \u201cCarbon | FTO | SLG\u201d is placed on top of the device stack. Standard procedure in the DSSC filed.\nExample\nEvaporation\nEvaporation | Evaporation\nDoctor blading\nScreen printing\nSputtering\nLamination\nE-beam evaporation\nSandwiching", "type": { "type_kind": "python", @@ -49073,7 +52919,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, + "m_parent_index": 38, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -49081,24 +52927,13 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Solid", - "Liquid", - "Unknown", - "Gas | Gas | Gas | Gas | Gas", - "Solid | Gas", - "Solid | Solid | Solid", - "Liquid | Gas | Gas", - "Liquid | Solid", - "Gas", - "Liquid >> Solid", - "Gas | Gas", - "Liquid | Gas" + "Unknown" ] } } ] }, - "name": "deposition_aggregation_state_of_reactants", + "name": "lay_back_deposition_aggregation_state_of_reactants", "description": "The physical state of the reactants.\n- The three basic categories are Solid/Liquid/Gas\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the aggregation state associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- Most cases are clear cut, e.g. spin-coating involves species in solution and evaporation involves species in gas phase. For less clear-cut cases, consider where the reaction really is happening as in:\no For a spray-coating procedure, it is droplets of liquid that enters the substrate (thus a liquid phase reaction)\no For sputtering and thermal evaporation, it is species in gas phase that reaches the substrate (thus a gas phase reaction)\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nLiquid\nGas | Liquid\nLiquid | Liquid >> Liquid", "type": { "type_kind": "python", @@ -49108,7 +52943,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 6, + "m_parent_index": 39, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -49116,22 +52951,13 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "N2 | Vacuum", - "Vacuum | Vacuum", - "Unknown", - "Air", - "Vacuum", - "Vacuum | Vacuum | Vacuum | Vacuum | Vacuum", - "Air | Vacuum | Vacuum", - "Air >> Air", - "Ar", - "Ar | O2" + "Unknown" ] } } ] }, - "name": "deposition_synthesis_atmosphere", + "name": "lay_back_deposition_synthesis_atmosphere", "description": "The synthesis atmosphere.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the atmospheres associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- If the synthesis atmosphere is a mixture of different gases, e.g. A and B, list the gases in alphabetic order and separate them with semicolons, as in (A; B)\n- \u201cDry air\u201d represent air with low relative humidity but where the relative humidity is not known\n- \u201cAmbient\u201d represent air where the relative humidity is not known. For ambient conditions where the relative humidity is known, state this as \u201cAir\u201d\n- \u201cVacuum\u201d (of unspecified pressure) is for this purpose considered as an atmospheric gas\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nVacuum\nVacuum | N2\nAir | Ar; H2O >> Ar", "type": { "type_kind": "python", @@ -49141,7 +52967,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 7, + "m_parent_index": 40, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -49149,59 +52975,13 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "", - "0.0006 Pa", - "0.000009 mbar", - "0.0001 Torr", - "0.01 Torr", - "0.0000002 Torr", - "0.000005 mbar", - "0.000002 bar", - "0.0001 mbar", - "0.0001 Pa | 0.0001 Pa", - "0.0005 Pa", - "0.00001 mbar", - "0.0004 Pa", - "0.00005 Torr", - "0.0003 bar", - "0.0000019 Torr", - "0.1 Torr", - "0.000001 mbar", - "1 atm >> 0.2 MPa", - "0.0000001 Torr", - "0.00001 Pa", - "0.000001 bar", - "0.000000001 bar", - "0.000006 Torr", - "0.000007 Torr", - "1.2 mTorr", - "0.006 Torr", - "0.000004 Torr", - "10 E-7Torr", - "0.00005 mbar", - "0.00001 Torr", - "2 e-05", - "2 E-10Torr", - "0.00005 Pa", - "0.000008 bar", - "0.00000003 Torr", - "0.0001 Pa", - "0.000001 Torr", - "0.0002 Pa", - "0.0000048 Torr", - "0.000002 Torr", - "0.0003 Pa", - "0.00003 mbar", - "0.0000001 mbar", - "0.000002 mbar", - "1 atm", - "0.000005 Torr" + "" ] } } ] }, - "name": "deposition_synthesis_atmosphere_pressure_total", + "name": "lay_back_deposition_synthesis_atmosphere_pressure_total", "description": "The total gas pressure during each reaction step\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the pressures associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- Pressures can be stated in different units suited for different situations. Therefore, specify the unit. The preferred units are:\no atm, bar, mbar, mmHg, Pa, torr, psi\n- If a pressure is not known, stat that as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 100 pa and not 80-120 pa.\nExample\n1 atm\n0.002 torr | 10000 Pa\nnan >> 1 atm | 1 atm", "type": { "type_kind": "python", @@ -49211,7 +52991,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 8, + "m_parent_index": 41, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -49219,34 +52999,13 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "", - "0.0001 mbar", - "0.0001 Pa | 0.0001 Pa", - "0.00001 mbar", - "0.0004 Pa", - "0.0003 bar", - "0.000001 mbar", - "1 atm >> 0.2 MPa", - "0.00001 Pa", - "0.000006 Torr", - "0.000007 Torr", - "0.006 Torr", - "0.000004 Torr", - "0.00001 Torr", - "0.000001 Torr", - "0.000002 Torr", - "0.00003 mbar", - "0.0003 Pa", - "0.0000001 mbar", - "0.000002 mbar", - "1 atm", - "0.000005 Torr" + "" ] } } ] }, - "name": "deposition_synthesis_atmosphere_pressure_partial", + "name": "lay_back_deposition_synthesis_atmosphere_pressure_partial", "description": "The partial pressures for the gases present during each reaction step.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the pressures associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- If the synthesis atmosphere is a mixture of different gases, e.g. A and B, list the partial pressures and separate them with semicolons, as in (A; B). The list of partial pressures must line up with the gases they describe.\n- In cases where no gas mixtures are used, this field will be the same as the previous filed.\nExample\n1 atm\n0.002 torr | 10000 Pa\nnan >> 0.99 atm; 0.01 atm | 1 atm", "type": { "type_kind": "python", @@ -49256,7 +53015,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 9, + "m_parent_index": 42, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -49264,18 +53023,13 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "", - "25.0", - "30 >> 30", - "30.0", - "50 | nan | nan", - "50.0" + "" ] } } ] }, - "name": "deposition_synthesis_atmosphere_relative_humidity", + "name": "lay_back_deposition_synthesis_atmosphere_relative_humidity", "description": "The relative humidity during each deposition step\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the relative humidity associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns\n- If the relative humidity for a step is not known, stat that as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 35 and not 30-40.\nExample\n35\n0 | 20\nnan >> 25 | 0", "type": { "type_kind": "python", @@ -49285,7 +53039,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 10, + "m_parent_index": 43, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -49293,18 +53047,13 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Unknown", - "none", - "Methanol | none | none", - "Ethyl cellulose; Terpineol", - "IPA | none", - "Ethyl cellulose; Terpineol | Unknown" + "Unknown" ] } } ] }, - "name": "deposition_solvents", + "name": "lay_back_deposition_solvents", "description": "The solvents used in each deposition procedure for each layer in the stack\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvents associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solvent is a mixture of different solvents, e.g. A and B, list the solvents in alphabetic order and separate them with semicolons, as in (A; B)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- For non-liquid processes with no solvents, state the solvent as \u2018none\u2019\n- If the solvent is not known, state this as \u2018Unknown\u2019\n- Use common abbreviations when appropriate but spell it out when risk for confusion\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nnone\nAcetonitile; Ethanol | Chlorobenzene\nnone >> Ethanol; Methanol; H2O | DMF; DMSO", "type": { "type_kind": "python", @@ -49314,7 +53063,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 11, + "m_parent_index": 44, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -49322,16 +53071,13 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "", - "1", - "1 | 1", - "1 | nan | nan" + "" ] } } ] }, - "name": "deposition_solvents_mixing_ratios", + "name": "lay_back_deposition_solvents_mixing_ratios", "description": "The mixing ratios for mixed solvents\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvent mixing ratios associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- For pure solvents, state the mixing ratio as 1\n- For non-solvent processes, state the mixing ratio as 1\n- For unknown mixing ratios, state the mixing ratio as \u2018nan\u2019\n- For solvent mixtures, i.e. A and B, state the mixing ratios by using semicolons, as in (VA; VB)\n- The preferred metrics is the volume ratios. If that is not available, mass or mol ratios can be used instead, but it the analysis the mixing ratios will be assumed to be based on volumes.\nExample\n1\n4; 1 | 1\n1 >> 5; 2; 0.3 | 2; 1", "type": { "type_kind": "python", @@ -49341,7 +53087,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 12, + "m_parent_index": 45, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -49349,15 +53095,13 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Shanghai MaterWin New Material", - "Guangzhou Seaside Technology", "Unknown" ] } } ] }, - "name": "deposition_solvents_supplier", + "name": "lay_back_deposition_solvents_supplier", "description": "The suppliers of all the solvents.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvent suppliers associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solvent is a mixture of different solvents, e.g. A and B, list the associated suppliers and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- For non-liquid processes with no solvents, mark the supplier as \u2018none\u2019\n- If the supplier for a solvent is unknown, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nSigma Aldrich\nSigma Aldrich; Fisher | Acros\nnone >> Sigma Aldrich; Sigma Aldrich | Unknown", "type": { "type_kind": "python", @@ -49367,7 +53111,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 13, + "m_parent_index": 46, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -49381,7 +53125,7 @@ window.nomadArtifacts = { } ] }, - "name": "deposition_solvents_purity", + "name": "lay_back_deposition_solvents_purity", "description": "The purity of the solvents used.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvent purities associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solvent is a mixture of different solvents, e.g. A and B, list the associated purities and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- Use standard nomenclature for purities, e.g. pro analysis, puris, extra dry, etc.\n- For non-liquid processes with no solvents, state the purity as \u2018none\u2019\n- If the purity for a solvent is not known, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nPro analysis\nPuris; Puris| Tecnical\nnone >> Pro analysis; Pro analysis | Unknown", "type": { "type_kind": "python", @@ -49391,7 +53135,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 14, + "m_parent_index": 47, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -49399,39 +53143,13 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "", - "Al", - "Graphite", - "Mg | Ag", - "Carbon Paste", - "ITO", - "AgAl", - "Carbon | nan | nan", - "IZO", - "Au", - "Ag | Au", - "Cu", - "Ag | MoO3", - "Cu | Ag", - "Cr | Au", - "Ag-nanocubes | Ag | MoO3", - "Carbon | Ag", - "MoO3 | Al", - "Ag", - "IZTO", - "PEDOT:PSS", - "AZO", - "Adhesive; PEDOT:PSS | PET; Ni-mesh", - "PTCBI | Ag | WO3 | PTCBI | Ag", - "AZO-np | Ag", - "Carbon", - "PEDOT:PSS | Al" + "" ] } } ] }, - "name": "deposition_reaction_solutions_compounds", + "name": "lay_back_deposition_reaction_solutions_compounds", "description": "The non-solvent precursor chemicals used in each reaction step\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the non-solvent chemicals associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several compounds, e.g. A and B, list the associated compounds in alphabetic order and separate them with semicolons, as in (A; B)\n- Note that also dopants/additives should be included\n- When several precursor solutions are made and mixed before the reaction step, it is the properties of the final mixture used in the reaction we here describe.\n- The number and order of layers and reaction steps must line up with the previous columns.\n- For gas phase reactions, state the reaction gases as if they were in solution.\n- For solid-state reactions, state the compounds as if they were in solution.\n- For reaction steps involving only pure solvents, state this as \u2018none\u2019\n- If the compounds for a deposition step is not known, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nAu\nCuI\nAg", "type": { "type_kind": "python", @@ -49441,7 +53159,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 15, + "m_parent_index": 48, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -49449,22 +53167,13 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "DongDaLai company", - "Unknown", - "Solaronix", - "Styccobond; Agfa | Epigem", - "Heraeus", - "Guangzhou Seaside Technology", - "Sigma Aldrich | Unknown", - "Sigma Aldrich", - "Ulet", - "Shanghai MaterWin New Materials Co., Ltd" + "Unknown" ] } } ] }, - "name": "deposition_reaction_solutions_compounds_supplier", + "name": "lay_back_deposition_reaction_solutions_compounds_supplier", "description": "The suppliers of the non-solvent chemicals.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the non-solvent chemical suppliers associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several dissolved compounds, e.g. A and B, list the associated suppliers and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- For gas phase reactions, state the suppliers for the gases or the targets/evaporation sources that are evaporated/sputtered/etc.\n- For solid state reactions, state the suppliers for the compounds in the same way.\n- For reaction steps involving only pure solvents, state the supplier as \u2018none\u2019 (as that that is entered in a separate filed)\n- For chemicals that are lab made, state that as \u201cLab made\u201d or \u201cLab made (name of lab)\u201d\n- If the supplier for a compound is unknown, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nDysole; Sigma Aldrich; Dyenamo; Sigma Aldrich\nSigma Aldrich; Fisher | Acros\nLab made (EPFL) | Sigma Aldrich >> none", "type": { "type_kind": "python", @@ -49474,7 +53183,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 16, + "m_parent_index": 49, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -49482,14 +53191,13 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Unknown", - "99.99" + "Unknown" ] } } ] }, - "name": "deposition_reaction_solutions_compounds_purity", + "name": "lay_back_deposition_reaction_solutions_compounds_purity", "description": "The purity of the non-solvent chemicals.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the compound purities associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several dissolved compounds, i.e. A and B, list the associated purities and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- Use standard nomenclature for purities, e.g. pro analysis, puris, extra dry, etc.\n- For reaction steps involving only pure solvents, state this as \u2018none\u2019 (as that is stated in another field)\n- If the purity for a compound is not known, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nPro analysis\n99.999; Puris| Tecnical\nUnknown >> Pro analysis; Pro analysis | none", "type": { "type_kind": "python", @@ -49499,7 +53207,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 17, + "m_parent_index": 50, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -49507,15 +53215,13 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "", - "57.2 wt%; 42.8 wt% | nan", - "8 mg/ml | nan" + "" ] } } ] }, - "name": "deposition_reaction_solutions_concentrations", + "name": "lay_back_deposition_reaction_solutions_concentrations", "description": "The concentration of the non-solvent precursor chemicals.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the concentrations associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several dissolved compounds, e.g. A and B, list the associated concentrations and separate them with semicolons, as in (A; B)\n- The order of the compounds must be the same as in the previous filed.\n- For reaction steps involving only pure solvents, state this as \u2018none\u2019\n- When concentrations are unknown, state that as \u2018nan\u2019\n- Concentrations can be stated in different units suited for different situations. Therefore, specify the unit used. When possible, use one of the preferred units\no M, mM, molal; g/ml, mg/ml, \u00b5g/ml, wt%, mol%, vol%, ppt, ppm, ppb\n- For values with uncertainties, state the best estimate, e.g write 4 wt% and not 3-5 wt%.\nExample\n4 wt%\n0.2 M; 0.15 M| 10 mg/ml\n0.3 mol% | 2 mol%; 0.2 wt% | nan", "type": { "type_kind": "python", @@ -49525,7 +53231,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 18, + "m_parent_index": 51, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -49533,14 +53239,13 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "15.0 | Unknown | Unknown", "Unknown" ] } } ] }, - "name": "deposition_reaction_solutions_volumes", + "name": "lay_back_deposition_reaction_solutions_volumes", "description": "The volume of the reaction solutions\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the volumes associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The volumes refer the volumes used, not the volume of the stock solutions. Thus if 0.15 ml of a solution is spin-coated, the volume is 0.15 ml\n- For reaction steps without solvents, state the volume as \u2018nan\u2019\n- When volumes are unknown, state that as \u2018nan\u2019\nExample\n0.1\n0.1 >> 0.05 | 0.05\nnan | 0.15", "type": { "type_kind": "python", @@ -49550,7 +53255,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 19, + "m_parent_index": 52, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -49564,7 +53269,7 @@ window.nomadArtifacts = { } ] }, - "name": "deposition_reaction_solutions_age", + "name": "lay_back_deposition_reaction_solutions_age", "description": "The age of the solutions\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the age of the solutions associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- As a general guideline, the age refers to the time from the preparation of the final precursor mixture to the reaction procedure.\n- When the age of a solution is not known, state that as \u2018nan\u2019\n- For reaction steps where no solvents are involved, state this as \u2018nan\u2019\n- For solutions that is stored a long time, an order of magnitude estimate is adequate.\nExample\n2\n0.25 |1000 >> 10000\nnan | nan", "type": { "type_kind": "python", @@ -49574,7 +53279,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 20, + "m_parent_index": 53, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -49582,15 +53287,13 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "25", - "Unknown", - "25 | 25" + "Unknown" ] } } ] }, - "name": "deposition_reaction_solutions_temperature", + "name": "lay_back_deposition_reaction_solutions_temperature", "description": "The temperature of the reaction solutions.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the temperatures of the solutions associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a reaction solution undergoes a temperature program, list the temperatures (e.g. start, end, and other important points) and separate them with semicolons, e.g. 25; 100\n- When the temperature of a solution is unknown, state that as \u2018nan\u2019\n- For reaction steps where no solvents are involved, state the temperature of the gas or the solid if that make sense. Otherwise state this as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 120 and not 110-130.\n- Assume an undetermined room temperature to be 25\nExample\n25\n100; 50 | 25\nnan | 25 >> 25", "type": { "type_kind": "python", @@ -49600,7 +53303,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 21, + "m_parent_index": 54, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -49608,22 +53311,13 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "25", - "Unknown", - "15", - "100", - "100 | 25", - "60", - "40", - "22", - "25 | 25", - "80" + "Unknown" ] } } ] }, - "name": "deposition_substrate_temperature", + "name": "lay_back_deposition_substrate_temperature", "description": "The temperature of the substrate.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the temperatures of the substrates (i.e. the last deposited layer) associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The temperature of the substrate refers to the temperature when the deposition of the layer is occurring.\n- If a substrate undergoes a temperature program before the deposition, list the temperatures (e.g. start, end, and other important points) and separate them with semicolons (e.g. 25; 100)\n- When the temperature of a substrate is not known, state that as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 120 and not 110-130.\n- Assume that an undetermined room temperature is 25\nExample\n25\nnan\n125; 325; 375; 450 | 25 >> 25", "type": { "type_kind": "python", @@ -49633,7 +53327,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 22, + "m_parent_index": 55, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -49641,32 +53335,13 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "", - "25", - "350.0", - "85", - "120 >> 120", - "400", - "80", - "Unknown", - "450.0", - "100", - "120", - "450 | 25", - "60", - "250.0", - "60; 120", - "450", - "150.0", - "25; 100", - "100 | Unknown", - "550.0" + "Unknown" ] } } ] }, - "name": "deposition_thermal_annealing_temperature", + "name": "lay_back_deposition_thermal_annealing_temperature", "description": "The temperatures of the thermal annealing program associated with depositing the layers\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the annealing temperatures associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If the thermal annealing involves a temperature program with multiple temperature stages, list the temperatures (e.g. start, end, and other important points) and separate them with semicolons (e.g. 25; 100)\n- For values with uncertainties, state the best estimate, e.g. write 120 and not 110-130.\n- If no thermal annealing is occurring after the deposition of a layer, state that by stating the room temperature (assumed to 25\u00b0C if not further specified)\n- If the thermal annealing program is not known, state that by \u2018nan\u2019\nExample\n25\n50 | nan\n450 | 125; 325; 375; 450 >> 125; 325; 375; 450", "type": { "type_kind": "python", @@ -49676,7 +53351,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 23, + "m_parent_index": 56, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -49684,25 +53359,13 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "40.0", - "Unknown", - "30.0", - "20.0", - "15.0; 5.0", - "100.0", - "30.0; 30.0", - "60.0", - "15.0 >> 5.0", - "10.0", - "10.0 | Unknown", - "15.0", - "30.0 | Unknown" + "Unknown" ] } } ] }, - "name": "deposition_thermal_annealing_time", + "name": "lay_back_deposition_thermal_annealing_time", "description": "The time program associated to the thermal annealing program.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the annealing times associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If the thermal annealing involves a temperature program with multiple temperature stages, list the associated times at those temperatures and separate them with semicolons.\n- The annealing times must align in terms of layers\u00b8 reaction steps and annealing temperatures in the previous filed.\n- If a time is not known, state that by \u2018nan\u2019\n- If no thermal annealing is occurring after the deposition of a layer, state that by \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 20 and not 10-30.\nExample\nnan\n60 | 1000\n30 | 5; 5; 5; 30 >> 5; 5; 5; 30", "type": { "type_kind": "python", @@ -49712,7 +53375,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 24, + "m_parent_index": 57, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -49720,17 +53383,13 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Unknown", - "Air", - "Vacuum", - "N2", - "Air >> Air" + "Unknown" ] } } ] }, - "name": "deposition_thermal_annealing_atmosphere", + "name": "lay_back_deposition_thermal_annealing_atmosphere", "description": "The atmosphere during thermal annealing\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the atmospheres associated to each annelaing step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- If the atmosphere is a mixture of different gases, i.e. A and B, list the gases in alphabetic order and separate them with semicolons, as in (A; B)\n- \u201cDry air\u201d represent air with low relative humidity but where the relative humidity is not known\n- \u201cAmbient\u201d represent air where the relative humidity is not known. For ambient conditions where the relative humidity is known, state this as \u201cAir\u201d\n- \u201cVacuum\u201d (of unspecified pressure) is for this purpose considered as an atmospheric gas.\n- This is often the same as the atmosphere under which the deposition is occurring, but not always.\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nN2\nVacuum | N2\nAir | Ar >> Ar", "type": { "type_kind": "python", @@ -49740,7 +53399,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 25, + "m_parent_index": 58, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -49748,14 +53407,13 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Unknown", - "24.0" + "Unknown" ] } } ] }, - "name": "storage_time_until_next_deposition_step", + "name": "lay_back_storage_time_until_next_deposition_step", "description": "The time between the back contact is finalised and the next layer is deposited\n- If there are uncertainties, only state the best estimate, e.g. write 35 and not 20-50.\n- If this is the last layer in the stack, state this as \u2018nan\u2019", "type": { "type_kind": "python", @@ -49765,7 +53423,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 26, + "m_parent_index": 59, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -49773,16 +53431,13 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Dry air", - "N2", - "Unknown", - "Air" + "Unknown" ] } } ] }, - "name": "storage_atmosphere", + "name": "lay_back_storage_atmosphere", "description": "The atmosphere in which the sample with the finalised back contact is stored until the next deposition step or device performance measurement\nExample\nAir\nN2\nVacuum", "type": { "type_kind": "python", @@ -49792,7 +53447,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 27, + "m_parent_index": 60, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -49800,16 +53455,13 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "", - "5.0", - "10", - "10.0" + "" ] } } ] }, - "name": "storage_relative_humidity", + "name": "lay_back_storage_relative_humidity", "description": "The relive humidity under which the sample with the finalised back contact is stored until the next deposition step or device performance measurement\n- If there are uncertainties, only state the best estimate, e.g write 35 and not 20-50.", "type": { "type_kind": "python", @@ -49819,7 +53471,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 28, + "m_parent_index": 61, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -49827,17 +53479,13 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "", - "EDA gas", - "DEDA gas", - "MEA immersion >> 125C 20 min", - "TETA gas" + "" ] } } ] }, - "name": "surface_treatment_before_next_deposition_step", + "name": "lay_back_surface_treatment_before_next_deposition_step", "description": "Description of any type of surface treatment or other treatment the sample with the finalised back contact is stored until the next deposition step or device performance measurement\n- If more than one treatment, list the treatments and separate them by a double forward angel bracket (\u2018 >> \u2018)\n- If no special treatment, state that as \u2018none\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample:\nnone\nAr plasma\nUV-ozone", "type": { "type_kind": "python", @@ -49849,10 +53497,10 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 9, + "m_parent_index": 10, "m_parent_sub_section": "section_definitions", - "name": "Add", - "description": "A section to describe **additional layers** present in the device besides the *Substrate*, *ETL*, *Perovskite*, *HTL* and *back contact*.", + "name": "Encapsulation", + "description": "A section to describe information about the encapsulation of the device.", "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -49865,8 +53513,8 @@ window.nomadArtifacts = { } ] }, - "name": "lay_front", - "description": "TRUE if there is a functional layer below the substrate, i.e. on the opposite side of the substrate from with respect to the perovskite.", + "name": "Encapsulation", + "description": "TRUE if the cell is encapsulated", "type": { "type_kind": "python", "type_data": "bool" @@ -49883,19 +53531,131 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "", - "Antireflection", + "Parylene | SLG", + "Plastic tape", + "Parylene-C", + "UV-curated glue | SLG", + "SLG | Ossila E131 epoxy resin", + "Field's metal", + "Scribbling UV-glue", + "Kapton tape | Glue", + "UV-curable epoxy", + "UV-glue | SLG", + "Surlyn | SLG", + "Epoxy", + "Eu(TTA)2(Phen)MAA", + "Cover glass-QDs; Epoxy", + "Al2O3 | SLG", + "Pattex silicon", + "UV-glue (NOA 68, Norland products)", + "Kapton PI tape with Silicone adhesive", + "Polymer | SLG", + "Ossila E131 Epoxy Resin", + "Viewbarrier (mitsibushi plastic, inc)", + "Cavity glass", + "Epoxy (3124L(MS), Three Bond)", + "Polymer", + "SLG", + "FTO", + "UV curable glue", + "Surlyn", + "UV-glue (ThreeBond)", + "Epoxy | SLG", + "Cyanoacrylate", + "UV-curated epoxy | SLG", + "Parylene-film", + "UV-curable epoxy | Cover glass-QDs", + "EVOH | S5 | UV | G1", + "Face-sealing adhesive sheets", + "Polystyrene microgel particles", + "Cover glass-QDs | UV-curable epoxy", + "Polyolefin", + "Paraffin", + "PDMS", + "SiO2 | Desiccant | SLG", + "UV-glue", + "Barrier foil", + "EVA", + "Polyisobutylene", + "SiO2 | AB epoxy glue (Super Glue Corp.) | Desiccant | SLG", + "UVCA (3035B)", + "SLG; UV-selant", + "UV epoxy", + "SLG | Epoxy", + "Glass cyclindrical tube", + "Norland Optical Adhesive (NOA) layers on (PET) | micropatterned NOA", + "LDPE | PP", + "Thermoplastic sealant", + "PVP | UV-Epoxy | SLG", + "Fluoropolymeric layer", + "3M acrylic elastomer (3M VHB 4905)", + "SLG | LT-U001", + "Cover glass-QDs", + "UV curing epoxy", + "UV-cured epoxy; Cavity glass", + "UHPBF", + "UV filter glass and light curable epoxy", + "Polyvinyl pyrrolidone | Epoxy resin | SLG", + "SnO2-c", + "UV Epoxy", + "Surlyn | Gover glass", "Unknown", - "Down conversion", - "A.R.C.", - "Light management" + "SL; Unknown:UV cured adhesive", + "UV epoxy | SLG", + "Glass (Ossila E131)", + "UV-glue (ThreeBond, 3052)", + "UV-curable epoxy | SLG", + "PCL", + "Graphene", + "Al2O3 | PET", + "PDMS-nanocone", + "Hot melt polymer foil (Oxford PV) | Cover glass-QDs", + "Norland Optical Adhesive (NOA) layers on (PET)", + "Carbon-nt", + "PET", + "Cover glass-QDs; Water-absorbent sealant (HD-S051414W-40, Dynic)", + "Desiccant | SLG", + "Graphene oxide | Desiccant | SLG", + "Ossila E132 resin", + "Kapton tape", + "Kapton tape | SLG", + "UV curable resin", + "UV-glue (3035B, ThreeBond Holdings)", + "Al2O3 | pV3D3", + "Surlyn | FTO", + "Cover glass with ultraviolet-curable adhesive", + "Polyisobutene", + "Cover glass-QDs; Expoxy", + "SLG | FTO", + "polyisobutylene | SLG", + "PMMA; PU", + "UVCA (3035B) | Paraffin", + "Ag; Carbon-epoxy", + "UV sealant | Surlyn | SLG", + "PEN", + "Self-mixing epoxy", + "Teflon", + "Al2O3", + "UV glue", + "Kapton | Ligh-curated glue | SLG", + "Adhesive glue 3025 B (Three Bond Holding Co. Ltd)", + "ITO | PEN", + "Ethylene-vinyl acetate", + "EVA | SLG", + "PCPD2FBT:BCF", + "PMMA", + "Desiccant", + "SiO2", + "Scotch tape", + "Meltronix", + "Al2O3 | O-Al-CH3 | Al2O3" ] } } ] }, - "name": "lay_front_function", - "description": "The function of the additional layers on the substrate side\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- If a layer has more than one function, e.g. A and B, list the functions in order and separate them with semicolons, as in (A; B)\nExample:\nA.R.C.\nBack reflection\nDown conversion\nEncapsulation\nLight management\nUpconversion", + "name": "stack_sequence", + "description": "The stack sequence of the encapsulation\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- If two materials, e.g. A and B, are mixed in one layer, list the materials in alphabetic order and separate them with semicolons, as in (A; B)\n- Use common abbreviations when appropriate but spell it out if risk for confusion.\n- There are now separate filed for doping. Indicate doping with colons. E.g. wither aluminium doped NiO-np as Al:NiO-np\nExample:\nSLG\nEpoxy\nCover glass\nPMMA", "type": { "type_kind": "python", "type_data": "str" @@ -49912,34 +53672,57 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "ZnSe-QDs", - "N-Graphene-QDs", - "Ag-np", - "Moth eye PDMS", - "Polyimide", + "Epoxy (Pacer Technology, SY-QS )", + "Thermoplastic", + "Araldite 2011", + "Kapton tape | Light-curable glue", + "NOA 89", + "Epoxy; Silicone", + "Hot-melting polymer", + "UV-glue (3035B, ThreeBond Holdings)", + "Ossila Epoxy E131", + "467 MP 3M Adhesive Transfer Tape", "PDMS", + "polyisobutylene", "Unknown", - "NaYF4:Eu-np", - "NaF", - "Eu(TTA)2(Phen)MAA", - "MgF2", - "Y2O3:Eu3", - "CdSeS-QDs", - "Y2O3:Eu3 | Au-np", - "Mica", - "Eu-complex LDL", - "textured antireflective foil", - "Phosphor-in-glass", - "INVAR", - "Mn:CsPbCl3-QDs", - "LiF" + "UV-curable epoxy", + "NOA 88", + "UV-curable epoxy (ThreeBond)", + "Polymer foil", + "Clamp", + "Epoxy", + "none", + "Glue", + "UV-glue", + "Epoxy adhesive", + "Polyurathene", + "Epoxy (XNR 5516Z-B1, Nagase ChemteX Corporation)", + "NOA 63", + "Polyisobutylene", + "Epoxy sealant Ossila E131", + "UV-glue (NOA 68, Norland products)", + "Kapton tape | UV-curable Glue", + "Threebond glue", + "Light-curated glue", + "Surlyn (Du Pont)", + "Epoxy; Polymer", + "Polymer", + "SLG", + "Polyolefin elastomer", + "Thermally curable epoxy (Kyoritsu Chemical)", + "Surlyn", + "UV-glue (ThreeBond)", + "UV-curable epoxy (Ossila E131)", + "Butyl rubber", + "Cover glass-QDs", + "Polydimethylsiloxane" ] } } ] }, - "name": "lay_front_stack_sequence", - "description": "The stack sequence describing the additional layers on the substrate side\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- If two materials, e.g. A and B, are mixed in one layer, list the materials in alphabetic order and separate them with semicolons, as in (A; B)\n- Use common abbreviations when appropriate but spell it out if risk for confusion.\n- There are separate filed for doping. Indicate doping with colons. E.g. wither aluminium doped NiO-np as Al:NiO-np\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample:\nMgF2\nAu-np\nNaYF4:Eu-np", + "name": "edge_sealing_materials", + "description": "Edge sealing materials\n- If two materials, e.g. A and Bare used, list the materials in alphabetic order and separate them with semicolons, as in (A; B)\nExample:\nEpoxy\nSurlyn\nUV-glue", "type": { "type_kind": "python", "type_data": "str" @@ -49956,18 +53739,20 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "", - "90.0", - "100.0", - "50.0", - "80.0" + "Dry air", + "Unknown", + "Air", + "Ambient", + "N2", + "Vacuum", + "Ar" ] } } ] }, - "name": "lay_front_thickness_list", - "description": "A list of thicknesses of the individual layers in the stack.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- The layers must line up with the previous filed.\n- State thicknesses in nm\n- Every layer in the stack have a thickness. If it is unknown, state this as \u2018nan\u2019\n- If there are uncertainties, state the best estimate, e.g write 100 and not 90-110\nExample\n200\nnan |250\n100 | 5 | 8", + "name": "atmosphere_for_encapsulation", + "description": "The surrounding atmosphere during encapsulation.\n- If the surrounding atmosphere is a mixture of different gases, e.g. A and B, list the gases in alphabetic order and separate them with semicolons, as in (A; B)\n- \u201cDry air\u201d represent air with low relative humidity but where the relative humidity is not known\n- \u201cAmbient\u201d represent air where the relative humidity is not known. For ambient conditions where the relative humidity is known, state this as \u201cAir\u201d\n- \u201cVacuum\u201d (of unspecified pressure) is for this purpose considered as an atmospheric gas\nExample\nN2\nVacuum\nAir", "type": { "type_kind": "python", "type_data": "str" @@ -49981,66 +53766,92 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_front_additives_compounds", - "description": "List of the dopants and additives that are in each layer of the HTL-stack\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- The layers must line up with the previous fields.\n- If several dopants/additives, e.g. A and B, are present in one layer, list the dopants/additives in alphabetic order and separate them with semicolons, as in (A; B)\n- If no dopants/additives, state that as \u201cUndoped\u201d\n- If the doping situation is unknown, stat that as\u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template, even if to most common back contacts is undoped metals\nExample\nCuS\nB; P\nAu-np | Undoped", + "name": "water_vapour_transmission_rate", + "description": "The water vapour transmission rate trough the encapsulation.\n- If there are uncertainties, only state the best estimate, e.g. write 35 and not 20-50.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, + "m_parent_index": 5, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "NumberEditQuantity" + } + ] + }, + "name": "oxygen_transmission_rate", + "description": "The oxygen transmission rate trough the encapsulation.\n- If there are uncertainties, only state the best estimate, e.g. write 35 and not 20-50.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [] + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 11, + "m_parent_sub_section": "section_definitions", + "m_annotations": { + "plotly_graph_object": [ + { + "data": { + "x": "#voltage", + "y": "#current_density" + } + }, + { + "data": { + "x": "#voltage", + "y": "#current_density" + } + } + ] + }, + "name": "JVcurve", + "description": "Section describing a current density, voltage curve.", + "more": { + "label_quantity": "cell_name" + }, + "base_sections": [ + "/packages/0/section_definitions/3" + ], + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "" - ] - } - } - ] - }, - "name": "lay_front_additives_concentrations", - "description": "The concentration of the dopants/additives.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- If more than one dopant/additive in the layer, e.g. A and B, separate the concentration for each dopant/additive with semicolons, as in (A; B)\n- For each dopant/additive in the layer, state the concentration.\n- The order of the dopants/additives must be the same as in the previous filed.\n- For layers with no dopants/additives, state this as \u2018none\u2019\n- When concentrations are unknown, state that as \u2018nan\u2019\n- Concentrations can be stated in different units suited for different situations. Therefore, specify the unit used.\n- The preferred way to state the concentration of a dopant/additive is to refer to the amount in the final product, i.e. the material in the layer. When possible, use on the preferred units\no wt%, mol%, vol%, ppt, ppm, ppb\n- When the concentration of the dopant/additive in the final product is unknown, but where the concentration of the dopant/additive in the solution is known, state that concentration instead. When possible, use on the preferred units\no M, mM, molal; g/ml, mg/ml, \u00b5g/ml\n- For values with uncertainties, state the best estimate, e.g write 4 wt% and not 3-5 wt%.\nExample\n4 wt%\n5 vol%; nan | 10 mg/ml\n0.3 mol% | 2 mol%; 0.2 wt% | 0.3 M", + "name": "n_values", "type": { "type_kind": "python", - "type_data": "str" + "type_data": "int" }, - "shape": [] + "virtual": true }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 6, + "m_parent_index": 1, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Evaporation", - "Unknown" - ] - } + "component": "StringEditQuantity" } ] }, - "name": "lay_front_deposition_procedure", - "description": "The deposition procedures for the HTL-stack.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate them by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- Thermal annealing is generally not considered as an individual reaction step. The philosophy behind this is that every deposition step has a thermal history, which is specified in a separate filed. In exceptional cases with thermal annealing procedures clearly disconnected from other procedures, state \u2018Thermal annealing\u2019 as a separate reaction step.\n- Please read the instructions under \u201cPerovskite. Deposition. Procedure\u201d for descriptions and distinctions between common deposition procedures and how they should be labelled for consistency in the database.\n- A few additional clarifications:\n- Lamination\no A readymade film is transferred directly to the device stack. A rather broad concept. An everyday kitchen related example of lamination would eb to place a thin plastic film over a slice of pie.\n- Sandwiching\no When a readymade top stack simply is placed on top of the device stack. Could be held together with clams. The typical example is a when a \u201cCarbon | FTO | SLG\u201d is placed on top of the device stack. Standard procedure in the DSSC filed.\nExample\nEvaporation\nEvaporation | Evaporation\nDoctor blading\nScreen printing\nSputtering\nLamination\nE-beam evaporation\nSandwiching", + "name": "cell_name", + "description": "Cell identification name.", "type": { "type_kind": "python", "type_data": "str" @@ -50049,151 +53860,125 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 7, + "m_parent_index": 2, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Unknown" - ] - } - } - ] - }, - "name": "lay_front_deposition_aggregation_state_of_reactants", - "description": "The physical state of the reactants.\n- The three basic categories are Solid/Liquid/Gas\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the aggregation state associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- Most cases are clear cut, e.g. spin-coating involves species in solution and evaporation involves species in gas phase. For less clear-cut cases, consider where the reaction really is happening as in:\no For a spray-coating procedure, it is droplets of liquid that enters the substrate (thus a liquid phase reaction)\no For sputtering and thermal evaporation, it is species in gas phase that reaches the substrate (thus a gas phase reaction)\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nLiquid\nGas | Liquid\nLiquid | Liquid >> Liquid", + "name": "current_density", + "description": "Current density array of the *JV* curve.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [ + "n_values" + ], + "unit": "milliampere / centimeter ** 2" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 8, + "m_parent_index": 3, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Unknown" - ] - } - } - ] - }, - "name": "lay_front_deposition_synthesis_atmosphere", - "description": "The synthesis atmosphere.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the atmospheres associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- If the synthesis atmosphere is a mixture of different gases, e.g. A and B, list the gases in alphabetic order and separate them with semicolons, as in (A; B)\n- \u201cDry air\u201d represent air with low relative humidity but where the relative humidity is not known\n- \u201cAmbient\u201d represent air where the relative humidity is not known. For ambient conditions where the relative humidity is known, state this as \u201cAir\u201d\n- \u201cVacuum\u201d (of unspecified pressure) is for this purpose considered as an atmospheric gas\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nVacuum\nVacuum | N2\nAir | Ar; H2O >> Ar", + "name": "voltage", + "description": "Voltage array of the of the *JV* curve.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] - }, + "shape": [ + "n_values" + ], + "unit": "volt" + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 12, + "m_parent_sub_section": "section_definitions", + "name": "JV", + "description": "This section descirbes the current density *J* and voltage *V* characteristics of the solar cell. It includes the device parameters and information about how the\nmeasurements were performed.", + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 9, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "" - ] - } + "component": "FileEditQuantity" + } + ], + "browser": [ + { + "adaptor": "RawFileAdaptor" } ] }, - "name": "lay_front_deposition_synthesis_atmosphere_pressure_total", - "description": "The total gas pressure during each reaction step\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the pressures associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- Pressures can be stated in different units suited for different situations. Therefore, specify the unit. The preferred units are:\no atm, bar, mbar, mmHg, Pa, torr, psi\n- If a pressure is not known, stat that as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 100 pa and not 80-120 pa.\nExample\n1 atm\n0.002 torr | 10000 Pa\nnan >> 1 atm | 1 atm", + "name": "data_file", "type": { "type_kind": "python", "type_data": "str" - }, - "shape": [] + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 10, + "m_parent_index": 1, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "" - ] - } + "component": "BoolEditQuantity" } ] }, - "name": "lay_front_deposition_synthesis_atmosphere_pressure_partial", - "description": "The partial pressures for the gases present during each reaction step.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the pressures associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- If the synthesis atmosphere is a mixture of different gases, e.g. A and B, list the partial pressures and separate them with semicolons, as in (A; B). The list of partial pressures must line up with the gases they describe.\n- In cases where no gas mixtures are used, this field will be the same as the previous filed.\nExample\n1 atm\n0.002 torr | 10000 Pa\nnan >> 0.99 atm; 0.01 atm | 1 atm", + "name": "measured", + "description": "TRUE if IV-data has been measured and is reported.", "type": { "type_kind": "python", - "type_data": "str" + "type_data": "bool" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 11, + "m_parent_index": 2, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_front_deposition_synthesis_atmosphere_relative_humidity", - "description": "The relative humidity during each deposition step\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the relative humidity associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns\n- If the relative humidity for a step is not known, stat that as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 35 and not 30-40.\nExample\n35\n0 | 20\nnan >> 25 | 0", + "name": "average_over_n_number_of_cells", + "description": "The number of cells the reported IV data is based on.\n- The preferred way to enter data is to give every individual cell its own entry in the data template/data base. If that is done, the data is an average over 1 cell.\n- If the reported IV data is not the data from one individual cell, but an average over N cells. Give the number of cells.\n- If the reported value is an average, but it is unknown over how many cells the value has been averaged (and no good estimate is available), state the number of cells as 2, which is the smallest number of cells that qualifies for an averaging procedure.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "int64" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 12, + "m_parent_index": 3, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Unknown" - ] - } + "component": "BoolEditQuantity" } ] }, - "name": "lay_front_deposition_solvents", - "description": "The solvents used in each deposition procedure for each layer in the stack\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvents associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solvent is a mixture of different solvents, e.g. A and B, list the solvents in alphabetic order and separate them with semicolons, as in (A; B)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- For non-liquid processes with no solvents, state the solvent as \u2018none\u2019\n- If the solvent is not known, state this as \u2018Unknown\u2019\n- Use common abbreviations when appropriate but spell it out when risk for confusion\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nnone\nAcetonitile; Ethanol | Chlorobenzene\nnone >> Ethanol; Methanol; H2O | DMF; DMSO", + "name": "certified_values", + "description": "TRUE if the IV data is measured by an independent and certification institute. If your solar simulator is calibrated by a calibrated reference diode, that does not count as a certified result.", "type": { "type_kind": "python", - "type_data": "str" + "type_data": "bool" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 13, + "m_parent_index": 4, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -50201,14 +53986,31 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "" + "", + "National Institute ofMetrology, China", + "Quality supervision\uff06Testing Center of Chemical\uff06Physical Power Sources of Information Industry", + "CREST, Photovoltaic Meaasurement and calibration Laboratory at Universit of Loughborough", + "Photovoltaic and Wind Power Systems Quality Test Center, Chinese Academy of Sciences", + "NREL", + "Institute of Metrology (NIM) of China", + "PVEVL, National Central University, Taiwan", + "NIM, National Institute of Metrology of China", + "Fraunhofer ISE", + "SIMIT, Shanghai Institute of Microsystem and Information Technology", + "Newport", + "CSIRO, PV Performance Lab at Monash University", + "AIST, National Institute of Advanced Industrial Science and Technology", + "CPVT, National Center of Supervision and Inspection on Solar Photovoltaic Products Quality of China", + "KIER, Korea Institute of Energy Research", + "Newport Corporation", + "Solar Power Lab at Arizona State University" ] } } ] }, - "name": "lay_front_deposition_solvents_mixing_ratios", - "description": "The mixing ratios for mixed solvents\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvent mixing ratios associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- For pure solvents, state the mixing ratio as 1\n- For non-solvent processes, state the mixing ratio as 1\n- For unknown mixing ratios, state the mixing ratio as \u2018nan\u2019\n- For solvent mixtures, i.e. A and B, state the mixing ratios by using semicolons, as in (VA; VB)\n- The preferred metrics is the volume ratios. If that is not available, mass or mol ratios can be used instead, but it the analysis the mixing ratios will be assumed to be based on volumes.\nExample\n1\n4; 1 | 1\n1 >> 5; 2; 0.3 | 2; 1", + "name": "certification_institute", + "description": "The name of the certification institute that has measured the certified device.\nExample:\nNewport\nNIM, National Institute of Metrology of China\nKIER, Korea Institute of Energy Research", "type": { "type_kind": "python", "type_data": "str" @@ -50217,7 +54019,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 14, + "m_parent_index": 5, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -50225,14 +54027,25 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Unknown" + "1.0", + "Unknown", + "7.0", + "4.0", + "2.0", + "28.0", + "58.0", + "8.0", + "0.01", + "0.5", + "5.0", + "6.0" ] } } ] }, - "name": "lay_front_deposition_solvents_supplier", - "description": "The suppliers of all the solvents.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvent suppliers associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solvent is a mixture of different solvents, e.g. A and B, list the associated suppliers and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- For non-liquid processes with no solvents, mark the supplier as \u2018none\u2019\n- If the supplier for a solvent is unknown, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nSigma Aldrich\nSigma Aldrich; Fisher | Acros\nnone >> Sigma Aldrich; Sigma Aldrich | Unknown", + "name": "storage_age_of_cell", + "description": "The age of the cell with respect to when the last deposition step was finalised.\n- If there are uncertainties, only state the best estimate, e.g. write 3 and not 1-5.", "type": { "type_kind": "python", "type_data": "str" @@ -50241,7 +54054,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 15, + "m_parent_index": 6, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -50249,14 +54062,19 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Unknown" + "Dry air", + "Unknown", + "Air", + "Ambient", + "N2", + "Vacuum" ] } } ] }, - "name": "lay_front_deposition_solvents_purity", - "description": "The purity of the solvents used.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvent purities associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solvent is a mixture of different solvents, e.g. A and B, list the associated purities and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- Use standard nomenclature for purities, e.g. pro analysis, puris, extra dry, etc.\n- For non-liquid processes with no solvents, state the purity as \u2018none\u2019\n- If the purity for a solvent is not known, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nPro analysis\nPuris; Puris| Tecnical\nnone >> Pro analysis; Pro analysis | Unknown", + "name": "storage_atmosphere", + "description": "The atmosphere in which the sample was stored between the device finalisation and the IV measurement.\n- If the atmosphere is a mixture of different gases, e.g. A and B, list the gases in alphabetic order and separate them with semicolons, as in (A; B)\n- \u201cDry air\u201d represent air with low relative humidity but where the relative humidity is not known\n- \u201cAmbient\u201d represent air where the relative humidity is not known. For ambient conditions where the relative humidity is known, state this as \u201cAir\u201d\n- \u201cVacuum\u201d (of unspecified pressure) is for this purpose considered as an atmospheric gas\n- If the atmosphere has changed during the storing time, separate the different atmospheres by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nN2\nAir\nN2 >> Air", "type": { "type_kind": "python", "type_data": "str" @@ -50265,7 +54083,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 16, + "m_parent_index": 7, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -50273,14 +54091,17 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "" + "", + "0.9", + "65.0", + "5.0" ] } } ] }, - "name": "lay_front_deposition_reaction_solutions_compounds", - "description": "The non-solvent precursor chemicals used in each reaction step\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the non-solvent chemicals associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several compounds, e.g. A and B, list the associated compounds in alphabetic order and separate them with semicolons, as in (A; B)\n- Note that also dopants/additives should be included\n- When several precursor solutions are made and mixed before the reaction step, it is the properties of the final mixture used in the reaction we here describe.\n- The number and order of layers and reaction steps must line up with the previous columns.\n- For gas phase reactions, state the reaction gases as if they were in solution.\n- For solid-state reactions, state the compounds as if they were in solution.\n- For reaction steps involving only pure solvents, state this as \u2018none\u2019\n- If the compounds for a deposition step is not known, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nAu\nCuI\nAg", + "name": "storage_relative_humidity", + "description": "The relative humidity in the atmosphere in which the sample was stored between the device finalisation and the IV measurement.\n- If the relative humidity has changed during the storing time, separate the different relative humidity by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If the relative humidity is not known, stat that as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 35 and not 30-40.\nExample\n35\n0\n0 >> 25", "type": { "type_kind": "python", "type_data": "str" @@ -50289,7 +54110,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 17, + "m_parent_index": 8, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -50297,14 +54118,23 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Unknown" + "Water", + "Dry air", + "Unknown", + "Air", + "Ambient", + "Outdoor", + "N2", + "Vacuum", + "Ar", + "Near-space" ] } } ] }, - "name": "lay_front_deposition_reaction_solutions_compounds_supplier", - "description": "The suppliers of the non-solvent chemicals.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the non-solvent chemical suppliers associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several dissolved compounds, e.g. A and B, list the associated suppliers and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- For gas phase reactions, state the suppliers for the gases or the targets/evaporation sources that are evaporated/sputtered/etc.\n- For solid state reactions, state the suppliers for the compounds in the same way.\n- For reaction steps involving only pure solvents, state the supplier as \u2018none\u2019 (as that that is entered in a separate filed)\n- For chemicals that are lab made, state that as \u201cLab made\u201d or \u201cLab made (name of lab)\u201d\n- If the supplier for a compound is unknown, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nDysole; Sigma Aldrich; Dyenamo; Sigma Aldrich\nSigma Aldrich; Fisher | Acros\nLab made (EPFL) | Sigma Aldrich >> none", + "name": "test_atmosphere", + "description": "The atmosphere in which the IV measurement is conducted\n- If the atmosphere is a mixture of different gases, e.g. A and B, list the gases in alphabetic order and separate them with semicolons, as in (A; B)\n- \u201cDry air\u201d represent air with low relative humidity but where the relative humidity is not known\n- \u201cAmbient\u201d represent air where the relative humidity is not known. For ambient conditions where the relative humidity is known, state this as \u201cAir\u201d\n- \u201cVacuum\u201d (of unspecified pressure) is for this purpose considered as an atmospheric gas\nExample\nAir\nN2\nVacuum", "type": { "type_kind": "python", "type_data": "str" @@ -50313,55 +54143,46 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 18, + "m_parent_index": 9, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Unknown" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_front_deposition_reaction_solutions_compounds_purity", - "description": "The purity of the non-solvent chemicals.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the compound purities associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several dissolved compounds, i.e. A and B, list the associated purities and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- Use standard nomenclature for purities, e.g. pro analysis, puris, extra dry, etc.\n- For reaction steps involving only pure solvents, state this as \u2018none\u2019 (as that is stated in another field)\n- If the purity for a compound is not known, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nPro analysis\n99.999; Puris| Tecnical\nUnknown >> Pro analysis; Pro analysis | none", + "name": "test_relative_humidity", + "description": "The relive humidity in which the IV measurement is conducted\n- If there are uncertainties, only state the best estimate, e.g write 35 and not 20-50.\n- If the relative humidity is not known, stat that as \u2018nan\u2019", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 19, + "m_parent_index": 10, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_front_deposition_reaction_solutions_concentrations", - "description": "The concentration of the non-solvent precursor chemicals.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the concentrations associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several dissolved compounds, e.g. A and B, list the associated concentrations and separate them with semicolons, as in (A; B)\n- The order of the compounds must be the same as in the previous filed.\n- For reaction steps involving only pure solvents, state this as \u2018none\u2019\n- When concentrations are unknown, state that as \u2018nan\u2019\n- Concentrations can be stated in different units suited for different situations. Therefore, specify the unit used. When possible, use one of the preferred units\no M, mM, molal; g/ml, mg/ml, \u00b5g/ml, wt%, mol%, vol%, ppt, ppm, ppb\n- For values with uncertainties, state the best estimate, e.g write 4 wt% and not 3-5 wt%.\nExample\n4 wt%\n0.2 M; 0.15 M| 10 mg/ml\n0.3 mol% | 2 mol%; 0.2 wt% | nan", + "name": "test_temperature", + "description": "The temperature of the device during the IV-measurement\n- If the temperature is not controlled and not is known, assume a standard room temperature of 25\u00b0C.\n- If there are uncertainties, only state the best estimate, e.g write 35 and not 20-50.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "degree_Celsius" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 20, + "m_parent_index": 11, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -50369,14 +54190,22 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Unknown" + "", + "Unknown", + "White LED", + "Solar Simulator", + "Fluorescent lamp", + "Solar simulator", + "solar simulator", + "Laser", + "Xenon" ] } } ] }, - "name": "lay_front_deposition_reaction_solutions_volumes", - "description": "The volume of the reaction solutions\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the volumes associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The volumes refer the volumes used, not the volume of the stock solutions. Thus if 0.15 ml of a solution is spin-coated, the volume is 0.15 ml\n- For reaction steps without solvents, state the volume as \u2018nan\u2019\n- When volumes are unknown, state that as \u2018nan\u2019\nExample\n0.1\n0.1 >> 0.05 | 0.05\nnan | 0.15", + "name": "light_source_type", + "description": "The type of light source used during the IV-measurement\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\n- The category Solar simulator should only be used when you do not really know which type of light source you have in your solar simulator.\nExample:\nLaser\nMetal halide\nOutdoor\nSolar simulator\nSulfur plasma\nWhite LED\nXenon plasma", "type": { "type_kind": "python", "type_data": "str" @@ -50385,7 +54214,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 21, + "m_parent_index": 12, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -50393,14 +54222,107 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Unknown" + "", + "EC-lab T-5A", + "ABET 11000", + "Wavelabs", + "ABET Technologies 10500", + "Newport model 94023A-U", + "McScience K3000", + "BOS-X-1000G", + "Solar light 16S-300", + "Enlitech", + "Newport, model 94063A", + "Wacom Denso model WXS-155S-10", + "Sciencetech Inc. SS-150", + "WAVELABS SINUS-70 LED", + "Oriel Sol2ATM", + "Newport model 91195A", + "Newport ORIEL LCS100", + "Oriel 91160", + "Newport Verasol", + "Solar IV-150A, Zolix", + "WAVELABS SINUS-220", + "Newport 91195A", + "San-ei Electric XES-301S", + "Newport model 94043A", + "Cree XML T6", + "Bunkoukeiki CEP-2000SRR", + "Peccell Technologies PEC-L01", + "XES-70S1", + "Sciencetech", + "Oriel 91160A", + "Oriel VeraSol-2", + "CEP-2000SRR, Bunkou-Keiki Inc", + "Zolix SS150A", + "SANEI", + "PET Photo Emission Tech Inc. Model SS", + "Enlitech SS-F7-3A", + "Newport 91160", + "ABET Technology Sun 2000", + "Oriel 9119", + "Peccell PEC-L01", + "Bunkoukeiki BSS-150T", + "Enlitech SS-F5", + "Global (G)", + "Wacom WXs-156s-l2", + "Photo Emission Tech Inc SS150", + "Newport Oriel LCS-100", + "Oriel 92251A", + "Newport 94123A", + "Oriel 94023 A", + "Newport model 94023A", + "Newport Oriel 92192", + "Newport model 94022", + "Bunkoukeiki KHP-1", + "YAMASHITA DENSO model YSS-150A", + "Oriel 300", + "Newport AAA", + "KHP-1, Bunko-Keiki, Japan", + "Spectra-Nova", + "Sol3A, Oriel Instruments", + "Abet Technologies Sun 3000", + "IV5, PV Measurements, Inc., USA", + "Newport Oriel PVIV-201 V", + "Photo Emission Tech.", + "Newport model 91192", + "XES-40S1, SAN-E1", + "San-ei Electric", + "Oriel 92251A-1000", + "Newport Oriel 94043A", + "So13A", + "Newport Oriel Sol3A", + "ABET Sun 3000", + "KHS Steuernagel", + "Zolix Sirius-SS", + "Oriel 81172", + "PV Measurements Inc.", + "Oriel", + "XEF-300", + "Oriel Sol3A", + "Peceell PEC-L01", + "Ushio Optical ModuleX", + "Newport Oriel 96000", + "Oriel 94023A", + "McScience K401", + "Newport Oriel 3A", + "94011A-ES Sol", + "Bunkoukeiki CEP-25ML", + "Newport 6279 NS", + "Sharif Solar 10\u20132", + "SAN-EI (XES-50S1)", + "Enlitech SS-F5-3A", + "ScienceTech model SF-150", + "Newport Oriel", + "Newport Oriel Sol2A", + "Batsol PEC-L01" ] } } ] }, - "name": "lay_front_deposition_reaction_solutions_age", - "description": "The age of the solutions\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the age of the solutions associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- As a general guideline, the age refers to the time from the preparation of the final precursor mixture to the reaction procedure.\n- When the age of a solution is not known, state that as \u2018nan\u2019\n- For reaction steps where no solvents are involved, state this as \u2018nan\u2019\n- For solutions that is stored a long time, an order of magnitude estimate is adequate.\nExample\n2\n0.25 |1000 >> 10000\nnan | nan", + "name": "light_source_brand_name", + "description": "The brand name and model number of the light source/solar simulator used\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample:\nNewport model 91192\nNewport AAA\nAtlas suntest", "type": { "type_kind": "python", "type_data": "str" @@ -50409,7 +54331,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 22, + "m_parent_index": 13, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -50417,14 +54339,19 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Unknown" + "", + "ABB", + "A", + "AAA", + "ABA", + "AAB" ] } } ] }, - "name": "lay_front_deposition_reaction_solutions_temperature", - "description": "The temperature of the reaction solutions.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the temperatures of the solutions associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a reaction solution undergoes a temperature program, list the temperatures (e.g. start, end, and other important points) and separate them with semicolons, e.g. 25; 100\n- When the temperature of a solution is unknown, state that as \u2018nan\u2019\n- For reaction steps where no solvents are involved, state the temperature of the gas or the solid if that make sense. Otherwise state this as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 120 and not 110-130.\n- Assume an undetermined room temperature to be 25\nExample\n25\n100; 50 | 25\nnan | 25 >> 25", + "name": "light_source_simulator_class", + "description": "The class of the solar simulator\n- A three-letter code of As, Bs, and Cs. The order of the letters represents the quality ofspectral match, spatial non-uniformity, and temporal instability\nExample\nAAA\nABB\nCAB", "type": { "type_kind": "python", "type_data": "str" @@ -50433,31 +54360,27 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 23, + "m_parent_index": 14, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Unknown" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_front_deposition_substrate_temperature", - "description": "The temperature of the substrate.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the temperatures of the substrates (i.e. the last deposited layer) associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The temperature of the substrate refers to the temperature when the deposition of the layer is occurring.\n- If a substrate undergoes a temperature program before the deposition, list the temperatures (e.g. start, end, and other important points) and separate them with semicolons (e.g. 25; 100)\n- When the temperature of a substrate is not known, state that as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 120 and not 110-130.\n- Assume that an undetermined room temperature is 25\nExample\n25\nnan\n125; 325; 375; 450 | 25 >> 25", + "name": "light_intensity", + "description": "The light intensity during the IV measurement\n- If there are uncertainties, only state the best estimate, e.g. write 100 and not 90-100.\n- Standard AM 1.5 illumination correspond to 100 mW/cm2\n- If you need to convert from illumination given in lux; at 550 nm, 1 mW/cm2 corresponds to 6830 lux. Be aware that the conversion change with the spectrum used. As a rule of thumb for general fluorescent/LED light sources, around 0.31mW corresponded to 1000 lux. If your light intensity is measured in lux, it probably means that your light spectra deviates quite a lot from AM 1.5, wherefore it is very important that you also specify the light spectra in the next column.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "milliwatt / centimeter ** 2" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 24, + "m_parent_index": 15, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -50465,14 +54388,18 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Unknown" + "", + "Indoor light", + "AM 1.5", + "Monochromatic", + "Am 1.5" ] } } ] }, - "name": "lay_front_deposition_thermal_annealing_temperature", - "description": "The temperatures of the thermal annealing program associated with depositing the layers\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the annealing temperatures associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If the thermal annealing involves a temperature program with multiple temperature stages, list the temperatures (e.g. start, end, and other important points) and separate them with semicolons (e.g. 25; 100)\n- For values with uncertainties, state the best estimate, e.g. write 120 and not 110-130.\n- If no thermal annealing is occurring after the deposition of a layer, state that by stating the room temperature (assumed to 25\u00b0C if not further specified)\n- If the thermal annealing program is not known, state that by \u2018nan\u2019\nExample\n25\n50 | nan\n450 | 125; 325; 375; 450 >> 125; 325; 375; 450", + "name": "light_spectra", + "description": "The light spectrum used (or simulated as best as possible) during the IV measurement\nExample\nAM 1.0\nAM 1.5\nIndoor light\nMonochromatic\nOutdoor\nUV", "type": { "type_kind": "python", "type_data": "str" @@ -50481,7 +54408,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 25, + "m_parent_index": 16, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -50489,14 +54416,15 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Unknown" + "nan; nan", + "250; 1200" ] } } ] }, - "name": "lay_front_deposition_thermal_annealing_time", - "description": "The time program associated to the thermal annealing program.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the annealing times associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If the thermal annealing involves a temperature program with multiple temperature stages, list the associated times at those temperatures and separate them with semicolons.\n- The annealing times must align in terms of layers\u00b8 reaction steps and annealing temperatures in the previous filed.\n- If a time is not known, state that by \u2018nan\u2019\n- If no thermal annealing is occurring after the deposition of a layer, state that by \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 20 and not 10-30.\nExample\nnan\n60 | 1000\n30 | 5; 5; 5; 30 >> 5; 5; 5; 30", + "name": "light_wavelength_range", + "description": "The wavelength range of the light source\n- Separate the lower and upper bound by a semicolon.\n- For monochromatic light sources, only give the constant value.\n- If there are uncertainties, only state the best estimate, e.g. write 100 and not 90-100.\n- State unknown values as \u2018nan\u2019\nExample:\n330; 1000\n400; nan\n550", "type": { "type_kind": "python", "type_data": "str" @@ -50505,7 +54433,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 26, + "m_parent_index": 17, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -50513,14 +54441,16 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Unknown" + "", + "Superstrate", + "Substrate" ] } } ] }, - "name": "lay_front_deposition_thermal_annealing_atmosphere", - "description": "The atmosphere during thermal annealing\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the atmospheres associated to each annelaing step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- If the atmosphere is a mixture of different gases, i.e. A and B, list the gases in alphabetic order and separate them with semicolons, as in (A; B)\n- \u201cDry air\u201d represent air with low relative humidity but where the relative humidity is not known\n- \u201cAmbient\u201d represent air where the relative humidity is not known. For ambient conditions where the relative humidity is known, state this as \u201cAir\u201d\n- \u201cVacuum\u201d (of unspecified pressure) is for this purpose considered as an atmospheric gas.\n- This is often the same as the atmosphere under which the deposition is occurring, but not always.\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nN2\nVacuum | N2\nAir | Ar >> Ar", + "name": "light_illumination_direction", + "description": "The direction of the illumination with respect to the device stack\n- If the cell is illuminated trough the substrate, state this as \u2018Substrate\u2019\n- If the cell is illuminated trough the top contact, state this as \u2018Superstrate\u2019\n- For back contacted cells illuminated from the non-contacted side, state this as \u2018Superstrate\u2019\nExample\nSubstrate\nSuperstrate", "type": { "type_kind": "python", "type_data": "str" @@ -50529,149 +54459,126 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 27, + "m_parent_index": 18, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Unknown" - ] - } + "component": "BoolEditQuantity" } ] }, - "name": "lay_front_storage_time_until_next_deposition_step", - "description": "The time between the back contact is finalised and the next layer is deposited\n- If there are uncertainties, only state the best estimate, e.g. write 35 and not 20-50.\n- If this is the last layer in the stack, state this as \u2018nan\u2019", + "name": "light_masked_cell", + "description": "TRUE if the cell is illuminated trough a mask with an opening that is smaller than the total cell area.", "type": { "type_kind": "python", - "type_data": "str" + "type_data": "bool" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 28, + "m_parent_index": 19, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Unknown" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_front_storage_atmosphere", - "description": "The atmosphere in which the sample with the finalised back contact is stored until the next deposition step or device performance measurement\nExample\nAir\nN2\nVacuum", + "name": "light_mask_area", + "description": "The area of the opening in the mask trough with the cell is illuminated (if there is a mask)\n- If there are uncertainties, only state the best estimate, e.g. write 100 and not 90-100.\n- If there is no light mask, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "centimeter ** 2" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 29, + "m_parent_index": 20, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_front_storage_relative_humidity", - "description": "The relive humidity under which the sample with the finalised back contact is stored until the next deposition step or device performance measurement\n- If there are uncertainties, only state the best estimate, e.g write 35 and not 20-50.", + "name": "scan_speed", + "description": "The speed of the potential sweep during the IV measurement", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "millivolt / second" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 30, + "m_parent_index": 21, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_front_surface_treatment_before_next_deposition_step", - "description": "Description of any type of surface treatment or other treatment the sample with the finalised back contact is stored until the next deposition step or device performance measurement\n- If more than one treatment, list the treatments and separate them by a double forward angel bracket (\u2018 >> \u2018)\n- If no special treatment, state that as \u2018none\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample:\nnone\nAr plasma\nUV-ozone", + "name": "scan_delay_time", + "description": "The time at each potential value before integration in the potential sweep.\n- For some potentiostats you need to specify this value, whereas for others it is set automatically and is not directly accessible.\n- If there are uncertainties, only state the best estimate, e.g. write 100 and not 90-100.\n- If unknown, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "millisecond" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 31, + "m_parent_index": 22, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "BoolEditQuantity" + "component": "NumberEditQuantity" } ] }, - "name": "lay_back", - "description": "TRUE if there is a functional layer above the back contact, i.e. layers deposited after the back contact has been finalised.", + "name": "scan_integration_time", + "description": "The integration time at each potential value in the potential sweep.\n- For some potentiostats you need to specify this value, whereas for others it is set automatically and is not directly accessible.\n- If there are uncertainties, only state the best estimate, e.g. write 100 and not 90-100.\n- If unknown, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "bool" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "millisecond" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 32, + "m_parent_index": 23, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "", - "Upconversion", - "Dielectric mirror", - "Antireflection" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_back_function", - "description": "The function of the additional layers on the backcontact side.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- If a layer has more than one function, e.g. A and B, list the functions in order and separate them with semicolons, as in (A; B)\nExample:\nA.R.C.\nBack reflection\nDown conversion\nEncapsulation\nLight management\nUpconversion", + "name": "scan_voltage_step", + "description": "The distance between the measurement point in the potential sweep\n- If unknown, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "millivolt" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 33, + "m_parent_index": 24, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -50679,15 +54586,28 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "MgF2", - "Unknown" + "", + "Light soaking", + "Potential biasing", + "Heating", + "Unknown", + "MPPT", + "Voc stabilization", + "Bending", + "Light Soaking", + "Light Soaking; Potential biasing", + "Electroluminescence measurement", + "Light soaking; Potential biasing", + "Heating; Light soaking", + "Light soaking; Potential cykling", + "Cooling" ] } } ] }, - "name": "lay_back_stack_sequence", - "description": "The stack sequence describing the additional layers on the backcontact side.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- If two materials, e.g. A and B, are mixed in one layer, list the materials in alphabetic order and separate them with semicolons, as in (A; B)\n- Use common abbreviations when appropriate but spell it out if risk for confusion.\n- There are now separate filed for doping. Indicate doping with colons. E.g. wither aluminium doped NiO-np as Al:NiO-np\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.", + "name": "preconditioning_protocol", + "description": "Any preconditioning protocol done immediately before the IV measurement\n- If no preconditioning was done, state this as \u2018none\u2019\n- If more than one preconditioning protocol was conducted in parallel, separate them with semicolons\n- If more than one preconditioning protocol was conducted in sequence, separate them by a double forward angel bracket (\u2018 >> \u2018)\nExample\nCooling\nHeeting\nLight soaking\nLight soaking; Potential biasing\nPotential biasing", "type": { "type_kind": "python", "type_data": "str" @@ -50696,457 +54616,386 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 34, + "m_parent_index": 25, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "", - "105.0", - "90.0" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_back_thickness_list", - "description": "A list of thicknesses of the individual layers in the stack.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- The layers must line up with the previous filed.\n- State thicknesses in nm\n- Every layer in the stack have a thickness. If it is unknown, state this as \u2018nan\u2019\n- If there are uncertainties, state the best estimate, e.g write 100 and not 90-110", + "name": "preconditioning_time", + "description": "The duration of the preconditioning protocol\n- If there are uncertainties, only state the best estimate, e.g. write 100 and not 90-100.\n- If unknown or not applicable, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "second" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 35, + "m_parent_index": 26, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_back_additives_compounds", - "description": "List of the dopants and additives that are in each layer of the HTL-stack\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- The layers must line up with the previous fields.\n- If several dopants/additives, e.g. A and B, are present in one layer, list the dopants/additives in alphabetic order and separate them with semicolons, as in (A; B)\n- If no dopants/additives, state that as \u201cUndoped\u201d\n- If the doping situation is unknown, stat that as\u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template, even if to most common back contacts is undoped metals\nExample\nCuS\nB; P\nAu-np | Undoped", + "name": "preconditioning_potential", + "description": "The potential at any potential biasing step\n- If there are uncertainties, only state the best estimate, e.g. write 100 and not 90-100.\n- If unknown or not applicable, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "volt" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 36, + "m_parent_index": 27, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_back_additives_concentrations", - "description": "The concentration of the dopants/additives.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- If more than one dopant/additive in the layer, e.g. A and B, separate the concentration for each dopant/additive with semicolons, as in (A; B)\n- For each dopant/additive in the layer, state the concentration.\n- The order of the dopants/additives must be the same as in the previous filed.\n- For layers with no dopants/additives, state this as \u2018none\u2019\n- When concentrations are unknown, state that as \u2018nan\u2019\n- Concentrations can be stated in different units suited for different situations. Therefore, specify the unit used.\n- The preferred way to state the concentration of a dopant/additive is to refer to the amount in the final product, i.e. the material in the layer. When possible, use on the preferred units\no wt%, mol%, vol%, ppt, ppm, ppb\n- When the concentration of the dopant/additive in the final product is unknown, but where the concentration of the dopant/additive in the solution is known, state that concentration instead. When possible, use on the preferred units\no M, mM, molal; g/ml, mg/ml, \u00b5g/ml\n- For values with uncertainties, state the best estimate, e.g write 4 wt% and not 3-5 wt%.\nExample\n4 wt%\n5 vol%; nan | 10 mg/ml\n0.3 mol% | 2 mol%; 0.2 wt% | 0.3 M", + "name": "preconditioning_light_intensity", + "description": "The light intensity at any light soaking step\n- If there are uncertainties, only state the best estimate, e.g. write 100 and not 90-100.\n- If unknown or not applicable, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "milliwatt / centimeter ** 2" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 37, + "m_parent_index": 28, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Evaporation", - "Unknown" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_back_deposition_procedure", - "description": "The deposition procedures for the HTL-stack.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate them by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- Thermal annealing is generally not considered as an individual reaction step. The philosophy behind this is that every deposition step has a thermal history, which is specified in a separate filed. In exceptional cases with thermal annealing procedures clearly disconnected from other procedures, state \u2018Thermal annealing\u2019 as a separate reaction step.\n- Please read the instructions under \u201cPerovskite. Deposition. Procedure\u201d for descriptions and distinctions between common deposition procedures and how they should be labelled for consistency in the database.\n- A few additional clarifications:\n- Lamination\no A readymade film is transferred directly to the device stack. A rather broad concept. An everyday kitchen related example of lamination would eb to place a thin plastic film over a slice of pie.\n- Sandwiching\no When a readymade top stack simply is placed on top of the device stack. Could be held together with clams. The typical example is a when a \u201cCarbon | FTO | SLG\u201d is placed on top of the device stack. Standard procedure in the DSSC filed.\nExample\nEvaporation\nEvaporation | Evaporation\nDoctor blading\nScreen printing\nSputtering\nLamination\nE-beam evaporation\nSandwiching", + "name": "reverse_scan_Voc", + "description": "The open circuit potential, Voc, at the reverse voltage sweep (when U scanned from Voc to 0)\n- Give Voc in volts [V]\n- If there are uncertainties, only state the best estimate, e.g. write 1.03 and not 1.01-1.05\n- If unknown or not applicable, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "volt" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 38, + "m_parent_index": 29, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Unknown" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_back_deposition_aggregation_state_of_reactants", - "description": "The physical state of the reactants.\n- The three basic categories are Solid/Liquid/Gas\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the aggregation state associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- Most cases are clear cut, e.g. spin-coating involves species in solution and evaporation involves species in gas phase. For less clear-cut cases, consider where the reaction really is happening as in:\no For a spray-coating procedure, it is droplets of liquid that enters the substrate (thus a liquid phase reaction)\no For sputtering and thermal evaporation, it is species in gas phase that reaches the substrate (thus a gas phase reaction)\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nLiquid\nGas | Liquid\nLiquid | Liquid >> Liquid", + "name": "reverse_scan_Jsc", + "description": "The short circuit current, Jsc, at the reverse voltage sweep (when U scanned from Voc to 0)\n- Give Jsc in mA/cm2\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "milliampere / centimeter ** 2" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 39, + "m_parent_index": 30, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Unknown" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_back_deposition_synthesis_atmosphere", - "description": "The synthesis atmosphere.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the atmospheres associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- If the synthesis atmosphere is a mixture of different gases, e.g. A and B, list the gases in alphabetic order and separate them with semicolons, as in (A; B)\n- \u201cDry air\u201d represent air with low relative humidity but where the relative humidity is not known\n- \u201cAmbient\u201d represent air where the relative humidity is not known. For ambient conditions where the relative humidity is known, state this as \u201cAir\u201d\n- \u201cVacuum\u201d (of unspecified pressure) is for this purpose considered as an atmospheric gas\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nVacuum\nVacuum | N2\nAir | Ar; H2O >> Ar", + "name": "reverse_scan_FF", + "description": "The fill factor, FF, at the reverse voltage sweep (when U scanned from Voc to 0)\n- Give FF as the ratio between Vmp*Jmp/(Voc*Jsc) which gives it a value between 0 and 1\n- If there are uncertainties, only state the best estimate, e.g. write 0.73 and not 0.7-0.76\n- If unknown or not applicable, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 40, + "m_parent_index": 31, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_back_deposition_synthesis_atmosphere_pressure_total", - "description": "The total gas pressure during each reaction step\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the pressures associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- Pressures can be stated in different units suited for different situations. Therefore, specify the unit. The preferred units are:\no atm, bar, mbar, mmHg, Pa, torr, psi\n- If a pressure is not known, stat that as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 100 pa and not 80-120 pa.\nExample\n1 atm\n0.002 torr | 10000 Pa\nnan >> 1 atm | 1 atm", + "name": "reverse_scan_PCE", + "description": "The efficiency, PCE, at the reverse voltage sweep (when U scanned from Voc to 0)\n- Give the efficiency in %\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 41, + "m_parent_index": 32, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_back_deposition_synthesis_atmosphere_pressure_partial", - "description": "The partial pressures for the gases present during each reaction step.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the pressures associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- If the synthesis atmosphere is a mixture of different gases, e.g. A and B, list the partial pressures and separate them with semicolons, as in (A; B). The list of partial pressures must line up with the gases they describe.\n- In cases where no gas mixtures are used, this field will be the same as the previous filed.\nExample\n1 atm\n0.002 torr | 10000 Pa\nnan >> 0.99 atm; 0.01 atm | 1 atm", + "name": "reverse_scan_Vmp", + "description": "The potential at the maximum power point, Vmp, at the reverse voltage sweep (when U scanned from Voc to 0)\n- Give Vmp in volts [V]\n- If there are uncertainties, only state the best estimate, e.g. write 1.03 and not 1.01-1.05\n- If unknown or not applicable, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "volt" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 42, + "m_parent_index": 33, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_back_deposition_synthesis_atmosphere_relative_humidity", - "description": "The relative humidity during each deposition step\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the relative humidity associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns\n- If the relative humidity for a step is not known, stat that as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 35 and not 30-40.\nExample\n35\n0 | 20\nnan >> 25 | 0", + "name": "reverse_scan_Jmp", + "description": "The current density at the maximum power point, Jmp, at the reverse voltage sweep (when U scanned from Voc to 0)\n- Give Jmp in mA/cm2\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "milliampere / centimeter ** 2" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 43, + "m_parent_index": 34, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Unknown" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_back_deposition_solvents", - "description": "The solvents used in each deposition procedure for each layer in the stack\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvents associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solvent is a mixture of different solvents, e.g. A and B, list the solvents in alphabetic order and separate them with semicolons, as in (A; B)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- For non-liquid processes with no solvents, state the solvent as \u2018none\u2019\n- If the solvent is not known, state this as \u2018Unknown\u2019\n- Use common abbreviations when appropriate but spell it out when risk for confusion\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nnone\nAcetonitile; Ethanol | Chlorobenzene\nnone >> Ethanol; Methanol; H2O | DMF; DMSO", + "name": "reverse_scan_series_resistance", + "description": "The series resistance as extracted from the reverse voltage sweep (when U scanned from Voc to 0)", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "centimeter ** 2 * ohm" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 44, + "m_parent_index": 35, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_back_deposition_solvents_mixing_ratios", - "description": "The mixing ratios for mixed solvents\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvent mixing ratios associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- For pure solvents, state the mixing ratio as 1\n- For non-solvent processes, state the mixing ratio as 1\n- For unknown mixing ratios, state the mixing ratio as \u2018nan\u2019\n- For solvent mixtures, i.e. A and B, state the mixing ratios by using semicolons, as in (VA; VB)\n- The preferred metrics is the volume ratios. If that is not available, mass or mol ratios can be used instead, but it the analysis the mixing ratios will be assumed to be based on volumes.\nExample\n1\n4; 1 | 1\n1 >> 5; 2; 0.3 | 2; 1", + "name": "reverse_scan_shunt_resistance", + "description": "The shunt resistance as extracted from the reverse voltage sweep (when U scanned from Voc to 0)", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "centimeter ** 2 * ohm" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 45, + "m_parent_index": 36, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Unknown" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_back_deposition_solvents_supplier", - "description": "The suppliers of all the solvents.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvent suppliers associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solvent is a mixture of different solvents, e.g. A and B, list the associated suppliers and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- For non-liquid processes with no solvents, mark the supplier as \u2018none\u2019\n- If the supplier for a solvent is unknown, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nSigma Aldrich\nSigma Aldrich; Fisher | Acros\nnone >> Sigma Aldrich; Sigma Aldrich | Unknown", + "name": "forward_scan_Voc", + "description": "The open circuit potential, Voc, at the forward voltage sweep (when U scanned from 0 to Voc)\n- Give Voc in volts [V]\n- If there are uncertainties, only state the best estimate, e.g. write 1.03 and not 1.01-1.05\n- If unknown or not applicable, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "volt" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 46, + "m_parent_index": 37, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Unknown" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_back_deposition_solvents_purity", - "description": "The purity of the solvents used.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the solvent purities associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solvent is a mixture of different solvents, e.g. A and B, list the associated purities and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- Use standard nomenclature for purities, e.g. pro analysis, puris, extra dry, etc.\n- For non-liquid processes with no solvents, state the purity as \u2018none\u2019\n- If the purity for a solvent is not known, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nPro analysis\nPuris; Puris| Tecnical\nnone >> Pro analysis; Pro analysis | Unknown", + "name": "forward_scan_Jsc", + "description": "The short circuit current, Jsc, at the forward voltage sweep (when U scanned from 0 to Voc)\n- Give Jsc in mA/cm2\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "milliampere / centimeter ** 2" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 47, + "m_parent_index": 38, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_back_deposition_reaction_solutions_compounds", - "description": "The non-solvent precursor chemicals used in each reaction step\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the non-solvent chemicals associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several compounds, e.g. A and B, list the associated compounds in alphabetic order and separate them with semicolons, as in (A; B)\n- Note that also dopants/additives should be included\n- When several precursor solutions are made and mixed before the reaction step, it is the properties of the final mixture used in the reaction we here describe.\n- The number and order of layers and reaction steps must line up with the previous columns.\n- For gas phase reactions, state the reaction gases as if they were in solution.\n- For solid-state reactions, state the compounds as if they were in solution.\n- For reaction steps involving only pure solvents, state this as \u2018none\u2019\n- If the compounds for a deposition step is not known, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nAu\nCuI\nAg", + "name": "forward_scan_FF", + "description": "The fill factor, FF, at the forward voltage sweep (when U scanned from 0 to Voc)\n- Give FF as the ratio between Vmp*Jmp/(Voc*Jsc) which gives it a value between 0 and 1\n- If there are uncertainties, only state the best estimate, e.g. write 0.73 and not 0.7-0.76\n- If unknown or not applicable, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 48, + "m_parent_index": 39, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Unknown" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_back_deposition_reaction_solutions_compounds_supplier", - "description": "The suppliers of the non-solvent chemicals.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the non-solvent chemical suppliers associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several dissolved compounds, e.g. A and B, list the associated suppliers and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- For gas phase reactions, state the suppliers for the gases or the targets/evaporation sources that are evaporated/sputtered/etc.\n- For solid state reactions, state the suppliers for the compounds in the same way.\n- For reaction steps involving only pure solvents, state the supplier as \u2018none\u2019 (as that that is entered in a separate filed)\n- For chemicals that are lab made, state that as \u201cLab made\u201d or \u201cLab made (name of lab)\u201d\n- If the supplier for a compound is unknown, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nDysole; Sigma Aldrich; Dyenamo; Sigma Aldrich\nSigma Aldrich; Fisher | Acros\nLab made (EPFL) | Sigma Aldrich >> none", + "name": "forward_scan_PCE", + "description": "The efficiency, PCE, at the forward voltage sweep (when U scanned from 0 to Voc)\n- Give the efficiency in %\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 49, + "m_parent_index": 40, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Unknown" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_back_deposition_reaction_solutions_compounds_purity", - "description": "The purity of the non-solvent chemicals.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the compound purities associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several dissolved compounds, i.e. A and B, list the associated purities and separate them with semicolons, as in (A; B)\n- The number and order of layers, reaction steps, and solvents must line up with the previous columns.\n- Use standard nomenclature for purities, e.g. pro analysis, puris, extra dry, etc.\n- For reaction steps involving only pure solvents, state this as \u2018none\u2019 (as that is stated in another field)\n- If the purity for a compound is not known, state this as \u2018Unknown\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is short. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nPro analysis\n99.999; Puris| Tecnical\nUnknown >> Pro analysis; Pro analysis | none", + "name": "forward_scan_Vmp", + "description": "The potential at the maximum power point, Vmp, at the forward voltage sweep (when U scanned from 0 to Voc)\n- Give Vmp in volts [V]\n- If there are uncertainties, only state the best estimate, e.g. write 1.03 and not 1.01-1.05\n- If unknown or not applicable, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "volt" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 50, + "m_parent_index": 41, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_back_deposition_reaction_solutions_concentrations", - "description": "The concentration of the non-solvent precursor chemicals.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the concentrations associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a solution contains several dissolved compounds, e.g. A and B, list the associated concentrations and separate them with semicolons, as in (A; B)\n- The order of the compounds must be the same as in the previous filed.\n- For reaction steps involving only pure solvents, state this as \u2018none\u2019\n- When concentrations are unknown, state that as \u2018nan\u2019\n- Concentrations can be stated in different units suited for different situations. Therefore, specify the unit used. When possible, use one of the preferred units\no M, mM, molal; g/ml, mg/ml, \u00b5g/ml, wt%, mol%, vol%, ppt, ppm, ppb\n- For values with uncertainties, state the best estimate, e.g write 4 wt% and not 3-5 wt%.\nExample\n4 wt%\n0.2 M; 0.15 M| 10 mg/ml\n0.3 mol% | 2 mol%; 0.2 wt% | nan", + "name": "forward_scan_Jmp", + "description": "The current density at the maximum power point, Jmp, at the forward voltage sweep (when U scanned from 0 to Voc)\n- Give Jmp in mA/cm2\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "milliampere / centimeter ** 2" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 51, + "m_parent_index": 42, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Unknown" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_back_deposition_reaction_solutions_volumes", - "description": "The volume of the reaction solutions\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the volumes associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The volumes refer the volumes used, not the volume of the stock solutions. Thus if 0.15 ml of a solution is spin-coated, the volume is 0.15 ml\n- For reaction steps without solvents, state the volume as \u2018nan\u2019\n- When volumes are unknown, state that as \u2018nan\u2019\nExample\n0.1\n0.1 >> 0.05 | 0.05\nnan | 0.15", + "name": "forward_scan_series_resistance", + "description": "The series resistance as extracted from the forward voltage sweep (when U scanned from 0 to Voc)", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "centimeter ** 2 * ohm" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 52, + "m_parent_index": 43, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Unknown" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_back_deposition_reaction_solutions_age", - "description": "The age of the solutions\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the age of the solutions associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- As a general guideline, the age refers to the time from the preparation of the final precursor mixture to the reaction procedure.\n- When the age of a solution is not known, state that as \u2018nan\u2019\n- For reaction steps where no solvents are involved, state this as \u2018nan\u2019\n- For solutions that is stored a long time, an order of magnitude estimate is adequate.\nExample\n2\n0.25 |1000 >> 10000\nnan | nan", + "name": "forward_scan_shunt_resistance", + "description": "The shunt resistance as extracted from the forward voltage sweep (when U scanned from 0 to Voc)", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [], + "unit": "centimeter ** 2 * ohm" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 44, + "m_parent_sub_section": "quantities", + "name": "link_raw_data", + "description": "A link to where the data file for the IV-data is stored\n- This is a beta feature. The plan is to create a file repository where the raw files for IV data can be stored and disseminated. With the link and associated protocols, it should be possible to programmatically access and analyse the raw IV-data.", "type": { "type_kind": "python", "type_data": "str" @@ -51155,103 +55004,85 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 53, + "m_parent_index": 45, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Unknown" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_back_deposition_reaction_solutions_temperature", - "description": "The temperature of the reaction solutions.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the temperatures of the solutions associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If a reaction solution undergoes a temperature program, list the temperatures (e.g. start, end, and other important points) and separate them with semicolons, e.g. 25; 100\n- When the temperature of a solution is unknown, state that as \u2018nan\u2019\n- For reaction steps where no solvents are involved, state the temperature of the gas or the solid if that make sense. Otherwise state this as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 120 and not 110-130.\n- Assume an undetermined room temperature to be 25\nExample\n25\n100; 50 | 25\nnan | 25 >> 25", + "name": "default_Voc", + "description": "Open circuit voltage.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "volt" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 54, - "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Unknown" - ] - } + "m_parent_index": 46, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "NumberEditQuantity" } ] }, - "name": "lay_back_deposition_substrate_temperature", - "description": "The temperature of the substrate.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the temperatures of the substrates (i.e. the last deposited layer) associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The temperature of the substrate refers to the temperature when the deposition of the layer is occurring.\n- If a substrate undergoes a temperature program before the deposition, list the temperatures (e.g. start, end, and other important points) and separate them with semicolons (e.g. 25; 100)\n- When the temperature of a substrate is not known, state that as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 120 and not 110-130.\n- Assume that an undetermined room temperature is 25\nExample\n25\nnan\n125; 325; 375; 450 | 25 >> 25", + "name": "default_Jsc", + "description": "Short circuit current density.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "milliampere / centimeter ** 2" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 55, + "m_parent_index": 47, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Unknown" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_back_deposition_thermal_annealing_temperature", - "description": "The temperatures of the thermal annealing program associated with depositing the layers\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the annealing temperatures associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If the thermal annealing involves a temperature program with multiple temperature stages, list the temperatures (e.g. start, end, and other important points) and separate them with semicolons (e.g. 25; 100)\n- For values with uncertainties, state the best estimate, e.g. write 120 and not 110-130.\n- If no thermal annealing is occurring after the deposition of a layer, state that by stating the room temperature (assumed to 25\u00b0C if not further specified)\n- If the thermal annealing program is not known, state that by \u2018nan\u2019\nExample\n25\n50 | nan\n450 | 125; 325; 375; 450 >> 125; 325; 375; 450", + "name": "default_FF", + "description": "Fill factor.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 56, + "m_parent_index": 48, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Unknown" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_back_deposition_thermal_annealing_time", - "description": "The time program associated to the thermal annealing program.\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the annealing times associated to each reaction step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If the thermal annealing involves a temperature program with multiple temperature stages, list the associated times at those temperatures and separate them with semicolons.\n- The annealing times must align in terms of layers\u00b8 reaction steps and annealing temperatures in the previous filed.\n- If a time is not known, state that by \u2018nan\u2019\n- If no thermal annealing is occurring after the deposition of a layer, state that by \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 20 and not 10-30.\nExample\nnan\n60 | 1000\n30 | 5; 5; 5; 30 >> 5; 5; 5; 30", + "name": "default_PCE", + "description": "Power conversion efficiency.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 57, + "m_parent_index": 49, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -51259,14 +55090,16 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Unknown" + "Reversed", + "", + "Forward" ] } } ] }, - "name": "lay_back_deposition_thermal_annealing_atmosphere", - "description": "The atmosphere during thermal annealing\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- When more than one reaction step, separate the atmospheres associated to each annelaing step by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- The number and order of layers and deposition steps must line up with the previous columns.\n- If the atmosphere is a mixture of different gases, i.e. A and B, list the gases in alphabetic order and separate them with semicolons, as in (A; B)\n- \u201cDry air\u201d represent air with low relative humidity but where the relative humidity is not known\n- \u201cAmbient\u201d represent air where the relative humidity is not known. For ambient conditions where the relative humidity is known, state this as \u201cAir\u201d\n- \u201cVacuum\u201d (of unspecified pressure) is for this purpose considered as an atmospheric gas.\n- This is often the same as the atmosphere under which the deposition is occurring, but not always.\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nN2\nVacuum | N2\nAir | Ar >> Ar", + "name": "default_Voc_scan_direction", + "description": "nan", "type": { "type_kind": "python", "type_data": "str" @@ -51275,7 +55108,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 58, + "m_parent_index": 50, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -51283,14 +55116,16 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Unknown" + "Reversed", + "", + "Forward" ] } } ] }, - "name": "lay_back_storage_time_until_next_deposition_step", - "description": "The time between the back contact is finalised and the next layer is deposited\n- If there are uncertainties, only state the best estimate, e.g. write 35 and not 20-50.\n- If this is the last layer in the stack, state this as \u2018nan\u2019", + "name": "default_Jsc_scan_direction", + "description": "nan", "type": { "type_kind": "python", "type_data": "str" @@ -51299,7 +55134,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 59, + "m_parent_index": 51, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -51307,14 +55142,16 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Unknown" + "Reversed", + "", + "Forward" ] } } ] }, - "name": "lay_back_storage_atmosphere", - "description": "The atmosphere in which the sample with the finalised back contact is stored until the next deposition step or device performance measurement\nExample\nAir\nN2\nVacuum", + "name": "default_FF_scan_direction", + "description": "nan", "type": { "type_kind": "python", "type_data": "str" @@ -51323,7 +55160,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 60, + "m_parent_index": 52, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -51331,14 +55168,17 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "" + "Reversed", + "", + "Stabilised", + "Forward" ] } } ] }, - "name": "lay_back_storage_relative_humidity", - "description": "The relive humidity under which the sample with the finalised back contact is stored until the next deposition step or device performance measurement\n- If there are uncertainties, only state the best estimate, e.g write 35 and not 20-50.", + "name": "default_PCE_scan_direction", + "description": "nan", "type": { "type_kind": "python", "type_data": "str" @@ -51347,36 +55187,41 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 61, + "m_parent_index": 53, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "lay_back_surface_treatment_before_next_deposition_step", - "description": "Description of any type of surface treatment or other treatment the sample with the finalised back contact is stored until the next deposition step or device performance measurement\n- If more than one treatment, list the treatments and separate them by a double forward angel bracket (\u2018 >> \u2018)\n- If no special treatment, state that as \u2018none\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample:\nnone\nAr plasma\nUV-ozone", + "name": "hysteresis_index", + "description": "nan", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, "shape": [] } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "jv_curve", + "sub_section": "/packages/6/section_definitions/11", + "repeats": true + } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 10, + "m_parent_index": 13, "m_parent_sub_section": "section_definitions", - "name": "Encapsulation", - "description": "A section to describe information about the encapsulation of the device.", + "name": "Stabilised", + "description": "A section describing if a stabilised efficiency has been measured in the solar cell.", "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -51389,8 +55234,8 @@ window.nomadArtifacts = { } ] }, - "name": "Encapsulation", - "description": "TRUE if the cell is encapsulated", + "name": "performance_measured", + "description": "TRUE if a stabilised cell efficiency has been measured\n- A stabilised efficiency requires a continuous measurement. Measuring an IV-curve, storing the cell in the dark for a while, and then measure a new IV-curve does thus not count as a stabilised efficiency measurement.", "type": { "type_kind": "python", "type_data": "bool" @@ -51407,131 +55252,18 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Parylene | SLG", - "Plastic tape", - "Parylene-C", - "UV-curated glue | SLG", - "SLG | Ossila E131 epoxy resin", - "Field's metal", - "Scribbling UV-glue", - "Kapton tape | Glue", - "UV-curable epoxy", - "UV-glue | SLG", - "Surlyn | SLG", - "Epoxy", - "Eu(TTA)2(Phen)MAA", - "Cover glass-QDs; Epoxy", - "Al2O3 | SLG", - "Pattex silicon", - "UV-glue (NOA 68, Norland products)", - "Kapton PI tape with Silicone adhesive", - "Polymer | SLG", - "Ossila E131 Epoxy Resin", - "Viewbarrier (mitsibushi plastic, inc)", - "Cavity glass", - "Epoxy (3124L(MS), Three Bond)", - "Polymer", - "SLG", - "FTO", - "UV curable glue", - "Surlyn", - "UV-glue (ThreeBond)", - "Epoxy | SLG", - "Cyanoacrylate", - "UV-curated epoxy | SLG", - "Parylene-film", - "UV-curable epoxy | Cover glass-QDs", - "EVOH | S5 | UV | G1", - "Face-sealing adhesive sheets", - "Polystyrene microgel particles", - "Cover glass-QDs | UV-curable epoxy", - "Polyolefin", - "Paraffin", - "PDMS", - "SiO2 | Desiccant | SLG", - "UV-glue", - "Barrier foil", - "EVA", - "Polyisobutylene", - "SiO2 | AB epoxy glue (Super Glue Corp.) | Desiccant | SLG", - "UVCA (3035B)", - "SLG; UV-selant", - "UV epoxy", - "SLG | Epoxy", - "Glass cyclindrical tube", - "Norland Optical Adhesive (NOA) layers on (PET) | micropatterned NOA", - "LDPE | PP", - "Thermoplastic sealant", - "PVP | UV-Epoxy | SLG", - "Fluoropolymeric layer", - "3M acrylic elastomer (3M VHB 4905)", - "SLG | LT-U001", - "Cover glass-QDs", - "UV curing epoxy", - "UV-cured epoxy; Cavity glass", - "UHPBF", - "UV filter glass and light curable epoxy", - "Polyvinyl pyrrolidone | Epoxy resin | SLG", - "SnO2-c", - "UV Epoxy", - "Surlyn | Gover glass", - "Unknown", - "SL; Unknown:UV cured adhesive", - "UV epoxy | SLG", - "Glass (Ossila E131)", - "UV-glue (ThreeBond, 3052)", - "UV-curable epoxy | SLG", - "PCL", - "Graphene", - "Al2O3 | PET", - "PDMS-nanocone", - "Hot melt polymer foil (Oxford PV) | Cover glass-QDs", - "Norland Optical Adhesive (NOA) layers on (PET)", - "Carbon-nt", - "PET", - "Cover glass-QDs; Water-absorbent sealant (HD-S051414W-40, Dynic)", - "Desiccant | SLG", - "Graphene oxide | Desiccant | SLG", - "Ossila E132 resin", - "Kapton tape", - "Kapton tape | SLG", - "UV curable resin", - "UV-glue (3035B, ThreeBond Holdings)", - "Al2O3 | pV3D3", - "Surlyn | FTO", - "Cover glass with ultraviolet-curable adhesive", - "Polyisobutene", - "Cover glass-QDs; Expoxy", - "SLG | FTO", - "polyisobutylene | SLG", - "PMMA; PU", - "UVCA (3035B) | Paraffin", - "Ag; Carbon-epoxy", - "UV sealant | Surlyn | SLG", - "PEN", - "Self-mixing epoxy", - "Teflon", - "Al2O3", - "UV glue", - "Kapton | Ligh-curated glue | SLG", - "Adhesive glue 3025 B (Three Bond Holding Co. Ltd)", - "ITO | PEN", - "Ethylene-vinyl acetate", - "EVA | SLG", - "PCPD2FBT:BCF", - "PMMA", - "Desiccant", - "SiO2", - "Scotch tape", - "Meltronix", - "Al2O3 | O-Al-CH3 | Al2O3" + "", + "MPPT", + "Constant potential", + "Constant Potential", + "Constant current" ] } } ] }, - "name": "stack_sequence", - "description": "The stack sequence of the encapsulation\n- Every layer should be separated by a space, a vertical bar, and a space, i.e. (\u2018 | \u2018)\n- If two materials, e.g. A and B, are mixed in one layer, list the materials in alphabetic order and separate them with semicolons, as in (A; B)\n- Use common abbreviations when appropriate but spell it out if risk for confusion.\n- There are now separate filed for doping. Indicate doping with colons. E.g. wither aluminium doped NiO-np as Al:NiO-np\nExample:\nSLG\nEpoxy\nCover glass\nPMMA", + "name": "performance_procedure", + "description": "The Potentiostatic load condition during the stabilised performance measurement\nExamples:\nConstant current\nConstant potential\nMPPT\nPassive resistance\nShort circuit", "type": { "type_kind": "python", "type_data": "str" @@ -51548,57 +55280,61 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Epoxy (Pacer Technology, SY-QS )", - "Thermoplastic", - "Araldite 2011", - "Kapton tape | Light-curable glue", - "NOA 89", - "Epoxy; Silicone", - "Hot-melting polymer", - "UV-glue (3035B, ThreeBond Holdings)", - "Ossila Epoxy E131", - "467 MP 3M Adhesive Transfer Tape", - "PDMS", - "polyisobutylene", - "Unknown", - "UV-curable epoxy", - "NOA 88", - "UV-curable epoxy (ThreeBond)", - "Polymer foil", - "Clamp", - "Epoxy", - "none", - "Glue", - "UV-glue", - "Epoxy adhesive", - "Polyurathene", - "Epoxy (XNR 5516Z-B1, Nagase ChemteX Corporation)", - "NOA 63", - "Polyisobutylene", - "Epoxy sealant Ossila E131", - "UV-glue (NOA 68, Norland products)", - "Kapton tape | UV-curable Glue", - "Threebond glue", - "Light-curated glue", - "Surlyn (Du Pont)", - "Epoxy; Polymer", - "Polymer", - "SLG", - "Polyolefin elastomer", - "Thermally curable epoxy (Kyoritsu Chemical)", - "Surlyn", - "UV-glue (ThreeBond)", - "UV-curable epoxy (Ossila E131)", - "Butyl rubber", - "Cover glass-QDs", - "Polydimethylsiloxane" + "", + "0.8", + "0.82", + "0.885", + "0.99", + "0.64", + "0.91", + "0.757", + "0.97", + "0.76", + "0.92", + "0.7959999999999999", + "0.895", + "0.96", + "1.19", + "0.85", + "0.94", + "0.61", + "0.83", + "1.31", + "0.87", + "0.9", + "0.86", + "0.78", + "0.93", + "0.74", + "0.79", + "0.867", + "0.98", + "0.73", + "1.3", + "0.8140000000000001", + "0.8740000000000001", + "0.8590000000000001", + "1.23", + "0.81", + "0.818", + "0.71", + "0.75", + "1.0", + "0.62", + "0.66", + "0.88", + "0.84", + "0.95", + "0.72", + "0.77", + "1.35" ] } } ] }, - "name": "edge_sealing_materials", - "description": "Edge sealing materials\n- If two materials, e.g. A and Bare used, list the materials in alphabetic order and separate them with semicolons, as in (A; B)\nExample:\nEpoxy\nSurlyn\nUV-glue", + "name": "performance_procedure_metrics", + "description": "The metrics associated to the load condition in the previous filed\n- For measurement under constant current, state the current in mA/cm2\n- For measurement under constant potential. State the potential in V\n- For a measurement under constant resistive load, state the resistance in ohm", "type": { "type_kind": "python", "type_data": "str" @@ -51612,28 +55348,18 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Dry air", - "Unknown", - "Air", - "Ambient", - "N2", - "Vacuum", - "Ar" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "atmosphere_for_encapsulation", - "description": "The surrounding atmosphere during encapsulation.\n- If the surrounding atmosphere is a mixture of different gases, e.g. A and B, list the gases in alphabetic order and separate them with semicolons, as in (A; B)\n- \u201cDry air\u201d represent air with low relative humidity but where the relative humidity is not known\n- \u201cAmbient\u201d represent air where the relative humidity is not known. For ambient conditions where the relative humidity is known, state this as \u201cAir\u201d\n- \u201cVacuum\u201d (of unspecified pressure) is for this purpose considered as an atmospheric gas\nExample\nN2\nVacuum\nAir", + "name": "performance_measurement_time", + "description": "The duration of the stabilised performance measurement.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "minute" }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -51646,8 +55372,8 @@ window.nomadArtifacts = { } ] }, - "name": "water_vapour_transmission_rate", - "description": "The water vapour transmission rate trough the encapsulation.\n- If there are uncertainties, only state the best estimate, e.g. write 35 and not 20-50.", + "name": "performance_PCE", + "description": "The stabilised efficiency, PCE\n- Give the efficiency in %\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", "type": { "type_kind": "numpy", "type_data": "float64" @@ -51665,110 +55391,148 @@ window.nomadArtifacts = { } ] }, - "name": "oxygen_transmission_rate", - "description": "The oxygen transmission rate trough the encapsulation.\n- If there are uncertainties, only state the best estimate, e.g. write 35 and not 20-50.", + "name": "performance_Vmp", + "description": "The stabilised Vmp\n- Give Vmp in volts [V]\n- If there are uncertainties, only state the best estimate, e.g. write 1.03 and not 1.01-1.05\n- If unknown or not applicable, leave this field empty.", "type": { "type_kind": "numpy", "type_data": "float64" }, - "shape": [] - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 11, - "m_parent_sub_section": "section_definitions", - "name": "JVcurve", - "description": "Section describing a current density, voltage curve.", - "more": { - "label_quantity": "cell_name" - }, - "quantities": [ - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, - "m_parent_sub_section": "quantities", - "name": "n_values", - "type": { - "type_kind": "python", - "type_data": "int" - }, - "virtual": true + "shape": [], + "unit": "volt" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, + "m_parent_index": 6, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "StringEditQuantity" - } - ] - }, - "name": "cell_name", - "description": "Cell identification name.", - "type": { - "type_kind": "python", - "type_data": "str" - }, - "shape": [] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, - "m_parent_sub_section": "quantities", - "m_annotations": { - "plot": [ - { - "x": "voltage", - "y": "current_density" + "component": "NumberEditQuantity" } ] }, - "name": "current_density", - "description": "Current density array of the *JV* curve.", + "name": "performance_Jmp", + "description": "The stabilised Jmp\n- Give Jmp in mA/cm2\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", "type": { "type_kind": "numpy", "type_data": "float64" }, - "shape": [ - "n_values" - ], + "shape": [], "unit": "milliampere / centimeter ** 2" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, + "m_parent_index": 7, "m_parent_sub_section": "quantities", "m_annotations": { - "plot": [ + "eln": [ { - "x": "voltage", - "y": "current_density" + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "false", + "www.testsite\u2026" + ] + } } ] }, - "name": "voltage", - "description": "Voltage array of the of the *JV* curve.", + "name": "performance_link_raw_data", + "description": "A link to where the data file for the stability measurement is stored\n- This is a beta feature. The plan is to create a file repository where the raw files for IV data can be stored and disseminated. With the link and associated protocols, it should be possible to programmatically access and analyse the raw IV-data.", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [ - "n_values" - ], - "unit": "volt" + "shape": [] } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 12, + "m_parent_index": 14, "m_parent_sub_section": "section_definitions", - "name": "JV", - "description": "This section descirbes the current density *J* and voltage *V* characteristics of the solar cell. It includes the device parameters and information about how the\nmeasurements were performed.", + "m_annotations": { + "eln": [ + { + "lane_width": "600px" + } + ], + "plotly_graph_object": [ + { + "data": { + "x": "#raw_wavelength_array", + "y": "#raw_eqe_array" + }, + "layout": { + "label": { + "text": "Raw EQE" + }, + "yaxis": { + "type": "lin" + } + } + }, + { + "data": { + "x": "#wavelength_array", + "y": "#eqe_array" + }, + "layout": { + "label": { + "text": "Interpolated/extrapolated EQE log scale" + }, + "yaxis": { + "type": "log" + } + }, + "config": { + "editable": "true" + } + }, + { + "data": { + "x": "#photon_energy_array", + "y": "#raw_eqe_array" + } + }, + { + "data": { + "x": "#raw_photon_energy_array", + "y": "#raw_eqe_array" + } + }, + { + "data": { + "x": "#raw_wavelength_array", + "y": "#raw_eqe_array" + } + }, + { + "data": { + "x": "#photon_energy_array", + "y": "#eqe_array" + } + }, + { + "data": { + "x": "#wavelength_array", + "y": "#eqe_array" + } + }, + { + "data": { + "x": "#photon_energy_array", + "y": "#eqe_array" + } + } + ] + }, + "name": "EQE", + "description": "A section describing the External Quantum Efficiency **EQE** of the solar cell and additional parameteres derived from it. If used as an ELN, a file containing\nthe EQE spectrum in columns can be uploaded in the quantity `data_file` to process\nautomatic calculations of several parameteres like the `bandgap` or `Urbach energy`.", + "base_sections": [ + "/packages/0/section_definitions/3" + ], "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -51786,7 +55550,8 @@ window.nomadArtifacts = { } ] }, - "name": "data_file", + "name": "eqe_data_file", + "description": "Drop here your eqe file and click save for processing.", "type": { "type_kind": "python", "type_data": "str" @@ -51799,17 +55564,17 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "BoolEditQuantity" + "component": "NumberEditQuantity" } ] }, - "name": "measured", - "description": "TRUE if IV-data has been measured and is reported.", + "name": "header_lines", + "description": "Number of header lines in the file.", "type": { - "type_kind": "python", - "type_data": "bool" + "type_kind": "numpy", + "type_data": "int64" }, - "shape": [] + "default": 0 }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -51818,15 +55583,15 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "BoolEditQuantity" } ] }, - "name": "average_over_n_number_of_cells", - "description": "The number of cells the reported IV data is based on.\n- The preferred way to enter data is to give every individual cell its own entry in the data template/data base. If that is done, the data is an average over 1 cell.\n- If the reported IV data is not the data from one individual cell, but an average over N cells. Give the number of cells.\n- If the reported value is an average, but it is unknown over how many cells the value has been averaged (and no good estimate is available), state the number of cells as 2, which is the smallest number of cells that qualifies for an averaging procedure.", + "name": "measured", + "description": "TRUE if the external quantum efficiency has been measured", "type": { - "type_kind": "numpy", - "type_data": "int64" + "type_kind": "python", + "type_data": "bool" }, "shape": [] }, @@ -51837,17 +55602,18 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "BoolEditQuantity" + "component": "NumberEditQuantity" } ] }, - "name": "certified_values", - "description": "TRUE if the IV data is measured by an independent and certification institute. If your solar simulator is calibrated by a calibrated reference diode, that does not count as a certified result.", + "name": "light_bias", + "description": "The light intensity of any bias light during the EQE measurement\n- If there are uncertainties, only state the best estimate, e.g. write 100 and not 90-100.\n- If unknown or not applicable, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "bool" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "milliwatt / centimeter ** 2" }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -51856,39 +55622,18 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "", - "National Institute ofMetrology, China", - "Quality supervision\uff06Testing Center of Chemical\uff06Physical Power Sources of Information Industry", - "CREST, Photovoltaic Meaasurement and calibration Laboratory at Universit of Loughborough", - "Photovoltaic and Wind Power Systems Quality Test Center, Chinese Academy of Sciences", - "NREL", - "Institute of Metrology (NIM) of China", - "PVEVL, National Central University, Taiwan", - "NIM, National Institute of Metrology of China", - "Fraunhofer ISE", - "SIMIT, Shanghai Institute of Microsystem and Information Technology", - "Newport", - "CSIRO, PV Performance Lab at Monash University", - "AIST, National Institute of Advanced Industrial Science and Technology", - "CPVT, National Center of Supervision and Inspection on Solar Photovoltaic Products Quality of China", - "KIER, Korea Institute of Energy Research", - "Newport Corporation", - "Solar Power Lab at Arizona State University" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "certification_institute", - "description": "The name of the certification institute that has measured the certified device.\nExample:\nNewport\nNIM, National Institute of Metrology of China\nKIER, Korea Institute of Energy Research", + "name": "bandgap_eqe", + "description": "Bandgap derived form the eqe in eV.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "electron_volt" }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -51897,33 +55642,18 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "1.0", - "Unknown", - "7.0", - "4.0", - "2.0", - "28.0", - "58.0", - "8.0", - "0.01", - "0.5", - "5.0", - "6.0" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "storage_age_of_cell", - "description": "The age of the cell with respect to when the last deposition step was finalised.\n- If there are uncertainties, only state the best estimate, e.g. write 3 and not 1-5.", + "name": "integrated_Jsc", + "description": "The integrated current from the EQE measurement\n- Give Jsc in mA/cm2\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "milliampere / centimeter ** 2" }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -51932,27 +55662,18 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Dry air", - "Unknown", - "Air", - "Ambient", - "N2", - "Vacuum" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "storage_atmosphere", - "description": "The atmosphere in which the sample was stored between the device finalisation and the IV measurement.\n- If the atmosphere is a mixture of different gases, e.g. A and B, list the gases in alphabetic order and separate them with semicolons, as in (A; B)\n- \u201cDry air\u201d represent air with low relative humidity but where the relative humidity is not known\n- \u201cAmbient\u201d represent air where the relative humidity is not known. For ambient conditions where the relative humidity is known, state this as \u201cAir\u201d\n- \u201cVacuum\u201d (of unspecified pressure) is for this purpose considered as an atmospheric gas\n- If the atmosphere has changed during the storing time, separate the different atmospheres by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nN2\nAir\nN2 >> Air", + "name": "integrated_J0rad", + "description": "The integrated J<sub>{0, Rad}</sub> from the EQE measurement\n- Give J<sub>{0, Rad}</sub> in mA/cm2\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "milliampere / centimeter ** 2" }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -51961,25 +55682,18 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "", - "0.9", - "65.0", - "5.0" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "storage_relative_humidity", - "description": "The relative humidity in the atmosphere in which the sample was stored between the device finalisation and the IV measurement.\n- If the relative humidity has changed during the storing time, separate the different relative humidity by a double forward angel bracket with one blank space on both sides (\u2018 >> \u2018)\n- If the relative humidity is not known, stat that as \u2018nan\u2019\n- For values with uncertainties, state the best estimate, e.g. write 35 and not 30-40.\nExample\n35\n0\n0 >> 25", + "name": "voc_rad", + "description": "Radiative V<sub>oc</sub> derived from the eqe in V.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "volt" }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -51988,54 +55702,222 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Water", - "Dry air", - "Unknown", - "Air", - "Ambient", - "Outdoor", - "N2", - "Vacuum", - "Ar", - "Near-space" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "test_atmosphere", - "description": "The atmosphere in which the IV measurement is conducted\n- If the atmosphere is a mixture of different gases, e.g. A and B, list the gases in alphabetic order and separate them with semicolons, as in (A; B)\n- \u201cDry air\u201d represent air with low relative humidity but where the relative humidity is not known\n- \u201cAmbient\u201d represent air where the relative humidity is not known. For ambient conditions where the relative humidity is known, state this as \u201cAir\u201d\n- \u201cVacuum\u201d (of unspecified pressure) is for this purpose considered as an atmospheric gas\nExample\nAir\nN2\nVacuum", + "name": "urbach_energy", + "description": "Urbach energy fitted from the eqe in eV.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [], + "unit": "electron_volt" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 9, + "m_parent_sub_section": "quantities", + "name": "n_values", + "type": { + "type_kind": "python", + "type_data": "int" + }, + "virtual": true + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 10, + "m_parent_sub_section": "quantities", + "name": "n_raw_values", + "type": { + "type_kind": "python", + "type_data": "int" + }, + "virtual": true + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 11, + "m_parent_sub_section": "quantities", + "name": "raw_eqe_array", + "description": "EQE array of the spectrum", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "n_raw_values" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 12, + "m_parent_sub_section": "quantities", + "name": "raw_photon_energy_array", + "description": "Raw Photon energy array of the eqe spectrum", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "n_raw_values" + ], + "unit": "electron_volt" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 13, + "m_parent_sub_section": "quantities", + "name": "raw_wavelength_array", + "description": "Raw wavelength array of the eqe spectrum", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "n_raw_values" + ], + "unit": "nanometer" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 14, + "m_parent_sub_section": "quantities", + "name": "eqe_array", + "description": "EQE array of the spectrum", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "n_values" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 15, + "m_parent_sub_section": "quantities", + "name": "wavelength_array", + "description": "Interpolated/extrapolated wavelength array with *E<sub>u</sub>* of the eqe spectrum", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "n_values" + ], + "unit": "nanometer" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 16, + "m_parent_sub_section": "quantities", + "name": "photon_energy_array", + "description": "Interpolated/extrapolated photon energy array with a *E<sub>u</sub>* of the eqe spectrum", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "n_values" + ], + "unit": "electron_volt" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 17, + "m_parent_sub_section": "quantities", + "name": "link_raw_data", + "description": "A link to where the data file for the EQE measurement is stored\n- This is a beta feature. The plan is to create a file repository where the raw files for IV data can be stored and disseminated. With the link and associated protocols, it should be possible to programmatically access and analyse the raw IV-data.", "type": { "type_kind": "python", "type_data": "str" }, "shape": [] + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 15, + "m_parent_sub_section": "section_definitions", + "name": "Stability", + "description": "A section decsirbing the stability measurements performed in the device.", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "BoolEditQuantity" + } + ] + }, + "name": "measured", + "description": "TRUE if some kind of stability measurement has been done.\n- There is no sharp boundary between a stability measurement and a measurement of stabilised efficiency. Generally, a measurement under a few minutes is considered as a measurement of stabilised efficiency, whereas a stability measurement is sufficiently long for degradation to be seen (unless the device is really good)", + "type": { + "type_kind": "python", + "type_data": "bool" + }, + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 9, + "m_parent_index": 1, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "Indoor light", + "IEC 61646", + "ISOS-L-1", + "Bending test", + "Other", + "ISOS-LC-1", + "ISOS-T-1", + "ISOS-D-1I", + "ISOS-V-2", + "ISOS-L-2I", + "ISOS-D-1", + "IEC 61215", + "ISOS-L-C1I", + "ISOS\u2010L\u20101", + "ISOS-L-3", + "ISOS-L-1I", + "ISOS-D-2", + "ISOS-V-1", + "ISOS-L-2", + "ISOS\u2010D\u20103", + "ISOS-D-2I", + "ISOS-D-3", + "ISOS-V-1I", + "ISOS-O-1", + "UV-stability", + "ISOS-T-3" + ] + } } ] }, - "name": "test_relative_humidity", - "description": "The relive humidity in which the IV measurement is conducted\n- If there are uncertainties, only state the best estimate, e.g write 35 and not 20-50.\n- If the relative humidity is not known, stat that as \u2018nan\u2019", + "name": "protocol", + "description": "The stability protocol used for the stability measurement.\n- For a more detailed discussion on protocols and standard nomenclature for stability measurements, please see the following paper:\no Consensus statement for stability assessment and reporting for perovskite photovoltaics based on ISOS procedures byM. V. Khenkin et al. Nat. Energ. 2020. DOI10.1038/s41560-019-0529-5\nExample:\nISOS-D-1\nISOS-D-1I\nISOS-L-2\nISOS-T-3\nIEC 61215", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 10, + "m_parent_index": 2, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -52044,18 +55926,17 @@ window.nomadArtifacts = { } ] }, - "name": "test_temperature", - "description": "The temperature of the device during the IV-measurement\n- If the temperature is not controlled and not is known, assume a standard room temperature of 25\u00b0C.\n- If there are uncertainties, only state the best estimate, e.g write 35 and not 20-50.", + "name": "average_over_n_number_of_cells", + "description": "The number of cells the reported stability data is based on.\n- The preferred way to enter data is to give every individual cell its own entry in the data template/data base. If that is done, the data is an average over 1 cell.\n- If the reported stability data is not the data from one individual cell, but an average over N cells. Give the number of cells.\n- If the reported value is an average, but it is unknown over how many cells the value has been averaged (and no good estimate is available), state the number of cells as 2, which is the smallest number of cells that qualifies for an averaging procedure.", "type": { "type_kind": "numpy", - "type_data": "float64" + "type_data": "int64" }, - "shape": [], - "unit": "degree_Celsius" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 11, + "m_parent_index": 3, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -52064,21 +55945,34 @@ window.nomadArtifacts = { "props": { "suggestions": [ "", - "Unknown", - "White LED", + "Indoor light", "Solar Simulator", - "Fluorescent lamp", + "UV lamp", + "Natural sunlight", + "LED", + "White Led", + "Synchrotron", + "Light", + "Mercury", + "Sulfur plasma", + "Halogen", + "Tungsten; Gamma rays", + "White LED", + "Dark", "Solar simulator", "solar simulator", - "Laser", - "Xenon" + "Sun", + "Tungsten", + "Xenon", + "Fluorescent lamp", + "Metal halide" ] } } ] }, "name": "light_source_type", - "description": "The type of light source used during the IV-measurement\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\n- The category Solar simulator should only be used when you do not really know which type of light source you have in your solar simulator.\nExample:\nLaser\nMetal halide\nOutdoor\nSolar simulator\nSulfur plasma\nWhite LED\nXenon plasma", + "description": "The type of light source used during the stability measurement\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample:\nLaser\nMetal halide\nOutdoor\nSolar simulator\nSulfur plasma\nWhite LED\nXenon plasma", "type": { "type_kind": "python", "type_data": "str" @@ -52087,7 +55981,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 12, + "m_parent_index": 4, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -52095,100 +55989,7 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "", - "EC-lab T-5A", - "ABET 11000", - "Wavelabs", - "ABET Technologies 10500", - "Newport model 94023A-U", - "McScience K3000", - "BOS-X-1000G", - "Solar light 16S-300", - "Enlitech", - "Newport, model 94063A", - "Wacom Denso model WXS-155S-10", - "Sciencetech Inc. SS-150", - "WAVELABS SINUS-70 LED", - "Oriel Sol2ATM", - "Newport model 91195A", - "Newport ORIEL LCS100", - "Oriel 91160", - "Newport Verasol", - "Solar IV-150A, Zolix", - "WAVELABS SINUS-220", - "Newport 91195A", - "San-ei Electric XES-301S", - "Newport model 94043A", - "Cree XML T6", - "Bunkoukeiki CEP-2000SRR", - "Peccell Technologies PEC-L01", - "XES-70S1", - "Sciencetech", - "Oriel 91160A", - "Oriel VeraSol-2", - "CEP-2000SRR, Bunkou-Keiki Inc", - "Zolix SS150A", - "SANEI", - "PET Photo Emission Tech Inc. Model SS", - "Enlitech SS-F7-3A", - "Newport 91160", - "ABET Technology Sun 2000", - "Oriel 9119", - "Peccell PEC-L01", - "Bunkoukeiki BSS-150T", - "Enlitech SS-F5", - "Global (G)", - "Wacom WXs-156s-l2", - "Photo Emission Tech Inc SS150", - "Newport Oriel LCS-100", - "Oriel 92251A", - "Newport 94123A", - "Oriel 94023 A", - "Newport model 94023A", - "Newport Oriel 92192", - "Newport model 94022", - "Bunkoukeiki KHP-1", - "YAMASHITA DENSO model YSS-150A", - "Oriel 300", - "Newport AAA", - "KHP-1, Bunko-Keiki, Japan", - "Spectra-Nova", - "Sol3A, Oriel Instruments", - "Abet Technologies Sun 3000", - "IV5, PV Measurements, Inc., USA", - "Newport Oriel PVIV-201 V", - "Photo Emission Tech.", - "Newport model 91192", - "XES-40S1, SAN-E1", - "San-ei Electric", - "Oriel 92251A-1000", - "Newport Oriel 94043A", - "So13A", - "Newport Oriel Sol3A", - "ABET Sun 3000", - "KHS Steuernagel", - "Zolix Sirius-SS", - "Oriel 81172", - "PV Measurements Inc.", - "Oriel", - "XEF-300", - "Oriel Sol3A", - "Peceell PEC-L01", - "Ushio Optical ModuleX", - "Newport Oriel 96000", - "Oriel 94023A", - "McScience K401", - "Newport Oriel 3A", - "94011A-ES Sol", - "Bunkoukeiki CEP-25ML", - "Newport 6279 NS", - "Sharif Solar 10\u20132", - "SAN-EI (XES-50S1)", - "Enlitech SS-F5-3A", - "ScienceTech model SF-150", - "Newport Oriel", - "Newport Oriel Sol2A", - "Batsol PEC-L01" + "" ] } } @@ -52204,20 +56005,15 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 13, + "m_parent_index": 5, "m_parent_sub_section": "quantities", "m_annotations": { - "eln": [ - { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "", - "ABB", - "A", - "AAA", - "ABA", - "AAB" + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "" ] } } @@ -52233,7 +56029,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 14, + "m_parent_index": 6, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -52243,7 +56039,7 @@ window.nomadArtifacts = { ] }, "name": "light_intensity", - "description": "The light intensity during the IV measurement\n- If there are uncertainties, only state the best estimate, e.g. write 100 and not 90-100.\n- Standard AM 1.5 illumination correspond to 100 mW/cm2\n- If you need to convert from illumination given in lux; at 550 nm, 1 mW/cm2 corresponds to 6830 lux. Be aware that the conversion change with the spectrum used. As a rule of thumb for general fluorescent/LED light sources, around 0.31mW corresponded to 1000 lux. If your light intensity is measured in lux, it probably means that your light spectra deviates quite a lot from AM 1.5, wherefore it is very important that you also specify the light spectra in the next column.", + "description": "The light intensity during the stability measurement\n- If there are uncertainties, only state the best estimate, e.g. write 100 and not 90-100.\n- Standard AM 1.5 illumination correspond to 100 mW/cm2\n- If you need to convert from illumination given in lux; at 550 nm, 1 mW/cm2 corresponds to 6830 lux", "type": { "type_kind": "numpy", "type_data": "float64" @@ -52253,7 +56049,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 15, + "m_parent_index": 7, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -52263,8 +56059,12 @@ window.nomadArtifacts = { "suggestions": [ "", "Indoor light", + "X-ray, 17.998 keV", + "UV", "AM 1.5", "Monochromatic", + "Outdoor ligth", + "Yellow light", "Am 1.5" ] } @@ -52272,7 +56072,7 @@ window.nomadArtifacts = { ] }, "name": "light_spectra", - "description": "The light spectrum used (or simulated as best as possible) during the IV measurement\nExample\nAM 1.0\nAM 1.5\nIndoor light\nMonochromatic\nOutdoor\nUV", + "description": "The light spectrum used (or simulated as best as possible) during the stability measurement\n- For an unspecified light spectra (that not is dark), state this as \u2018Light\u2019\nExample\nAM 1.0\nAM 1.5\nIndoor light\nMonochromatic\nOutdoor\nUV", "type": { "type_kind": "python", "type_data": "str" @@ -52281,7 +56081,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 16, + "m_parent_index": 8, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -52290,7 +56090,12 @@ window.nomadArtifacts = { "props": { "suggestions": [ "nan; nan", - "250; 1200" + "325; 325", + "300; 800", + "340.0; 340.0", + "365.0; 365.0", + "254.0; 254.0", + "267.0; 267.0" ] } } @@ -52306,7 +56111,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 17, + "m_parent_index": 9, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -52315,7 +56120,6 @@ window.nomadArtifacts = { "props": { "suggestions": [ "", - "Superstrate", "Substrate" ] } @@ -52332,106 +56136,156 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 18, + "m_parent_index": 10, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "BoolEditQuantity" + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "constant", + "Uncontrolled", + "Cycled", + "Day-Night cycle", + "Constant" + ] + } } ] }, - "name": "light_masked_cell", - "description": "TRUE if the cell is illuminated trough a mask with an opening that is smaller than the total cell area.", + "name": "light_load_condition", + "description": "The load situation of the illumination during the stability measurement.\n- If the illumination is constant during the entire stability measurement, or if the cell is stored in the dark, state this as \u2018Constant\u2019.\n- If the situation periodically is interrupted by IV-measurements, continue to consider the load condition as constant\n- If there is a cycling between dark and light, state this as \u2018Cycled\u2019\n- If the illumination varies in an uncontrolled way, state this as \u2018Uncontrolled\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample:\nConstant\nCycled\nDay-Night cycle\nUncontrolled", "type": { "type_kind": "python", - "type_data": "bool" + "type_data": "str" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 19, + "m_parent_index": 11, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Unknown", + "0.16; 12.0", + "12.0; 12.0", + "10.0; 14.0", + "0.6" + ] + } } ] }, - "name": "light_mask_area", - "description": "The area of the opening in the mask trough with the cell is illuminated (if there is a mask)\n- If there are uncertainties, only state the best estimate, e.g. write 100 and not 90-100.\n- If there is no light mask, leave this field empty.", + "name": "light_cycling_times", + "description": "If the illumination load is cycled during the stability measurement, state the time in low light followed by the time in high light for the cycling period.\n- If not applicable, leave blank\nExample\n12; 12\n6; 10\nnan; nan", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [], - "unit": "centimeter ** 2" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 20, + "m_parent_index": 12, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "BoolEditQuantity" } ] }, - "name": "scan_speed", - "description": "The speed of the potential sweep during the IV measurement", + "name": "light_UV_filter", + "description": "TRUE if a UV-filter of any kind was placed between the illumination source and the device during the stability measurement.", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "bool" }, - "shape": [], - "unit": "millivolt / second" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 21, + "m_parent_index": 13, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "Short circuit", + "MPPT", + "Open circuit", + "Constant potential", + "Passive resistance" + ] + } } ] }, - "name": "scan_delay_time", - "description": "The time at each potential value before integration in the potential sweep.\n- For some potentiostats you need to specify this value, whereas for others it is set automatically and is not directly accessible.\n- If there are uncertainties, only state the best estimate, e.g. write 100 and not 90-100.\n- If unknown, leave this field empty.", + "name": "potential_bias_load_condition", + "description": "The Potentiostatic load condition during the stability measurement\n- When the cell is not connected to anything, state this as \u2018Open circuit\u2019\nExamples:\nConstant current\nConstant potential\nMPPT\nOpen circuit\nPassive resistance\nShort circuit", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [], - "unit": "millisecond" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 22, + "m_parent_index": 14, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "0.9; 0.9", + "0.85; 0.85", + "nan; nan", + "0.8465; 0.8465", + "0.47; 0.47", + "0.7499; 0.7499", + "0.937; 0.937", + "1.2; 1.2", + "0.65; 0.65", + "0.95; 0.95", + "0.84; 0.84", + "0.71; 0.71", + "1.0; 1.0", + "0.86; 0.86", + "1.413; 1.413", + "0.76; 0.76", + "0.7; 0.7", + "0.908; 0.908", + "0.72; 0.72", + "0.8; 0.8", + "0.89; 0.89" + ] + } } ] }, - "name": "scan_integration_time", - "description": "The integration time at each potential value in the potential sweep.\n- For some potentiostats you need to specify this value, whereas for others it is set automatically and is not directly accessible.\n- If there are uncertainties, only state the best estimate, e.g. write 100 and not 90-100.\n- If unknown, leave this field empty.", + "name": "potential_bias_range", + "description": "The potential range during the stability measurement\n- Separate the lower and upper bound by a semicolon.\n- For constant values, state only that value.\n- For open circuit conditions, state this as \u2018nan\u2019\n- If there are uncertainties, only state the best estimate, e.g. write 1 and not 0.90-1.1\n- State unknown values as \u2018nan\u2019\nExample:\n0.9; 1.02\n1.5\nnan", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [], - "unit": "millisecond" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 23, + "m_parent_index": 15, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -52440,18 +56294,18 @@ window.nomadArtifacts = { } ] }, - "name": "scan_voltage_step", - "description": "The distance between the measurement point in the potential sweep\n- If unknown, leave this field empty.", + "name": "potential_bias_passive_resistance", + "description": "The passive resistance in the measurement circuit if a resistor was used\n- Give the value in ohm\n- If there are uncertainties, only state the best estimate, e.g. write 1.03 and not 1.01-1.05\n- If unknown or not applicable, leave this field empty.", "type": { "type_kind": "numpy", "type_data": "float64" }, "shape": [], - "unit": "millivolt" + "unit": "ohm" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 24, + "m_parent_index": 16, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -52460,27 +56314,18 @@ window.nomadArtifacts = { "props": { "suggestions": [ "", - "Light soaking", - "Potential biasing", - "Heating", - "Unknown", - "MPPT", - "Voc stabilization", - "Bending", - "Light Soaking", - "Light Soaking; Potential biasing", - "Electroluminescence measurement", - "Light soaking; Potential biasing", - "Heating; Light soaking", - "Light soaking; Potential cykling", - "Cooling" + "constant", + "Uncontrolled", + "Cycled", + "uncontrolled", + "Constant" ] } } ] }, - "name": "preconditioning_protocol", - "description": "Any preconditioning protocol done immediately before the IV measurement\n- If no preconditioning was done, state this as \u2018none\u2019\n- If more than one preconditioning protocol was conducted in parallel, separate them with semicolons\n- If more than one preconditioning protocol was conducted in sequence, separate them by a double forward angel bracket (\u2018 >> \u2018)\nExample\nCooling\nHeeting\nLight soaking\nLight soaking; Potential biasing\nPotential biasing", + "name": "temperature_load_condition", + "description": "The load situation of the temperature during the stability measurement.\n- If the temperature is constant during the entire stability measurement, state this as \u2018Constant\u2019.\n- If there is a cycling between colder and hotter conditions, state this as \u2018Cycled\u2019\n- If the temperature varies in an uncontrolled way, state this as \u2018Uncontrolled\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample:\nConstant\nUncontrolled\nCycled", "type": { "type_kind": "python", "type_data": "str" @@ -52489,87 +56334,134 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 25, - "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "NumberEditQuantity" - } - ] - }, - "name": "preconditioning_time", - "description": "The duration of the preconditioning protocol\n- If there are uncertainties, only state the best estimate, e.g. write 100 and not 90-100.\n- If unknown or not applicable, leave this field empty.", - "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "second" - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 26, - "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "NumberEditQuantity" - } - ] - }, - "name": "preconditioning_potential", - "description": "The potential at any potential biasing step\n- If there are uncertainties, only state the best estimate, e.g. write 100 and not 90-100.\n- If unknown or not applicable, leave this field empty.", - "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "volt" - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 27, + "m_parent_index": 17, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "22.0; 22.0", + "70; 70", + "-10.0; -10.0", + "80; 80", + "55.0; 55.0", + "50.0; 50.0", + "10; 25", + "nan; nan", + "75.0; 75.0", + "20; 20", + "120.0; 120.0", + "-40.0; 85.0", + "85.0; 85.0", + "0.0; 0.0", + "26.0; 26.0", + "27.5; 27.5", + "28.0; 28.0", + "25; 85", + "25; 25", + "65; 65", + "22.3; 22.7", + "110.0; 110.0", + "25; 80", + "21.0; 21.0", + "14.0; 14.0", + "20; 25", + "23; 23", + "-22.0; 100", + "100.0; 100.0", + "95.0; 95.0", + "23.5; 23.5", + "15; 25", + "30; 30", + "25; 35", + "18; 22", + "42.0; 42.0", + "17.0; 17.0", + "22.5; 22.5", + "28; 32", + "25; 30", + "20; 30", + "60; 60", + "2; 70", + "75; 75", + "80.0; 80.0", + "45.0; 45.0", + "160.0; 160.0", + "90.0; 90.0", + "53.0; 53.0", + "30.0; 30.0", + "20; 40", + "45; 45", + "150.0; 150.0", + "40.0; 40.0", + "-20.0; -20.0", + "20.0; 20.0", + "25.0; 25.0", + "70.0; 70.0", + "41.0; 41.0", + "50; 50", + "40; 40", + "65.0; 65.0", + "35.0; 35.0", + "25.5; 25.5", + "24.0; 24.0", + "15.0; 15.0", + "82.0; 82.0", + "23.0; 23.0", + "28; 28", + "60.0; 60.0", + "85; 85", + "100; 100", + "23.1; 23.1", + "nan; 120", + "21.5; 21.5", + "27.0; 27.0" + ] + } } ] }, - "name": "preconditioning_light_intensity", - "description": "The light intensity at any light soaking step\n- If there are uncertainties, only state the best estimate, e.g. write 100 and not 90-100.\n- If unknown or not applicable, leave this field empty.", + "name": "temperature_range", + "description": "The temperature range during the stability measurement\n- Separate the lower and upper bound by a semicolon.\n- For constant values, state only that value.\n- If there are uncertainties, only state the best estimate, e.g. write 1 and not 0.90-1.1\n- State unknown values as \u2018nan\u2019\nExample:\n30\n25; 85\nnan", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [], - "unit": "milliwatt / centimeter ** 2" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 28, + "m_parent_index": 18, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Unknown", + "15.0; 15.0", + "100.0; 100.0", + "25.0; 25.0", + "60.0; 120.0" + ] + } } ] }, - "name": "reverse_scan_Voc", - "description": "The open circuit potential, Voc, at the reverse voltage sweep (when U scanned from Voc to 0)\n- Give Voc in volts [V]\n- If there are uncertainties, only state the best estimate, e.g. write 1.03 and not 1.01-1.05\n- If unknown or not applicable, leave this field empty.", + "name": "temperature_cycling_times", + "description": "If the temperature is cycled during the stability measurement, state the time in low temperature followed by the time in high temperature for the cycling period.\n- If not applicable, leave blank\n- Separate the lower and upper bound by a semicolon.\n- If there are uncertainties, only state the best estimate, e.g. write 1 and not 0.90-1.1\n- State unknown values as \u2018nan\u2019\nExample:\n2; 2\n0.5; 10", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [], - "unit": "volt" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 29, + "m_parent_index": 19, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -52578,37 +56470,54 @@ window.nomadArtifacts = { } ] }, - "name": "reverse_scan_Jsc", - "description": "The short circuit current, Jsc, at the reverse voltage sweep (when U scanned from Voc to 0)\n- Give Jsc in mA/cm2\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", + "name": "temperature_ramp_speed", + "description": "The temperature ramp speed\n- If there are uncertainties, only state the best estimate, e.g. write 1.03 and not 1.01-1.05\n- If unknown or not applicable, leave this field empty.", "type": { "type_kind": "numpy", "type_data": "float64" }, "shape": [], - "unit": "milliampere / centimeter ** 2" + "unit": "degree_Celsius / minute" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 30, + "m_parent_index": 20, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Water", + "Dry air", + "Unknown", + "Air", + "Air. Desiccator", + "Ambient", + "N2", + "Vacuum", + "O2", + "N2; O2", + "Glovebox", + "Ar", + "Near-space" + ] + } } ] }, - "name": "reverse_scan_FF", - "description": "The fill factor, FF, at the reverse voltage sweep (when U scanned from Voc to 0)\n- Give FF as the ratio between Vmp*Jmp/(Voc*Jsc) which gives it a value between 0 and 1\n- If there are uncertainties, only state the best estimate, e.g. write 0.73 and not 0.7-0.76\n- If unknown or not applicable, leave this field empty.", + "name": "atmosphere", + "description": "The atmosphere in which the stability measurement is conducted\n- If the atmosphere is a mixture of different gases, e.g. A and B, list the gases in alphabetic order and separate them with semicolons, as in (A; B)\n- \u201cDry air\u201d represent air with low relative humidity but where the relative humidity is not known\n- \u201cAmbient\u201d represent air where the relative humidity is not known. For ambient conditions where the relative humidity is known, state this as \u201cAir\u201d\n- \u201cVacuum\u201d (of unspecified pressure) is for this purpose considered as an atmospheric gas\nExample\nAir\nN2\nVacuum", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 31, + "m_parent_index": 21, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -52617,8 +56526,8 @@ window.nomadArtifacts = { } ] }, - "name": "reverse_scan_PCE", - "description": "The efficiency, PCE, at the reverse voltage sweep (when U scanned from Voc to 0)\n- Give the efficiency in %\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", + "name": "atmosphere_oxygen_concentration", + "description": "The oxygen concentration in the atmosphere\n- If unknown, leave this field empty.", "type": { "type_kind": "numpy", "type_data": "float64" @@ -52627,87 +56536,114 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 32, - "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "NumberEditQuantity" - } - ] - }, - "name": "reverse_scan_Vmp", - "description": "The potential at the maximum power point, Vmp, at the reverse voltage sweep (when U scanned from Voc to 0)\n- Give Vmp in volts [V]\n- If there are uncertainties, only state the best estimate, e.g. write 1.03 and not 1.01-1.05\n- If unknown or not applicable, leave this field empty.", - "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "volt" - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 33, - "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "NumberEditQuantity" - } - ] - }, - "name": "reverse_scan_Jmp", - "description": "The current density at the maximum power point, Jmp, at the reverse voltage sweep (when U scanned from Voc to 0)\n- Give Jmp in mA/cm2\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", - "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "milliampere / centimeter ** 2" - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 34, + "m_parent_index": 22, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "constant", + "Controlled", + "Ambient", + "ambient", + "Constant" + ] + } } ] }, - "name": "reverse_scan_series_resistance", - "description": "The series resistance as extracted from the reverse voltage sweep (when U scanned from Voc to 0)", + "name": "relative_humidity_load_conditions", + "description": "The load situation of the relative humidity during the stability measurement.\n- If the relative humidity is constant during the entire stability measurement, state this as \u2018Constant\u2019.\n- If there is a cycling between dryer and damper conditions, state this as \u2018Cycled\u2019\n- If the relative humidity varies in an uncontrolled way, i.e. the cell is operated under ambient conditions, state this as \u2018Ambient\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nAmbient\nControlled\nCycled", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [], - "unit": "centimeter ** 2 * ohm" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 35, + "m_parent_index": 23, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "40; 50", + "61; 75", + "30; 80", + "80; 80", + "60; 70", + "25; 45", + "nan; nan", + "25; 50", + "20; 20", + "50; 70", + "30; 50", + "60; 80", + "35; 35", + "0; 0", + "55; 70", + "75; 85", + "65; 65", + "50; 60", + "50.60; 50.60", + "1; 50", + "25; 25", + "20; 70", + "25; 35", + "30; 30", + "10; 15", + "45; 55", + "15; 25", + "15; 15", + "15; 20", + "42.2; 54.4", + "35; 40", + "30; 70", + "25; 40", + "25; 30", + "20; 30", + "60; 60", + "20; 40", + "30; 35", + "45; 45", + "40; 80", + "5; 5", + "40; 60", + "90; 95", + "50; 50", + "40; 40", + "45; 60", + "12; 18", + "35; 45", + "10; 20", + "45; 50", + "40; 45", + "85; 85", + "10; 30", + "30; 40", + "100; 100" + ] + } } ] }, - "name": "reverse_scan_shunt_resistance", - "description": "The shunt resistance as extracted from the reverse voltage sweep (when U scanned from Voc to 0)", + "name": "relative_humidity_range", + "description": "The relative humidity range during the stability measurement\n- Separate the lower and upper bound by a semicolon.\n- For constant values, state only that value.\n- If there are uncertainties, only state the best estimate, e.g. write 1 and not 0.90-1.1\n- State unknown values as \u2018nan\u2019\nExample:\n45\n35; 65\nnan", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [], - "unit": "centimeter ** 2 * ohm" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 36, + "m_parent_index": 24, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -52716,18 +56652,17 @@ window.nomadArtifacts = { } ] }, - "name": "forward_scan_Voc", - "description": "The open circuit potential, Voc, at the forward voltage sweep (when U scanned from 0 to Voc)\n- Give Voc in volts [V]\n- If there are uncertainties, only state the best estimate, e.g. write 1.03 and not 1.01-1.05\n- If unknown or not applicable, leave this field empty.", + "name": "relative_humidity_average_value", + "description": "The average relative humidity during the stability measurement.\n- If there are uncertainties, only state the best estimate, e.g. write 1 and not 0.90-1.1\n- If unknown, leave this field empty.", "type": { "type_kind": "numpy", "type_data": "float64" }, - "shape": [], - "unit": "volt" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 37, + "m_parent_index": 25, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -52736,56 +56671,105 @@ window.nomadArtifacts = { } ] }, - "name": "forward_scan_Jsc", - "description": "The short circuit current, Jsc, at the forward voltage sweep (when U scanned from 0 to Voc)\n- Give Jsc in mA/cm2\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", + "name": "time_total_exposure", + "description": "The total duration of the stability measurement.\n- If there are uncertainties, only state the best estimate, e.g. write 1000 and not 950-1050", "type": { "type_kind": "numpy", "type_data": "float64" }, "shape": [], - "unit": "milliampere / centimeter ** 2" + "unit": "hour" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 38, + "m_parent_index": 26, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "BoolEditQuantity" } ] }, - "name": "forward_scan_FF", - "description": "The fill factor, FF, at the forward voltage sweep (when U scanned from 0 to Voc)\n- Give FF as the ratio between Vmp*Jmp/(Voc*Jsc) which gives it a value between 0 and 1\n- If there are uncertainties, only state the best estimate, e.g. write 0.73 and not 0.7-0.76\n- If unknown or not applicable, leave this field empty.", + "name": "periodic_JV_measurements", + "description": "TRUE if the stability measurement periodically is interrupted for JV-measurements. A typical example is a cell that is stored in the dark and once in a wile is take out from storage for an IV-measurement.", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "bool" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 39, + "m_parent_index": 27, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "40.0", + "85.0", + "90.0", + "50.0", + "24.0", + "1440.0", + "10.0", + "3.0", + "3.2", + "220.0", + "60.0", + "5.0", + "125.0", + "9.0", + "120.0", + "Unknown", + "72.0", + "7.0", + "180.0", + "75.0", + "100.0", + "400.0", + "240.0", + "80.0", + "6.0", + "0.067", + "480.0", + "30.0", + "0.3", + "0.167", + "2.0", + "0.016", + "0.5", + "168.0", + "48.0", + "25.0", + "0.1", + "52.0", + "20.0", + "360.0", + "160.0", + "34.0", + "1680.0", + "15.0", + "200.0" + ] + } } ] }, - "name": "forward_scan_PCE", - "description": "The efficiency, PCE, at the forward voltage sweep (when U scanned from 0 to Voc)\n- Give the efficiency in %\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", + "name": "periodic_JV_measurements_time_between_jv", + "description": "The average time between JV-measurement during the stability measurement.", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 40, + "m_parent_index": 28, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -52794,38 +56778,36 @@ window.nomadArtifacts = { } ] }, - "name": "forward_scan_Vmp", - "description": "The potential at the maximum power point, Vmp, at the forward voltage sweep (when U scanned from 0 to Voc)\n- Give Vmp in volts [V]\n- If there are uncertainties, only state the best estimate, e.g. write 1.03 and not 1.01-1.05\n- If unknown or not applicable, leave this field empty.", + "name": "PCE_initial_value", + "description": "The efficiency, PCE, of the cell before the stability measurement routine starts\n- Give the efficiency in %\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", "type": { "type_kind": "numpy", "type_data": "float64" }, - "shape": [], - "unit": "volt" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 41, + "m_parent_index": 29, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "BoolEditQuantity" } ] }, - "name": "forward_scan_Jmp", - "description": "The current density at the maximum power point, Jmp, at the forward voltage sweep (when U scanned from 0 to Voc)\n- Give Jmp in mA/cm2\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", + "name": "PCE_burn_in_observed", + "description": "TRUE if the performance has a relatively fast initial decay after which the decay rate stabilises at a lower level.\n- There are no sharp boundary between an initial burn in phase an a catastrophic failure, but if the performance of the cell quickly degrade by more than half, it is stretching it a bit to label this as an initial burn in phase.", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "bool" }, - "shape": [], - "unit": "milliampere / centimeter ** 2" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 42, + "m_parent_index": 30, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -52834,18 +56816,17 @@ window.nomadArtifacts = { } ] }, - "name": "forward_scan_series_resistance", - "description": "The series resistance as extracted from the forward voltage sweep (when U scanned from 0 to Voc)", + "name": "PCE_end_of_experiment", + "description": "The efficiency, PCE, of the cell at the end of the stability routine\n- Give the efficiency in %\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", "type": { "type_kind": "numpy", "type_data": "float64" }, - "shape": [], - "unit": "centimeter ** 2 * ohm" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 43, + "m_parent_index": 31, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -52854,30 +56835,18 @@ window.nomadArtifacts = { } ] }, - "name": "forward_scan_shunt_resistance", - "description": "The shunt resistance as extracted from the forward voltage sweep (when U scanned from 0 to Voc)", + "name": "PCE_T95", + "description": "The time after which the cell performance has degraded by 5 % with respect to the initial performance.\n- If there are uncertainties, only state the best estimate, e.g. write 1000 and not 950-1050\n- If unknown or not applicable, leave this field empty.", "type": { "type_kind": "numpy", "type_data": "float64" }, "shape": [], - "unit": "centimeter ** 2 * ohm" - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 44, - "m_parent_sub_section": "quantities", - "name": "link_raw_data", - "description": "A link to where the data file for the IV-data is stored\n- This is a beta feature. The plan is to create a file repository where the raw files for IV data can be stored and disseminated. With the link and associated protocols, it should be possible to programmatically access and analyse the raw IV-data.", - "type": { - "type_kind": "python", - "type_data": "str" - }, - "shape": [] + "unit": "hour" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 45, + "m_parent_index": 32, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -52886,18 +56855,18 @@ window.nomadArtifacts = { } ] }, - "name": "default_Voc", - "description": "Open circuit voltage.", + "name": "PCE_Ts95", + "description": "The time after which the cell performance has degraded by 5 % with respect to the performance after any initial burn in phase.\n- If there are uncertainties, only state the best estimate, e.g. write 1000 and not 950-1050\n- If unknown or not applicable, leave this field empty.", "type": { "type_kind": "numpy", "type_data": "float64" }, "shape": [], - "unit": "volt" + "unit": "hour" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 46, + "m_parent_index": 33, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -52906,18 +56875,18 @@ window.nomadArtifacts = { } ] }, - "name": "default_Jsc", - "description": "Short circuit current density.", + "name": "PCE_T80", + "description": "The time after which the cell performance has degraded by 20 % with respect to the initial performance.\n- If there are uncertainties, only state the best estimate, e.g. write 1000 and not 950-1050\n- If unknown or not applicable, leave this field empty.", "type": { "type_kind": "numpy", "type_data": "float64" }, "shape": [], - "unit": "milliampere / centimeter ** 2" + "unit": "hour" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 47, + "m_parent_index": 34, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -52926,17 +56895,18 @@ window.nomadArtifacts = { } ] }, - "name": "default_FF", - "description": "Fill factor.", + "name": "PCE_Ts80", + "description": "The time after which the cell performance has degraded by 20 % with respect to the performance after any initial burn in phase.\n- If there are uncertainties, only state the best estimate, e.g. write 1000 and not 950-1050\n- If unknown or not applicable, leave this field empty.", "type": { "type_kind": "numpy", "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "hour" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 48, + "m_parent_index": 35, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -52945,122 +56915,38 @@ window.nomadArtifacts = { } ] }, - "name": "default_PCE", - "description": "Power conversion efficiency.", + "name": "PCE_Te80", + "description": "An estimated T80 for cells that were not measured sufficiently long for them to degrade by 20 %. with respect to the initial performance.\n- This value will by definition have a significant uncertainty to it, as it is not measured but extrapolated under the assumption linearity but without a detailed and stabilised extrapolation protocol. This estimate is, however, not without value as it enables a rough comparison between all cells for with the stability has been measured.\n- If there is an experimental T80, leave this field empty.", "type": { "type_kind": "numpy", "type_data": "float64" }, - "shape": [] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 49, - "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Reversed", - "", - "Forward" - ] - } - } - ] - }, - "name": "default_Voc_scan_direction", - "description": "nan", - "type": { - "type_kind": "python", - "type_data": "str" - }, - "shape": [] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 50, - "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Reversed", - "", - "Forward" - ] - } - } - ] - }, - "name": "default_Jsc_scan_direction", - "description": "nan", - "type": { - "type_kind": "python", - "type_data": "str" - }, - "shape": [] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 51, - "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Reversed", - "", - "Forward" - ] - } - } - ] - }, - "name": "default_FF_scan_direction", - "description": "nan", - "type": { - "type_kind": "python", - "type_data": "str" - }, - "shape": [] + "shape": [], + "unit": "hour" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 52, + "m_parent_index": 36, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Reversed", - "", - "Stabilised", - "Forward" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "default_PCE_scan_direction", - "description": "nan", + "name": "PCE_Tse80", + "description": "An estimated T80s for cells that was not measured sufficiently long for them to degrade by 20 %. with respect to the performance after any initial burn in phase.\n- This value will by definition have a significant uncertainty to it, as it is not measured but extrapolated under the assumption linearity but without a detailed and stabilised extrapolation protocol. This estimate is, however, not without value as it enables a ruff comparison between all cells for with the stability has been measured.\n- If there is an experimental T80s, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "hour" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 53, + "m_parent_index": 37, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -53069,154 +56955,56 @@ window.nomadArtifacts = { } ] }, - "name": "hysteresis_index", - "description": "nan", + "name": "PCE_after_1000_h", + "description": "The efficiency, PCE, of the cell after 1000 hours\n- Give the efficiency in %\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", "type": { "type_kind": "numpy", "type_data": "float64" }, "shape": [] - } - ], - "sub_sections": [ - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 0, - "m_parent_sub_section": "sub_sections", - "name": "jv_curve", - "sub_section": "/packages/6/section_definitions/11", - "repeats": true - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 13, - "m_parent_sub_section": "section_definitions", - "name": "Stabilised", - "description": "A section describing if a stabilised efficiency has been measured in the solar cell.", - "quantities": [ - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, - "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "BoolEditQuantity" - } - ] - }, - "name": "performance_measured", - "description": "TRUE if a stabilised cell efficiency has been measured\n- A stabilised efficiency requires a continuous measurement. Measuring an IV-curve, storing the cell in the dark for a while, and then measure a new IV-curve does thus not count as a stabilised efficiency measurement.", - "type": { - "type_kind": "python", - "type_data": "bool" - }, - "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, + "m_parent_index": 38, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "", - "MPPT", - "Constant potential", - "Constant Potential", - "Constant current" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "performance_procedure", - "description": "The Potentiostatic load condition during the stabilised performance measurement\nExamples:\nConstant current\nConstant potential\nMPPT\nPassive resistance\nShort circuit", + "name": "lifetime_energy_yield", + "description": "The lifetime energy yield\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "hour * kilowatt / meter ** 2" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, + "m_parent_index": 39, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "", - "0.8", - "0.82", - "0.885", - "0.99", - "0.64", - "0.91", - "0.757", - "0.97", - "0.76", - "0.92", - "0.7959999999999999", - "0.895", - "0.96", - "1.19", - "0.85", - "0.94", - "0.61", - "0.83", - "1.31", - "0.87", - "0.9", - "0.86", - "0.78", - "0.93", - "0.74", - "0.79", - "0.867", - "0.98", - "0.73", - "1.3", - "0.8140000000000001", - "0.8740000000000001", - "0.8590000000000001", - "1.23", - "0.81", - "0.818", - "0.71", - "0.75", - "1.0", - "0.62", - "0.66", - "0.88", - "0.84", - "0.95", - "0.72", - "0.77", - "1.35" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "performance_procedure_metrics", - "description": "The metrics associated to the load condition in the previous filed\n- For measurement under constant current, state the current in mA/cm2\n- For measurement under constant potential. State the potential in V\n- For a measurement under constant resistive load, state the resistance in ohm", + "name": "flexible_cell_number_of_bending_cycles", + "description": "Number of bending cycles for a flexible cell in a mechanical stability test", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "int64" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, + "m_parent_index": 40, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -53225,18 +57013,18 @@ window.nomadArtifacts = { } ] }, - "name": "performance_measurement_time", - "description": "The duration of the stabilised performance measurement.", + "name": "flexible_cell_bending_radius", + "description": "The bending radius of the flexible cell during the mechanical stability test", "type": { "type_kind": "numpy", "type_data": "float64" }, "shape": [], - "unit": "minute" + "unit": "degree" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 4, + "m_parent_index": 41, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -53245,8 +57033,8 @@ window.nomadArtifacts = { } ] }, - "name": "performance_PCE", - "description": "The stabilised efficiency, PCE\n- Give the efficiency in %\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", + "name": "flexible_cell_PCE_initial_value", + "description": "The efficiency, PCE, of the cell before the mechanical stability measurement routine starts\n- Give the efficiency in %\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", "type": { "type_kind": "numpy", "type_data": "float64" @@ -53255,27 +57043,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, - "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "NumberEditQuantity" - } - ] - }, - "name": "performance_Vmp", - "description": "The stabilised Vmp\n- Give Vmp in volts [V]\n- If there are uncertainties, only state the best estimate, e.g. write 1.03 and not 1.01-1.05\n- If unknown or not applicable, leave this field empty.", - "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "volt" - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 6, + "m_parent_index": 42, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -53284,18 +57052,17 @@ window.nomadArtifacts = { } ] }, - "name": "performance_Jmp", - "description": "The stabilised Jmp\n- Give Jmp in mA/cm2\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", + "name": "flexible_cell_PCE_end_of_experiment", + "description": "The efficiency, PCE, of the cell after the mechanical stability measurement routine\n- Give the efficiency in %\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", "type": { "type_kind": "numpy", "type_data": "float64" }, - "shape": [], - "unit": "milliampere / centimeter ** 2" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 7, + "m_parent_index": 43, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -53304,61 +57071,28 @@ window.nomadArtifacts = { "props": { "suggestions": [ "", - "false", "www.testsite\u2026" ] } } ] }, - "name": "performance_link_raw_data", - "description": "A link to where the data file for the stability measurement is stored\n- This is a beta feature. The plan is to create a file repository where the raw files for IV data can be stored and disseminated. With the link and associated protocols, it should be possible to programmatically access and analyse the raw IV-data.", + "name": "link_raw_data_for_stability_trace", + "description": "A link to where the data file for the stability data is stored\n- This is a beta feature. The plan is to create a file repository where the raw files for stability data can be stored and disseminated. With the link and associated protocols, it should be possible to programmatically access and analyse the raw stability data.", "type": { "type_kind": "python", "type_data": "str" - }, - "shape": [] - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 14, - "m_parent_sub_section": "section_definitions", - "m_annotations": { - "eln": [ - { - "lane_width": "600px" - } - ], - "plot": [ - { - "label": "Raw EQE", - "x": "raw_wavelength_array", - "y": "raw_eqe_array", - "layout": { - "yaxis": { - "type": "lin" - } - } - }, - { - "label": "Interpolated/extrapolated EQE log scale", - "x": "wavelength_array", - "y": "eqe_array", - "layout": { - "yaxis": { - "type": "log" - } - }, - "config": { - "editable": "true" - } - } - ] - }, - "name": "EQE", - "description": "A section describing the External Quantum Efficiency **EQE** of the solar cell and additional parameteres derived from it. If used as an ELN, a file containing\nthe EQE spectrum in columns can be uploaded in the quantity `data_file` to process\nautomatic calculations of several parameteres like the `bandgap` or `Urbach energy`.", + }, + "shape": [] + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 16, + "m_parent_sub_section": "section_definitions", + "name": "Outdoor", + "description": "A section describing measurements performed in outdoor conditions", "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -53367,21 +57101,17 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "FileEditQuantity" - } - ], - "browser": [ - { - "adaptor": "RawFileAdaptor" + "component": "BoolEditQuantity" } ] }, - "name": "eqe_data_file", - "description": "Drop here your eqe file and click save for processing.", + "name": "tested", + "description": "TRUE if the performance of the cell has been tested outdoors.", "type": { "type_kind": "python", - "type_data": "str" - } + "type_data": "bool" + }, + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -53390,17 +57120,24 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "ISOS-O-1", + "IEC 61853-1" + ] + } } ] }, - "name": "header_lines", - "description": "Number of header lines in the file.", + "name": "protocol", + "description": "The protocol used for the outdoor testing.\n- For a more detailed discussion on protocols and standard nomenclature for stability measurements, please see the following paper:\no Consensus statement for stability assessment and reporting for perovskite photovoltaics based on ISOS procedures byM. V. Khenkin et al. Nat. Energ. 2020. DOI10.1038/s41560-019-0529-5\nExample:\nIEC 61853-1\nISOS-O-1\nISOS-O-2\nISOS-O-3", "type": { - "type_kind": "numpy", - "type_data": "int64" + "type_kind": "python", + "type_data": "str" }, - "default": 0 + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -53409,15 +57146,15 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "BoolEditQuantity" + "component": "NumberEditQuantity" } ] }, - "name": "measured", - "description": "TRUE if the external quantum efficiency has been measured", + "name": "average_over_n_number_of_cells", + "description": "The number of cells the reported outdoor data is based on.\nExample:\n- The preferred way to enter data is to give every individual cell its own entry in the data template/data base. If that is done, the data is an average over 1 cell.\n- If the reported data is not the data from one individual cell, but an average over N cells. Give the number of cells.\n- If the reported value is an average, but it is unknown over how many cells the value has been averaged (and no good estimate is available), state the number of cells as 2, which is the smallest number of cells that qualifies for an averaging procedure.", "type": { - "type_kind": "python", - "type_data": "bool" + "type_kind": "numpy", + "type_data": "int64" }, "shape": [] }, @@ -53428,18 +57165,32 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "Italy", + "Switzerland", + "Slovenia", + "China", + "Great Britain", + "Colombia", + "Spain", + "Israel", + "Space International", + "Saudi Arabia" + ] + } } ] }, - "name": "light_bias", - "description": "The light intensity of any bias light during the EQE measurement\n- If there are uncertainties, only state the best estimate, e.g. write 100 and not 90-100.\n- If unknown or not applicable, leave this field empty.", + "name": "location_country", + "description": "The country where the outdoor testing was occurring\n- For measurements conducted in space, state this as \u2019Space International\u2019\nExample:\nSweden\nSwitzerland\nSpace International", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [], - "unit": "milliwatt / centimeter ** 2" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -53448,18 +57199,24 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "Ljubljana", + "Hong Kong" + ] + } } ] }, - "name": "bandgap_eqe", - "description": "Bandgap derived form the eqe in eV.", + "name": "location_city", + "description": "The city where the outdoor testing was occurring", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [], - "unit": "electron_volt" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -53468,18 +57225,22 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "nan; nan" + ] + } } ] }, - "name": "integrated_Jsc", - "description": "The integrated current from the EQE measurement\n- Give Jsc in mA/cm2\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", + "name": "location_coordinates", + "description": "The coordinates fort the places where the outdoor testing was occurring.\n- Use decimal degrees (DD) as the format.\nExample:\n59.839116; 17.647979\n52.428150; 13.532134", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [], - "unit": "milliampere / centimeter ** 2" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -53488,18 +57249,26 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "Subtropical", + "Cold", + "Desert", + "Temperate" + ] + } } ] }, - "name": "integrated_J0rad", - "description": "The integrated J<sub>{0, Rad}</sub> from the EQE measurement\n- Give J<sub>{0, Rad}</sub> in mA/cm2\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", + "name": "location_climate_zone", + "description": "The climate zone for the places where the outdoor testing was occurring.\nExample:\nCold\nDesert\nSubtropical\nTeperate\nTropical", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [], - "unit": "milliampere / centimeter ** 2" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -53512,14 +57281,14 @@ window.nomadArtifacts = { } ] }, - "name": "voc_rad", - "description": "Radiative V<sub>oc</sub> derived from the eqe in V.", + "name": "installation_tilt", + "description": "The tilt of the installed solar cell.\n- A module lying flat on the ground have a tilt of 0\n- A module standing straight up has a tilt of 90", "type": { "type_kind": "numpy", "type_data": "float64" }, "shape": [], - "unit": "volt" + "unit": "degree" }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -53532,216 +57301,229 @@ window.nomadArtifacts = { } ] }, - "name": "urbach_energy", - "description": "Urbach energy fitted from the eqe in eV.", + "name": "installation_cardinal_direction", + "description": "The cardinal direction of the installed solar cell.\n- North is 0\n- East is 90\n- South is 180\n- West is 270", "type": { "type_kind": "numpy", "type_data": "float64" }, "shape": [], - "unit": "electron_volt" + "unit": "degree" }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 9, "m_parent_sub_section": "quantities", - "name": "n_values", + "m_annotations": { + "eln": [ + { + "component": "NumberEditQuantity" + } + ] + }, + "name": "installation_number_of_solar_tracking_axis", + "description": "The number of tracking axis in the installation.", "type": { - "type_kind": "python", - "type_data": "int" + "type_kind": "numpy", + "type_data": "int64" }, - "virtual": true + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 10, "m_parent_sub_section": "quantities", - "name": "n_raw_values", + "m_annotations": { + "eln": [ + { + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "Summer", + "Autumn; Spring; Summer; Winter", + "Autumn; Winter", + "Winter", + "Spring", + "Autumn; Summer" + ] + } + } + ] + }, + "name": "time_season", + "description": "The time of year the outdoor testing was occurring.\n- Order the seasons in alphabetic order and separate them with semicolons.\n- For time periods longer than a year, state all four seasons once.\nExample:\nAutumn\nAutumn; Summer\nAutumn; Spring, Winter\nAutumn; Spring; Summer; Winter\nSpring; Winter", "type": { "type_kind": "python", - "type_data": "int" + "type_data": "str" }, - "virtual": true + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 11, "m_parent_sub_section": "quantities", "m_annotations": { - "plot": [ + "eln": [ { - "x": "photon_energy_array", - "y": "raw_eqe_array" + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "0000:00:00:00:00" + ] + } } ] }, - "name": "raw_eqe_array", - "description": "EQE array of the spectrum", + "name": "time_start", + "description": "The starting time for the outdoor measurement.", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [ - "n_raw_values" - ] + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 12, "m_parent_sub_section": "quantities", "m_annotations": { - "plot": [ + "eln": [ { - "x": "raw_photon_energy_array", - "y": "raw_eqe_array" + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "0000:00:00:00:00", + "0000:03:14:00:00" + ] + } } ] }, - "name": "raw_photon_energy_array", - "description": "Raw Photon energy array of the eqe spectrum", + "name": "time_end", + "description": "The ending time for the outdoor measurement.", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [ - "n_raw_values" - ], - "unit": "electron_volt" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 13, "m_parent_sub_section": "quantities", "m_annotations": { - "plot": [ + "eln": [ { - "x": "raw_wavelength_array", - "y": "raw_eqe_array" + "component": "NumberEditQuantity" } ] }, - "name": "raw_wavelength_array", - "description": "Raw wavelength array of the eqe spectrum", + "name": "time_total_exposure", + "description": "The total duration of the outdoor measurement in days.\n- If there are uncertainties, only state the best estimate, e.g. write 1000 and not 950-1050", "type": { "type_kind": "numpy", "type_data": "float64" }, - "shape": [ - "n_raw_values" - ], - "unit": "nanometer" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 14, "m_parent_sub_section": "quantities", "m_annotations": { - "plot": [ + "eln": [ { - "x": "photon_energy_array", - "y": "eqe_array" + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "MPPT" + ] + } } ] }, - "name": "eqe_array", - "description": "EQE array of the spectrum", + "name": "potential_bias_load_condition", + "description": "The Potentiostatic load condition during the outdoor measurement\n- When the cell is not connected to anything, state this as \u2018Open circuit\u2019\nExamples:\nConstant current\nConstant potential\nMPPT\nOpen circuit\nPassive resistance\nShort circuit", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [ - "n_values" - ] + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 15, "m_parent_sub_section": "quantities", "m_annotations": { - "plot": [ + "eln": [ { - "x": "wavelength_array", - "y": "eqe_array" + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "nan; nan" + ] + } } ] }, - "name": "wavelength_array", - "description": "Interpolated/extrapolated wavelength array with *E<sub>u</sub>* of the eqe spectrum", + "name": "potential_bias_range", + "description": "The potential range during the outdoor measurement\n- Separate the lower and upper bound by a semicolon.\n- For constant values, state only that value.\n- For open circuit conditions, state this as \u2018nan\u2019\n- If there are uncertainties, only state the best estimate, e.g. write 1 and not 0.90-1.1\n- State unknown values as \u2018nan\u2019\nExample:\n0.9; 1.02\n1.5\nnan", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [ - "n_values" - ], - "unit": "nanometer" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 16, "m_parent_sub_section": "quantities", "m_annotations": { - "plot": [ + "eln": [ { - "x": "photon_energy_array", - "y": "eqe_array" + "component": "NumberEditQuantity" } ] }, - "name": "photon_energy_array", - "description": "Interpolated/extrapolated photon energy array with a *E<sub>u</sub>* of the eqe spectrum", + "name": "potential_bias_passive_resistance", + "description": "The passive resistance in the measurement circuit if a resistor was used\n- Give the value in ohm\n- If there are uncertainties, only state the best estimate, e.g. write 1.03 and not 1.01-1.05\n- If unknown or not applicable, leave this field empty.", "type": { "type_kind": "numpy", "type_data": "float64" }, - "shape": [ - "n_values" - ], - "unit": "electron_volt" + "shape": [], + "unit": "ohm" }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 17, "m_parent_sub_section": "quantities", - "name": "link_raw_data", - "description": "A link to where the data file for the EQE measurement is stored\n- This is a beta feature. The plan is to create a file repository where the raw files for IV data can be stored and disseminated. With the link and associated protocols, it should be possible to programmatically access and analyse the raw IV-data.", - "type": { - "type_kind": "python", - "type_data": "str" - }, - "shape": [] - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 15, - "m_parent_sub_section": "section_definitions", - "name": "Stability", - "description": "A section decsirbing the stability measurements performed in the device.", - "quantities": [ - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, - "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "BoolEditQuantity" + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "", + "Uncontrolled" + ] + } } ] }, - "name": "measured", - "description": "TRUE if some kind of stability measurement has been done.\n- There is no sharp boundary between a stability measurement and a measurement of stabilised efficiency. Generally, a measurement under a few minutes is considered as a measurement of stabilised efficiency, whereas a stability measurement is sufficiently long for degradation to be seen (unless the device is really good)", + "name": "temperature_load_condition", + "description": "The load situation of the temperature during the outdoor measurement.\n- If the temperature is constant during the entire stability measurement, state this as \u2018Constant\u2019.\n- If there is a cycling between colder and hotter conditions, state this as \u2018Cycled\u2019\n- If the temperature varies in an uncontrolled way, state this as \u2018Uncontrolled\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample:\nConstant\nUncontrolled\nCycled", "type": { "type_kind": "python", - "type_data": "bool" + "type_data": "str" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, + "m_parent_index": 18, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -53749,40 +57531,15 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "", - "Indoor light", - "IEC 61646", - "ISOS-L-1", - "Bending test", - "Other", - "ISOS-LC-1", - "ISOS-T-1", - "ISOS-D-1I", - "ISOS-V-2", - "ISOS-L-2I", - "ISOS-D-1", - "IEC 61215", - "ISOS-L-C1I", - "ISOS\u2010L\u20101", - "ISOS-L-3", - "ISOS-L-1I", - "ISOS-D-2", - "ISOS-V-1", - "ISOS-L-2", - "ISOS\u2010D\u20103", - "ISOS-D-2I", - "ISOS-D-3", - "ISOS-V-1I", - "ISOS-O-1", - "UV-stability", - "ISOS-T-3" + "nan; nan", + "15; 60" ] } } ] }, - "name": "protocol", - "description": "The stability protocol used for the stability measurement.\n- For a more detailed discussion on protocols and standard nomenclature for stability measurements, please see the following paper:\no Consensus statement for stability assessment and reporting for perovskite photovoltaics based on ISOS procedures byM. V. Khenkin et al. Nat. Energ. 2020. DOI10.1038/s41560-019-0529-5\nExample:\nISOS-D-1\nISOS-D-1I\nISOS-L-2\nISOS-T-3\nIEC 61215", + "name": "temperature_range", + "description": "The temperature range during the outdoor measurement\n- Separate the lower and upper bound by a semicolon.\n- For constant values, state only that value.\n- If there are uncertainties, only state the best estimate, e.g. write 1 and not 0.90-1.1\n- State unknown values as \u2018nan\u2019\nExample:\n30\n-10; 85\nnan", "type": { "type_kind": "python", "type_data": "str" @@ -53791,7 +57548,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, + "m_parent_index": 19, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -53800,366 +57557,253 @@ window.nomadArtifacts = { } ] }, - "name": "average_over_n_number_of_cells", - "description": "The number of cells the reported stability data is based on.\n- The preferred way to enter data is to give every individual cell its own entry in the data template/data base. If that is done, the data is an average over 1 cell.\n- If the reported stability data is not the data from one individual cell, but an average over N cells. Give the number of cells.\n- If the reported value is an average, but it is unknown over how many cells the value has been averaged (and no good estimate is available), state the number of cells as 2, which is the smallest number of cells that qualifies for an averaging procedure.", + "name": "temperature_tmodule", + "description": "The effective temperature of the module during peak hours.", "type": { "type_kind": "numpy", - "type_data": "int64" + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "degree_Celsius" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, + "m_parent_index": 20, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "", - "Indoor light", - "Solar Simulator", - "UV lamp", - "Natural sunlight", - "LED", - "White Led", - "Synchrotron", - "Light", - "Mercury", - "Sulfur plasma", - "Halogen", - "Tungsten; Gamma rays", - "White LED", - "Dark", - "Solar simulator", - "solar simulator", - "Sun", - "Tungsten", - "Xenon", - "Fluorescent lamp", - "Metal halide" - ] - } + "component": "BoolEditQuantity" } ] }, - "name": "light_source_type", - "description": "The type of light source used during the stability measurement\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample:\nLaser\nMetal halide\nOutdoor\nSolar simulator\nSulfur plasma\nWhite LED\nXenon plasma", + "name": "periodic_JV_measurements", + "description": "TRUE if the outdoor measurement periodically is interrupted for JV-measurements.", "type": { "type_kind": "python", - "type_data": "str" + "type_data": "bool" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 4, + "m_parent_index": 21, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "light_source_brand_name", - "description": "The brand name and model number of the light source/solar simulator used\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample:\nNewport model 91192\nNewport AAA\nAtlas suntest", + "name": "periodic_JV_measurements_time_between_measurements", + "description": "The average time between JV-measurement during the outdoor measurement.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "hour" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, + "m_parent_index": 22, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "light_source_simulator_class", - "description": "The class of the solar simulator\n- A three-letter code of As, Bs, and Cs. The order of the letters represents the quality ofspectral match, spatial non-uniformity, and temporal instability\nExample\nAAA\nABB\nCAB", + "name": "PCE_initial_value", + "description": "The efficiency, PCE, of the cell before the measurement routine starts\n- Give the efficiency in %\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 6, + "m_parent_index": 23, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "BoolEditQuantity" } ] }, - "name": "light_intensity", - "description": "The light intensity during the stability measurement\n- If there are uncertainties, only state the best estimate, e.g. write 100 and not 90-100.\n- Standard AM 1.5 illumination correspond to 100 mW/cm2\n- If you need to convert from illumination given in lux; at 550 nm, 1 mW/cm2 corresponds to 6830 lux", + "name": "PCE_burn_in_observed", + "description": "TRUE if the performance has a relatively fast initial decay after which the decay rate stabilises at a lower level.", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "bool" }, - "shape": [], - "unit": "milliwatt / centimeter ** 2" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 7, + "m_parent_index": 24, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "", - "Indoor light", - "X-ray, 17.998 keV", - "UV", - "AM 1.5", - "Monochromatic", - "Outdoor ligth", - "Yellow light", - "Am 1.5" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "light_spectra", - "description": "The light spectrum used (or simulated as best as possible) during the stability measurement\n- For an unspecified light spectra (that not is dark), state this as \u2018Light\u2019\nExample\nAM 1.0\nAM 1.5\nIndoor light\nMonochromatic\nOutdoor\nUV", + "name": "PCE_end_of_experiment", + "description": "The efficiency, PCE, of the cell at the end of the experiment\n- Give the efficiency in %\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, "shape": [] }, { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 8, - "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "nan; nan", - "325; 325", - "300; 800", - "340.0; 340.0", - "365.0; 365.0", - "254.0; 254.0", - "267.0; 267.0" - ] - } + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 25, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "NumberEditQuantity" } ] }, - "name": "light_wavelength_range", - "description": "The wavelength range of the light source\n- Separate the lower and upper bound by a semicolon.\n- For monochromatic light sources, only give the constant value.\n- If there are uncertainties, only state the best estimate, e.g. write 100 and not 90-100.\n- State unknown values as \u2018nan\u2019\nExample:\n330; 1000\n400; nan\n550", + "name": "PCE_T95", + "description": "The time after which the cell performance has degraded by 5 % with respect to the initial performance.\n- If there are uncertainties, only state the best estimate, e.g. write 1000 and not 950-1050\n- If unknown or not applicable, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "hour" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 9, + "m_parent_index": 26, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "", - "Substrate" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "light_illumination_direction", - "description": "The direction of the illumination with respect to the device stack\n- If the cell is illuminated trough the substrate, state this as \u2018Substrate\u2019\n- If the cell is illuminated trough the top contact, state this as \u2018Superstrate\u2019\n- For back contacted cells illuminated from the non-contacted side, state this as \u2018Superstrate\u2019\nExample\nSubstrate\nSuperstrate", + "name": "PCE_Ts95", + "description": "The time after which the cell performance has degraded by 5 % with respect to the performance after any initial burn in phase.\n- If there are uncertainties, only state the best estimate, e.g. write 1000 and not 950-1050\n- If unknown or not applicable, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "hour" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 10, + "m_parent_index": 27, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "", - "constant", - "Uncontrolled", - "Cycled", - "Day-Night cycle", - "Constant" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "light_load_condition", - "description": "The load situation of the illumination during the stability measurement.\n- If the illumination is constant during the entire stability measurement, or if the cell is stored in the dark, state this as \u2018Constant\u2019.\n- If the situation periodically is interrupted by IV-measurements, continue to consider the load condition as constant\n- If there is a cycling between dark and light, state this as \u2018Cycled\u2019\n- If the illumination varies in an uncontrolled way, state this as \u2018Uncontrolled\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample:\nConstant\nCycled\nDay-Night cycle\nUncontrolled", + "name": "PCE_T80", + "description": "The time after which the cell performance has degraded by 20 % with respect to the initial performance.\n- If there are uncertainties, only state the best estimate, e.g. write 1000 and not 950-1050\n- If unknown or not applicable, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "hour" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 11, + "m_parent_index": 28, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Unknown", - "0.16; 12.0", - "12.0; 12.0", - "10.0; 14.0", - "0.6" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "light_cycling_times", - "description": "If the illumination load is cycled during the stability measurement, state the time in low light followed by the time in high light for the cycling period.\n- If not applicable, leave blank\nExample\n12; 12\n6; 10\nnan; nan", + "name": "PCE_Ts80", + "description": "The time after which the cell performance has degraded by 20 % with respect to the performance after any initial burn in phase.\n- If there are uncertainties, only state the best estimate, e.g. write 1000 and not 950-1050\n- If unknown or not applicable, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "hour" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 12, + "m_parent_index": 29, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "BoolEditQuantity" + "component": "NumberEditQuantity" } ] }, - "name": "light_UV_filter", - "description": "TRUE if a UV-filter of any kind was placed between the illumination source and the device during the stability measurement.", + "name": "PCE_Te80", + "description": "An estimated T80 for cells that was not measured sufficiently long for them to degrade by 20 %. with respect to the initial performance.\n- This value will by definition have a significant uncertainty to it, as it is not measured but extrapolated under the assumption linearity but without a detailed and stabilised extrapolation protocol. This estimate is, however, not without value as it enables a ruff comparison between all cells for with the stability has been measured.\n- If there is an experimental T80, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "bool" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "hour" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 13, + "m_parent_index": 30, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "", - "Short circuit", - "MPPT", - "Open circuit", - "Constant potential", - "Passive resistance" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "potential_bias_load_condition", - "description": "The Potentiostatic load condition during the stability measurement\n- When the cell is not connected to anything, state this as \u2018Open circuit\u2019\nExamples:\nConstant current\nConstant potential\nMPPT\nOpen circuit\nPassive resistance\nShort circuit", + "name": "PCE_Tse80", + "description": "An estimated T80s for cells that was not measured sufficiently long for them to degrade by 20 %. with respect to the performance after any initial burn in phase.\n- This value will by definition have a significant uncertainty to it, as it is not measured but extrapolated under the assumption linearity but without a detailed and stabilised extrapolation protocol. This estimate is, however, not without value as it enables a ruff comparison between all cells for with the stability has been measured.\n- If there is an experimental T80s, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "hour" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 14, + "m_parent_index": 31, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "0.9; 0.9", - "0.85; 0.85", - "nan; nan", - "0.8465; 0.8465", - "0.47; 0.47", - "0.7499; 0.7499", - "0.937; 0.937", - "1.2; 1.2", - "0.65; 0.65", - "0.95; 0.95", - "0.84; 0.84", - "0.71; 0.71", - "1.0; 1.0", - "0.86; 0.86", - "1.413; 1.413", - "0.76; 0.76", - "0.7; 0.7", - "0.908; 0.908", - "0.72; 0.72", - "0.8; 0.8", - "0.89; 0.89" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "potential_bias_range", - "description": "The potential range during the stability measurement\n- Separate the lower and upper bound by a semicolon.\n- For constant values, state only that value.\n- For open circuit conditions, state this as \u2018nan\u2019\n- If there are uncertainties, only state the best estimate, e.g. write 1 and not 0.90-1.1\n- State unknown values as \u2018nan\u2019\nExample:\n0.9; 1.02\n1.5\nnan", + "name": "PCE_after_1000_h", + "description": "The efficiency, PCE, of the cell after 1000 hours\n- Give the efficiency in %\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 15, + "m_parent_index": 32, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -54168,18 +57812,17 @@ window.nomadArtifacts = { } ] }, - "name": "potential_bias_passive_resistance", - "description": "The passive resistance in the measurement circuit if a resistor was used\n- Give the value in ohm\n- If there are uncertainties, only state the best estimate, e.g. write 1.03 and not 1.01-1.05\n- If unknown or not applicable, leave this field empty.", + "name": "power_generated", + "description": "The yearly power generated during the measurement period in kWh/year/m^2.\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", "type": { "type_kind": "numpy", "type_data": "float64" }, - "shape": [], - "unit": "ohm" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 16, + "m_parent_index": 33, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -54187,19 +57830,14 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "", - "constant", - "Uncontrolled", - "Cycled", - "uncontrolled", - "Constant" + "" ] } } ] }, - "name": "temperature_load_condition", - "description": "The load situation of the temperature during the stability measurement.\n- If the temperature is constant during the entire stability measurement, state this as \u2018Constant\u2019.\n- If there is a cycling between colder and hotter conditions, state this as \u2018Cycled\u2019\n- If the temperature varies in an uncontrolled way, state this as \u2018Uncontrolled\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample:\nConstant\nUncontrolled\nCycled", + "name": "link_raw_data_for_outdoor_trace", + "description": "A link to where the data file for the measurement is stored\n- This is a beta feature. The plan is to create a file repository where the raw files for stability data can be stored and disseminated. With the link and associated protocols, it should be possible to programmatically access and analyse the raw data.", "type": { "type_kind": "python", "type_data": "str" @@ -54208,106 +57846,26 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 17, + "m_parent_index": 34, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "22.0; 22.0", - "70; 70", - "-10.0; -10.0", - "80; 80", - "55.0; 55.0", - "50.0; 50.0", - "10; 25", - "nan; nan", - "75.0; 75.0", - "20; 20", - "120.0; 120.0", - "-40.0; 85.0", - "85.0; 85.0", - "0.0; 0.0", - "26.0; 26.0", - "27.5; 27.5", - "28.0; 28.0", - "25; 85", - "25; 25", - "65; 65", - "22.3; 22.7", - "110.0; 110.0", - "25; 80", - "21.0; 21.0", - "14.0; 14.0", - "20; 25", - "23; 23", - "-22.0; 100", - "100.0; 100.0", - "95.0; 95.0", - "23.5; 23.5", - "15; 25", - "30; 30", - "25; 35", - "18; 22", - "42.0; 42.0", - "17.0; 17.0", - "22.5; 22.5", - "28; 32", - "25; 30", - "20; 30", - "60; 60", - "2; 70", - "75; 75", - "80.0; 80.0", - "45.0; 45.0", - "160.0; 160.0", - "90.0; 90.0", - "53.0; 53.0", - "30.0; 30.0", - "20; 40", - "45; 45", - "150.0; 150.0", - "40.0; 40.0", - "-20.0; -20.0", - "20.0; 20.0", - "25.0; 25.0", - "70.0; 70.0", - "41.0; 41.0", - "50; 50", - "40; 40", - "65.0; 65.0", - "35.0; 35.0", - "25.5; 25.5", - "24.0; 24.0", - "15.0; 15.0", - "82.0; 82.0", - "23.0; 23.0", - "28; 28", - "60.0; 60.0", - "85; 85", - "100; 100", - "23.1; 23.1", - "nan; 120", - "21.5; 21.5", - "27.0; 27.0" - ] - } + "component": "BoolEditQuantity" } ] }, - "name": "temperature_range", - "description": "The temperature range during the stability measurement\n- Separate the lower and upper bound by a semicolon.\n- For constant values, state only that value.\n- If there are uncertainties, only state the best estimate, e.g. write 1 and not 0.90-1.1\n- State unknown values as \u2018nan\u2019\nExample:\n30\n25; 85\nnan", + "name": "detaild_weather_data_available", + "description": "TRUE if detailed weather data is available for the measurement period", "type": { "type_kind": "python", - "type_data": "str" + "type_data": "bool" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 18, + "m_parent_index": 35, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -54315,18 +57873,14 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Unknown", - "15.0; 15.0", - "100.0; 100.0", - "25.0; 25.0", - "60.0; 120.0" + "" ] } } ] }, - "name": "temperature_cycling_times", - "description": "If the temperature is cycled during the stability measurement, state the time in low temperature followed by the time in high temperature for the cycling period.\n- If not applicable, leave blank\n- Separate the lower and upper bound by a semicolon.\n- If there are uncertainties, only state the best estimate, e.g. write 1 and not 0.90-1.1\n- State unknown values as \u2018nan\u2019\nExample:\n2; 2\n0.5; 10", + "name": "link_detailed_weather_data", + "description": "A link to where the data file for the measurement is stored\n- This is a beta feature. The plan is to create a file repository where the raw files for stability data can be stored and disseminated. With the link and associated protocols, it should be possible to programmatically access and analyse the raw data.", "type": { "type_kind": "python", "type_data": "str" @@ -54335,27 +57889,26 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 19, + "m_parent_index": 36, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "BoolEditQuantity" } ] }, - "name": "temperature_ramp_speed", - "description": "The temperature ramp speed\n- If there are uncertainties, only state the best estimate, e.g. write 1.03 and not 1.01-1.05\n- If unknown or not applicable, leave this field empty.", + "name": "spectral_data_available", + "description": "TRUE measured spectral data are available for the measurement period", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "bool" }, - "shape": [], - "unit": "degree_Celsius / minute" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 20, + "m_parent_index": 37, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -54363,26 +57916,14 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "Water", - "Dry air", - "Unknown", - "Air", - "Air. Desiccator", - "Ambient", - "N2", - "Vacuum", - "O2", - "N2; O2", - "Glovebox", - "Ar", - "Near-space" + "" ] } } ] }, - "name": "atmosphere", - "description": "The atmosphere in which the stability measurement is conducted\n- If the atmosphere is a mixture of different gases, e.g. A and B, list the gases in alphabetic order and separate them with semicolons, as in (A; B)\n- \u201cDry air\u201d represent air with low relative humidity but where the relative humidity is not known\n- \u201cAmbient\u201d represent air where the relative humidity is not known. For ambient conditions where the relative humidity is known, state this as \u201cAir\u201d\n- \u201cVacuum\u201d (of unspecified pressure) is for this purpose considered as an atmospheric gas\nExample\nAir\nN2\nVacuum", + "name": "link_spectral_data", + "description": "A link to where the data file for the measurement is stored\n- This is a beta feature. The plan is to create a file repository where the raw files for stability data can be stored and disseminated. With the link and associated protocols, it should be possible to programmatically access and analyse the raw data.", "type": { "type_kind": "python", "type_data": "str" @@ -54391,26 +57932,26 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 21, + "m_parent_index": 38, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "BoolEditQuantity" } ] }, - "name": "atmosphere_oxygen_concentration", - "description": "The oxygen concentration in the atmosphere\n- If unknown, leave this field empty.", + "name": "irradiance_measured", + "description": "TRUE measured irradiance data are available for the measurement period", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "bool" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 22, + "m_parent_index": 39, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -54418,555 +57959,1252 @@ window.nomadArtifacts = { "component": "EnumEditQuantity", "props": { "suggestions": [ - "", - "constant", - "Controlled", - "Ambient", - "ambient", - "Constant" + "" ] } } ] }, - "name": "relative_humidity_load_conditions", - "description": "The load situation of the relative humidity during the stability measurement.\n- If the relative humidity is constant during the entire stability measurement, state this as \u2018Constant\u2019.\n- If there is a cycling between dryer and damper conditions, state this as \u2018Cycled\u2019\n- If the relative humidity varies in an uncontrolled way, i.e. the cell is operated under ambient conditions, state this as \u2018Ambient\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample\nAmbient\nControlled\nCycled", + "name": "link_irradiance_data", + "description": "A link to where the data file for the measurement is stored\n- This is a beta feature. The plan is to create a file repository where the raw files for stability data can be stored and disseminated. With the link and associated protocols, it should be possible to programmatically access and analyse the raw data.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [] + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 17, + "m_parent_sub_section": "section_definitions", + "m_annotations": { + "eln": [ + { + "lane_width": "400px" + } + ] + }, + "name": "PerovskiteSolarCell", + "label": "Perovskite Solar Cell", + "description": "This schema is adapted to map the data in the [Perovskite Solar Cell Database Project](https://www.perovskitedatabase.com/). The descriptions in the quantities\nrepresent the instructions given to the user who manually curated the data.", + "categories": [ + "/packages/15/category_definitions/4" + ], + "base_sections": [ + "/packages/15/section_definitions/1" + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "ref", + "sub_section": "/packages/6/section_definitions/0" + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", + "name": "cell", + "sub_section": "/packages/6/section_definitions/1" + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 2, + "m_parent_sub_section": "sub_sections", + "name": "module", + "sub_section": "/packages/6/section_definitions/2" + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 3, + "m_parent_sub_section": "sub_sections", + "name": "substrate", + "sub_section": "/packages/6/section_definitions/3" + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 4, + "m_parent_sub_section": "sub_sections", + "name": "etl", + "sub_section": "/packages/6/section_definitions/4" + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 5, + "m_parent_sub_section": "sub_sections", + "name": "perovskite", + "sub_section": "/packages/6/section_definitions/5" + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 6, + "m_parent_sub_section": "sub_sections", + "name": "perovskite_deposition", + "sub_section": "/packages/6/section_definitions/6" + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 7, + "m_parent_sub_section": "sub_sections", + "name": "htl", + "sub_section": "/packages/6/section_definitions/7" + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 8, + "m_parent_sub_section": "sub_sections", + "name": "backcontact", + "sub_section": "/packages/6/section_definitions/8" + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 9, + "m_parent_sub_section": "sub_sections", + "name": "add", + "sub_section": "/packages/6/section_definitions/9" + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 10, + "m_parent_sub_section": "sub_sections", + "name": "encapsulation", + "sub_section": "/packages/6/section_definitions/10" + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 11, + "m_parent_sub_section": "sub_sections", + "name": "jv", + "sub_section": "/packages/6/section_definitions/12" + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 12, + "m_parent_sub_section": "sub_sections", + "name": "stabilised", + "sub_section": "/packages/6/section_definitions/13" + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 13, + "m_parent_sub_section": "sub_sections", + "name": "eqe", + "sub_section": "/packages/6/section_definitions/14" + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 14, + "m_parent_sub_section": "sub_sections", + "name": "stability", + "sub_section": "/packages/6/section_definitions/15" + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 15, + "m_parent_sub_section": "sub_sections", + "name": "outdoor", + "sub_section": "/packages/6/section_definitions/16" + } + ] + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Package", + "m_parent_index": 7, + "m_parent_sub_section": "packages", + "name": "nomad.datamodel.metainfo.eln.nexus_data_converter", + "section_definitions": [ + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 0, + "m_parent_sub_section": "section_definitions", + "name": "ElnYamlConverter", + "base_sections": [ + "/packages/15/section_definitions/1" + ], + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "StringEditQuantity" + } + ], + "browser": [ + { + "adaptor": "RawFileAdaptor" + } + ] + }, + "name": "output", + "description": "Output yaml file to save all the data. Default: eln_data.yaml", "type": { "type_kind": "python", "type_data": "str" }, - "shape": [] - }, + "default": "eln_data.yaml" + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 1, + "m_parent_sub_section": "section_definitions", + "name": "NexusDataConverter", + "base_sections": [ + "/packages/15/section_definitions/1" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 23, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "40; 50", - "61; 75", - "30; 80", - "80; 80", - "60; 70", - "25; 45", - "nan; nan", - "25; 50", - "20; 20", - "50; 70", - "30; 50", - "60; 80", - "35; 35", - "0; 0", - "55; 70", - "75; 85", - "65; 65", - "50; 60", - "50.60; 50.60", - "1; 50", - "25; 25", - "20; 70", - "25; 35", - "30; 30", - "10; 15", - "45; 55", - "15; 25", - "15; 15", - "15; 20", - "42.2; 54.4", - "35; 40", - "30; 70", - "25; 40", - "25; 30", - "20; 30", - "60; 60", - "20; 40", - "30; 35", - "45; 45", - "40; 80", - "5; 5", - "40; 60", - "90; 95", - "50; 50", - "40; 40", - "45; 60", - "12; 18", - "35; 45", - "10; 20", - "45; 50", - "40; 45", - "85; 85", - "10; 30", - "30; 40", - "100; 100" - ] - } + "component": "AutocompleteEditQuantity" } ] }, - "name": "relative_humidity_range", - "description": "The relative humidity range during the stability measurement\n- Separate the lower and upper bound by a semicolon.\n- For constant values, state only that value.\n- If there are uncertainties, only state the best estimate, e.g. write 1 and not 0.90-1.1\n- State unknown values as \u2018nan\u2019\nExample:\n45\n35; 65\nnan", + "name": "reader", + "description": "The reader needed to run the Nexus converter.", "type": { - "type_kind": "python", - "type_data": "str" - }, - "shape": [] + "type_kind": "Enum", + "type_data": [ + "apm", + "ellips", + "em_nion", + "em_om", + "em_spctrscpy", + "example", + "hall", + "json_map", + "json_yml", + "mpes", + "rii_database", + "sts", + "transmission", + "xps" + ] + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 24, + "m_parent_index": 1, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "AutocompleteEditQuantity" } ] }, - "name": "relative_humidity_average_value", - "description": "The average relative humidity during the stability measurement.\n- If there are uncertainties, only state the best estimate, e.g. write 1 and not 0.90-1.1\n- If unknown, leave this field empty.", + "name": "nxdl", + "description": "The nxdl needed for running the Nexus converter.", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [] + "type_kind": "Enum", + "type_data": [ + "NXarchive", + "NXarpes", + "NXcanSAS", + "NXdirecttof", + "NXfluo", + "NXindirecttof", + "NXiqproc", + "NXlauetof", + "NXmonopd", + "NXmx", + "NXrefscan", + "NXreftof", + "NXsas", + "NXsastof", + "NXscan", + "NXspe", + "NXsqom", + "NXstxm", + "NXtas", + "NXtofnpd", + "NXtofraw", + "NXtofsingle", + "NXtomo", + "NXtomophase", + "NXtomoproc", + "NXxas", + "NXxasproc", + "NXxbase", + "NXxeuler", + "NXxkappa", + "NXxlaue", + "NXxlaueplate", + "NXxnb", + "NXxrot", + "NXaberration", + "NXaberration_model", + "NXaberration_model_ceos", + "NXaberration_model_nion", + "NXactivity", + "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_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", + "NXcontainer", + "NXcoordinate_system_set", + "NXcorrector_cs", + "NXcs_computer", + "NXcs_cpu", + "NXcs_filter_boolean_mask", + "NXcs_gpu", + "NXcs_io_obj", + "NXcs_io_sys", + "NXcs_mm_sys", + "NXcs_prng", + "NXcs_profiling", + "NXcs_profiling_event", + "NXcsg", + "NXcxi_ptycho", + "NXdac", + "NXdeflector", + "NXdelocalization", + "NXdispersion", + "NXdispersion_function", + "NXdispersion_repeated_parameter", + "NXdispersion_single_parameter", + "NXdispersion_table", + "NXdispersive_material", + "NXdistortion", + "NXebeam_column", + "NXelectronanalyser", + "NXelectrostatic_kicker", + "NXellipsometry", + "NXem", + "NXem_ebsd", + "NXem_ebsd_conventions", + "NXem_ebsd_crystal_structure_model", + "NXenergydispersion", + "NXevent_data_em", + "NXevent_data_em_set", + "NXfabrication", + "NXfiber", + "NXgraph_edge_set", + "NXgraph_node_set", + "NXgraph_root", + "NXibeam_column", + "NXimage_set", + "NXimage_set_em_adf", + "NXimage_set_em_kikuchi", + "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_score_config", + "NXms_score_results", + "NXms_snapshot", + "NXms_snapshot_set", + "NXopt", + "NXoptical_system_em", + "NXorientation_set", + "NXpeak", + "NXphysical_process", + "NXpid", + "NXpolarizer_opt", + "NXpositioner_sts", + "NXprogram", + "NXpulser_apm", + "NXpump", + "NXquadric", + "NXquadrupole_magnet", + "NXreflectron", + "NXregion", + "NXregistration", + "NXrotation_set", + "NXsample_component_set", + "NXsample_history", + "NXscanbox_em", + "NXsensor_scan", + "NXsensor_sts", + "NXseparator", + "NXsimilarity_grouping", + "NXsingle_crystal", + "NXslip_system_set", + "NXsnsevent", + "NXsnshisto", + "NXsolenoid_magnet", + "NXsolid_geometry", + "NXspatial_filter", + "NXspectrum_set", + "NXspectrum_set_em_eels", + "NXspectrum_set_em_xray", + "NXspin_rotator", + "NXspindispersion", + "NXstage_lab", + "NXsts", + "NXsubsampling_filter", + "NXsubstance", + "NXtransmission", + "NXunit_cell", + "NXwaveplate", + "NXxpcs", + "NXroot" + ] + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 25, + "m_parent_index": 2, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "FileEditQuantity" + } + ], + "browser": [ + { + "adaptor": "RawFileAdaptor" } ] }, - "name": "time_total_exposure", - "description": "The total duration of the stability measurement.\n- If there are uncertainties, only state the best estimate, e.g. write 1000 and not 950-1050", + "name": "input_files", + "description": "Input files needed to run the nexus converter.", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [], - "unit": "hour" + "shape": [ + "*" + ] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 26, + "m_parent_index": 3, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "BoolEditQuantity" + "component": "StringEditQuantity" + } + ], + "browser": [ + { + "adaptor": "RawFileAdaptor" } ] }, - "name": "periodic_JV_measurements", - "description": "TRUE if the stability measurement periodically is interrupted for JV-measurements. A typical example is a cell that is stored in the dark and once in a wile is take out from storage for an IV-measurement.", + "name": "output", + "description": "Output Nexus filename to save all the data. Default: output.nxs", "type": { "type_kind": "python", - "type_data": "bool" + "type_data": "str" }, - "shape": [] - }, + "default": "output.nxs" + } + ] + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Package", + "m_parent_index": 8, + "m_parent_sub_section": "packages", + "name": "nomad.datamodel.metainfo.eln", + "section_definitions": [ + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 0, + "m_parent_sub_section": "section_definitions", + "name": "User", + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 27, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "40.0", - "85.0", - "90.0", - "50.0", - "24.0", - "1440.0", - "10.0", - "3.0", - "3.2", - "220.0", - "60.0", - "5.0", - "125.0", - "9.0", - "120.0", - "Unknown", - "72.0", - "7.0", - "180.0", - "75.0", - "100.0", - "400.0", - "240.0", - "80.0", - "6.0", - "0.067", - "480.0", - "30.0", - "0.3", - "0.167", - "2.0", - "0.016", - "0.5", - "168.0", - "48.0", - "25.0", - "0.1", - "52.0", - "20.0", - "360.0", - "160.0", - "34.0", - "1680.0", - "15.0", - "200.0" - ] - } + "component": "AuthorEditQuantity" } ] }, - "name": "periodic_JV_measurements_time_between_jv", - "description": "The average time between JV-measurement during the stability measurement.", + "name": "user", + "description": "The corresponding user for the activity.", "type": { - "type_kind": "python", - "type_data": "str" - }, - "shape": [] - }, + "type_kind": "Author", + "type_data": "Author" + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 1, + "m_parent_sub_section": "section_definitions", + "name": "ElnBaseSection", + "description": "A generic abstract base section for ELNs that provides a few commonly used properties. If you inherit from this section, but do not need some quantities, list those\nquantities in the `eln.hide` annotation of your inheriting section definition.\n\nBesides predefining some quantities, these base sections will add some metadata\nto NOMAD's search. A particular example are `tags`, if you define a string\nor enum quantity in your sections named `tags`, its values will be searchable.", + "base_sections": [ + "/packages/15/section_definitions/0" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 28, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "StringEditQuantity", + "label": "Short name" } ] }, - "name": "PCE_initial_value", - "description": "The efficiency, PCE, of the cell before the stability measurement routine starts\n- Give the efficiency in %\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", + "name": "name", + "description": "A short human readable and descriptive name.", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [] + "type_kind": "python", + "type_data": "str" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 29, + "m_parent_index": 1, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "BoolEditQuantity" + "component": "DateTimeEditQuantity" } ] }, - "name": "PCE_burn_in_observed", - "description": "TRUE if the performance has a relatively fast initial decay after which the decay rate stabilises at a lower level.\n- There are no sharp boundary between an initial burn in phase an a catastrophic failure, but if the performance of the cell quickly degrade by more than half, it is stretching it a bit to label this as an initial burn in phase.", + "name": "datetime", + "description": "The date and time associated with this section.", "type": { - "type_kind": "python", - "type_data": "bool" - }, - "shape": [] + "type_kind": "custom", + "type_data": "nomad.metainfo.metainfo._Datetime" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 30, + "m_parent_index": 2, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "StringEditQuantity", + "label": "ID" } ] }, - "name": "PCE_end_of_experiment", - "description": "The efficiency, PCE, of the cell at the end of the stability routine\n- Give the efficiency in %\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", + "name": "lab_id", + "description": "An ID string that is unique at least for the lab that produced this\ndata.", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [] + "type_kind": "python", + "type_data": "str" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 31, + "m_parent_index": 3, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "RichTextEditQuantity" } ] }, - "name": "PCE_T95", - "description": "The time after which the cell performance has degraded by 5 % with respect to the initial performance.\n- If there are uncertainties, only state the best estimate, e.g. write 1000 and not 950-1050\n- If unknown or not applicable, leave this field empty.", + "name": "description", + "description": "Any information that cannot be captured in the other fields.", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "hour" - }, + "type_kind": "python", + "type_data": "str" + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 2, + "m_parent_sub_section": "section_definitions", + "m_annotations": { + "eln": [ + { + "lane_width": "600px" + } + ] + }, + "name": "BasicEln", + "label": "Basic ELN", + "description": "The most basic ELN to instantiate.", + "categories": [ + "/packages/15/category_definitions/2" + ], + "base_sections": [ + "/packages/8/section_definitions/1", + "/packages/15/section_definitions/1" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 32, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "StringEditQuantity" } ] }, - "name": "PCE_Ts95", - "description": "The time after which the cell performance has degraded by 5 % with respect to the performance after any initial burn in phase.\n- If there are uncertainties, only state the best estimate, e.g. write 1000 and not 950-1050\n- If unknown or not applicable, leave this field empty.", + "name": "tags", + "description": "Add a tag that can be used for search.", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [], - "unit": "hour" - }, + "shape": [ + "*" + ] + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 3, + "m_parent_sub_section": "section_definitions", + "m_annotations": { + "eln": [ + { + "lane_width": "600px" + } + ], + "template": [ + { + "process_identifiers": {} + } + ] + }, + "name": "ELNProcess", + "label": "Material Processing ELN", + "description": "A basic electronic lab notebook for a material processing activity.", + "categories": [ + "/packages/15/category_definitions/2" + ], + "base_sections": [ + "/packages/16/section_definitions/20", + "/packages/15/section_definitions/1" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 33, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "StringEditQuantity" } - ] - }, - "name": "PCE_T80", - "description": "The time after which the cell performance has degraded by 20 % with respect to the initial performance.\n- If there are uncertainties, only state the best estimate, e.g. write 1000 and not 950-1050\n- If unknown or not applicable, leave this field empty.", - "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "hour" - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 34, - "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ + ], + "template": [ { - "component": "NumberEditQuantity" + "process_identifiers": {} } ] }, - "name": "PCE_Ts80", - "description": "The time after which the cell performance has degraded by 20 % with respect to the performance after any initial burn in phase.\n- If there are uncertainties, only state the best estimate, e.g. write 1000 and not 950-1050\n- If unknown or not applicable, leave this field empty.", + "name": "tags", + "description": "Add a tag that can be used for search.", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [], - "unit": "hour" - }, + "shape": [ + "*" + ] + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "process_identifiers", + "sub_section": "/packages/16/section_definitions/32" + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 4, + "m_parent_sub_section": "section_definitions", + "name": "BasicMeasurementResult", + "label": "Measurement Result", + "description": "A basic section for describing the result of a measurement.", + "base_sections": [ + "/packages/16/section_definitions/25" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 35, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "RichTextEditQuantity" } ] }, - "name": "PCE_Te80", - "description": "An estimated T80 for cells that were not measured sufficiently long for them to degrade by 20 %. with respect to the initial performance.\n- This value will by definition have a significant uncertainty to it, as it is not measured but extrapolated under the assumption linearity but without a detailed and stabilised extrapolation protocol. This estimate is, however, not without value as it enables a rough comparison between all cells for with the stability has been measured.\n- If there is an experimental T80, leave this field empty.", + "name": "result", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "hour" - }, + "type_kind": "python", + "type_data": "str" + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 5, + "m_parent_sub_section": "section_definitions", + "m_annotations": { + "eln": [ + { + "lane_width": "600px" + } + ], + "template": [ + { + "measurement_identifiers": {} + } + ] + }, + "name": "ELNMeasurement", + "label": "Measurement ELN", + "description": "A basic electronic lab notebook for a measurement activity.", + "categories": [ + "/packages/15/category_definitions/2" + ], + "base_sections": [ + "/packages/16/section_definitions/26", + "/packages/15/section_definitions/1" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 36, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "StringEditQuantity" } ] }, - "name": "PCE_Tse80", - "description": "An estimated T80s for cells that was not measured sufficiently long for them to degrade by 20 %. with respect to the performance after any initial burn in phase.\n- This value will by definition have a significant uncertainty to it, as it is not measured but extrapolated under the assumption linearity but without a detailed and stabilised extrapolation protocol. This estimate is, however, not without value as it enables a ruff comparison between all cells for with the stability has been measured.\n- If there is an experimental T80s, leave this field empty.", + "name": "tags", + "description": "Add a tag that can be used for search.", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [], - "unit": "hour" + "shape": [ + "*" + ] + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "measurement_identifiers", + "sub_section": "/packages/16/section_definitions/32" }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", + "name": "results", + "description": "The result of the measurement.", + "sub_section": "/packages/8/section_definitions/4", + "repeats": true + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 6, + "m_parent_sub_section": "section_definitions", + "name": "BasicAnalysisResult", + "label": "Analysis Result", + "description": "A basic section for describing the result of an analysis.", + "base_sections": [ + "/packages/16/section_definitions/22" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 37, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "RichTextEditQuantity" } ] }, - "name": "PCE_after_1000_h", - "description": "The efficiency, PCE, of the cell after 1000 hours\n- Give the efficiency in %\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", + "name": "result", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [] - }, + "type_kind": "python", + "type_data": "str" + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 7, + "m_parent_sub_section": "section_definitions", + "m_annotations": { + "eln": [ + { + "lane_width": "600px" + } + ], + "template": [ + { + "analysis_identifiers": {} + } + ] + }, + "name": "ELNAnalysis", + "label": "Analysis ELN", + "description": "A basic electronic lab notebook for an analysis activity.", + "categories": [ + "/packages/15/category_definitions/2" + ], + "base_sections": [ + "/packages/16/section_definitions/23", + "/packages/15/section_definitions/1" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 38, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "StringEditQuantity" } ] }, - "name": "lifetime_energy_yield", - "description": "The lifetime energy yield\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", + "name": "tags", + "description": "Add a tag that can be used for search.", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [], - "unit": "hour * kilowatt / meter ** 2" + "shape": [ + "*" + ] + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "analysis_identifiers", + "sub_section": "/packages/16/section_definitions/32" }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", + "name": "outputs", + "description": "The input data of the analysis.", + "sub_section": "/packages/8/section_definitions/6", + "repeats": true + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 8, + "m_parent_sub_section": "section_definitions", + "m_annotations": { + "eln": [ + { + "lane_width": "600px" + } + ], + "template": [ + { + "sample_identifiers": {} + } + ] + }, + "name": "ELNSample", + "label": "Generic Sample ELN", + "description": "A basic electronic lab notebook for a generic sample.", + "categories": [ + "/packages/15/category_definitions/2" + ], + "base_sections": [ + "/packages/16/section_definitions/17", + "/packages/15/section_definitions/1" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 39, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "StringEditQuantity" } ] }, - "name": "flexible_cell_number_of_bending_cycles", - "description": "Number of bending cycles for a flexible cell in a mechanical stability test", + "name": "tags", + "description": "Add a tag that can be used for search.", "type": { - "type_kind": "numpy", - "type_data": "int64" + "type_kind": "python", + "type_data": "str" }, - "shape": [] - }, + "shape": [ + "*" + ] + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "sample_identifiers", + "sub_section": "/packages/16/section_definitions/32" + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 9, + "m_parent_sub_section": "section_definitions", + "m_annotations": { + "eln": [ + { + "lane_width": "600px" + } + ], + "template": [ + { + "substance_identifiers": {}, + "substance": { + "m_def": "nomad.datamodel.metainfo.basesections.PubChemPureSubstanceSection" + } + } + ] + }, + "name": "ELNSubstance", + "label": "Substance ELN", + "description": "A basic electronic lab notebook for a generic sample.", + "categories": [ + "/packages/15/category_definitions/2" + ], + "base_sections": [ + "/packages/16/section_definitions/27", + "/packages/15/section_definitions/1" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 40, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "StringEditQuantity" } ] }, - "name": "flexible_cell_bending_radius", - "description": "The bending radius of the flexible cell during the mechanical stability test", + "name": "tags", + "description": "Add a tag that can be used for search.", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [], - "unit": "degree" - }, + "shape": [ + "*" + ] + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "substance_identifiers", + "sub_section": "/packages/16/section_definitions/32" + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 10, + "m_parent_sub_section": "section_definitions", + "m_annotations": { + "eln": [ + { + "lane_width": "600px" + } + ], + "template": [ + { + "instrument_identifiers": {} + } + ] + }, + "name": "ELNInstrument", + "label": "Instrument ELN", + "description": "A basic electronic lab notebook for a generic instrument.", + "categories": [ + "/packages/15/category_definitions/2" + ], + "base_sections": [ + "/packages/16/section_definitions/11", + "/packages/15/section_definitions/1" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 41, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "StringEditQuantity" } ] }, - "name": "flexible_cell_PCE_initial_value", - "description": "The efficiency, PCE, of the cell before the mechanical stability measurement routine starts\n- Give the efficiency in %\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", + "name": "tags", + "description": "Add a tag that can be used for search.", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [] - }, + "shape": [ + "*" + ] + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "instrument_identifiers", + "sub_section": "/packages/16/section_definitions/32" + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 11, + "m_parent_sub_section": "section_definitions", + "m_annotations": { + "eln": [ + { + "lane_width": "600px" + } + ], + "template": [ + { + "collection_identifiers": {} + } + ] + }, + "name": "ELNCollection", + "label": "Collection ELN", + "description": "A basic electronic lab notebook for a collection of entities.", + "categories": [ + "/packages/15/category_definitions/2" + ], + "base_sections": [ + "/packages/16/section_definitions/8", + "/packages/15/section_definitions/1" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 42, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "StringEditQuantity" } ] }, - "name": "flexible_cell_PCE_end_of_experiment", - "description": "The efficiency, PCE, of the cell after the mechanical stability measurement routine\n- Give the efficiency in %\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", + "name": "tags", + "description": "Add a tag that can be used for search.", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [] - }, + "shape": [ + "*" + ] + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "collection_identifiers", + "sub_section": "/packages/16/section_definitions/32" + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 12, + "m_parent_sub_section": "section_definitions", + "m_annotations": { + "eln": [ + { + "lane_width": "600px" + } + ], + "template": [ + { + "experiment_identifiers": {} + } + ] + }, + "name": "ELNExperiment", + "label": "Experiment ELN", + "description": "A basic electronic lab notebook for a collection of activities.", + "categories": [ + "/packages/15/category_definitions/2" + ], + "base_sections": [ + "/packages/16/section_definitions/7", + "/packages/15/section_definitions/1" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 43, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "", - "www.testsite\u2026" - ] - } + "component": "StringEditQuantity" } ] }, - "name": "link_raw_data_for_stability_trace", - "description": "A link to where the data file for the stability data is stored\n- This is a beta feature. The plan is to create a file repository where the raw files for stability data can be stored and disseminated. With the link and associated protocols, it should be possible to programmatically access and analyse the raw stability data.", + "name": "tags", + "description": "Add a tag that can be used for search.", "type": { "type_kind": "python", "type_data": "str" }, - "shape": [] + "shape": [ + "*" + ] + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "experiment_identifiers", + "sub_section": "/packages/16/section_definitions/32" } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 16, + "m_parent_index": 13, "m_parent_sub_section": "section_definitions", - "name": "Outdoor", - "description": "A section describing measurements performed in outdoor conditions", + "name": "SampleID", + "description": "A base section that can be used for sample IDs. If the `sample_owner`, `sample_short_name`, `institute`, and `creation_datetime`\nquantities are provided, the sample_id will be automatically created as a combination\nof these four quantities.", + "base_sections": [ + "/packages/15/section_definitions/0" + ], "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -54975,17 +59213,16 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "BoolEditQuantity" + "component": "StringEditQuantity" } ] }, - "name": "tested", - "description": "TRUE if the performance of the cell has been tested outdoors.", + "name": "institute", + "description": "Alias/short name of the home institute of the owner, i.e. *HZB*.", "type": { - "type_kind": "python", - "type_data": "bool" - }, - "shape": [] + "type_kind": "python", + "type_data": "str" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -54994,19 +59231,12 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "", - "ISOS-O-1", - "IEC 61853-1" - ] - } + "component": "StringEditQuantity" } ] }, - "name": "protocol", - "description": "The protocol used for the outdoor testing.\n- For a more detailed discussion on protocols and standard nomenclature for stability measurements, please see the following paper:\no Consensus statement for stability assessment and reporting for perovskite photovoltaics based on ISOS procedures byM. V. Khenkin et al. Nat. Energ. 2020. DOI10.1038/s41560-019-0529-5\nExample:\nIEC 61853-1\nISOS-O-1\nISOS-O-2\nISOS-O-3", + "name": "sample_owner", + "description": "Name or alias of the process operator, e.g. jmp", "type": { "type_kind": "python", "type_data": "str" @@ -55020,17 +59250,16 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "DateTimeEditQuantity" } ] }, - "name": "average_over_n_number_of_cells", - "description": "The number of cells the reported outdoor data is based on.\nExample:\n- The preferred way to enter data is to give every individual cell its own entry in the data template/data base. If that is done, the data is an average over 1 cell.\n- If the reported data is not the data from one individual cell, but an average over N cells. Give the number of cells.\n- If the reported value is an average, but it is unknown over how many cells the value has been averaged (and no good estimate is available), state the number of cells as 2, which is the smallest number of cells that qualifies for an averaging procedure.", + "name": "creation_datetime", + "description": "Creation date of the sample.", "type": { - "type_kind": "numpy", - "type_data": "int64" - }, - "shape": [] + "type_kind": "custom", + "type_data": "nomad.metainfo.metainfo._Datetime" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -55039,32 +59268,16 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "", - "Italy", - "Switzerland", - "Slovenia", - "China", - "Great Britain", - "Colombia", - "Spain", - "Israel", - "Space International", - "Saudi Arabia" - ] - } + "component": "StringEditQuantity" } ] }, - "name": "location_country", - "description": "The country where the outdoor testing was occurring\n- For measurements conducted in space, state this as \u2019Space International\u2019\nExample:\nSweden\nSwitzerland\nSpace International", + "name": "sample_short_name", + "description": "A short name of the sample (the identifier scribed on the smaple,\nor in the sample container), e.g. 4001-8, YAG-2-34.\nThis is to be managed and decided internally by the labs,\nalthough we recomend to avoid the following characters on it: \"_\", \"/\", \"\" and \".\"", "type": { "type_kind": "python", "type_data": "str" - }, - "shape": [] + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -55073,286 +59286,326 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "", - "Ljubljana", - "Hong Kong" - ] - } + "component": "StringEditQuantity" } ] }, - "name": "location_city", - "description": "The city where the outdoor testing was occurring", + "name": "sample_id", + "description": "Full sample id. Ideally a human readable sample id convention,\nwhich is simple, understandable and still having chances of becoming unique.\nIf the `sample_owner`, `sample_short_name`, `\u00ecnstitute`, and `creation_datetime`\nare provided, this will be formed automatically by joining these components by an underscore (_).\nSpaces in any of the individual components will be replaced with hyphens (-).\nAn example would be hzb_oah_20200602_4001-08", + "type": { + "type_kind": "python", + "type_data": "str" + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 14, + "m_parent_sub_section": "section_definitions", + "name": "CASExperimentalProperty", + "description": "A section for experimental properties retrieved from the CAS API.", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "name", + "description": "CAS experimental property name.", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "property", + "description": "CAS experimental property.", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "name": "sourceNumber", + "description": "CAS experimental property source.", + "type": { + "type_kind": "python", + "type_data": "str" + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 15, + "m_parent_sub_section": "section_definitions", + "name": "CASPropertyCitation", + "description": "A section for citations of the experimental properties retrieved from the CAS API.", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "docUri", + "description": "CAS property citation document uri.", "type": { "type_kind": "python", "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "sourceNumber", + "more": { + "decription": "CAS property citation source number." }, - "shape": [] + "type": { + "type_kind": "python", + "type_data": "int" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "name": "source", + "description": "CAS property citation source.", + "type": { + "type_kind": "python", + "type_data": "str" + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 16, + "m_parent_sub_section": "section_definitions", + "name": "Substance", + "description": "A base section for any substance defined in the ELN.", + "base_sections": [ + "/packages/16/section_definitions/10" + ], + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "nan; nan" - ] - } + "component": "StringEditQuantity", + "label": "Substance name" } ] }, - "name": "location_coordinates", - "description": "The coordinates fort the places where the outdoor testing was occurring.\n- Use decimal degrees (DD) as the format.\nExample:\n59.839116; 17.647979\n52.428150; 13.532134", + "name": "name", + "description": "The name of the substance entry.", "type": { "type_kind": "python", "type_data": "str" - }, - "shape": [] + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 6, + "m_parent_index": 1, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "", - "Subtropical", - "Cold", - "Desert", - "Temperate" - ] - } + "component": "StringEditQuantity", + "label": "Substance ID" } ] }, - "name": "location_climate_zone", - "description": "The climate zone for the places where the outdoor testing was occurring.\nExample:\nCold\nDesert\nSubtropical\nTeperate\nTropical", + "name": "lab_id", + "description": "A human human readable substance ID that is at least unique for the lab.", "type": { "type_kind": "python", "type_data": "str" - }, - "shape": [] + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 7, + "m_parent_index": 2, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "StringEditQuantity", + "label": "CAS uri" } ] }, - "name": "installation_tilt", - "description": "The tilt of the installed solar cell.\n- A module lying flat on the ground have a tilt of 0\n- A module standing straight up has a tilt of 90", + "name": "cas_uri", + "description": "CAS uri", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "degree" + "type_kind": "python", + "type_data": "str" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 8, + "m_parent_index": 3, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "StringEditQuantity", + "label": "CAS number" } ] }, - "name": "installation_cardinal_direction", - "description": "The cardinal direction of the installed solar cell.\n- North is 0\n- East is 90\n- South is 180\n- West is 270", + "name": "cas_number", + "description": "CAS number.", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "degree" + "type_kind": "python", + "type_data": "str" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 9, + "m_parent_index": 4, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "StringEditQuantity", + "label": "CAS name" } ] }, - "name": "installation_number_of_solar_tracking_axis", - "description": "The number of tracking axis in the installation.", + "name": "cas_name", + "description": "CAS name.", "type": { - "type_kind": "numpy", - "type_data": "int64" - }, - "shape": [] + "type_kind": "python", + "type_data": "str" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 10, + "m_parent_index": 5, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "", - "Summer", - "Autumn; Spring; Summer; Winter", - "Autumn; Winter", - "Winter", - "Spring", - "Autumn; Summer" - ] - } + "component": "FileEditQuantity" + } + ], + "browser": [ + { + "adaptor": "RawFileAdaptor" } ] }, - "name": "time_season", - "description": "The time of year the outdoor testing was occurring.\n- Order the seasons in alphabetic order and separate them with semicolons.\n- For time periods longer than a year, state all four seasons once.\nExample:\nAutumn\nAutumn; Summer\nAutumn; Spring, Winter\nAutumn; Spring; Summer; Winter\nSpring; Winter", + "name": "image", + "description": "CAS image.", "type": { "type_kind": "python", "type_data": "str" - }, - "shape": [] + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 11, + "m_parent_index": 6, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "0000:00:00:00:00" - ] - } + "component": "StringEditQuantity" } ] }, - "name": "time_start", - "description": "The starting time for the outdoor measurement.", + "name": "inchi", + "description": "CAS inchi.", "type": { "type_kind": "python", "type_data": "str" - }, - "shape": [] + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 12, + "m_parent_index": 7, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "0000:00:00:00:00", - "0000:03:14:00:00" - ] - } + "component": "StringEditQuantity" } ] }, - "name": "time_end", - "description": "The ending time for the outdoor measurement.", + "name": "inchi_key", + "description": "CAS inchi key.", "type": { "type_kind": "python", "type_data": "str" - }, - "shape": [] + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 13, + "m_parent_index": 8, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "StringEditQuantity" } ] }, - "name": "time_total_exposure", - "description": "The total duration of the outdoor measurement in days.\n- If there are uncertainties, only state the best estimate, e.g. write 1000 and not 950-1050", + "name": "smile", + "description": "CAS smile.", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [] + "type_kind": "python", + "type_data": "str" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 14, + "m_parent_index": 9, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "", - "MPPT" - ] - } + "component": "StringEditQuantity" } ] }, - "name": "potential_bias_load_condition", - "description": "The Potentiostatic load condition during the outdoor measurement\n- When the cell is not connected to anything, state this as \u2018Open circuit\u2019\nExamples:\nConstant current\nConstant potential\nMPPT\nOpen circuit\nPassive resistance\nShort circuit", + "name": "canonical_smile", + "description": "CAS canonical smile.", "type": { "type_kind": "python", "type_data": "str" - }, - "shape": [] + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 15, + "m_parent_index": 10, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "nan; nan" - ] - } + "component": "StringEditQuantity" } ] }, - "name": "potential_bias_range", - "description": "The potential range during the outdoor measurement\n- Separate the lower and upper bound by a semicolon.\n- For constant values, state only that value.\n- For open circuit conditions, state this as \u2018nan\u2019\n- If there are uncertainties, only state the best estimate, e.g. write 1 and not 0.90-1.1\n- State unknown values as \u2018nan\u2019\nExample:\n0.9; 1.02\n1.5\nnan", + "name": "molecular_formula", + "description": "CAS molecular formula.", "type": { "type_kind": "python", "type_data": "str" - }, - "shape": [] + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 16, + "m_parent_index": 11, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -55361,107 +59614,183 @@ window.nomadArtifacts = { } ] }, - "name": "potential_bias_passive_resistance", - "description": "The passive resistance in the measurement circuit if a resistor was used\n- Give the value in ohm\n- If there are uncertainties, only state the best estimate, e.g. write 1.03 and not 1.01-1.05\n- If unknown or not applicable, leave this field empty.", + "name": "molecular_mass", + "description": "CAS molecular mass.", "type": { "type_kind": "numpy", "type_data": "float64" }, - "shape": [], - "unit": "ohm" + "unit": "dalton" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 17, + "m_parent_index": 12, + "m_parent_sub_section": "quantities", + "name": "cas_synonyms", + "description": "CAS synonyms.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 13, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "", - "Uncontrolled" - ] - } + "component": "RichTextEditQuantity", + "label": "Detailed substance description" } ] }, - "name": "temperature_load_condition", - "description": "The load situation of the temperature during the outdoor measurement.\n- If the temperature is constant during the entire stability measurement, state this as \u2018Constant\u2019.\n- If there is a cycling between colder and hotter conditions, state this as \u2018Cycled\u2019\n- If the temperature varies in an uncontrolled way, state this as \u2018Uncontrolled\u2019\n- This category was included after the projects initial phase wherefor the list of reported categories is\nshort. Thus, be prepared to expand the given list of alternatives in the data template.\nExample:\nConstant\nUncontrolled\nCycled", + "name": "description", + "description": "A field for adding additional information about the substance that is not captured\nby the other quantities and subsections.", "type": { "type_kind": "python", "type_data": "str" - }, - "shape": [] + } + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "cas_experimental_properties", + "sub_section": "/packages/8/section_definitions/14", + "repeats": true }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", + "name": "cas_property_citations", + "sub_section": "/packages/8/section_definitions/15", + "repeats": true + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 17, + "m_parent_sub_section": "section_definitions", + "name": "ElnWithFormulaBaseSection", + "description": "A generic abstract base section for ELNs that provides a few commonly used for items with a chemical formula, e.g. chemicals or samples.", + "base_sections": [ + "/packages/8/section_definitions/1" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 18, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "nan; nan", - "15; 60" - ] - } + "component": "StringEditQuantity" } ] }, - "name": "temperature_range", - "description": "The temperature range during the outdoor measurement\n- Separate the lower and upper bound by a semicolon.\n- For constant values, state only that value.\n- If there are uncertainties, only state the best estimate, e.g. write 1 and not 0.90-1.1\n- State unknown values as \u2018nan\u2019\nExample:\n30\n-10; 85\nnan", + "name": "chemical_formula", + "description": "The chemical formula. This will be used directly and indirectly in the search. The formula will be used itself as well as the extracted chemical elements.", "type": { "type_kind": "python", "type_data": "str" - }, - "shape": [] - }, + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 18, + "m_parent_sub_section": "section_definitions", + "name": "Chemical", + "description": "A ELN base section that can be used for chemicals.", + "base_sections": [ + "/packages/8/section_definitions/17" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 19, + "m_parent_sub_section": "section_definitions", + "name": "Sample", + "description": "A ELN base section that can be used for samples.", + "base_sections": [ + "/packages/8/section_definitions/17" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 20, + "m_parent_sub_section": "section_definitions", + "name": "ElnWithStructureFile", + "description": "A base section for for parsing crystal structure files, e.g. `.cif`, and populating the Material section in Results.", + "base_sections": [ + "/packages/15/section_definitions/0" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 19, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "FileEditQuantity" } ] }, - "name": "temperature_tmodule", - "description": "The effective temperature of the module during peak hours.", + "name": "structure_file", + "description": "The structure file.", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "degree_Celsius" - }, + "type_kind": "python", + "type_data": "str" + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 21, + "m_parent_sub_section": "section_definitions", + "name": "SolarCellDefinition", + "base_sections": [ + "/packages/15/section_definitions/0" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 20, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "BoolEditQuantity" + "component": "EnumEditQuantity", + "props": { + "suggestions": [] + } } ] }, - "name": "periodic_JV_measurements", - "description": "TRUE if the outdoor measurement periodically is interrupted for JV-measurements.", + "name": "stack_sequence", + "description": "The stack sequence describing the cell. Use the following formatting guidelines\n- Start with the substrate to the left and list the materials in each layer of the device\n- If two materials, e.g. A and B, are mixed in one layer, list the materials in alphabetic order and separate them with semicolons, as in (A; B)\n- The absorber layer in other databases is commonly stated with a generaic name as \u201cPerovskite\u201d, regardless of composition, mixtures, dimensionality etc.\n There are other fields to describe in depth the absorber layer.", "type": { "type_kind": "python", - "type_data": "bool" + "type_data": "str" }, - "shape": [] + "shape": [ + "*" + ] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 21, + "m_parent_index": 1, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -55470,75 +59799,115 @@ window.nomadArtifacts = { } ] }, - "name": "periodic_JV_measurements_time_between_measurements", - "description": "The average time between JV-measurement during the outdoor measurement.", + "name": "solar_cell_area", + "description": "The total cell area in cm^2.\nThe total area is defined as the area that would provide photovoltaic performance.", "type": { "type_kind": "numpy", "type_data": "float64" }, "shape": [], - "unit": "hour" + "unit": "centimeter ** 2" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 22, + "m_parent_index": 2, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Unknown", + "Pn-Heterojunction", + "Front contacted", + "Back contacted", + "pin", + "nip", + "Schottky" + ] + } } ] }, - "name": "PCE_initial_value", - "description": "The efficiency, PCE, of the cell before the measurement routine starts\n- Give the efficiency in %\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", + "name": "architecture", + "description": "The cell architecture with respect to the direction of current flow and\nthe order in which layers are deposited.\nThe two most common are nip (also referred to as normal) and pin (also referred to as inverted)\nbut there are also a few others, e.g. Back contacted.\n- *nip* architecture means that the electrons are collected at the substrate side.\nThe typical example is in perovskite solar cells when a TiO2 electron selective contact is deposited\nbetween the perovskite and the substrate (e.g. SLG | FTO | TiO2-c | Perovskite | \u2026)\n- *pin* architecture means that it instead is the holes that are collected at the substrate side. The typical example is when a PEDOT:PSS hole selective contact is deposited between the perovskite and the substrate (e.g. SLG | FTO | PEDOT:PSS |Perovskite | \u2026)", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, "shape": [] - }, + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 22, + "m_parent_sub_section": "section_definitions", + "name": "SolarCellLayer", + "base_sections": [ + "/packages/15/section_definitions/0" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 23, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "BoolEditQuantity" + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "Substrate", + "Absorber", + "Hole Transport Layer", + "Electron Transport Layer", + "Contact", + "Buffer", + "p-type contact", + "n-type contact", + "other" + ] + } } ] }, - "name": "PCE_burn_in_observed", - "description": "TRUE if the performance has a relatively fast initial decay after which the decay rate stabilises at a lower level.", + "name": "solar_cell_layer_type", + "description": "type of the layer", "type": { "type_kind": "python", - "type_data": "bool" + "type_data": "str" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 24, + "m_parent_index": 1, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "EnumEditQuantity", + "props": { + "suggestions": [] + } } ] }, - "name": "PCE_end_of_experiment", - "description": "The efficiency, PCE, of the cell at the end of the experiment\n- Give the efficiency in %\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", + "name": "layer_name", + "description": "The name of the layer.", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [] + "shape": [ + "0..*" + ] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 25, + "m_parent_index": 2, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -55547,18 +59916,29 @@ window.nomadArtifacts = { } ] }, - "name": "PCE_T95", - "description": "The time after which the cell performance has degraded by 5 % with respect to the initial performance.\n- If there are uncertainties, only state the best estimate, e.g. write 1000 and not 950-1050\n- If unknown or not applicable, leave this field empty.", + "name": "layer_thickness", + "description": "The thickness of the layer in nm.", "type": { "type_kind": "numpy", "type_data": "float64" }, "shape": [], - "unit": "hour" - }, + "unit": "nanometer" + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 23, + "m_parent_sub_section": "section_definitions", + "name": "SolarCellBaseSectionWithOptoelectronicProperties", + "base_sections": [ + "/packages/15/section_definitions/0" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 26, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -55567,78 +59947,129 @@ window.nomadArtifacts = { } ] }, - "name": "PCE_Ts95", - "description": "The time after which the cell performance has degraded by 5 % with respect to the performance after any initial burn in phase.\n- If there are uncertainties, only state the best estimate, e.g. write 1000 and not 950-1050\n- If unknown or not applicable, leave this field empty.", + "name": "bandgap", + "description": "The bandgap of the solar cell.", "type": { "type_kind": "numpy", "type_data": "float64" }, "shape": [], - "unit": "hour" - }, + "unit": "electron_volt" + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 24, + "m_parent_sub_section": "section_definitions", + "m_annotations": { + "plotly_graph_object": [ + { + "data": { + "x": "#voltage", + "y": "#current_density" + } + }, + { + "data": { + "x": "#voltage", + "y": "#current_density" + } + } + ] + }, + "name": "SolarCellJV", + "more": { + "label_quantity": "cell_name" + }, + "base_sections": [ + "/packages/0/section_definitions/3" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 27, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "FileEditQuantity" + } + ], + "browser": [ + { + "adaptor": "RawFileAdaptor" } ] }, - "name": "PCE_T80", - "description": "The time after which the cell performance has degraded by 20 % with respect to the initial performance.\n- If there are uncertainties, only state the best estimate, e.g. write 1000 and not 950-1050\n- If unknown or not applicable, leave this field empty.", + "name": "data_file", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "hour" + "type_kind": "python", + "type_data": "str" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 28, + "m_parent_index": 1, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "BoolEditQuantity" } ] }, - "name": "PCE_Ts80", - "description": "The time after which the cell performance has degraded by 20 % with respect to the performance after any initial burn in phase.\n- If there are uncertainties, only state the best estimate, e.g. write 1000 and not 950-1050\n- If unknown or not applicable, leave this field empty.", + "name": "certified_values", + "description": "TRUE if the IV data is measured by an independent and certification institute.\nIf your solar simulator is calibrated by a calibrated reference diode,\nthat does not count as a certified result.", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "bool" }, - "shape": [], - "unit": "hour" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 29, + "m_parent_index": 2, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "EnumEditQuantity", + "props": { + "suggestions": [ + "AIST, National Institute of Advanced Industrial Science and Technology", + "CPVT, National Center of Supervision and Inspection on Solar Photovoltaic Products Quality of China", + "CREST, Photovoltaic Meaasurement and calibration Laboratory at Universit of Loughborough", + "CSIRO, PV Performance Lab at Monash University", + "Fraunhofer ISE", + "Institute of Metrology (NIM) of China", + "KIER, Korea Institute of Energy Research", + "NIM, National Institute of Metrology of China", + "NREL", + "National Institute ofMetrology, China", + "Newport", + "Newport Corporation", + "PVEVL, National Central University, Taiwan", + "Photovoltaic and Wind Power Systems Quality Test Center, Chinese Academy of Sciences", + "Quality supervision\uff06Testing Center of Chemical\uff06Physical Power Sources of Information Industry", + "SIMIT, Shanghai Institute of Microsystem and Information Technology", + "Solar Power Lab at Arizona State University" + ] + } } ] }, - "name": "PCE_Te80", - "description": "An estimated T80 for cells that was not measured sufficiently long for them to degrade by 20 %. with respect to the initial performance.\n- This value will by definition have a significant uncertainty to it, as it is not measured but extrapolated under the assumption linearity but without a detailed and stabilised extrapolation protocol. This estimate is, however, not without value as it enables a ruff comparison between all cells for with the stability has been measured.\n- If there is an experimental T80, leave this field empty.", + "name": "certification_institute", + "description": "The name of the certification institute that has measured the certified device.\nExample:\nNewport\nNIM, National Institute of Metrology of China\nKIER, Korea Institute of Energy Research", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [], - "unit": "hour" + "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 30, + "m_parent_index": 3, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -55647,18 +60078,19 @@ window.nomadArtifacts = { } ] }, - "name": "PCE_Tse80", - "description": "An estimated T80s for cells that was not measured sufficiently long for them to degrade by 20 %. with respect to the performance after any initial burn in phase.\n- This value will by definition have a significant uncertainty to it, as it is not measured but extrapolated under the assumption linearity but without a detailed and stabilised extrapolation protocol. This estimate is, however, not without value as it enables a ruff comparison between all cells for with the stability has been measured.\n- If there is an experimental T80s, leave this field empty.", + "name": "light_intensity", + "description": "The light intensity during the IV measurement\n- If there are uncertainties, only state the best estimate, e.g. write 100 and not 90-100.\n- Standard AM 1.5 illumination correspond to 100 mW/cm2\n- If you need to convert from illumination given in lux; at 550 nm, 1 mW/cm2 corresponds to 6830 lux. Be aware that the conversion change with the spectrum used. As a rule of thumb for general fluorescent/LED light sources, around 0.31mW corresponded to 1000 lux. If your light intensity is measured in lux, it probably means that your light spectra deviates quite a lot from AM 1.5, wherefore it is very important that you also specify the light spectra in the next column.", "type": { "type_kind": "numpy", "type_data": "float64" }, "shape": [], - "unit": "hour" + "unit": "milliwatt / centimeter ** 2", + "default": 100.0 }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 31, + "m_parent_index": 4, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -55667,17 +60099,18 @@ window.nomadArtifacts = { } ] }, - "name": "PCE_after_1000_h", - "description": "The efficiency, PCE, of the cell after 1000 hours\n- Give the efficiency in %\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", + "name": "open_circuit_voltage", + "description": "Open circuit voltage.", "type": { "type_kind": "numpy", "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "volt" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 32, + "m_parent_index": 5, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ @@ -55686,319 +60119,153 @@ window.nomadArtifacts = { } ] }, - "name": "power_generated", - "description": "The yearly power generated during the measurement period in kWh/year/m^2.\n- If there are uncertainties, only state the best estimate, e.g. write 20.5 and not 19-20\n- If unknown or not applicable, leave this field empty.", + "name": "short_circuit_current_density", + "description": "Short circuit current density.", "type": { "type_kind": "numpy", "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "milliampere / centimeter ** 2" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 33, + "m_parent_index": 6, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "link_raw_data_for_outdoor_trace", - "description": "A link to where the data file for the measurement is stored\n- This is a beta feature. The plan is to create a file repository where the raw files for stability data can be stored and disseminated. With the link and associated protocols, it should be possible to programmatically access and analyse the raw data.", + "name": "fill_factor", + "description": "Fill factor.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 34, + "m_parent_index": 7, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "BoolEditQuantity" + "component": "NumberEditQuantity" } ] }, - "name": "detaild_weather_data_available", - "description": "TRUE if detailed weather data is available for the measurement period", + "name": "efficiency", + "description": "Power conversion efficiency.", "type": { - "type_kind": "python", - "type_data": "bool" + "type_kind": "numpy", + "type_data": "float64" }, "shape": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 35, + "m_parent_index": 8, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "link_detailed_weather_data", - "description": "A link to where the data file for the measurement is stored\n- This is a beta feature. The plan is to create a file repository where the raw files for stability data can be stored and disseminated. With the link and associated protocols, it should be possible to programmatically access and analyse the raw data.", + "name": "potential_at_maximum_power_point", + "description": "The potential at the maximum power point, Vmp.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "volt" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 36, + "m_parent_index": 9, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "BoolEditQuantity" + "component": "NumberEditQuantity" } ] }, - "name": "spectral_data_available", - "description": "TRUE measured spectral data are available for the measurement period", + "name": "current_density_at_maximun_power_point", + "description": "The current density at the maximum power point, *Jmp*.", "type": { - "type_kind": "python", - "type_data": "bool" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "milliampere / centimeter ** 2" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 37, + "m_parent_index": 10, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "" - ] - } + "component": "NumberEditQuantity" } ] }, - "name": "link_spectral_data", - "description": "A link to where the data file for the measurement is stored\n- This is a beta feature. The plan is to create a file repository where the raw files for stability data can be stored and disseminated. With the link and associated protocols, it should be possible to programmatically access and analyse the raw data.", + "name": "series_resistance", + "description": "The series resistance as extracted from the *J-V* curve.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "centimeter ** 2 * ohm" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 38, + "m_parent_index": 11, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "BoolEditQuantity" + "component": "NumberEditQuantity" } ] }, - "name": "irradiance_measured", - "description": "TRUE measured irradiance data are available for the measurement period", + "name": "shunt_resistance", + "description": "The shunt resistance as extracted from the *J-V* curve.", "type": { - "type_kind": "python", - "type_data": "bool" + "type_kind": "numpy", + "type_data": "float64" }, - "shape": [] + "shape": [], + "unit": "centimeter ** 2 * ohm" }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 39, + "m_parent_index": 12, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "" - ] - } - } - ] - }, - "name": "link_irradiance_data", - "description": "A link to where the data file for the measurement is stored\n- This is a beta feature. The plan is to create a file repository where the raw files for stability data can be stored and disseminated. With the link and associated protocols, it should be possible to programmatically access and analyse the raw data.", + "name": "n_values", "type": { "type_kind": "python", - "type_data": "str" - }, - "shape": [] - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 17, - "m_parent_sub_section": "section_definitions", - "m_annotations": { - "eln": [ - { - "lane_width": "400px" - } - ] - }, - "name": "PerovskiteSolarCell", - "label": "Perovskite Solar Cell", - "description": "This schema is adapted to map the data in the [Perovskite Solar Cell Database Project](https://www.perovskitedatabase.com/). The descriptions in the quantities\nrepresent the instructions given to the user who manually curated the data.", - "categories": [ - "/packages/14/category_definitions/4" - ], - "base_sections": [ - "/packages/14/section_definitions/1" - ], - "sub_sections": [ - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 0, - "m_parent_sub_section": "sub_sections", - "name": "ref", - "sub_section": "/packages/6/section_definitions/0" - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 1, - "m_parent_sub_section": "sub_sections", - "name": "cell", - "sub_section": "/packages/6/section_definitions/1" - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 2, - "m_parent_sub_section": "sub_sections", - "name": "module", - "sub_section": "/packages/6/section_definitions/2" - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 3, - "m_parent_sub_section": "sub_sections", - "name": "substrate", - "sub_section": "/packages/6/section_definitions/3" - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 4, - "m_parent_sub_section": "sub_sections", - "name": "etl", - "sub_section": "/packages/6/section_definitions/4" - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 5, - "m_parent_sub_section": "sub_sections", - "name": "perovskite", - "sub_section": "/packages/6/section_definitions/5" - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 6, - "m_parent_sub_section": "sub_sections", - "name": "perovskite_deposition", - "sub_section": "/packages/6/section_definitions/6" - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 7, - "m_parent_sub_section": "sub_sections", - "name": "htl", - "sub_section": "/packages/6/section_definitions/7" - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 8, - "m_parent_sub_section": "sub_sections", - "name": "backcontact", - "sub_section": "/packages/6/section_definitions/8" - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 9, - "m_parent_sub_section": "sub_sections", - "name": "add", - "sub_section": "/packages/6/section_definitions/9" - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 10, - "m_parent_sub_section": "sub_sections", - "name": "encapsulation", - "sub_section": "/packages/6/section_definitions/10" - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 11, - "m_parent_sub_section": "sub_sections", - "name": "jv", - "sub_section": "/packages/6/section_definitions/12" - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 12, - "m_parent_sub_section": "sub_sections", - "name": "stabilised", - "sub_section": "/packages/6/section_definitions/13" - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 13, - "m_parent_sub_section": "sub_sections", - "name": "eqe", - "sub_section": "/packages/6/section_definitions/14" - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 14, - "m_parent_sub_section": "sub_sections", - "name": "stability", - "sub_section": "/packages/6/section_definitions/15" - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 15, - "m_parent_sub_section": "sub_sections", - "name": "outdoor", - "sub_section": "/packages/6/section_definitions/16" - } - ] - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Package", - "m_parent_index": 7, - "m_parent_sub_section": "packages", - "name": "nomad.datamodel.metainfo.eln.nexus_data_converter", - "section_definitions": [ + "type_data": "int" + }, + "virtual": true + } + ] + }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 0, + "m_parent_index": 25, "m_parent_sub_section": "section_definitions", - "name": "ElnYamlConverter", + "name": "SolarCellJVCurve", "base_sections": [ - "/packages/14/section_definitions/1" + "/packages/8/section_definitions/24" ], "quantities": [ { @@ -56010,30 +60277,100 @@ window.nomadArtifacts = { { "component": "StringEditQuantity" } - ], - "browser": [ - { - "adaptor": "RawFileAdaptor" - } ] }, - "name": "output", - "description": "Output yaml file to save all the data. Default: eln_data.yaml", + "name": "cell_name", + "description": "Cell identification name.", "type": { "type_kind": "python", "type_data": "str" }, - "default": "eln_data.yaml" + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "current_density", + "description": "Current density array of the *JV* curve.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "n_values" + ], + "unit": "milliampere / centimeter ** 2" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "name": "voltage", + "description": "Voltage array of the of the *JV* curve.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "n_values" + ], + "unit": "volt" } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 1, + "m_parent_index": 26, "m_parent_sub_section": "section_definitions", - "name": "NexusDataConverter", + "m_annotations": { + "eln": [ + { + "lane_width": "600px" + } + ], + "plotly_graph_object": [ + { + "data": { + "x": "#photon_energy_array", + "y": "#raw_eqe_array" + } + }, + { + "data": { + "x": "#raw_photon_energy_array", + "y": "#raw_eqe_array" + } + }, + { + "data": { + "x": "#raw_wavelength_array", + "y": "#raw_eqe_array" + } + }, + { + "data": { + "x": "#photon_energy_array", + "y": "#eqe_array" + } + }, + { + "data": { + "x": "#wavelength_array", + "y": "#eqe_array" + } + }, + { + "data": { + "x": "#photon_energy_array", + "y": "#eqe_array" + } + } + ] + }, + "name": "SolarCellEQE", "base_sections": [ - "/packages/14/section_definitions/1" + "/packages/0/section_definitions/3" ], "quantities": [ { @@ -56043,28 +60380,20 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "AutocompleteEditQuantity" + "component": "FileEditQuantity" + } + ], + "browser": [ + { + "adaptor": "RawFileAdaptor" } ] }, - "name": "reader", - "description": "The reader needed to run the Nexus converter.", + "name": "eqe_data_file", + "description": "Drop here your eqe file and click save for processing.", "type": { - "type_kind": "Enum", - "type_data": [ - "apm", - "ellips", - "em_nion", - "em_spctrscpy", - "example", - "hall", - "json_map", - "json_yml", - "mpes", - "rii_database", - "transmission", - "xps" - ] + "type_kind": "python", + "type_data": "str" } }, { @@ -56074,213 +60403,17 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "AutocompleteEditQuantity" + "component": "NumberEditQuantity" } ] }, - "name": "nxdl", - "description": "The nxdl needed for running the Nexus converter.", + "name": "header_lines", + "description": "Number of header lines in the file. Edit in case your file has a header.", "type": { - "type_kind": "Enum", - "type_data": [ - "NXarchive", - "NXarpes", - "NXcanSAS", - "NXdirecttof", - "NXfluo", - "NXindirecttof", - "NXiqproc", - "NXlauetof", - "NXmonopd", - "NXmx", - "NXrefscan", - "NXreftof", - "NXsas", - "NXsastof", - "NXscan", - "NXspe", - "NXsqom", - "NXstxm", - "NXtas", - "NXtofnpd", - "NXtofraw", - "NXtofsingle", - "NXtomo", - "NXtomophase", - "NXtomoproc", - "NXxas", - "NXxasproc", - "NXxbase", - "NXxeuler", - "NXxkappa", - "NXxlaue", - "NXxlaueplate", - "NXxnb", - "NXxrot", - "NXaberration", - "NXaperture", - "NXaperture_em", - "NXapm", - "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", - "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_roi_set", - "NXcg_sphere_set", - "NXcg_tetrahedron_set", - "NXcg_triangle_set", - "NXcg_triangulated_surface_mesh", - "NXcg_unit_normal_set", - "NXchamber", - "NXchemical_composition", - "NXclustering", - "NXcollectioncolumn", - "NXcontainer", - "NXcoordinate_system_set", - "NXcorrector_cs", - "NXcs_computer", - "NXcs_cpu", - "NXcs_filter_boolean_mask", - "NXcs_gpu", - "NXcs_io_obj", - "NXcs_io_sys", - "NXcs_mm_sys", - "NXcs_prng", - "NXcs_profiling", - "NXcs_profiling_event", - "NXcsg", - "NXcxi_ptycho", - "NXdeflector", - "NXdelocalization", - "NXdetector", - "NXdispersion", - "NXdispersion_function", - "NXdispersion_repeated_parameter", - "NXdispersion_single_parameter", - "NXdispersion_table", - "NXdispersive_material", - "NXdistortion", - "NXebeam_column", - "NXelectronanalyser", - "NXelectrostatic_kicker", - "NXellipsometry", - "NXem", - "NXem_ebsd", - "NXem_ebsd_conventions", - "NXem_ebsd_crystal_structure_model", - "NXenergydispersion", - "NXentry", - "NXevent_data_em", - "NXevent_data_em_set", - "NXfabrication", - "NXgraph_edge_set", - "NXgraph_node_set", - "NXgraph_root", - "NXibeam_column", - "NXimage_set_em", - "NXimage_set_em_adf", - "NXimage_set_em_bf", - "NXimage_set_em_bse", - "NXimage_set_em_chamber", - "NXimage_set_em_df", - "NXimage_set_em_diffrac", - "NXimage_set_em_ecci", - "NXimage_set_em_kikuchi", - "NXimage_set_em_ronchigram", - "NXimage_set_em_se", - "NXinstrument", - "NXinteraction_vol_em", - "NXion", - "NXisocontour", - "NXiv_temp", - "NXlab_electro_chemo_mechanical_preparation", - "NXlab_sample_mounting", - "NXlens_em", - "NXmagnetic_kicker", - "NXmanipulator", - "NXmatch_filter", - "NXmpes", - "NXms", - "NXms_atom_set", - "NXms_crystal_set", - "NXms_dislocation_set", - "NXms_interface_set", - "NXms_score_config", - "NXms_score_results", - "NXms_snapshot", - "NXms_snapshot_set", - "NXoptical_system_em", - "NXorientation_set", - "NXpeak", - "NXpid", - "NXprocess", - "NXprogram", - "NXpulser_apm", - "NXpump", - "NXquadric", - "NXquadrupole_magnet", - "NXreflectron", - "NXregion", - "NXregistration", - "NXsample", - "NXscanbox_em", - "NXsensor_scan", - "NXseparator", - "NXsimilarity_grouping", - "NXslip_system_set", - "NXsnsevent", - "NXsnshisto", - "NXsolenoid_magnet", - "NXsolid_geometry", - "NXsource", - "NXspatial_filter", - "NXspectrum_set_em_auger", - "NXspectrum_set_em_cathodolum", - "NXspectrum_set_em_eels", - "NXspectrum_set_em_xray", - "NXspin_rotator", - "NXspindispersion", - "NXstage_lab", - "NXsubsampling_filter", - "NXtransmission", - "NXxpcs", - "NXroot" - ] - } + "type_kind": "numpy", + "type_data": "int64" + }, + "default": 0 }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -56289,48 +60422,241 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "FileEditQuantity" + "component": "NumberEditQuantity" } - ], - "browser": [ + ] + }, + "name": "light_bias", + "description": "The light intensity of any bias light during the EQE measurement.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [], + "unit": "milliwatt / centimeter ** 2" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 3, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ { - "adaptor": "RawFileAdaptor" + "component": "NumberEditQuantity" } ] }, - "name": "input_files", - "description": "Input files needed to run the nexus converter.", + "name": "bandgap_eqe", + "description": "Bandgap derived from the EQE spectrum.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [], + "unit": "electron_volt" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 4, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "NumberEditQuantity" + } + ] + }, + "name": "integrated_jsc", + "description": "The integrated short circuit current density $J_{SC}$ from the product of the EQE spectrum\nwith the *AM 1.5G* sun spectrum.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [], + "unit": "milliampere / centimeter ** 2" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 5, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "NumberEditQuantity" + } + ] + }, + "name": "integrated_j0rad", + "description": "The integrated $J_{0, Rad}$ derived from the EQE data.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [], + "unit": "milliampere / centimeter ** 2" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 6, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "NumberEditQuantity" + } + ] + }, + "name": "voc_rad", + "description": "Radiative $V_{OC}$ derived from the EQE data in V.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [], + "unit": "volt" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 7, + "m_parent_sub_section": "quantities", + "m_annotations": { + "eln": [ + { + "component": "NumberEditQuantity" + } + ] + }, + "name": "urbach_energy", + "description": "Urbach energy fitted from the eqe in eV.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [], + "unit": "electron_volt" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 8, + "m_parent_sub_section": "quantities", + "name": "urbach_energy_fit_std_dev", + "description": "Standard deviation of the fitted Urbach energy parameter from the eqe in eV.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [], + "unit": "electron_volt" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 9, + "m_parent_sub_section": "quantities", + "name": "n_values", "type": { "type_kind": "python", - "type_data": "str" + "type_data": "int" + }, + "virtual": true + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 10, + "m_parent_sub_section": "quantities", + "name": "n_raw_values", + "type": { + "type_kind": "python", + "type_data": "int" + }, + "virtual": true + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 11, + "m_parent_sub_section": "quantities", + "name": "raw_eqe_array", + "description": "EQE array of the spectrum", + "type": { + "type_kind": "numpy", + "type_data": "float64" }, "shape": [ - "*" + "n_raw_values" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 12, + "m_parent_sub_section": "quantities", + "name": "raw_photon_energy_array", + "description": "Raw Photon energy array of the eqe spectrum", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "n_raw_values" + ], + "unit": "electron_volt" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 13, + "m_parent_sub_section": "quantities", + "name": "raw_wavelength_array", + "description": "Raw wavelength array of the eqe spectrum", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "n_raw_values" + ], + "unit": "nanometer" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 14, + "m_parent_sub_section": "quantities", + "name": "eqe_array", + "description": "EQE array of the spectrum", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "n_values" ] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, + "m_parent_index": 15, + "m_parent_sub_section": "quantities", + "name": "wavelength_array", + "description": "Interpolated/extrapolated wavelength array with *E<sub>u</sub>* of the eqe spectrum", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "n_values" + ], + "unit": "nanometer" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 16, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "StringEditQuantity" - } - ], - "browser": [ - { - "adaptor": "RawFileAdaptor" - } - ] - }, - "name": "output", - "description": "Output Nexus filename to save all the data. Default: output.nxs", + "name": "photon_energy_array", + "description": "Interpolated/extrapolated photon energy array with a *E<sub>u</sub>* of the eqe spectrum", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, - "default": "output.nxs" + "shape": [ + "n_values" + ], + "unit": "electron_volt" } ] } @@ -56338,32 +60664,48 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Package", - "m_parent_index": 8, + "m_parent_index": 9, "m_parent_sub_section": "packages", - "name": "nomad.datamodel.metainfo.eln", + "name": "nomad.datamodel.metainfo.downloads", "section_definitions": [ { "m_def": "nomad.metainfo.metainfo.Section", "m_parent_index": 0, "m_parent_sub_section": "section_definitions", - "name": "User", + "name": "Download", "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "AuthorEditQuantity" - } - ] + "name": "url", + "description": "A valid and downloadable URL. Will be downloaded on the servers that\nrun this entries processing (e.g. NOMAD servers). The files will be\nadded to the given output directory.", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "output", + "description": "A relative path that denotes the file to download the given URL to.\nAny parent directories will be created if they do not exist.\nFiles that are marked to be extracted will be downloaded and extracted into\nthe parent directory of the given file path.", + "type": { + "type_kind": "python", + "type_data": "str" }, - "name": "user", - "description": "The corresponding user for the activity.", + "default": "./" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "name": "extract", + "description": "If the given URL denotes a compressed file and this flag is set to true,\nthe downloaded file will be extracted and removed. Supported file formats\nare `.zip`, `.tgz`, `.tar.gz`.", "type": { - "type_kind": "Author", - "type_data": "Author" + "type_kind": "python", + "type_data": "bool" } } ] @@ -56372,26 +60714,18 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Section", "m_parent_index": 1, "m_parent_sub_section": "section_definitions", - "name": "ElnBaseSection", - "description": "A generic abstract base section for ELNs that provides a few commonly used properties. If you inherit from this section, but do not need some quantities, list those\nquantities in the `eln.hide` annotation of your inheriting section definition.\n\nBesides predefining some quantities, these base sections will add some metadata\nto NOMAD's search. A particular example are `tags`, if you define a string\nor enum quantity in your sections named `tags`, its values will be searchable.", + "name": "Downloads", + "description": "Allows you to upload a very small file that will add very large files to your upload. Imagine there are large file resources in the internet (e.g. on a data sharing service)\nthat you need to add to your upload. This way you do not need to download those large\nfiles first, just to upload them to NOMAD.\n\nWhen this section is processed, it will download files from given URLs, add\nthem to the upload, and trigger processing for given mainfiles.", "base_sections": [ - "/packages/14/section_definitions/0" + "/packages/15/section_definitions/0" ], "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "StringEditQuantity", - "label": "Short name" - } - ] - }, - "name": "name", - "description": "A short human readable and descriptive name.", + "name": "description", + "description": "Provides some additional description for these downloads.", "type": { "type_kind": "python", "type_data": "str" @@ -56401,34 +60735,83 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "DateTimeEditQuantity" - } - ] + "name": "mainfiles", + "description": "A list of relative paths that denote mainfiles. These files are subjected\nto NOMAD processing after all files have been downloaded and potentially\nextracted.", + "type": { + "type_kind": "python", + "type_data": "str" }, - "name": "datetime", - "description": "The date and time associated with this section.", + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "name": "skip_download", + "description": "If true, the downloads will not be performed and no processing is triggered.\nIf false, this will be changed to true by the processing after performing\nthe downloads.", "type": { - "type_kind": "custom", - "type_data": "nomad.metainfo.metainfo._Datetime" + "type_kind": "python", + "type_data": "bool" + } + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "downloads", + "description": "Defines URLs and how to download them.", + "sub_section": "/packages/9/section_definitions/0", + "repeats": true + } + ] + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Package", + "m_parent_index": 10, + "m_parent_sub_section": "packages", + "name": "nomad.datamodel.metainfo.eln.labfolder", + "section_definitions": [ + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 0, + "m_parent_sub_section": "section_definitions", + "name": "LabfolderDataElementDataContent", + "description": "The content of a labfolder data grid.", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "title", + "description": "the title of the table", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "type", + "description": "type", + "type": { + "type_kind": "python", + "type_data": "str" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 2, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "StringEditQuantity", - "label": "ID" - } - ] - }, - "name": "lab_id", - "description": "An ID string that is unique at least for the lab that produced this\ndata.", + "name": "value", + "description": "value", "type": { "type_kind": "python", "type_data": "str" @@ -56438,172 +60821,268 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 3, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "RichTextEditQuantity" - } - ] - }, - "name": "description", - "description": "Any information that cannot be captured in the other fields.", + "name": "unit", + "description": "unit", "type": { "type_kind": "python", "type_data": "str" } - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 2, - "m_parent_sub_section": "section_definitions", - "m_annotations": { - "eln": [ - { - "lane_width": "600px" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 4, + "m_parent_sub_section": "quantities", + "name": "physical_quantity_id", + "description": "physical_quantity_id", + "type": { + "type_kind": "python", + "type_data": "str" } - ] - }, - "name": "BasicEln", - "label": "Basic ELN", - "description": "The most basic ELN to instantiate.", - "categories": [ - "/packages/14/category_definitions/2" - ], - "base_sections": [ - "/packages/8/section_definitions/1", - "/packages/14/section_definitions/1" - ], - "quantities": [ + }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, + "m_parent_index": 5, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "StringEditQuantity" - } - ] - }, - "name": "tags", - "description": "Add a tag that can be used for search.", + "name": "description", + "description": "physical_quantity_id", "type": { "type_kind": "python", "type_data": "str" - }, - "shape": [ - "*" - ] + } + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "children", + "sub_section": "/packages/10/section_definitions/1", + "repeats": true } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 3, + "m_parent_index": 1, "m_parent_sub_section": "section_definitions", - "name": "ElnWithFormulaBaseSection", - "description": "A generic abstract base section for ELNs that provides a few commonly used for items with a chemical formula, e.g. chemicals or samples.", - "base_sections": [ - "/packages/8/section_definitions/1" - ], + "name": "LabfolderDataElementGrid", + "description": "A labfolder grid containing data elements.", "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "StringEditQuantity" - } - ] - }, - "name": "chemical_formula", - "description": "The chemical formula. This will be used directly and indirectly in the search. The formula will be used itself as well as the extracted chemical elements.", + "name": "title", + "description": "the title of the table", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "type", + "description": "the title of the table", "type": { "type_kind": "python", "type_data": "str" } } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "children", + "sub_section": "/packages/10/section_definitions/0", + "repeats": true + } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 4, - "m_parent_sub_section": "section_definitions", - "name": "Chemical", - "description": "A ELN base section that can be used for chemicals.", - "base_sections": [ - "/packages/8/section_definitions/3" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 5, - "m_parent_sub_section": "section_definitions", - "name": "Sample", - "description": "A ELN base section that can be used for samples.", - "base_sections": [ - "/packages/8/section_definitions/3" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 6, + "m_parent_index": 2, "m_parent_sub_section": "section_definitions", - "name": "ElnWithStructureFile", - "description": "A base section for for parsing crystal structure files, e.g. `.cif`, and populating the Material section in Results.", - "base_sections": [ - "/packages/14/section_definitions/0" - ], + "name": "LabfolderElement", + "more": { + "label_quantity": "element_type" + }, "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "FileEditQuantity" - } - ] - }, - "name": "structure_file", - "description": "The structure file.", + "name": "id", + "description": "the stable pointer to the element", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "entry_id", + "description": "the id of the stable pointer to the entry", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "name": "version_id", + "description": "the unique id of the element", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 3, + "m_parent_sub_section": "quantities", + "name": "version_date", + "description": "the creation date of the entry element version (same with the creation date on the first version)", + "type": { + "type_kind": "custom", + "type_data": "nomad.metainfo.metainfo._Datetime" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 4, + "m_parent_sub_section": "quantities", + "name": "creation_date", + "description": "the creation date of the entry element (first version)", + "type": { + "type_kind": "custom", + "type_data": "nomad.metainfo.metainfo._Datetime" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 5, + "m_parent_sub_section": "quantities", + "name": "owner_id", + "description": "the id of the original author", "type": { "type_kind": "python", "type_data": "str" } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 6, + "m_parent_sub_section": "quantities", + "name": "element_type", + "description": "Denotes that this is a file element. The value is always `FILE`", + "type": { + "type_kind": "Enum", + "type_data": [ + "TEXT", + "DATA", + "FILE" + ] + } } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 7, + "m_parent_index": 3, "m_parent_sub_section": "section_definitions", - "name": "SolarCellDefinition", - "base_sections": [ - "/packages/14/section_definitions/0" - ], + "name": "LabfolderEntry", + "more": { + "label_quantity": "title" + }, "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "EnumEditQuantity", - "props": { - "suggestions": [] - } - } - ] + "name": "id", + "description": "Labfolder entry id", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "version_id", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "name": "author_id", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 3, + "m_parent_sub_section": "quantities", + "name": "project_id", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 4, + "m_parent_sub_section": "quantities", + "name": "version_date", + "type": { + "type_kind": "custom", + "type_data": "nomad.metainfo.metainfo._Datetime" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 5, + "m_parent_sub_section": "quantities", + "name": "creation_date", + "type": { + "type_kind": "custom", + "type_data": "nomad.metainfo.metainfo._Datetime" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 6, + "m_parent_sub_section": "quantities", + "name": "custom_dates", + "type": { + "type_kind": "custom", + "type_data": "nomad.metainfo.metainfo._Datetime" }, - "name": "stack_sequence", - "description": "The stack sequence describing the cell. Use the following formatting guidelines\n- Start with the substrate to the left and list the materials in each layer of the device\n- If two materials, e.g. A and B, are mixed in one layer, list the materials in alphabetic order and separate them with semicolons, as in (A; B)\n- The absorber layer in other databases is commonly stated with a generaic name as \u201cPerovskite\u201d, regardless of composition, mixtures, dimensionality etc.\n There are other fields to describe in depth the absorber layer.", + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 7, + "m_parent_sub_section": "quantities", + "name": "tags", "type": { "type_kind": "python", "type_data": "str" @@ -56614,203 +61093,150 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, + "m_parent_index": 8, + "m_parent_sub_section": "quantities", + "name": "title", + "description": "Labfolder entry title", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 9, + "m_parent_sub_section": "quantities", + "name": "hidden", + "type": { + "type_kind": "python", + "type_data": "bool" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 10, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "NumberEditQuantity" - } - ] - }, - "name": "solar_cell_area", - "description": "The total cell area in cm^2.\nThe total area is defined as the area that would provide photovoltaic performance.", + "name": "editable", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "centimeter ** 2" - }, + "type_kind": "python", + "type_data": "bool" + } + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "elements", + "sub_section": "/packages/10/section_definitions/2", + "repeats": true + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 4, + "m_parent_sub_section": "section_definitions", + "name": "LabfolderTextElement", + "base_sections": [ + "/packages/10/section_definitions/2" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { - "eln": [ - { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Unknown", - "Pn-Heterojunction", - "Front contacted", - "Back contacted", - "pin", - "nip", - "Schottky" - ] - } - } + "browser": [ + {} ] }, - "name": "architecture", - "description": "The cell architecture with respect to the direction of current flow and\nthe order in which layers are deposited.\nThe two most common are nip (also referred to as normal) and pin (also referred to as inverted)\nbut there are also a few others, e.g. Back contacted.\n- *nip* architecture means that the electrons are collected at the substrate side.\nThe typical example is in perovskite solar cells when a TiO2 electron selective contact is deposited\nbetween the perovskite and the substrate (e.g. SLG | FTO | TiO2-c | Perovskite | \u2026)\n- *pin* architecture means that it instead is the holes that are collected at the substrate side. The typical example is when a PEDOT:PSS hole selective contact is deposited between the perovskite and the substrate (e.g. SLG | FTO | PEDOT:PSS |Perovskite | \u2026)", + "name": "content", + "description": "The text based content of this element", "type": { "type_kind": "python", "type_data": "str" - }, - "shape": [] + } } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 8, + "m_parent_index": 5, "m_parent_sub_section": "section_definitions", - "name": "SolarCellLayer", + "name": "LabfolderFileElement", "base_sections": [ - "/packages/14/section_definitions/0" + "/packages/10/section_definitions/2" ], "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "Substrate", - "Absorber", - "Hole Transport Layer", - "Electron Transport Layer", - "Contact", - "Buffer", - "p-type contact", - "n-type contact", - "other" - ] - } - } - ] - }, - "name": "solar_cell_layer_type", - "description": "type of the layer", + "name": "file_name", + "description": "The name of the file", "type": { "type_kind": "python", "type_data": "str" - }, - "shape": [] + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "EnumEditQuantity", - "props": { - "suggestions": [] - } - } - ] - }, - "name": "layer_name", - "description": "The name of the layer.", + "name": "file_size", + "description": "The size of the file in bytes", "type": { "type_kind": "python", - "type_data": "str" - }, - "shape": [ - "0..*" - ] + "type_data": "int" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 2, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "NumberEditQuantity" - } - ] - }, - "name": "layer_thickness", - "description": "The thickness of the layer in nm.", + "name": "content_type", + "description": "The type of the binary content which is sent on header parameter `Content-Type`", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "nanometer" - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 9, - "m_parent_sub_section": "section_definitions", - "name": "SolarCellBaseSectionWithOptoelectronicProperties", - "base_sections": [ - "/packages/14/section_definitions/0" - ], - "quantities": [ + "type_kind": "python", + "type_data": "str" + } + }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, + "m_parent_index": 3, "m_parent_sub_section": "quantities", "m_annotations": { - "eln": [ + "browser": [ { - "component": "NumberEditQuantity" + "adaptor": "RawFileAdaptor" } ] }, - "name": "bandgap", - "description": "The bandgap of the solar cell.", + "name": "file", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "electron_volt" + "type_kind": "python", + "type_data": "str" + } } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 10, + "m_parent_index": 6, "m_parent_sub_section": "section_definitions", - "name": "SolarCellJV", - "more": { - "label_quantity": "cell_name" - }, + "name": "LabfolderImageElement", "base_sections": [ - "/packages/14/section_definitions/0" + "/packages/10/section_definitions/2" ], "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "FileEditQuantity" - } - ], - "browser": [ - { - "adaptor": "RawFileAdaptor" - } - ] - }, - "name": "data_file", + "name": "title", + "description": "the title of the image element", "type": { "type_kind": "python", "type_data": "str" @@ -56820,343 +61246,268 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "BoolEditQuantity" - } - ] - }, - "name": "certified_values", - "description": "TRUE if the IV data is measured by an independent and certification institute.\nIf your solar simulator is calibrated by a calibrated reference diode,\nthat does not count as a certified result.", + "name": "file_size", + "description": "the size of the image file in bytes", "type": { "type_kind": "python", - "type_data": "bool" - }, - "shape": [] + "type_data": "int" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 2, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "EnumEditQuantity", - "props": { - "suggestions": [ - "AIST, National Institute of Advanced Industrial Science and Technology", - "CPVT, National Center of Supervision and Inspection on Solar Photovoltaic Products Quality of China", - "CREST, Photovoltaic Meaasurement and calibration Laboratory at Universit of Loughborough", - "CSIRO, PV Performance Lab at Monash University", - "Fraunhofer ISE", - "Institute of Metrology (NIM) of China", - "KIER, Korea Institute of Energy Research", - "NIM, National Institute of Metrology of China", - "NREL", - "National Institute ofMetrology, China", - "Newport", - "Newport Corporation", - "PVEVL, National Central University, Taiwan", - "Photovoltaic and Wind Power Systems Quality Test Center, Chinese Academy of Sciences", - "Quality supervision\uff06Testing Center of Chemical\uff06Physical Power Sources of Information Industry", - "SIMIT, Shanghai Institute of Microsystem and Information Technology", - "Solar Power Lab at Arizona State University" - ] - } - } - ] - }, - "name": "certification_institute", - "description": "The name of the certification institute that has measured the certified device.\nExample:\nNewport\nNIM, National Institute of Metrology of China\nKIER, Korea Institute of Energy Research", + "name": "preview_height", + "description": "height of the downscaled image version, in px", "type": { "type_kind": "python", - "type_data": "str" - }, - "shape": [] + "type_data": "int" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 3, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "NumberEditQuantity" - } - ] - }, - "name": "light_intensity", - "description": "The light intensity during the IV measurement\n- If there are uncertainties, only state the best estimate, e.g. write 100 and not 90-100.\n- Standard AM 1.5 illumination correspond to 100 mW/cm2\n- If you need to convert from illumination given in lux; at 550 nm, 1 mW/cm2 corresponds to 6830 lux. Be aware that the conversion change with the spectrum used. As a rule of thumb for general fluorescent/LED light sources, around 0.31mW corresponded to 1000 lux. If your light intensity is measured in lux, it probably means that your light spectra deviates quite a lot from AM 1.5, wherefore it is very important that you also specify the light spectra in the next column.", + "name": "preview_width", + "description": "width of the downscaled image version, in px", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "milliwatt / centimeter ** 2", - "default": 100.0 + "type_kind": "python", + "type_data": "int" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 4, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "NumberEditQuantity" - } - ] - }, - "name": "open_circuit_voltage", - "description": "Open circuit voltage.", + "name": "preview_zoom", + "description": "image zoom in the ELN UI, in percentage", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "volt" + "type_kind": "python", + "type_data": "float" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 5, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "NumberEditQuantity" - } - ] - }, - "name": "short_circuit_current_density", - "description": "Short circuit current density.", + "name": "original_file_content_type", + "description": "the content type of the original uploaded image file", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "milliampere / centimeter ** 2" + "type_kind": "python", + "type_data": "str" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 6, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "NumberEditQuantity" - } - ] - }, - "name": "fill_factor", - "description": "Fill factor.", + "name": "annotation_layer_svg", + "description": "The vector graphic used for the image annotation layer, defined in SVG format", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [] + "type_kind": "python", + "type_data": "str" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 7, "m_parent_sub_section": "quantities", "m_annotations": { - "eln": [ + "browser": [ { - "component": "NumberEditQuantity" + "adaptor": "RawFileAdaptor" } ] }, - "name": "efficiency", - "description": "Power conversion efficiency.", + "name": "original_image_file", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [] + "type_kind": "python", + "type_data": "str" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 8, "m_parent_sub_section": "quantities", "m_annotations": { - "eln": [ + "browser": [ { - "component": "NumberEditQuantity" + "adaptor": "RawFileAdaptor" } ] }, - "name": "potential_at_maximum_power_point", - "description": "The potential at the maximum power point, Vmp.", + "name": "preview_image_file", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "volt" + "type_kind": "python", + "type_data": "str" + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 7, + "m_parent_sub_section": "section_definitions", + "name": "LabfolderTableElement", + "base_sections": [ + "/packages/10/section_definitions/2" + ], + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "title", + "description": "the title of the table", + "type": { + "type_kind": "python", + "type_data": "str" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 9, + "m_parent_index": 1, "m_parent_sub_section": "quantities", "m_annotations": { - "eln": [ - { - "component": "NumberEditQuantity" - } + "browser": [ + {} ] }, - "name": "current_density_at_maximun_power_point", - "description": "The current density at the maximum power point, *Jmp*.", + "name": "content", + "description": "The JSON content of the table element", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "milliampere / centimeter ** 2" - }, + "type_kind": "custom", + "type_data": "nomad.metainfo.metainfo._JSON" + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 8, + "m_parent_sub_section": "section_definitions", + "name": "LabfolderDataElement", + "base_sections": [ + "/packages/10/section_definitions/2" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 10, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { - "eln": [ - { - "component": "NumberEditQuantity" - } + "browser": [ + {} ] }, - "name": "series_resistance", - "description": "The series resistance as extracted from the *J-V* curve.", + "name": "labfolder_data", + "description": "The JSON content of the table element", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "centimeter ** 2 * ohm" + "type_kind": "custom", + "type_data": "nomad.metainfo.metainfo._JSON" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 11, + "m_parent_index": 1, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "ReferenceEditQuantity" } ] }, - "name": "shunt_resistance", - "description": "The shunt resistance as extracted from the *J-V* curve.", + "name": "nomad_data_schema", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "centimeter ** 2 * ohm" + "type_kind": "reference", + "type_data": "/packages/22/section_definitions/3" + } + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "data_elements", + "sub_section": "/packages/10/section_definitions/1", + "repeats": true }, { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 12, - "m_parent_sub_section": "quantities", - "name": "n_values", - "type": { - "type_kind": "python", - "type_data": "int" - }, - "virtual": true + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", + "name": "nomad_data", + "sub_section": "/packages/10/section_definitions/2" } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 11, + "m_parent_index": 9, "m_parent_sub_section": "section_definitions", - "name": "SolarCellJVCurve", + "name": "LabfolderWellPlateElement", "base_sections": [ - "/packages/8/section_definitions/10" + "/packages/10/section_definitions/2" ], "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "StringEditQuantity" - } - ] - }, - "name": "cell_name", - "description": "Cell identification name.", + "name": "title", + "description": "The title of the well plate template", "type": { "type_kind": "python", "type_data": "str" - }, - "shape": [] + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", "m_annotations": { - "plot": [ - { - "x": "voltage", - "y": "current_density" - } + "browser": [ + {} ] }, - "name": "current_density", - "description": "Current density array of the *JV* curve.", + "name": "content", + "description": "The title of the well plate template", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [ - "n_values" - ], - "unit": "milliampere / centimeter ** 2" + "type_kind": "custom", + "type_data": "nomad.metainfo.metainfo._JSON" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 2, "m_parent_sub_section": "quantities", "m_annotations": { - "plot": [ - { - "x": "voltage", - "y": "current_density" - } + "browser": [ + {} ] }, - "name": "voltage", - "description": "Voltage array of the of the *JV* curve.", - "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [ - "n_values" - ], - "unit": "volt" + "name": "meta_data", + "description": "JSON meta data for visualization processing, used to store information about layer colors and well identifiers", + "type": { + "type_kind": "custom", + "type_data": "nomad.metainfo.metainfo._JSON" + } } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 12, + "m_parent_index": 10, "m_parent_sub_section": "section_definitions", - "m_annotations": { - "eln": [ - { - "lane_width": "600px" - } - ] - }, - "name": "SolarCellEQE", + "name": "LabfolderProject", + "label": "Labfolder Project Import", + "categories": [ + "/packages/15/category_definitions/1" + ], "base_sections": [ - "/packages/14/section_definitions/0" + "/packages/15/section_definitions/1" ], "quantities": [ { @@ -57166,17 +61517,11 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "FileEditQuantity" - } - ], - "browser": [ - { - "adaptor": "RawFileAdaptor" + "component": "StringEditQuantity" } ] }, - "name": "eqe_data_file", - "description": "Drop here your eqe file and click save for processing.", + "name": "project_url", "type": { "type_kind": "python", "type_data": "str" @@ -57189,17 +61534,15 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "StringEditQuantity" } ] }, - "name": "header_lines", - "description": "Number of header lines in the file. Edit in case your file has a header.", + "name": "labfolder_email", "type": { - "type_kind": "numpy", - "type_data": "int64" - }, - "default": 0 + "type_kind": "python", + "type_data": "str" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -57208,18 +61551,18 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "StringEditQuantity", + "props": { + "type": "password" + } } ] }, - "name": "light_bias", - "description": "The light intensity of any bias light during the EQE measurement.", + "name": "password", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "milliwatt / centimeter ** 2" + "type_kind": "python", + "type_data": "str" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", @@ -57228,292 +61571,381 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "BoolEditQuantity" } ] }, - "name": "bandgap_eqe", - "description": "Bandgap derived from the EQE spectrum.", + "name": "resync_labfolder_repository", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "electron_volt" + "type_kind": "python", + "type_data": "bool" + } + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "entries", + "sub_section": "/packages/10/section_definitions/3", + "repeats": true + } + ] + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Package", + "m_parent_index": 11, + "m_parent_sub_section": "packages", + "name": "nomad.datamodel.metainfo.measurements", + "section_definitions": [ + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 0, + "m_parent_sub_section": "section_definitions", + "name": "Sample", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "sample_id", + "description": "Identification number or signatures of the sample used.", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "name", + "description": "A human readable free text name for the sample.", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "name": "description", + "description": "A description of the sample.", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 3, + "m_parent_sub_section": "quantities", + "name": "sample_state", + "description": "The physical state of the sample.", + "type": { + "type_kind": "python", + "type_data": "str" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 4, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "NumberEditQuantity" - } - ] - }, - "name": "integrated_jsc", - "description": "The integrated short circuit current density $J_{SC}$ from the product of the EQE spectrum\nwith the *AM 1.5G* sun spectrum.", + "name": "sample_temperature", + "description": "The temperature of the sample during the measurement.", "type": { "type_kind": "numpy", "type_data": "float64" }, - "shape": [], - "unit": "milliampere / centimeter ** 2" + "unit": "kelvin" }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 5, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "NumberEditQuantity" - } - ] - }, - "name": "integrated_j0rad", - "description": "The integrated $J_{0, Rad}$ derived from the EQE data.", + "name": "sample_microstructure", + "description": "The sample microstructure.", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "milliampere / centimeter ** 2" + "type_kind": "python", + "type_data": "str" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 6, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "NumberEditQuantity" - } - ] - }, - "name": "voc_rad", - "description": "Radiative $V_{OC}$ derived from the EQE data in V.", + "name": "sample_constituents", + "description": "The constituents.", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "volt" + "type_kind": "python", + "type_data": "str" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 7, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "NumberEditQuantity" - } - ] - }, - "name": "urbach_energy", - "description": "Urbach energy fitted from the eqe in eV.", + "name": "elements", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, - "shape": [], - "unit": "electron_volt" + "shape": [ + "*" + ] }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 8, "m_parent_sub_section": "quantities", - "name": "urbach_energy_fit_std_dev", - "description": "Standard deviation of the fitted Urbach energy parameter from the eqe in eV.", + "name": "chemical_formula", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [], - "unit": "electron_volt" - }, + "type_kind": "python", + "type_data": "str" + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 1, + "m_parent_sub_section": "section_definitions", + "name": "Experiment", + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 9, + "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "n_values", + "name": "name", + "description": "A human readable free text name for the experiment.", "type": { "type_kind": "python", - "type_data": "int" - }, - "virtual": true + "type_data": "str" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 10, + "m_parent_index": 1, "m_parent_sub_section": "quantities", - "name": "n_raw_values", + "name": "description", + "description": "A description of the experiment.", "type": { "type_kind": "python", - "type_data": "int" - }, - "virtual": true + "type_data": "str" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 11, + "m_parent_index": 2, "m_parent_sub_section": "quantities", - "m_annotations": { - "plot": [ - { - "x": "photon_energy_array", - "y": "raw_eqe_array" - } - ] - }, - "name": "raw_eqe_array", - "description": "EQE array of the spectrum", + "name": "steps", + "description": "Human readable experiment steps.", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" }, "shape": [ - "n_raw_values" + "*" ] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 12, + "m_parent_index": 3, "m_parent_sub_section": "quantities", - "m_annotations": { - "plot": [ - { - "x": "raw_photon_energy_array", - "y": "raw_eqe_array" - } - ] - }, - "name": "raw_photon_energy_array", - "description": "Raw Photon energy array of the eqe spectrum", + "name": "sample_ref", + "description": "Reference to the used sample.", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [ - "n_raw_values" - ], - "unit": "electron_volt" + "type_kind": "reference", + "type_data": "/packages/11/section_definitions/0" + } + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "sample", + "description": "The used sample.", + "sub_section": "/packages/11/section_definitions/0" }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", + "name": "measurement", + "description": "Measurements performed in this experiment.", + "sub_section": "/packages/11/section_definitions/3", + "repeats": true + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 2, + "m_parent_sub_section": "section_definitions", + "name": "Instrument", + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 13, + "m_parent_index": 0, "m_parent_sub_section": "quantities", - "m_annotations": { - "plot": [ - { - "x": "raw_wavelength_array", - "y": "raw_eqe_array" - } - ] - }, - "name": "raw_wavelength_array", - "description": "Raw wavelength array of the eqe spectrum", + "name": "instrument_id", + "description": "Identification number or signatures of the instrument used.", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [ - "n_raw_values" - ], - "unit": "nanometer" + "type_kind": "python", + "type_data": "str" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 14, + "m_parent_index": 1, "m_parent_sub_section": "quantities", - "m_annotations": { - "plot": [ - { - "x": "photon_energy_array", - "y": "eqe_array" - } - ] - }, - "name": "eqe_array", - "description": "EQE array of the spectrum", + "name": "name", + "description": "A human readable free text name for the instrument.", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [ - "n_values" - ] + "type_kind": "python", + "type_data": "str" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 15, + "m_parent_index": 2, "m_parent_sub_section": "quantities", - "m_annotations": { - "plot": [ - { - "x": "wavelength_array", - "y": "eqe_array" - } - ] - }, - "name": "wavelength_array", - "description": "Interpolated/extrapolated wavelength array with *E<sub>u</sub>* of the eqe spectrum", + "name": "description", + "description": "A description of the instrument.", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [ - "n_values" - ], - "unit": "nanometer" + "type_kind": "python", + "type_data": "str" + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 3, + "m_parent_sub_section": "section_definitions", + "name": "Measurement", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "measurement_id", + "type": { + "type_kind": "python", + "type_data": "str" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 16, + "m_parent_index": 1, "m_parent_sub_section": "quantities", - "m_annotations": { - "plot": [ - { - "x": "photon_energy_array", - "y": "eqe_array" - } - ] - }, - "name": "photon_energy_array", - "description": "Interpolated/extrapolated photon energy array with a *E<sub>u</sub>* of the eqe spectrum", + "name": "name", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "shape": [ - "n_values" - ], - "unit": "electron_volt" + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "name": "description", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 3, + "m_parent_sub_section": "quantities", + "name": "method_name", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 4, + "m_parent_sub_section": "quantities", + "name": "method_abbreviation", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 5, + "m_parent_sub_section": "quantities", + "name": "start_time", + "description": "The datetime of the beginning of the measurement.", + "type": { + "type_kind": "custom", + "type_data": "nomad.metainfo.metainfo._Datetime" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 6, + "m_parent_sub_section": "quantities", + "name": "end_time", + "description": "The datetime of the measurement end.", + "type": { + "type_kind": "custom", + "type_data": "nomad.metainfo.metainfo._Datetime" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 7, + "m_parent_sub_section": "quantities", + "name": "facility", + "description": "Description of the facility (e.g. in full or an acronym) where\nthe measurement was conducted.", + "type": { + "type_kind": "python", + "type_data": "str" + } + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "sample", + "sub_section": "/packages/11/section_definitions/0", + "repeats": true + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", + "name": "instrument", + "sub_section": "/packages/11/section_definitions/2", + "repeats": true } ] - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Package", - "m_parent_index": 9, - "m_parent_sub_section": "packages", - "name": "nomad.datamodel.metainfo.downloads", - "section_definitions": [ + }, { "m_def": "nomad.metainfo.metainfo.Section", "m_parent_index": 0, - "m_parent_sub_section": "section_definitions", - "name": "Download", + "m_parent_sub_section": "inner_section_definitions", + "name": "SpectrumChannel", + "description": "Provides the metadata for a generic additional spectrum channel. Do not use it for energy or count; they have their predefined channels.", "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "url", - "description": "A valid and downloadable URL. Will be downloaded on the servers that\nrun this entries processing (e.g. NOMAD servers). The files will be\nadded to the given output directory.", + "name": "channel_id", "type": { "type_kind": "python", "type_data": "str" @@ -57523,72 +61955,96 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", - "name": "output", - "description": "A relative path that denotes the file to download the given URL to.\nAny parent directories will be created if they do not exist.\nFiles that are marked to be extracted will be downloaded and extracted into\nthe parent directory of the given file path.", + "name": "label", "type": { "type_kind": "python", "type_data": "str" - }, - "default": "./" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 2, "m_parent_sub_section": "quantities", - "name": "extract", - "description": "If the given URL denotes a compressed file and this flag is set to true,\nthe downloaded file will be extracted and removed. Supported file formats\nare `.zip`, `.tgz`, `.tar.gz`.", + "name": "unit", "type": { "type_kind": "python", - "type_data": "bool" + "type_data": "str" } } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 1, + "m_parent_index": 5, "m_parent_sub_section": "section_definitions", - "name": "Downloads", - "description": "Allows you to upload a very small file that will add very large files to your upload. Imagine there are large file resources in the internet (e.g. on a data sharing service)\nthat you need to add to your upload. This way you do not need to download those large\nfiles first, just to upload them to NOMAD.\n\nWhen this section is processed, it will download files from given URLs, add\nthem to the upload, and trigger processing for given mainfiles.", - "base_sections": [ - "/packages/14/section_definitions/0" - ], + "name": "Spectrum", + "description": "Generic spectrum data with energies and counts. May include additional channels.", "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "description", - "description": "Provides some additional description for these downloads.", + "name": "n_values", "type": { "type_kind": "python", - "type_data": "str" - } + "type_data": "int" + }, + "virtual": true }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", - "name": "mainfiles", - "description": "A list of relative paths that denote mainfiles. These files are subjected\nto NOMAD processing after all files have been downloaded and potentially\nextracted.", + "name": "count", + "description": "The count at each energy value, dimensionless", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" }, "shape": [ - "*" + "n_values" ] }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 2, "m_parent_sub_section": "quantities", - "name": "skip_download", - "description": "If true, the downloads will not be performed and no processing is triggered.\nIf false, this will be changed to true by the processing after performing\nthe downloads.", + "name": "energy", + "description": "The energy range of the spectrum", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "n_values" + ], + "unit": "joule" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 3, + "m_parent_sub_section": "quantities", + "name": "additional_channel_data", + "description": "Data from additional channels. The channels are described in `additional channels`.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + "n_channels", + "n_values" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 4, + "m_parent_sub_section": "quantities", + "name": "n_additional_channels", "type": { "type_kind": "python", - "type_data": "bool" - } + "type_data": "int" + }, + "virtual": true } ], "sub_sections": [ @@ -57596,67 +62052,133 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 0, "m_parent_sub_section": "sub_sections", - "name": "downloads", - "description": "Defines URLs and how to download them.", - "sub_section": "/packages/9/section_definitions/0", + "name": "additional_channels", + "description": "Metadata for additional channels. The order is the same as the channel data\nappears in `additional_channel_data`.", + "sub_section": "/packages/11/section_definitions/5/inner_section_definitions/0", "repeats": true } + ], + "inner_section_definitions": [ + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 0, + "m_parent_sub_section": "inner_section_definitions", + "name": "SpectrumChannel", + "description": "Provides the metadata for a generic additional spectrum channel. Do not use it for energy or count; they have their predefined channels.", + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "channel_id", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "label", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "name": "unit", + "type": { + "type_kind": "python", + "type_data": "str" + } + } + ] + } ] - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Package", - "m_parent_index": 10, - "m_parent_sub_section": "packages", - "name": "nomad.datamodel.metainfo.eln.labfolder", - "section_definitions": [ + }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 0, + "m_parent_index": 6, "m_parent_sub_section": "section_definitions", - "name": "LabfolderDataElementDataContent", - "description": "The content of a labfolder data grid.", + "name": "EELSMeasurement", "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "title", - "description": "the title of the table", + "name": "edges", "type": { "type_kind": "python", "type_data": "str" - } + }, + "shape": [ + "*" + ] }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", - "name": "type", - "description": "type", + "name": "publish_time", + "description": "The datetime that this was published on EELS DB.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "custom", + "type_data": "nomad.metainfo.metainfo._Datetime" } + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "spectrum", + "sub_section": "/packages/11/section_definitions/5" }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", + "name": "authors", + "more": { + "repreats": true + }, + "sub_section": "/packages/15/section_definitions/2" + } + ] + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Package", + "m_parent_index": 12, + "m_parent_sub_section": "packages", + "name": "nomad.datamodel.metainfo.tabulartree", + "section_definitions": [ + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 0, + "m_parent_sub_section": "section_definitions", + "name": "TabularTreeNodeInfo", + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "name": "value", - "description": "value", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "Any" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, + "m_parent_index": 1, "m_parent_sub_section": "quantities", - "name": "unit", - "description": "unit", + "name": "description", "type": { "type_kind": "python", "type_data": "str" @@ -57664,25 +62186,32 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 4, + "m_parent_index": 2, "m_parent_sub_section": "quantities", - "name": "physical_quantity_id", - "description": "physical_quantity_id", + "name": "unit", "type": { "type_kind": "python", "type_data": "str" } - }, + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 1, + "m_parent_sub_section": "section_definitions", + "name": "TabularTreeLevel3", + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, + "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "description", - "description": "physical_quantity_id", + "name": "name", "type": { "type_kind": "python", "type_data": "str" - } + }, + "default": "<node name?>" } ], "sub_sections": [ @@ -57690,40 +62219,27 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 0, "m_parent_sub_section": "sub_sections", - "name": "children", - "sub_section": "/packages/10/section_definitions/1", - "repeats": true + "name": "info", + "sub_section": "/packages/12/section_definitions/0" } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 1, + "m_parent_index": 2, "m_parent_sub_section": "section_definitions", - "name": "LabfolderDataElementGrid", - "description": "A labfolder grid containing data elements.", + "name": "TabularTreeLevel2", "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "title", - "description": "the title of the table", - "type": { - "type_kind": "python", - "type_data": "str" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, - "m_parent_sub_section": "quantities", - "name": "type", - "description": "the title of the table", + "name": "name", "type": { "type_kind": "python", "type_data": "str" - } + }, + "default": "<node name?>" } ], "sub_sections": [ @@ -57731,119 +62247,129 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 0, "m_parent_sub_section": "sub_sections", - "name": "children", - "sub_section": "/packages/10/section_definitions/0", + "name": "info", + "sub_section": "/packages/12/section_definitions/0" + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", + "name": "nodes", + "sub_section": "/packages/12/section_definitions/1", "repeats": true } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 2, + "m_parent_index": 3, "m_parent_sub_section": "section_definitions", - "name": "LabfolderElement", - "more": { - "label_quantity": "element_type" - }, + "name": "TabularTreeLevel1", "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "id", - "description": "the stable pointer to the element", + "name": "name", "type": { "type_kind": "python", "type_data": "str" - } + }, + "default": "<node name?>" + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "info", + "sub_section": "/packages/12/section_definitions/0" }, { - "m_def": "nomad.metainfo.metainfo.Quantity", + "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 1, - "m_parent_sub_section": "quantities", - "name": "entry_id", - "description": "the id of the stable pointer to the entry", - "type": { - "type_kind": "python", - "type_data": "str" - } - }, + "m_parent_sub_section": "sub_sections", + "name": "nodes", + "sub_section": "/packages/12/section_definitions/2", + "repeats": true + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 4, + "m_parent_sub_section": "section_definitions", + "name": "TabularTree", + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, + "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "version_id", - "description": "the unique id of the element", + "name": "name", "type": { "type_kind": "python", "type_data": "str" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, - "m_parent_sub_section": "quantities", - "name": "version_date", - "description": "the creation date of the entry element version (same with the creation date on the first version)", - "type": { - "type_kind": "custom", - "type_data": "nomad.metainfo.metainfo._Datetime" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 4, - "m_parent_sub_section": "quantities", - "name": "creation_date", - "description": "the creation date of the entry element (first version)", - "type": { - "type_kind": "custom", - "type_data": "nomad.metainfo.metainfo._Datetime" - } - }, + }, + "default": "<node name?>" + } + ], + "sub_sections": [ { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, - "m_parent_sub_section": "quantities", - "name": "owner_id", - "description": "the id of the original author", - "type": { - "type_kind": "python", - "type_data": "str" - } + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "info", + "sub_section": "/packages/12/section_definitions/0" }, { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 6, - "m_parent_sub_section": "quantities", - "name": "element_type", - "description": "Denotes that this is a file element. The value is always `FILE`", - "type": { - "type_kind": "Enum", - "type_data": [ - "TEXT", - "DATA", - "FILE" - ] - } + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", + "name": "nodes", + "sub_section": "/packages/12/section_definitions/3", + "repeats": true } ] - }, + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Package", + "m_parent_index": 13, + "m_parent_sub_section": "packages", + "name": "nomad.datamodel.datamodel", + "description": "All generic entry metadata and related classes.", + "section_definitions": [ { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 3, + "m_parent_index": 0, "m_parent_sub_section": "section_definitions", - "name": "LabfolderEntry", - "more": { - "label_quantity": "title" + "m_annotations": { + "mongo": [ + "MongoDocument" + ], + "pydantic": [ + "PydanticModel" + ] }, + "name": "Dataset", + "description": "A Dataset is attached to one or many entries to form a set of data.", "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "id", - "description": "Labfolder entry id", + "m_annotations": { + "mongo": [ + "Mongo" + ], + "elasticsearch": [ + "datasets.dataset_id" + ] + }, + "name": "dataset_id", + "description": "The unique identifier for this dataset as a string. It should be\na randomly generated UUID, similar to other nomad ids.", "type": { "type_kind": "python", "type_data": "str" @@ -57853,7 +62379,17 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", - "name": "version_id", + "m_annotations": { + "mongo": [ + "Mongo" + ], + "elasticsearch": [ + "datasets.dataset_name", + "datasets.dataset_name__suggestion" + ] + }, + "name": "dataset_name", + "description": "The human-readable name of the dataset as string. The dataset name must be\nunique for the user.", "type": { "type_kind": "python", "type_data": "str" @@ -57863,7 +62399,13 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 2, "m_parent_sub_section": "quantities", - "name": "author_id", + "m_annotations": { + "mongo": [ + "Mongo" + ] + }, + "name": "user_id", + "description": "The unique user_id of the owner and creator of this dataset. The owner\nmust not change after creation.", "type": { "type_kind": "python", "type_data": "str" @@ -57873,7 +62415,16 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 3, "m_parent_sub_section": "quantities", - "name": "project_id", + "m_annotations": { + "mongo": [ + "Mongo" + ], + "elasticsearch": [ + "datasets.doi" + ] + }, + "name": "doi", + "description": "The optional Document Object Identifier (DOI) associated with this dataset.\nNomad can register DOIs that link back to the respective representation of\nthe dataset in the nomad UI. This quantity holds the string representation of\nthis DOI. There is only one per dataset. The DOI is just the DOI name, not its\nfull URL, e.g. \"10.17172/nomad/2019.10.29-1\".", "type": { "type_kind": "python", "type_data": "str" @@ -57883,17 +62434,32 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 4, "m_parent_sub_section": "quantities", - "name": "version_date", + "m_annotations": { + "mongo": [ + "Mongo" + ] + }, + "name": "pid", + "description": "The original NOMAD CoE Repository dataset PID. Old DOIs still reference\ndatasets based on this id. Is not used for new datasets.", "type": { - "type_kind": "custom", - "type_data": "nomad.metainfo.metainfo._Datetime" + "type_kind": "python", + "type_data": "str" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 5, "m_parent_sub_section": "quantities", - "name": "creation_date", + "m_annotations": { + "mongo": [ + "Mongo" + ], + "elasticsearch": [ + "datasets.dataset_create_time" + ] + }, + "name": "dataset_create_time", + "description": "The date when the dataset was first created.", "type": { "type_kind": "custom", "type_data": "nomad.metainfo.metainfo._Datetime" @@ -57903,113 +62469,95 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 6, "m_parent_sub_section": "quantities", - "name": "custom_dates", + "m_annotations": { + "mongo": [ + "Mongo" + ], + "elasticsearch": [ + "datasets.dataset_modified_time" + ] + }, + "name": "dataset_modified_time", + "description": "The date when the dataset was last modified. An owned dataset\ncan only be extended after a DOI was assigned. A foreign dataset cannot be changed\nonce a DOI was assigned.", "type": { "type_kind": "custom", "type_data": "nomad.metainfo.metainfo._Datetime" - }, - "shape": [ - "*" - ] + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 7, "m_parent_sub_section": "quantities", - "name": "tags", - "type": { - "type_kind": "python", - "type_data": "str" + "m_annotations": { + "mongo": [ + "Mongo" + ], + "elasticsearch": [ + "datasets.dataset_type" + ] }, - "shape": [ - "*" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 8, - "m_parent_sub_section": "quantities", - "name": "title", - "description": "Labfolder entry title", - "type": { - "type_kind": "python", - "type_data": "str" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 9, - "m_parent_sub_section": "quantities", - "name": "hidden", + "name": "dataset_type", + "description": "The type determined if a dataset is owned, i.e. was created by\nthe authors of the contained entries; or if a dataset is foreign,\ni.e. it was created by someone not necessarily related to the entries.", "type": { - "type_kind": "python", - "type_data": "bool" + "type_kind": "Enum", + "type_data": [ + "owned", + "foreign" + ] } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 10, + "m_parent_index": 8, "m_parent_sub_section": "quantities", - "name": "editable", + "m_annotations": { + "mongo": [ + "Mongo" + ] + }, + "name": "query", "type": { - "type_kind": "python", - "type_data": "bool" + "type_kind": "custom", + "type_data": "nomad.metainfo.metainfo._JSON" } - } - ], - "sub_sections": [ - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 0, - "m_parent_sub_section": "sub_sections", - "name": "elements", - "sub_section": "/packages/10/section_definitions/2", - "repeats": true - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 4, - "m_parent_sub_section": "section_definitions", - "name": "LabfolderTextElement", - "base_sections": [ - "/packages/10/section_definitions/2" - ], - "quantities": [ + }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, + "m_parent_index": 9, "m_parent_sub_section": "quantities", "m_annotations": { - "browser": [ - {} + "mongo": [ + "Mongo" ] }, - "name": "content", - "description": "The text based content of this element", + "name": "entries", "type": { "type_kind": "python", "type_data": "str" - } + }, + "shape": [ + "*" + ] } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 5, + "m_parent_index": 1, "m_parent_sub_section": "section_definitions", - "name": "LabfolderFileElement", - "base_sections": [ - "/packages/10/section_definitions/2" - ], + "name": "CompatibleSectionDef", "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "file_name", - "description": "The name of the file", + "m_annotations": { + "elasticsearch": [ + "section_defs.definition_qualified_name" + ] + }, + "name": "definition_qualified_name", + "description": "The qualified name of the compatible section.", "type": { "type_kind": "python", "type_data": "str" @@ -58019,19 +62567,13 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", - "name": "file_size", - "description": "The size of the file in bytes", - "type": { - "type_kind": "python", - "type_data": "int" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, - "m_parent_sub_section": "quantities", - "name": "content_type", - "description": "The type of the binary content which is sent on header parameter `Content-Type`", + "m_annotations": { + "elasticsearch": [ + "section_defs.definition_id" + ] + }, + "name": "definition_id", + "description": "The definition id of the compatible section.", "type": { "type_kind": "python", "type_data": "str" @@ -58039,38 +62581,40 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, + "m_parent_index": 2, "m_parent_sub_section": "quantities", "m_annotations": { - "browser": [ - { - "adaptor": "RawFileAdaptor" - } + "elasticsearch": [ + "section_defs.used_directly" ] }, - "name": "file", + "name": "used_directly", + "description": "If the compatible section is directly used as base section.", "type": { "type_kind": "python", - "type_data": "str" + "type_data": "bool" } } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 6, + "m_parent_index": 2, "m_parent_sub_section": "section_definitions", - "name": "LabfolderImageElement", - "base_sections": [ - "/packages/10/section_definitions/2" - ], + "name": "EntryArchiveReference", + "label": "ArchiveReference", "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "title", - "description": "the title of the image element", + "m_annotations": { + "elasticsearch": [ + "entry_references.target_reference" + ] + }, + "name": "target_reference", + "description": "The full url like reference of the the target.", "type": { "type_kind": "python", "type_data": "str" @@ -58080,52 +62624,77 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", - "name": "file_size", - "description": "the size of the image file in bytes", + "m_annotations": { + "elasticsearch": [ + "entry_references.target_entry_id" + ] + }, + "name": "target_entry_id", + "description": "The id of the entry containing the target.", "type": { "type_kind": "python", - "type_data": "int" + "type_data": "str" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 2, "m_parent_sub_section": "quantities", - "name": "preview_height", - "description": "height of the downscaled image version, in px", + "m_annotations": { + "elasticsearch": [ + "entry_references.target_mainfile" + ] + }, + "name": "target_mainfile", + "description": "The mainfile of the entry containing the target.", "type": { "type_kind": "python", - "type_data": "int" + "type_data": "str" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 3, "m_parent_sub_section": "quantities", - "name": "preview_width", - "description": "width of the downscaled image version, in px", + "m_annotations": { + "elasticsearch": [ + "entry_references.target_upload_id" + ] + }, + "name": "target_upload_id", + "description": "The id of the upload containing the target.", "type": { "type_kind": "python", - "type_data": "int" + "type_data": "str" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 4, "m_parent_sub_section": "quantities", - "name": "preview_zoom", - "description": "image zoom in the ELN UI, in percentage", + "m_annotations": { + "elasticsearch": [ + "entry_references.target_name" + ] + }, + "name": "target_name", + "description": "The name of the target quantity/section.", "type": { "type_kind": "python", - "type_data": "float" + "type_data": "str" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 5, "m_parent_sub_section": "quantities", - "name": "original_file_content_type", - "description": "the content type of the original uploaded image file", + "m_annotations": { + "elasticsearch": [ + "entry_references.target_path" + ] + }, + "name": "target_path", + "description": "The path of the target quantity/section in its archive.", "type": { "type_kind": "python", "type_data": "str" @@ -58135,8 +62704,13 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 6, "m_parent_sub_section": "quantities", - "name": "annotation_layer_svg", - "description": "The vector graphic used for the image annotation layer, defined in SVG format", + "m_annotations": { + "elasticsearch": [ + "entry_references.source_name" + ] + }, + "name": "source_name", + "description": "The name of the source (self) quantity/section in its archive.", "type": { "type_kind": "python", "type_data": "str" @@ -58147,13 +62721,12 @@ window.nomadArtifacts = { "m_parent_index": 7, "m_parent_sub_section": "quantities", "m_annotations": { - "browser": [ - { - "adaptor": "RawFileAdaptor" - } + "elasticsearch": [ + "entry_references.source_path" ] }, - "name": "original_image_file", + "name": "source_path", + "description": "The path of the source (self) quantity/section in its archive.", "type": { "type_kind": "python", "type_data": "str" @@ -58164,13 +62737,12 @@ window.nomadArtifacts = { "m_parent_index": 8, "m_parent_sub_section": "quantities", "m_annotations": { - "browser": [ - { - "adaptor": "RawFileAdaptor" - } + "elasticsearch": [ + "entry_references.source_quantity" ] }, - "name": "preview_image_file", + "name": "source_quantity", + "description": "A reference to the quantity definition that defines the reference", "type": { "type_kind": "python", "type_data": "str" @@ -58180,19 +62752,21 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 7, + "m_parent_index": 3, "m_parent_sub_section": "section_definitions", - "name": "LabfolderTableElement", - "base_sections": [ - "/packages/10/section_definitions/2" - ], + "name": "SearchableQuantity", "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "title", - "description": "the title of the table", + "m_annotations": { + "elasticsearch": [ + "search_quantities.id" + ] + }, + "name": "id", + "description": "The full identifier for this quantity that contains the path in the schema +\nschema name.", "type": { "type_kind": "python", "type_data": "str" @@ -58203,95 +62777,128 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "quantities", "m_annotations": { - "browser": [ - {} + "elasticsearch": [ + "search_quantities.definition" ] }, - "name": "content", - "description": "The JSON content of the table element", + "name": "definition", + "description": "A reference to the quantity definition.", "type": { - "type_kind": "custom", - "type_data": "nomad.metainfo.metainfo._JSON" + "type_kind": "python", + "type_data": "str" } - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 8, - "m_parent_sub_section": "section_definitions", - "name": "LabfolderDataElement", - "base_sections": [ - "/packages/10/section_definitions/2" - ], - "quantities": [ + }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, + "m_parent_index": 2, "m_parent_sub_section": "quantities", "m_annotations": { - "browser": [ - {} + "elasticsearch": [ + "search_quantities.path_archive" ] }, - "name": "labfolder_data", - "description": "The JSON content of the table element", + "name": "path_archive", + "description": "Path of the value within the archive.", "type": { - "type_kind": "custom", - "type_data": "nomad.metainfo.metainfo._JSON" + "type_kind": "python", + "type_data": "str" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, + "m_parent_index": 3, "m_parent_sub_section": "quantities", "m_annotations": { - "eln": [ - { - "component": "ReferenceEditQuantity" - } + "elasticsearch": [ + "search_quantities.bool_value" ] }, - "name": "nomad_data_schema", + "name": "bool_value", + "description": "The value mapped as an ES boolean field.", "type": { - "type_kind": "reference", - "type_data": "/packages/21/section_definitions/3" + "type_kind": "python", + "type_data": "bool" } - } - ], - "sub_sections": [ + }, { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 0, - "m_parent_sub_section": "sub_sections", - "name": "data_elements", - "sub_section": "/packages/10/section_definitions/1", - "repeats": true + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 4, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "search_quantities.str_value", + "search_quantities.str_value.keyword" + ] + }, + "name": "str_value", + "description": "The value mapped as an ES text and keyword field.", + "type": { + "type_kind": "python", + "type_data": "str" + } }, { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 1, - "m_parent_sub_section": "sub_sections", - "name": "nomad_data", - "sub_section": "/packages/10/section_definitions/2" + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 5, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "search_quantities.int_value" + ] + }, + "name": "int_value", + "description": "The value mapped as an ES long number field.", + "type": { + "type_kind": "python", + "type_data": "int" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 6, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "search_quantities.float_value" + ] + }, + "name": "float_value", + "description": "The value mapped as an ES double number field.", + "type": { + "type_kind": "python", + "type_data": "float" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 7, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "search_quantities.datetime_value" + ] + }, + "name": "datetime_value", + "description": "The value mapped as an ES date field.", + "type": { + "type_kind": "custom", + "type_data": "nomad.metainfo.metainfo._Datetime" + } } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 9, + "m_parent_index": 4, "m_parent_sub_section": "section_definitions", - "name": "LabfolderWellPlateElement", - "base_sections": [ - "/packages/10/section_definitions/2" - ], + "name": "RFC3161Timestamp", "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "title", - "description": "The title of the well plate template", + "name": "token_seed", + "description": "The entry hash used to get timestamp token.", "type": { "type_kind": "python", "type_data": "str" @@ -58301,61 +62908,58 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", - "m_annotations": { - "browser": [ - {} - ] - }, - "name": "content", - "description": "The title of the well plate template", + "name": "token", + "description": "The token returned by RFC3161 server.", "type": { "type_kind": "custom", - "type_data": "nomad.metainfo.metainfo._JSON" + "type_data": "nomad.metainfo.metainfo._Bytes" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 2, "m_parent_sub_section": "quantities", - "m_annotations": { - "browser": [ - {} - ] - }, - "name": "meta_data", - "description": "JSON meta data for visualization processing, used to store information about layer colors and well identifiers", + "name": "tsa_server", + "description": "The address of RFC3161 server.", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 3, + "m_parent_sub_section": "quantities", + "name": "timestamp", + "description": "The RFC3161 timestamp.", "type": { "type_kind": "custom", - "type_data": "nomad.metainfo.metainfo._JSON" + "type_data": "nomad.metainfo.metainfo._Datetime" } } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 10, + "m_parent_index": 5, "m_parent_sub_section": "section_definitions", - "name": "LabfolderProject", - "label": "Labfolder Project Import", - "categories": [ - "/packages/14/category_definitions/1" - ], - "base_sections": [ - "/packages/14/section_definitions/1" - ], + "name": "EntryMetadata", + "label": "Metadata", "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { - "eln": [ - { - "component": "StringEditQuantity" - } + "elasticsearch": [ + "upload_id" ] }, - "name": "project_url", + "name": "upload_id", + "description": "The persistent and globally unique identifier for the upload of the entry", + "categories": [ + "/packages/13/category_definitions/1" + ], "type": { "type_kind": "python", "type_data": "str" @@ -58366,13 +62970,17 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "quantities", "m_annotations": { - "eln": [ - { - "component": "StringEditQuantity" - } + "elasticsearch": [ + "upload_name", + "upload_name__suggestion" ] }, - "name": "labfolder_email", + "name": "upload_name", + "description": "The user provided upload name", + "categories": [ + "/packages/13/category_definitions/1", + "/packages/13/category_definitions/0" + ], "type": { "type_kind": "python", "type_data": "str" @@ -58383,19 +62991,22 @@ window.nomadArtifacts = { "m_parent_index": 2, "m_parent_sub_section": "quantities", "m_annotations": { - "eln": [ - { - "component": "StringEditQuantity", - "props": { - "type": "password" - } - } + "auth_level": [ + "AuthLevel.admin" + ], + "elasticsearch": [ + "upload_create_time" ] }, - "name": "password", + "name": "upload_create_time", + "description": "The date and time when the upload was created in nomad", + "categories": [ + "/packages/13/category_definitions/1", + "/packages/13/category_definitions/0" + ], "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "custom", + "type_data": "nomad.metainfo.metainfo._Datetime" } }, { @@ -58403,58 +63014,81 @@ window.nomadArtifacts = { "m_parent_index": 3, "m_parent_sub_section": "quantities", "m_annotations": { - "eln": [ - { - "component": "BoolEditQuantity" - } + "elasticsearch": [ + "entry_id" ] }, - "name": "resync_labfolder_repository", + "name": "entry_id", + "description": "A persistent and globally unique identifier for the entry", + "categories": [ + "/packages/13/category_definitions/2", + "/packages/13/category_definitions/3" + ], "type": { "type_kind": "python", - "type_data": "bool" + "type_data": "str" } - } - ], - "sub_sections": [ + }, { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 0, - "m_parent_sub_section": "sub_sections", - "name": "entries", - "sub_section": "/packages/10/section_definitions/3", - "repeats": true - } - ] - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Package", - "m_parent_index": 11, - "m_parent_sub_section": "packages", - "name": "nomad.datamodel.metainfo.tabulartree", - "section_definitions": [ - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 0, - "m_parent_sub_section": "section_definitions", - "name": "TabularTreeNodeInfo", - "quantities": [ + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 4, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "entry_name", + "entry_name__suggestion", + "entry_name.prefix" + ] + }, + "name": "entry_name", + "description": "A brief human readable name for the entry.", + "type": { + "type_kind": "python", + "type_data": "str" + } + }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, + "m_parent_index": 5, "m_parent_sub_section": "quantities", - "name": "value", + "m_annotations": { + "elasticsearch": [ + "entry_type" + ] + }, + "name": "entry_type", + "description": "The main schema definition. This is the name of the section used for data.", "type": { - "type_kind": "Any" + "type_kind": "python", + "type_data": "str" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, + "m_parent_index": 6, "m_parent_sub_section": "quantities", - "name": "description", + "m_annotations": { + "elasticsearch": [ + "calc_id" + ] + }, + "name": "calc_id", + "description": "Legacy field name, use `entry_id` instead.", + "type": { + "type_kind": "python", + "type_data": "str" + }, + "virtual": true + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 7, + "m_parent_sub_section": "quantities", + "name": "entry_hash", + "description": "A raw file content based checksum/hash", + "categories": [ + "/packages/13/category_definitions/2" + ], "type": { "type_kind": "python", "type_data": "str" @@ -58462,210 +63096,139 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, + "m_parent_index": 8, "m_parent_sub_section": "quantities", - "name": "unit", + "m_annotations": { + "auth_level": [ + "AuthLevel.admin" + ], + "elasticsearch": [ + "entry_create_time" + ] + }, + "name": "entry_create_time", + "description": "The date and time when the entry was created in nomad", + "categories": [ + "/packages/13/category_definitions/2", + "/packages/13/category_definitions/3", + "/packages/13/category_definitions/0" + ], "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "custom", + "type_data": "nomad.metainfo.metainfo._Datetime" } - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 1, - "m_parent_sub_section": "section_definitions", - "name": "TabularTreeLevel3", - "quantities": [ + }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, + "m_parent_index": 9, "m_parent_sub_section": "quantities", - "name": "name", + "name": "last_edit_time", + "description": "The date and time the user metadata was last edited.", + "categories": [ + "/packages/13/category_definitions/2" + ], "type": { - "type_kind": "python", - "type_data": "str" - }, - "default": "<node name?>" - } - ], - "sub_sections": [ - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 0, - "m_parent_sub_section": "sub_sections", - "name": "info", - "sub_section": "/packages/11/section_definitions/0" - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 2, - "m_parent_sub_section": "section_definitions", - "name": "TabularTreeLevel2", - "quantities": [ + "type_kind": "custom", + "type_data": "nomad.metainfo.metainfo._Datetime" + } + }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, + "m_parent_index": 10, "m_parent_sub_section": "quantities", - "name": "name", + "m_annotations": { + "elasticsearch": [ + "parser_name" + ] + }, + "name": "parser_name", + "description": "The NOMAD parser used for the last processing", + "categories": [ + "/packages/13/category_definitions/2", + "/packages/13/category_definitions/3" + ], "type": { "type_kind": "python", "type_data": "str" - }, - "default": "<node name?>" - } - ], - "sub_sections": [ - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 0, - "m_parent_sub_section": "sub_sections", - "name": "info", - "sub_section": "/packages/11/section_definitions/0" + } }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 1, - "m_parent_sub_section": "sub_sections", - "name": "nodes", - "sub_section": "/packages/11/section_definitions/1", - "repeats": true - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 3, - "m_parent_sub_section": "section_definitions", - "name": "TabularTreeLevel1", - "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, + "m_parent_index": 11, "m_parent_sub_section": "quantities", - "name": "name", + "m_annotations": { + "elasticsearch": [ + "mainfile", + "mainfile.path", + "mainfile__suggestion" + ] + }, + "name": "mainfile", + "description": "The path to the mainfile from the root directory of the uploaded files", + "categories": [ + "/packages/13/category_definitions/2", + "/packages/13/category_definitions/3" + ], "type": { "type_kind": "python", "type_data": "str" - }, - "default": "<node name?>" - } - ], - "sub_sections": [ - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 0, - "m_parent_sub_section": "sub_sections", - "name": "info", - "sub_section": "/packages/11/section_definitions/0" + } }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 1, - "m_parent_sub_section": "sub_sections", - "name": "nodes", - "sub_section": "/packages/11/section_definitions/2", - "repeats": true - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 4, - "m_parent_sub_section": "section_definitions", - "name": "TabularTree", - "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, + "m_parent_index": 12, "m_parent_sub_section": "quantities", - "name": "name", + "m_annotations": { + "elasticsearch": [ + "mainfile_key", + "mainfile_key.path" + ] + }, + "name": "mainfile_key", + "description": "Key used to differentiate between different *child entries* of an entry.\nFor parent entries and entries that do not have any children, the value should\nbe empty.", + "categories": [ + "/packages/13/category_definitions/2", + "/packages/13/category_definitions/3" + ], "type": { "type_kind": "python", "type_data": "str" - }, - "default": "<node name?>" - } - ], - "sub_sections": [ - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 0, - "m_parent_sub_section": "sub_sections", - "name": "info", - "sub_section": "/packages/11/section_definitions/0" + } }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 1, - "m_parent_sub_section": "sub_sections", - "name": "nodes", - "sub_section": "/packages/11/section_definitions/3", - "repeats": true - } - ] - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Package", - "m_parent_index": 12, - "m_parent_sub_section": "packages", - "name": "nomad.datamodel.datamodel", - "description": "All generic entry metadata and related classes.", - "section_definitions": [ - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 0, - "m_parent_sub_section": "section_definitions", - "m_annotations": { - "mongo": [ - "MongoDocument" - ], - "pydantic": [ - "PydanticModel" - ] - }, - "name": "Dataset", - "description": "A Dataset is attached to one or many entries to form a set of data.", - "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, + "m_parent_index": 13, "m_parent_sub_section": "quantities", "m_annotations": { - "mongo": [ - "Mongo" - ], "elasticsearch": [ - "datasets.dataset_id" + "files", + "files.path" ] }, - "name": "dataset_id", - "description": "The unique identifier for this dataset as a string. It should be\na randomly generated UUID, similar to other nomad ids.", + "name": "files", + "description": "The paths to the files within the upload that belong to this entry.\nAll files within the same directory as the entry's mainfile are considered the\nauxiliary files that belong to the entry.", "type": { "type_kind": "python", "type_data": "str" - } + }, + "shape": [ + "0..*" + ] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, + "m_parent_index": 14, "m_parent_sub_section": "quantities", "m_annotations": { - "mongo": [ - "Mongo" - ], "elasticsearch": [ - "datasets.dataset_name", - "datasets.dataset_name__suggestion" + "pid" ] }, - "name": "dataset_name", - "description": "The human-readable name of the dataset as string. The dataset name must be\nunique for the user.", + "name": "pid", + "description": "The unique, sequentially enumerated, integer PID that was used in the legacy\nNOMAD CoE. It allows to resolve URLs of the old NOMAD CoE Repository.", + "categories": [ + "/packages/13/category_definitions/2" + ], "type": { "type_kind": "python", "type_data": "str" @@ -58673,15 +63236,15 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, + "m_parent_index": 15, "m_parent_sub_section": "quantities", "m_annotations": { - "mongo": [ - "Mongo" + "elasticsearch": [ + "raw_id" ] }, - "name": "user_id", - "description": "The unique user_id of the owner and creator of this dataset. The owner\nmust not change after creation.", + "name": "raw_id", + "description": "The code specific identifier extracted from the entry's raw files by the parser,\nif supported.", "type": { "type_kind": "python", "type_data": "str" @@ -58689,18 +63252,19 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, + "m_parent_index": 16, "m_parent_sub_section": "quantities", "m_annotations": { - "mongo": [ - "Mongo" - ], "elasticsearch": [ - "datasets.doi" + "external_id" ] }, - "name": "doi", - "description": "The optional Document Object Identifier (DOI) associated with this dataset.\nNomad can register DOIs that link back to the respective representation of\nthe dataset in the nomad UI. This quantity holds the string representation of\nthis DOI. There is only one per dataset. The DOI is just the DOI name, not its\nfull URL, e.g. \"10.17172/nomad/2019.10.29-1\".", + "name": "external_id", + "description": "A user provided external id. Usually the id for an entry in an external database\nwhere the data was imported from.", + "categories": [ + "/packages/13/category_definitions/2", + "/packages/13/category_definitions/0" + ], "type": { "type_kind": "python", "type_data": "str" @@ -58708,34 +63272,42 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 4, + "m_parent_index": 17, "m_parent_sub_section": "quantities", "m_annotations": { - "mongo": [ - "Mongo" + "elasticsearch": [ + "published" ] }, - "name": "pid", - "description": "The original NOMAD CoE Repository dataset PID. Old DOIs still reference\ndatasets based on this id. Is not used for new datasets.", + "name": "published", + "description": "Indicates if the entry is published", + "categories": [ + "/packages/13/category_definitions/1" + ], "type": { "type_kind": "python", - "type_data": "str" - } + "type_data": "bool" + }, + "default": false }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, + "m_parent_index": 18, "m_parent_sub_section": "quantities", "m_annotations": { - "mongo": [ - "Mongo" + "auth_level": [ + "AuthLevel.admin" ], "elasticsearch": [ - "datasets.dataset_create_time" + "publish_time" ] }, - "name": "dataset_create_time", - "description": "The date when the dataset was first created.", + "name": "publish_time", + "description": "The date and time when the upload was published in nomad", + "categories": [ + "/packages/13/category_definitions/1", + "/packages/13/category_definitions/0" + ], "type": { "type_kind": "custom", "type_data": "nomad.metainfo.metainfo._Datetime" @@ -58743,70 +63315,112 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 6, + "m_parent_index": 19, "m_parent_sub_section": "quantities", "m_annotations": { - "mongo": [ - "Mongo" - ], "elasticsearch": [ - "datasets.dataset_modified_time" + "with_embargo" ] }, - "name": "dataset_modified_time", - "description": "The date when the dataset was last modified. An owned dataset\ncan only be extended after a DOI was assigned. A foreign dataset cannot be changed\nonce a DOI was assigned.", + "name": "with_embargo", + "description": "Indicated if this entry is under an embargo", + "categories": [ + "/packages/13/category_definitions/1", + "/packages/13/category_definitions/3" + ], "type": { - "type_kind": "custom", - "type_data": "nomad.metainfo.metainfo._Datetime" + "type_kind": "python", + "type_data": "bool" + }, + "default": false + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 20, + "m_parent_sub_section": "quantities", + "name": "embargo_length", + "description": "The length of the requested embargo period, in months", + "categories": [ + "/packages/13/category_definitions/1", + "/packages/13/category_definitions/0" + ], + "type": { + "type_kind": "python", + "type_data": "int" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 7, + "m_parent_index": 21, "m_parent_sub_section": "quantities", "m_annotations": { - "mongo": [ - "Mongo" - ], - "elasticsearch": [ - "datasets.dataset_type" + "auth_level": [ + "AuthLevel.admin" ] }, - "name": "dataset_type", - "description": "The type determined if a dataset is owned, i.e. was created by\nthe authors of the contained entries; or if a dataset is foreign,\ni.e. it was created by someone not necessarily related to the entries.", + "name": "license", + "description": "A short license description (e.g. CC BY 4.0), that refers to the\nlicense of this entry.", + "categories": [ + "/packages/13/category_definitions/1", + "/packages/13/category_definitions/0" + ], "type": { - "type_kind": "Enum", - "type_data": [ - "owned", - "foreign" + "type_kind": "python", + "type_data": "str" + }, + "default": "CC BY 4.0" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 22, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "processed" ] - } + }, + "name": "processed", + "description": "Indicates that the entry is successfully processed.", + "categories": [ + "/packages/13/category_definitions/2", + "/packages/13/category_definitions/3" + ], + "type": { + "type_kind": "python", + "type_data": "bool" + }, + "default": false }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 8, + "m_parent_index": 23, "m_parent_sub_section": "quantities", "m_annotations": { - "mongo": [ - "Mongo" + "elasticsearch": [ + "last_processing_time" ] }, - "name": "query", + "name": "last_processing_time", + "description": "The date and time of the last processing.", + "categories": [ + "/packages/13/category_definitions/2" + ], "type": { "type_kind": "custom", - "type_data": "nomad.metainfo.metainfo._JSON" + "type_data": "nomad.metainfo.metainfo._Datetime" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 9, + "m_parent_index": 24, "m_parent_sub_section": "quantities", "m_annotations": { - "mongo": [ - "Mongo" + "elasticsearch": [ + "processing_errors" ] }, - "name": "entries", + "name": "processing_errors", + "description": "Errors that occurred during processing", "type": { "type_kind": "python", "type_data": "str" @@ -58814,26 +63428,21 @@ window.nomadArtifacts = { "shape": [ "*" ] - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 1, - "m_parent_sub_section": "section_definitions", - "name": "CompatibleSectionDef", - "quantities": [ + }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, + "m_parent_index": 25, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "section_defs.definition_qualified_name" + "nomad_version" ] }, - "name": "definition_qualified_name", - "description": "The qualified name of the compatible section.", + "name": "nomad_version", + "description": "The NOMAD version used for the last processing", + "categories": [ + "/packages/13/category_definitions/2" + ], "type": { "type_kind": "python", "type_data": "str" @@ -58841,15 +63450,18 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, + "m_parent_index": 26, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "section_defs.definition_id" + "nomad_commit" ] }, - "name": "definition_id", - "description": "The definition id of the compatible section.", + "name": "nomad_commit", + "description": "The NOMAD commit used for the last processing", + "categories": [ + "/packages/13/category_definitions/2" + ], "type": { "type_kind": "python", "type_data": "str" @@ -58857,497 +63469,642 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, + "m_parent_index": 27, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "section_defs.used_directly" + "comment" ] }, - "name": "used_directly", - "description": "If the compatible section is directly used as base section.", + "name": "comment", + "description": "A user provided comment for this entry", + "categories": [ + "/packages/13/category_definitions/2", + "/packages/13/category_definitions/0" + ], "type": { "type_kind": "python", - "type_data": "bool" + "type_data": "str" } - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 2, - "m_parent_sub_section": "section_definitions", - "name": "EntryArchiveReference", - "label": "ArchiveReference", - "quantities": [ + }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, + "m_parent_index": 28, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "entry_references.target_reference" + "references" ] }, - "name": "target_reference", - "description": "The full url like reference of the the target.", + "name": "references", + "description": "User provided references (URLs) for this entry", + "categories": [ + "/packages/13/category_definitions/2", + "/packages/13/category_definitions/0" + ], "type": { "type_kind": "python", "type_data": "str" + }, + "shape": [ + "0..*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 29, + "m_parent_sub_section": "quantities", + "m_annotations": { + "elasticsearch": [ + "external_db" + ] + }, + "name": "external_db", + "description": "The repository or external database where the original data resides", + "categories": [ + "/packages/13/category_definitions/1", + "/packages/13/category_definitions/0" + ], + "type": { + "type_kind": "Enum", + "type_data": [ + "The Perovskite Database Project", + "EELS Data Base", + "Materials Project", + "AFLOW", + "OQMD", + "Kyoto Phonopy Database" + ] } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, + "m_parent_index": 30, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "entry_references.target_entry_id" + "origin" ] }, - "name": "target_entry_id", - "description": "The id of the entry containing the target.", + "name": "origin", + "description": "A short human readable description of the entries origin. Usually it is the\nhandle of an external database/repository or the name of the main author.", "type": { "type_kind": "python", "type_data": "str" - } + }, + "virtual": true }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, + "m_parent_index": 31, "m_parent_sub_section": "quantities", "m_annotations": { + "auth_level": [ + "AuthLevel.admin" + ], "elasticsearch": [ - "entry_references.target_mainfile" + "main_author" ] }, - "name": "target_mainfile", - "description": "The mainfile of the entry containing the target.", + "name": "main_author", + "description": "The main author of the entry", + "categories": [ + "/packages/13/category_definitions/1", + "/packages/13/category_definitions/0" + ], + "type": { + "type_kind": "User", + "type_data": "User" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 32, + "m_parent_sub_section": "quantities", + "name": "coauthors", + "description": "A user provided list of co-authors for the whole upload. These can view and edit the\nupload when in staging, and view it also if it is embargoed.", + "categories": [ + "/packages/13/category_definitions/1", + "/packages/13/category_definitions/0" + ], "type": { - "type_kind": "python", - "type_data": "str" - } + "type_kind": "Author", + "type_data": "Author" + }, + "shape": [ + "0..*" + ], + "default": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, + "m_parent_index": 33, "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "entry_references.target_upload_id" - ] - }, - "name": "target_upload_id", - "description": "The id of the upload containing the target.", + "name": "entry_coauthors", + "description": "A user provided list of co-authors specific for this entry. This is a legacy field,\nfor new uploads, coauthors should be specified on the upload level only.", + "categories": [ + "/packages/13/category_definitions/2" + ], "type": { - "type_kind": "python", - "type_data": "str" - } + "type_kind": "Author", + "type_data": "Author" + }, + "shape": [ + "0..*" + ], + "default": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 4, + "m_parent_index": 34, "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "entry_references.target_name" - ] - }, - "name": "target_name", - "description": "The name of the target quantity/section.", + "name": "reviewers", + "description": "A user provided list of reviewers. Reviewers can see the whole upload, also if\nit is unpublished or embargoed", + "categories": [ + "/packages/13/category_definitions/1", + "/packages/13/category_definitions/0" + ], "type": { - "type_kind": "python", - "type_data": "str" - } + "type_kind": "User", + "type_data": "User" + }, + "shape": [ + "0..*" + ], + "default": [] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, + "m_parent_index": 35, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "entry_references.target_path" + "authors" ] }, - "name": "target_path", - "description": "The path of the target quantity/section in its archive.", + "name": "authors", + "description": "All authors (main author and co-authors)", "type": { - "type_kind": "python", - "type_data": "str" - } + "type_kind": "Author", + "type_data": "Author" + }, + "shape": [ + "0..*" + ], + "virtual": true }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 6, + "m_parent_index": 36, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "entry_references.source_name" + "writers" ] }, - "name": "source_name", - "description": "The name of the source (self) quantity/section in its archive.", + "name": "writers", + "description": "All writers (main author, upload coauthors)", "type": { - "type_kind": "python", - "type_data": "str" - } + "type_kind": "User", + "type_data": "User" + }, + "shape": [ + "0..*" + ], + "virtual": true }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 7, + "m_parent_index": 37, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "entry_references.source_path" + "viewers" ] }, - "name": "source_path", - "description": "The path of the source (self) quantity/section in its archive.", + "name": "viewers", + "description": "All viewers (main author, upload coauthors, and reviewers)", "type": { - "type_kind": "python", - "type_data": "str" - } + "type_kind": "User", + "type_data": "User" + }, + "shape": [ + "0..*" + ], + "virtual": true }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 8, + "m_parent_index": 38, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "entry_references.source_quantity" + "datasets" ] }, - "name": "source_quantity", - "description": "A reference to the quantity definition that defines the reference", + "name": "datasets", + "description": "A list of user curated datasets this entry belongs to.", + "categories": [ + "/packages/13/category_definitions/2", + "/packages/13/category_definitions/0" + ], "type": { - "type_kind": "python", - "type_data": "str" - } - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 3, - "m_parent_sub_section": "section_definitions", - "name": "SearchableQuantity", - "quantities": [ + "type_kind": "reference", + "type_data": "/packages/13/section_definitions/0" + }, + "shape": [ + "0..*" + ], + "default": [] + }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, + "m_parent_index": 39, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "searchable_quantities.quantity_name" + "domain" ] }, - "name": "quantity_name", - "description": "The name of the quantity holding the value.", + "name": "domain", + "description": "The material science domain", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "Enum", + "type_data": [ + "dft", + "ems" + ] } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, + "m_parent_index": 40, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "searchable_quantities.section_definition" + "n_quantities" ] }, - "name": "section_definition", - "description": "A reference to the section definition for the section that holds the quantity that holds the value.", + "name": "n_quantities", + "description": "Number of metainfo quantities parsed from the entry.", "type": { "type_kind": "python", - "type_data": "str" - } + "type_data": "int" + }, + "default": 0 }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, + "m_parent_index": 41, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "searchable_quantities.path" + "quantities", + "quantities.path" ] }, - "name": "path", - "description": "The path to the quantity holding the value.", + "name": "quantities", + "description": "All quantities that are used by this entry.", "type": { "type_kind": "python", "type_data": "str" - } + }, + "shape": [ + "0..*" + ] }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, + "m_parent_index": 42, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "searchable_quantities.keyword_value" + "sections" ] }, - "name": "keyword_value", - "description": "The value mapped as an ES keyword field.", + "name": "sections", + "description": "All sections that are present in this entry. This field is deprecated and will be removed.", "type": { "type_kind": "python", "type_data": "str" - } + }, + "shape": [ + "*" + ] + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "entry_timestamp", + "description": "A timestamp based on RFC3161.", + "sub_section": "/packages/13/section_definitions/4" }, { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 4, - "m_parent_sub_section": "quantities", + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", "m_annotations": { "elasticsearch": [ - "searchable_quantities.text_value" + "optimade" ] }, - "name": "text_value", - "description": "The value mapped as an ES text field.", - "type": { - "type_kind": "python", - "type_data": "str" - } + "name": "optimade", + "description": "Metadata used for the optimade API.", + "sub_section": "/packages/21/section_definitions/1" }, { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, - "m_parent_sub_section": "quantities", + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 2, + "m_parent_sub_section": "sub_sections", "m_annotations": { "elasticsearch": [ - "searchable_quantities.long_value" + "section_defs" ] }, - "name": "long_value", - "description": "The value mapped as an ES long number field.", - "type": { - "type_kind": "python", - "type_data": "int" - } + "name": "section_defs", + "description": "All sections that are compatible with the present sections in this entry.", + "sub_section": "/packages/13/section_definitions/1", + "repeats": true }, { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 6, - "m_parent_sub_section": "quantities", + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 3, + "m_parent_sub_section": "sub_sections", "m_annotations": { "elasticsearch": [ - "searchable_quantities.double_value" + "entry_references" ] }, - "name": "double_value", - "description": "The value mapped as an ES double number field.", - "type": { - "type_kind": "python", - "type_data": "float" - } + "name": "entry_references", + "sub_section": "/packages/13/section_definitions/2", + "repeats": true }, { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 7, - "m_parent_sub_section": "quantities", + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 4, + "m_parent_sub_section": "sub_sections", "m_annotations": { "elasticsearch": [ - "searchable_quantities.date_value" + "search_quantities" ] }, - "name": "date_value", - "description": "The value mapped as an ES date field.", - "type": { - "type_kind": "python", - "type_data": "str" - } + "name": "search_quantities", + "sub_section": "/packages/13/section_definitions/3", + "repeats": true } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 4, + "m_parent_index": 6, "m_parent_sub_section": "section_definitions", - "name": "RFC3161Timestamp", + "name": "EntryArchive", + "label": "Entry", + "base_sections": [ + "/packages/15/section_definitions/0" + ], "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "token_seed", - "description": "The entry hash used to get timestamp token.", + "name": "entry_id", + "description": "The unique primary id for this entry.", "type": { "type_kind": "python", "type_data": "str" - } + }, + "virtual": true }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", - "name": "token", - "description": "The token returned by RFC3161 server.", + "name": "processing_logs", + "description": "The processing logs for this entry as a list of structlog entries.", "type": { - "type_kind": "custom", - "type_data": "nomad.metainfo.metainfo._Bytes" - } + "type_kind": "Any" + }, + "shape": [ + "0..*" + ] + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "run", + "sub_section": "/packages/4/section_definitions/3", + "repeats": true }, { - "m_def": "nomad.metainfo.metainfo.Quantity", + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", + "name": "measurement", + "sub_section": "/packages/11/section_definitions/3", + "repeats": true + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 2, - "m_parent_sub_section": "quantities", - "name": "tsa_server", - "description": "The address of RFC3161 server.", - "type": { - "type_kind": "python", - "type_data": "str" - } + "m_parent_sub_section": "sub_sections", + "name": "data", + "sub_section": "/packages/15/section_definitions/1" }, { - "m_def": "nomad.metainfo.metainfo.Quantity", + "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 3, - "m_parent_sub_section": "quantities", - "name": "timestamp", - "description": "The RFC3161 timestamp.", - "type": { - "type_kind": "custom", - "type_data": "nomad.metainfo.metainfo._Datetime" - } - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 5, - "m_parent_sub_section": "section_definitions", - "name": "EntryMetadata", - "label": "Metadata", - "quantities": [ - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "upload_id" - ] - }, - "name": "upload_id", - "description": "The persistent and globally unique identifier for the upload of the entry", + "m_parent_sub_section": "sub_sections", + "name": "workflow", "categories": [ - "/packages/12/category_definitions/1" + "/packages/17/category_definitions/0" ], - "type": { - "type_kind": "python", - "type_data": "str" - } + "sub_section": "/packages/18/section_definitions/34", + "repeats": true }, { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "upload_name" - ] - }, - "name": "upload_name", - "description": "The user provided upload name", + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 4, + "m_parent_sub_section": "sub_sections", + "name": "workflow2", "categories": [ - "/packages/12/category_definitions/1", - "/packages/12/category_definitions/0" + "/packages/17/category_definitions/0" ], - "type": { - "type_kind": "python", - "type_data": "str" - } + "sub_section": "/packages/20/section_definitions/3" }, { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, - "m_parent_sub_section": "quantities", + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 5, + "m_parent_sub_section": "sub_sections", "m_annotations": { - "auth_level": [ - "AuthLevel.admin" - ], "elasticsearch": [ - "upload_create_time" + "metadata" ] }, - "name": "upload_create_time", - "description": "The date and time when the upload was created in nomad", + "name": "metadata", "categories": [ - "/packages/12/category_definitions/1", - "/packages/12/category_definitions/0" + "/packages/17/category_definitions/0" ], - "type": { - "type_kind": "custom", - "type_data": "nomad.metainfo.metainfo._Datetime" - } + "sub_section": "/packages/13/section_definitions/5" }, { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, - "m_parent_sub_section": "quantities", + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 6, + "m_parent_sub_section": "sub_sections", "m_annotations": { "elasticsearch": [ - "entry_id" + "results" ] }, - "name": "entry_id", - "description": "A persistent and globally unique identifier for the entry", + "name": "results", "categories": [ - "/packages/12/category_definitions/2", - "/packages/12/category_definitions/3" + "/packages/17/category_definitions/0" ], - "type": { - "type_kind": "python", - "type_data": "str" - } + "sub_section": "/packages/5/section_definitions/78" }, { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 4, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "entry_name", - "entry_name__suggestion", - "entry_name.prefix" - ] - }, - "name": "entry_name", - "description": "A brief human readable name for the entry.", - "type": { - "type_kind": "python", - "type_data": "str" - } + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 7, + "m_parent_sub_section": "sub_sections", + "name": "tabular_tree", + "sub_section": "/packages/12/section_definitions/4", + "repeats": false }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 8, + "m_parent_sub_section": "sub_sections", + "name": "definitions", + "sub_section": "/packages/22/section_definitions/4" + } + ] + } + ], + "category_definitions": [ + { + "m_def": "nomad.metainfo.metainfo.Category", + "m_parent_index": 0, + "m_parent_sub_section": "category_definitions", + "name": "EditableUserMetadata", + "description": "NOMAD entry metadata quantities that can be edited by the user before or after publish." + }, + { + "m_def": "nomad.metainfo.metainfo.Category", + "m_parent_index": 1, + "m_parent_sub_section": "category_definitions", + "name": "MongoUploadMetadata", + "description": "The field is defined on the Upload mongo document." + }, + { + "m_def": "nomad.metainfo.metainfo.Category", + "m_parent_index": 2, + "m_parent_sub_section": "category_definitions", + "name": "MongoEntryMetadata", + "description": "The field is defined on the Entry mongo document." + }, + { + "m_def": "nomad.metainfo.metainfo.Category", + "m_parent_index": 3, + "m_parent_sub_section": "category_definitions", + "name": "MongoSystemMetadata", + "description": "The field is managed directly by the system/process (or derived from data managed by the\nsystem/process), and should never be updated from an :class:`EntryMetadata` object." + }, + { + "m_def": "nomad.metainfo.metainfo.Category", + "m_parent_index": 4, + "m_parent_sub_section": "category_definitions", + "name": "DomainMetadata", + "description": "NOMAD entry quantities that are determined by the uploaded data." + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Package", + "m_parent_index": 14, + "m_parent_sub_section": "packages", + "name": "nomad.parsing.tabular", + "section_definitions": [ + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 0, + "m_parent_sub_section": "section_definitions", + "name": "TableData", + "description": "", + "base_sections": [ + "/packages/15/section_definitions/0" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { - "elasticsearch": [ - "entry_type" + "eln": [ + { + "component": "BoolEditQuantity" + } ] }, - "name": "entry_type", - "description": "The main schema definition. This is the name of the section used for data.", + "name": "fill_archive_from_datafile", + "description": "While checked, it allows the parser to fill all the Quantities from the data file.\nBe cautious though! as checking this box will cause overwriting your fields with data parsed from the data file", "type": { "type_kind": "python", - "type_data": "str" - } - }, + "type_data": "bool" + }, + "default": true + } + ] + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Package", + "m_parent_index": 15, + "m_parent_sub_section": "packages", + "name": "nomad.datamodel.data", + "section_definitions": [ + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 0, + "m_parent_sub_section": "section_definitions", + "name": "ArchiveSection", + "description": "Base class for sections in a NOMAD archive. Provides a framework for custom section normalization via the `normalize` function." + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 1, + "m_parent_sub_section": "section_definitions", + "name": "EntryData", + "description": "An empty base section definition. This can be used to add new top-level sections to an entry.", + "base_sections": [ + "/packages/15/section_definitions/0" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 2, + "m_parent_sub_section": "section_definitions", + "name": "Author", + "description": "A person that is author of data in NOMAD or references by NOMAD.", + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 6, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "calc_id" + "viewers.name", + "viewers.name.text", + "viewers.name__suggestion" ] }, - "name": "calc_id", - "description": "Legacy field name, use `entry_id` instead.", + "name": "name", "type": { "type_kind": "python", "type_data": "str" @@ -59356,93 +64113,31 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 7, - "m_parent_sub_section": "quantities", - "name": "entry_hash", - "description": "A raw file content based checksum/hash", - "categories": [ - "/packages/12/category_definitions/2" - ], - "type": { - "type_kind": "python", - "type_data": "str" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 8, + "m_parent_index": 1, "m_parent_sub_section": "quantities", - "m_annotations": { - "auth_level": [ - "AuthLevel.admin" - ], - "elasticsearch": [ - "entry_create_time" - ] - }, - "name": "entry_create_time", - "description": "The date and time when the entry was created in nomad", - "categories": [ - "/packages/12/category_definitions/2", - "/packages/12/category_definitions/3", - "/packages/12/category_definitions/0" - ], + "name": "first_name", + "description": "The users first name (including all other given names)", "type": { "type_kind": "custom", - "type_data": "nomad.metainfo.metainfo._Datetime" + "type_data": "nomad.metainfo.metainfo._Capitalized" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 9, + "m_parent_index": 2, "m_parent_sub_section": "quantities", - "name": "last_edit_time", - "description": "The date and time the user metadata was last edited.", - "categories": [ - "/packages/12/category_definitions/2" - ], + "name": "last_name", + "description": "The users last name", "type": { "type_kind": "custom", - "type_data": "nomad.metainfo.metainfo._Datetime" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 10, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "parser_name" - ] - }, - "name": "parser_name", - "description": "The NOMAD parser used for the last processing", - "categories": [ - "/packages/12/category_definitions/2", - "/packages/12/category_definitions/3" - ], - "type": { - "type_kind": "python", - "type_data": "str" + "type_data": "nomad.metainfo.metainfo._Capitalized" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 11, + "m_parent_index": 3, "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "mainfile", - "mainfile.path", - "mainfile__suggestion" - ] - }, - "name": "mainfile", - "description": "The path to the mainfile from the root directory of the uploaded files", - "categories": [ - "/packages/12/category_definitions/2", - "/packages/12/category_definitions/3" - ], + "name": "email", "type": { "type_kind": "python", "type_data": "str" @@ -59450,20 +64145,10 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 12, + "m_parent_index": 4, "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "mainfile_key", - "mainfile_key.path" - ] - }, - "name": "mainfile_key", - "description": "Key used to differentiate between different *child entries* of an entry.\nFor parent entries and entries that do not have any children, the value should\nbe empty.", - "categories": [ - "/packages/12/category_definitions/2", - "/packages/12/category_definitions/3" - ], + "name": "affiliation", + "description": "The name of the company and institutes the user identifies with", "type": { "type_kind": "python", "type_data": "str" @@ -59471,54 +64156,43 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 13, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "files", - "files.path" - ] - }, - "name": "files", - "description": "The paths to the files within the upload that belong to this entry.\nAll files within the same directory as the entry's mainfile are considered the\nauxiliary files that belong to the entry.", - "type": { - "type_kind": "python", - "type_data": "str" - }, - "shape": [ - "0..*" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 14, + "m_parent_index": 5, "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "pid" - ] - }, - "name": "pid", - "description": "The unique, sequentially enumerated, integer PID that was used in the legacy\nNOMAD CoE. It allows to resolve URLs of the old NOMAD CoE Repository.", - "categories": [ - "/packages/12/category_definitions/2" - ], + "name": "affiliation_address", + "description": "The address of the given affiliation", "type": { "type_kind": "python", "type_data": "str" } - }, + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 3, + "m_parent_sub_section": "section_definitions", + "m_annotations": { + "pydantic": [ + "PydanticModel" + ] + }, + "name": "User", + "description": "A NOMAD user. Typically a NOMAD user has a NOMAD account. The user related data is managed by\nNOMAD keycloak user-management system. Users are used to denote authors,\nreviewers, and owners of datasets.", + "base_sections": [ + "/packages/15/section_definitions/2" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 15, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "raw_id" + "viewers.user_id" ] }, - "name": "raw_id", - "description": "The code specific identifier extracted from the entry's raw files by the parser,\nif supported.", + "name": "user_id", + "description": "The unique, persistent keycloak UUID", "type": { "type_kind": "python", "type_data": "str" @@ -59526,19 +64200,10 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 16, + "m_parent_index": 1, "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "external_id" - ] - }, - "name": "external_id", - "description": "A user provided external id. Usually the id for an entry in an external database\nwhere the data was imported from.", - "categories": [ - "/packages/12/category_definitions/2", - "/packages/12/category_definitions/0" - ], + "name": "username", + "description": "The unique, persistent, user chosen username", "type": { "type_kind": "python", "type_data": "str" @@ -59546,42 +64211,10 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 17, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "published" - ] - }, - "name": "published", - "description": "Indicates if the entry is published", - "categories": [ - "/packages/12/category_definitions/1" - ], - "type": { - "type_kind": "python", - "type_data": "bool" - }, - "default": false - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 18, + "m_parent_index": 2, "m_parent_sub_section": "quantities", - "m_annotations": { - "auth_level": [ - "AuthLevel.admin" - ], - "elasticsearch": [ - "publish_time" - ] - }, - "name": "publish_time", - "description": "The date and time when the upload was published in nomad", - "categories": [ - "/packages/12/category_definitions/1", - "/packages/12/category_definitions/0" - ], + "name": "created", + "description": "The time the account was created", "type": { "type_kind": "custom", "type_data": "nomad.metainfo.metainfo._Datetime" @@ -59589,134 +64222,133 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 19, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "with_embargo" - ] - }, - "name": "with_embargo", - "description": "Indicated if this entry is under an embargo", - "categories": [ - "/packages/12/category_definitions/1", - "/packages/12/category_definitions/3" - ], - "type": { - "type_kind": "python", - "type_data": "bool" - }, - "default": false - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 20, + "m_parent_index": 3, "m_parent_sub_section": "quantities", - "name": "embargo_length", - "description": "The length of the requested embargo period, in months", - "categories": [ - "/packages/12/category_definitions/1", - "/packages/12/category_definitions/0" - ], + "name": "repo_user_id", + "description": "Optional, legacy user id from the old NOMAD CoE repository.", "type": { "type_kind": "python", - "type_data": "int" + "type_data": "str" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 21, + "m_parent_index": 4, "m_parent_sub_section": "quantities", - "m_annotations": { - "auth_level": [ - "AuthLevel.admin" - ] - }, - "name": "license", - "description": "A short license description (e.g. CC BY 4.0), that refers to the\nlicense of this entry.", - "categories": [ - "/packages/12/category_definitions/1", - "/packages/12/category_definitions/0" - ], + "name": "is_admin", + "description": "Bool that indicated, iff the user the use admin user", "type": { "type_kind": "python", - "type_data": "str" + "type_data": "bool" }, - "default": "CC BY 4.0" + "virtual": true }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 22, + "m_parent_index": 5, "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "processed" - ] - }, - "name": "processed", - "description": "Indicates that the entry is successfully processed.", - "categories": [ - "/packages/12/category_definitions/2", - "/packages/12/category_definitions/3" - ], + "name": "is_oasis_admin", "type": { "type_kind": "python", "type_data": "bool" }, "default": false - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 23, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "last_processing_time" - ] - }, - "name": "last_processing_time", - "description": "The date and time of the last processing.", - "categories": [ - "/packages/12/category_definitions/2" - ], - "type": { - "type_kind": "custom", - "type_data": "nomad.metainfo.metainfo._Datetime" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 24, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "processing_errors" - ] - }, - "name": "processing_errors", - "description": "Errors that occurred during processing", - "type": { - "type_kind": "python", - "type_data": "str" - }, - "shape": [ - "*" - ] - }, + } + ] + } + ], + "category_definitions": [ + { + "m_def": "nomad.metainfo.metainfo.Category", + "m_parent_index": 0, + "m_parent_sub_section": "category_definitions", + "name": "EntryDataCategory" + }, + { + "m_def": "nomad.metainfo.metainfo.Category", + "m_parent_index": 1, + "m_parent_sub_section": "category_definitions", + "name": "ElnIntegrationCategory", + "label": "Third-party ELN Integration", + "categories": [ + "/packages/15/category_definitions/0" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Category", + "m_parent_index": 2, + "m_parent_sub_section": "category_definitions", + "name": "BasicElnCategory", + "label": "Basic ELN", + "categories": [ + "/packages/15/category_definitions/0" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Category", + "m_parent_index": 3, + "m_parent_sub_section": "category_definitions", + "name": "ElnExampleCategory", + "label": "Example ELNs", + "categories": [ + "/packages/15/category_definitions/0" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Category", + "m_parent_index": 4, + "m_parent_sub_section": "category_definitions", + "name": "UseCaseElnCategory", + "label": "Use-cases", + "categories": [ + "/packages/15/category_definitions/0" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Category", + "m_parent_index": 5, + "m_parent_sub_section": "category_definitions", + "name": "WorkflowsElnCategory", + "label": "Workflows", + "categories": [ + "/packages/15/category_definitions/0" + ] + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Package", + "m_parent_index": 16, + "m_parent_sub_section": "packages", + "name": "nomad.datamodel.metainfo.basesections", + "section_definitions": [ + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 0, + "m_parent_sub_section": "section_definitions", + "name": "BaseSection", + "description": "A generic abstract base section that provides a few commonly used properties. If you inherit from this section, but do not need some quantities, list those\nquantities in the `eln.hide` annotation of your inheriting section definition.\n\nBesides predefining some quantities, these base sections will add some metadata\nto NOMAD's search. A particular example are `tags`, if you define a string\nor enum quantity in your sections named `tags`, its values will be searchable.", + "links": [ + "http://purl.obolibrary.org/obo/BFO_0000001" + ], + "base_sections": [ + "/packages/15/section_definitions/0" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 25, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { - "elasticsearch": [ - "nomad_version" + "eln": [ + { + "component": "StringEditQuantity", + "label": "Short name" + } ] }, - "name": "nomad_version", - "description": "The NOMAD version used for the last processing", - "categories": [ - "/packages/12/category_definitions/2" - ], + "name": "name", + "description": "A short human readable and descriptive name.", "type": { "type_kind": "python", "type_data": "str" @@ -59724,38 +64356,36 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 26, + "m_parent_index": 1, "m_parent_sub_section": "quantities", "m_annotations": { - "elasticsearch": [ - "nomad_commit" + "eln": [ + { + "component": "DateTimeEditQuantity" + } ] }, - "name": "nomad_commit", - "description": "The NOMAD commit used for the last processing", - "categories": [ - "/packages/12/category_definitions/2" - ], + "name": "datetime", + "description": "The date and time associated with this section.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "custom", + "type_data": "nomad.metainfo.metainfo._Datetime" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 27, + "m_parent_index": 2, "m_parent_sub_section": "quantities", "m_annotations": { - "elasticsearch": [ - "comment" + "eln": [ + { + "component": "StringEditQuantity", + "label": "ID" + } ] }, - "name": "comment", - "description": "A user provided comment for this entry", - "categories": [ - "/packages/12/category_definitions/2", - "/packages/12/category_definitions/0" - ], + "name": "lab_id", + "description": "An ID string that is unique at least for the lab that produced this\ndata.", "type": { "type_kind": "python", "type_data": "str" @@ -59763,604 +64393,595 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 28, + "m_parent_index": 3, "m_parent_sub_section": "quantities", "m_annotations": { - "elasticsearch": [ - "references" + "eln": [ + { + "component": "RichTextEditQuantity" + } ] }, - "name": "references", - "description": "User provided references (URLs) for this entry", - "categories": [ - "/packages/12/category_definitions/2", - "/packages/12/category_definitions/0" - ], + "name": "description", + "description": "Any information that cannot be captured in the other fields.", "type": { "type_kind": "python", "type_data": "str" - }, - "shape": [ - "0..*" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 29, - "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "external_db" - ] - }, - "name": "external_db", - "description": "The repository or external database where the original data resides", - "categories": [ - "/packages/12/category_definitions/1", - "/packages/12/category_definitions/0" - ], - "type": { - "type_kind": "Enum", - "type_data": [ - "The Perovskite Database Project", - "EELS Data Base", - "Materials Project", - "AFLOW", - "OQMD", - "Kyoto Phonopy Database" - ] } - }, + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 1, + "m_parent_sub_section": "section_definitions", + "name": "Entity", + "description": "An object that persists, endures, or continues to exist through time while maintaining its identity.", + "links": [ + "http://purl.obolibrary.org/obo/BFO_0000002" + ], + "base_sections": [ + "/packages/16/section_definitions/0" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 2, + "m_parent_sub_section": "section_definitions", + "name": "ActivityStep", + "description": "Any dependant step of an `Activity`.", + "base_sections": [ + "/packages/15/section_definitions/0" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 30, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { - "elasticsearch": [ - "origin" + "eln": [ + { + "component": "StringEditQuantity", + "label": "Step name" + } ] }, - "name": "origin", - "description": "A short human readable description of the entries origin. Usually it is the\nhandle of an external database/repository or the name of the main author.", + "name": "name", + "description": "A short and descriptive name for this step.", "type": { "type_kind": "python", "type_data": "str" - }, - "virtual": true + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 31, + "m_parent_index": 1, "m_parent_sub_section": "quantities", "m_annotations": { - "auth_level": [ - "AuthLevel.admin" - ], - "elasticsearch": [ - "main_author" + "eln": [ + { + "component": "DateTimeEditQuantity", + "label": "Starting time" + } ] }, - "name": "main_author", - "description": "The main author of the entry", - "categories": [ - "/packages/12/category_definitions/1", - "/packages/12/category_definitions/0" - ], + "name": "start_time", + "description": "Optionally, the starting time of the activity step. If omitted, it is assumed to\nfollow directly after the previous step.", "type": { - "type_kind": "User", - "type_data": "User" + "type_kind": "custom", + "type_data": "nomad.metainfo.metainfo._Datetime" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 32, + "m_parent_index": 2, "m_parent_sub_section": "quantities", - "name": "coauthors", - "description": "A user provided list of co-authors for the whole upload. These can view and edit the\nupload when in staging, and view it also if it is embargoed.", - "categories": [ - "/packages/12/category_definitions/1", - "/packages/12/category_definitions/0" - ], - "type": { - "type_kind": "Author", - "type_data": "Author" + "m_annotations": { + "eln": [ + { + "component": "RichTextEditQuantity" + } + ] }, - "shape": [ - "0..*" - ], - "default": [] - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 33, - "m_parent_sub_section": "quantities", - "name": "entry_coauthors", - "description": "A user provided list of co-authors specific for this entry. This is a legacy field,\nfor new uploads, coauthors should be specified on the upload level only.", - "categories": [ - "/packages/12/category_definitions/2" - ], + "name": "comment", + "description": "Any additional information about the step not captured by the other fields.", "type": { - "type_kind": "Author", - "type_data": "Author" - }, - "shape": [ - "0..*" - ], - "default": [] - }, + "type_kind": "python", + "type_data": "str" + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 3, + "m_parent_sub_section": "section_definitions", + "name": "Activity", + "description": "An action that has a temporal extension and for some time depends on some entity.", + "links": [ + "http://purl.obolibrary.org/obo/BFO_0000015" + ], + "base_sections": [ + "/packages/16/section_definitions/0" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 34, + "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "reviewers", - "description": "A user provided list of reviewers. Reviewers can see the whole upload, also if\nit is unpublished or embargoed", - "categories": [ - "/packages/12/category_definitions/1", - "/packages/12/category_definitions/0" - ], - "type": { - "type_kind": "User", - "type_data": "User" + "m_annotations": { + "eln": [ + { + "component": "DateTimeEditQuantity", + "label": "Starting Time" + } + ] }, - "shape": [ - "0..*" - ], - "default": [] + "name": "datetime", + "description": "The date and time when this activity was started.", + "type": { + "type_kind": "custom", + "type_data": "nomad.metainfo.metainfo._Datetime" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 35, + "m_parent_index": 1, "m_parent_sub_section": "quantities", - "m_annotations": { - "elasticsearch": [ - "authors" - ] - }, - "name": "authors", - "description": "All authors (main author and co-authors)", + "name": "method", + "description": "A short consistent handle for the applied method.", "type": { - "type_kind": "Author", - "type_data": "Author" - }, - "shape": [ - "0..*" - ], - "virtual": true + "type_kind": "python", + "type_data": "str" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 36, + "m_parent_index": 2, "m_parent_sub_section": "quantities", "m_annotations": { - "elasticsearch": [ - "writers" + "eln": [ + { + "component": "StringEditQuantity" + } ] }, - "name": "writers", - "description": "All writers (main author, upload coauthors)", + "name": "location", + "description": "location of the experiment.", "type": { - "type_kind": "User", - "type_data": "User" - }, - "shape": [ - "0..*" - ], - "virtual": true - }, + "type_kind": "python", + "type_data": "str" + } + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "steps", + "description": "An ordered list of all the dependant steps that make up this activity.", + "sub_section": "/packages/16/section_definitions/2", + "repeats": true + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 4, + "m_parent_sub_section": "section_definitions", + "name": "SectionReference", + "description": "A section used for referencing another section.", + "base_sections": [ + "/packages/15/section_definitions/0" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 37, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { - "elasticsearch": [ - "viewers" + "eln": [ + { + "component": "StringEditQuantity" + } ] }, - "name": "viewers", - "description": "All viewers (main author, upload coauthors, and reviewers)", + "name": "name", + "description": "A short descriptive name for the role of this reference.", "type": { - "type_kind": "User", - "type_data": "User" - }, - "shape": [ - "0..*" - ], - "virtual": true + "type_kind": "python", + "type_data": "str" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 38, + "m_parent_index": 1, "m_parent_sub_section": "quantities", "m_annotations": { - "elasticsearch": [ - "datasets" + "eln": [ + { + "component": "ReferenceEditQuantity", + "label": "Section Reference" + } ] }, - "name": "datasets", - "description": "A list of user curated datasets this entry belongs to.", - "categories": [ - "/packages/12/category_definitions/2", - "/packages/12/category_definitions/0" - ], + "name": "reference", + "description": "A reference to a NOMAD archive section.", "type": { "type_kind": "reference", - "type_data": "/packages/12/section_definitions/0" - }, - "shape": [ - "0..*" - ], - "default": [] - }, + "type_data": "/packages/15/section_definitions/0" + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 5, + "m_parent_sub_section": "section_definitions", + "name": "EntityReference", + "description": "A section used for referencing an Entity.", + "base_sections": [ + "/packages/16/section_definitions/4" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 39, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { - "elasticsearch": [ - "domain" + "eln": [ + { + "component": "ReferenceEditQuantity", + "label": "Entity Reference" + } ] }, - "name": "domain", - "description": "The material science domain", + "name": "reference", + "description": "A reference to a NOMAD `Entity` entry.", "type": { - "type_kind": "Enum", - "type_data": [ - "dft", - "ems" - ] + "type_kind": "reference", + "type_data": "/packages/16/section_definitions/1" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 40, + "m_parent_index": 1, "m_parent_sub_section": "quantities", "m_annotations": { - "elasticsearch": [ - "n_quantities" + "eln": [ + { + "component": "StringEditQuantity" + } ] }, - "name": "n_quantities", - "description": "Number of metainfo quantities parsed from the entry.", + "name": "lab_id", + "description": "The readable identifier for the entity.", "type": { "type_kind": "python", - "type_data": "int" - }, - "default": 0 - }, + "type_data": "str" + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 6, + "m_parent_sub_section": "section_definitions", + "name": "ExperimentStep", + "description": "Any dependant step of an `Experiment`.", + "base_sections": [ + "/packages/16/section_definitions/2" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 41, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { - "elasticsearch": [ - "quantities", - "quantities.path" + "eln": [ + { + "component": "ReferenceEditQuantity" + } ] }, - "name": "quantities", - "description": "All quantities that are used by this entry.", + "name": "activity", + "description": "The activity that makes up this step of the experiment.", "type": { - "type_kind": "python", - "type_data": "str" - }, - "shape": [ - "0..*" - ] + "type_kind": "reference", + "type_data": "/packages/16/section_definitions/3" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 42, + "m_parent_index": 1, "m_parent_sub_section": "quantities", "m_annotations": { - "elasticsearch": [ - "sections" + "eln": [ + { + "component": "StringEditQuantity", + "label": "Activity ID" + } ] }, - "name": "sections", - "description": "All sections that are present in this entry. This field is deprecated and will be removed.", + "name": "lab_id", + "description": "The readable identifier for the activity.", "type": { "type_kind": "python", "type_data": "str" - }, - "shape": [ - "*" - ] + } } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 7, + "m_parent_sub_section": "section_definitions", + "name": "Experiment", + "description": "A section for grouping activities together into an experiment.", + "base_sections": [ + "/packages/16/section_definitions/3" ], "sub_sections": [ { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 0, "m_parent_sub_section": "sub_sections", - "name": "entry_timestamp", - "description": "A timestamp based on RFC3161.", - "sub_section": "/packages/12/section_definitions/4" - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 1, - "m_parent_sub_section": "sub_sections", - "m_annotations": { - "elasticsearch": [ - "optimade" - ] - }, - "name": "optimade", - "description": "Metadata used for the optimade API.", - "sub_section": "/packages/20/section_definitions/1" - }, + "name": "steps", + "description": "An ordered list of all the dependant steps that make up this activity.", + "sub_section": "/packages/16/section_definitions/6", + "repeats": true + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 8, + "m_parent_sub_section": "section_definitions", + "name": "Collection", + "description": "A section for grouping entities together into a collection.", + "base_sections": [ + "/packages/16/section_definitions/1" + ], + "sub_sections": [ { "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 2, + "m_parent_index": 0, "m_parent_sub_section": "sub_sections", - "m_annotations": { - "elasticsearch": [ - "section_defs" - ] - }, - "name": "section_defs", - "description": "All sections that are compatible with the present sections in this entry.", - "sub_section": "/packages/12/section_definitions/1", + "name": "entities", + "description": "References to the entities that make up the collection.", + "sub_section": "/packages/16/section_definitions/5", "repeats": true - }, + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 9, + "m_parent_sub_section": "section_definitions", + "name": "ElementalComposition", + "description": "A section for describing the elemental composition of a system, i.e. the element and its atomic fraction.", + "more": { + "label_quantity": "element" + }, + "base_sections": [ + "/packages/15/section_definitions/0" + ], + "quantities": [ { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 3, - "m_parent_sub_section": "sub_sections", + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", "m_annotations": { - "elasticsearch": [ - "entry_references" + "eln": [ + { + "component": "AutocompleteEditQuantity" + } ] }, - "name": "entry_references", - "sub_section": "/packages/12/section_definitions/2", - "repeats": true - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 4, - "m_parent_sub_section": "sub_sections", - "m_annotations": { - "elasticsearch": [ - "searchable_quantities" + "name": "element", + "description": "The symbol of the element, e.g. 'Pb'.", + "type": { + "type_kind": "Enum", + "type_data": [ + "H", + "He", + "Li", + "Be", + "B", + "C", + "N", + "O", + "F", + "Ne", + "Na", + "Mg", + "Al", + "Si", + "P", + "S", + "Cl", + "Ar", + "K", + "Ca", + "Sc", + "Ti", + "V", + "Cr", + "Mn", + "Fe", + "Co", + "Ni", + "Cu", + "Zn", + "Ga", + "Ge", + "As", + "Se", + "Br", + "Kr", + "Rb", + "Sr", + "Y", + "Zr", + "Nb", + "Mo", + "Tc", + "Ru", + "Rh", + "Pd", + "Ag", + "Cd", + "In", + "Sn", + "Sb", + "Te", + "I", + "Xe", + "Cs", + "Ba", + "La", + "Ce", + "Pr", + "Nd", + "Pm", + "Sm", + "Eu", + "Gd", + "Tb", + "Dy", + "Ho", + "Er", + "Tm", + "Yb", + "Lu", + "Hf", + "Ta", + "W", + "Re", + "Os", + "Ir", + "Pt", + "Au", + "Hg", + "Tl", + "Pb", + "Bi", + "Po", + "At", + "Rn", + "Fr", + "Ra", + "Ac", + "Th", + "Pa", + "U", + "Np", + "Pu", + "Am", + "Cm", + "Bk", + "Cf", + "Es", + "Fm", + "Md", + "No", + "Lr", + "Rf", + "Db", + "Sg", + "Bh", + "Hs", + "Mt", + "Ds", + "Rg", + "Cn", + "Nh", + "Fl", + "Mc", + "Lv", + "Ts", + "Og" ] - }, - "name": "searchable_quantities", - "sub_section": "/packages/12/section_definitions/3", - "repeats": true - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 6, - "m_parent_sub_section": "section_definitions", - "name": "EntryArchive", - "label": "Entry", - "base_sections": [ - "/packages/14/section_definitions/0" - ], - "quantities": [ - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, - "m_parent_sub_section": "quantities", - "name": "entry_id", - "description": "The unique primary id for this entry.", - "type": { - "type_kind": "python", - "type_data": "str" - }, - "virtual": true + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", - "name": "processing_logs", - "description": "The processing logs for this entry as a list of structlog entries.", - "type": { - "type_kind": "Any" - }, - "shape": [ - "0..*" - ] - } - ], - "sub_sections": [ - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 0, - "m_parent_sub_section": "sub_sections", - "name": "run", - "sub_section": "/packages/3/section_definitions/3", - "repeats": true - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 1, - "m_parent_sub_section": "sub_sections", - "name": "measurement", - "sub_section": "/packages/4/section_definitions/3", - "repeats": true - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 2, - "m_parent_sub_section": "sub_sections", - "name": "data", - "sub_section": "/packages/14/section_definitions/1" - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 3, - "m_parent_sub_section": "sub_sections", - "name": "workflow", - "categories": [ - "/packages/16/category_definitions/0" - ], - "sub_section": "/packages/17/section_definitions/34", - "repeats": true - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 4, - "m_parent_sub_section": "sub_sections", - "name": "workflow2", - "categories": [ - "/packages/16/category_definitions/0" - ], - "sub_section": "/packages/19/section_definitions/3" - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 5, - "m_parent_sub_section": "sub_sections", "m_annotations": { - "elasticsearch": [ - "metadata" + "eln": [ + { + "component": "NumberEditQuantity" + } ] }, - "name": "metadata", - "categories": [ - "/packages/16/category_definitions/0" - ], - "sub_section": "/packages/12/section_definitions/5" + "name": "atomic_fraction", + "description": "The atomic fraction of the element in the system it is contained within.\nPer definition a positive value less than or equal to 1.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + } }, { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 6, - "m_parent_sub_section": "sub_sections", + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", "m_annotations": { - "elasticsearch": [ - "results" + "eln": [ + { + "component": "NumberEditQuantity" + } ] }, - "name": "results", - "categories": [ - "/packages/16/category_definitions/0" - ], - "sub_section": "/packages/5/section_definitions/62" - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 7, - "m_parent_sub_section": "sub_sections", - "name": "tabular_tree", - "sub_section": "/packages/11/section_definitions/4", - "repeats": false - }, - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 8, - "m_parent_sub_section": "sub_sections", - "name": "definitions", - "sub_section": "/packages/21/section_definitions/4" + "name": "mass_fraction", + "description": "The mass fraction of the element in the system it is contained within.\nPer definition a positive value less than or equal to 1.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + } } ] - } - ], - "category_definitions": [ - { - "m_def": "nomad.metainfo.metainfo.Category", - "m_parent_index": 0, - "m_parent_sub_section": "category_definitions", - "name": "EditableUserMetadata", - "description": "NOMAD entry metadata quantities that can be edited by the user before or after publish." - }, - { - "m_def": "nomad.metainfo.metainfo.Category", - "m_parent_index": 1, - "m_parent_sub_section": "category_definitions", - "name": "MongoUploadMetadata", - "description": "The field is defined on the Upload mongo document." - }, - { - "m_def": "nomad.metainfo.metainfo.Category", - "m_parent_index": 2, - "m_parent_sub_section": "category_definitions", - "name": "MongoEntryMetadata", - "description": "The field is defined on the Entry mongo document." }, - { - "m_def": "nomad.metainfo.metainfo.Category", - "m_parent_index": 3, - "m_parent_sub_section": "category_definitions", - "name": "MongoSystemMetadata", - "description": "The field is managed directly by the system/process (or derived from data managed by the\nsystem/process), and should never be updated from an :class:`EntryMetadata` object." - }, - { - "m_def": "nomad.metainfo.metainfo.Category", - "m_parent_index": 4, - "m_parent_sub_section": "category_definitions", - "name": "DomainMetadata", - "description": "NOMAD entry quantities that are determined by the uploaded data." - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Package", - "m_parent_index": 13, - "m_parent_sub_section": "packages", - "name": "nomad.parsing.tabular", - "section_definitions": [ { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 0, + "m_parent_index": 10, "m_parent_sub_section": "section_definitions", - "name": "TableRow", - "description": "Represents the data in one row of a table.", + "name": "System", + "description": "A base section for any system of materials which is investigated or used to construct other systems.", "base_sections": [ - "/packages/14/section_definitions/1" + "/packages/16/section_definitions/1" ], - "quantities": [ + "sub_sections": [ { - "m_def": "nomad.metainfo.metainfo.Quantity", + "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 0, - "m_parent_sub_section": "quantities", - "name": "table_ref", - "description": "A reference to the table that this row is contained in.", - "type": { - "type_kind": "reference", - "type_data": "/packages/13/section_definitions/1" - } + "m_parent_sub_section": "sub_sections", + "name": "elemental_composition", + "description": "A list of all the elements found in the system together and their respective\natomic fraction within the system.", + "sub_section": "/packages/16/section_definitions/9", + "repeats": true } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 1, + "m_parent_index": 11, "m_parent_sub_section": "section_definitions", - "name": "Table", - "description": "Represents a table with many rows.", + "name": "Instrument", + "description": "A base section that can be used for instruments.", "base_sections": [ - "/packages/14/section_definitions/1" - ], - "quantities": [ - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, - "m_parent_sub_section": "quantities", - "name": "row_refs", - "description": "References that connect to each row. Each row is stored in it individual entry.", - "type": { - "type_kind": "reference", - "type_data": "/packages/13/section_definitions/0" - }, - "shape": [ - "*" - ] - } + "/packages/16/section_definitions/1" ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 2, + "m_parent_index": 12, "m_parent_sub_section": "section_definitions", - "name": "TableData", - "description": "", + "name": "InstrumentReference", + "description": "A section used for referencing an Instrument.", "base_sections": [ - "/packages/14/section_definitions/0" + "/packages/16/section_definitions/5" ], "quantities": [ { @@ -60370,139 +64991,127 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "BoolEditQuantity" + "component": "ReferenceEditQuantity", + "label": "Instrument Reference" } ] }, - "name": "fill_archive_from_datafile", - "description": "While checked, it allows the parser to fill all the Quantities from the data file.\nBe cautious though! as checking this box will cause overwriting your fields with data parsed from the data file", + "name": "reference", + "description": "A reference to a NOMAD `Instrument` entry.", "type": { - "type_kind": "python", - "type_data": "bool" - }, - "default": true + "type_kind": "reference", + "type_data": "/packages/16/section_definitions/11" + } } ] - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Package", - "m_parent_index": 14, - "m_parent_sub_section": "packages", - "name": "nomad.datamodel.data", - "section_definitions": [ - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 0, - "m_parent_sub_section": "section_definitions", - "name": "ArchiveSection", - "description": "Base class for sections in a NOMAD archive. Provides a framework for custom section normalization via the `normalize` function." }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 1, + "m_parent_index": 13, "m_parent_sub_section": "section_definitions", - "name": "EntryData", - "description": "An empty base section definition. This can be used to add new top-level sections to an entry.", + "name": "Component", + "description": "A section for describing a component and its role in a composite system.", "base_sections": [ - "/packages/14/section_definitions/0" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 2, - "m_parent_sub_section": "section_definitions", - "name": "Author", - "description": "A person that is author of data in NOMAD or references by NOMAD.", + "/packages/15/section_definitions/0" + ], "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { - "elasticsearch": [ - "viewers.name", - "viewers.name.text", - "viewers.name__suggestion" + "eln": [ + { + "component": "StringEditQuantity", + "label": "Component label" + } ] }, "name": "name", + "description": "A short name for the component.", "type": { "type_kind": "python", "type_data": "str" - }, - "virtual": true + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", - "name": "first_name", - "description": "The users first name (including all other given names)", + "m_annotations": { + "eln": [ + { + "component": "NumberEditQuantity", + "defaultDisplayUnit": "mg" + } + ] + }, + "name": "mass", + "description": "The mass of the component.", "type": { - "type_kind": "custom", - "type_data": "nomad.metainfo.metainfo._Capitalized" - } + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "kilogram" }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 2, "m_parent_sub_section": "quantities", - "name": "last_name", - "description": "The users last name", - "type": { - "type_kind": "custom", - "type_data": "nomad.metainfo.metainfo._Capitalized" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, - "m_parent_sub_section": "quantities", - "name": "email", - "type": { - "type_kind": "python", - "type_data": "str" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 4, - "m_parent_sub_section": "quantities", - "name": "affiliation", - "description": "The name of the company and institutes the user identifies with", + "m_annotations": { + "eln": [ + { + "component": "NumberEditQuantity" + } + ] + }, + "name": "mass_fraction", + "description": "The mass fraction of the component in the composite system.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "numpy", + "type_data": "float64" } - }, + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 14, + "m_parent_sub_section": "section_definitions", + "name": "SystemComponent", + "description": "A section for describing a system component and its role in a composite system.", + "base_sections": [ + "/packages/16/section_definitions/13" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, + "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "affiliation_address", - "description": "The address of the given affiliation", + "m_annotations": { + "eln": [ + { + "component": "ReferenceEditQuantity" + } + ] + }, + "name": "system", + "description": "A reference to the component system.", "type": { - "type_kind": "python", - "type_data": "str" + "type_kind": "reference", + "type_data": "/packages/16/section_definitions/10" } } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 3, + "m_parent_index": 15, "m_parent_sub_section": "section_definitions", - "m_annotations": { - "pydantic": [ - "PydanticModel" - ] - }, - "name": "User", - "description": "A NOMAD user. Typically a NOMAD user has a NOMAD account. The user related data is managed by\nNOMAD keycloak user-management system. Users are used to denote authors,\nreviewers, and owners of datasets.", + "name": "PureSubstanceSection", + "description": "A sub section for describing any elemental, molecular or single phase pure substance.", "base_sections": [ - "/packages/14/section_definitions/2" + "/packages/15/section_definitions/0" ], "quantities": [ { @@ -60510,12 +65119,15 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { - "elasticsearch": [ - "viewers.user_id" + "eln": [ + { + "component": "StringEditQuantity", + "label": "Substance name" + } ] }, - "name": "user_id", - "description": "The unique, persistent keycloak UUID", + "name": "name", + "description": "A short name for the substance.", "type": { "type_kind": "python", "type_data": "str" @@ -60525,8 +65137,15 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", - "name": "username", - "description": "The unique, persistent, user chosen username", + "m_annotations": { + "eln": [ + { + "component": "StringEditQuantity" + } + ] + }, + "name": "iupac_name", + "description": "IUPAC name.", "type": { "type_kind": "python", "type_data": "str" @@ -60536,142 +65155,89 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 2, "m_parent_sub_section": "quantities", - "name": "created", - "description": "The time the account was created", + "m_annotations": { + "eln": [ + { + "component": "StringEditQuantity" + } + ] + }, + "name": "molecular_formula", + "description": "Molecular formula.", "type": { - "type_kind": "custom", - "type_data": "nomad.metainfo.metainfo._Datetime" + "type_kind": "python", + "type_data": "str" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 3, "m_parent_sub_section": "quantities", - "name": "repo_user_id", - "description": "Optional, legacy user id from the old NOMAD CoE repository.", + "m_annotations": { + "eln": [ + { + "component": "NumberEditQuantity", + "defaultDisplayUnit": "Da" + } + ] + }, + "name": "molecular_mass", + "description": "Molecular mass.", "type": { - "type_kind": "python", - "type_data": "str" - } + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "dalton" }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 4, "m_parent_sub_section": "quantities", - "name": "is_admin", - "description": "Bool that indicated, iff the user the use admin user", + "m_annotations": { + "eln": [ + { + "component": "StringEditQuantity" + } + ] + }, + "name": "inchi", + "description": "Inchi.", "type": { "type_kind": "python", - "type_data": "bool" - }, - "virtual": true + "type_data": "str" + } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 5, "m_parent_sub_section": "quantities", - "name": "is_oasis_admin", + "m_annotations": { + "eln": [ + { + "component": "StringEditQuantity" + } + ] + }, + "name": "inchi_key", + "description": "Inchi key.", "type": { "type_kind": "python", - "type_data": "bool" - }, - "default": false - } - ] - } - ], - "category_definitions": [ - { - "m_def": "nomad.metainfo.metainfo.Category", - "m_parent_index": 0, - "m_parent_sub_section": "category_definitions", - "name": "EntryDataCategory" - }, - { - "m_def": "nomad.metainfo.metainfo.Category", - "m_parent_index": 1, - "m_parent_sub_section": "category_definitions", - "name": "ElnIntegrationCategory", - "label": "Third-party ELN Integration", - "categories": [ - "/packages/14/category_definitions/0" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Category", - "m_parent_index": 2, - "m_parent_sub_section": "category_definitions", - "name": "BasicElnCategory", - "label": "Basic ELN", - "categories": [ - "/packages/14/category_definitions/0" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Category", - "m_parent_index": 3, - "m_parent_sub_section": "category_definitions", - "name": "ElnExampleCategory", - "label": "Example ELNs", - "categories": [ - "/packages/14/category_definitions/0" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Category", - "m_parent_index": 4, - "m_parent_sub_section": "category_definitions", - "name": "UseCaseElnCategory", - "label": "Use-cases", - "categories": [ - "/packages/14/category_definitions/0" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Category", - "m_parent_index": 5, - "m_parent_sub_section": "category_definitions", - "name": "WorkflowsElnCategory", - "label": "Workflows", - "categories": [ - "/packages/14/category_definitions/0" - ] - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Package", - "m_parent_index": 15, - "m_parent_sub_section": "packages", - "name": "nomad.datamodel.metainfo.basesections", - "section_definitions": [ - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 0, - "m_parent_sub_section": "section_definitions", - "name": "BaseSection", - "description": "A generic abstract base section that provides a few commonly used properties. If you inherit from this section, but do not need some quantities, list those\nquantities in the `eln.hide` annotation of your inheriting section definition.\n\nBesides predefining some quantities, these base sections will add some metadata\nto NOMAD's search. A particular example are `tags`, if you define a string\nor enum quantity in your sections named `tags`, its values will be searchable.", - "links": [ - "http://purl.obolibrary.org/obo/BFO_0000001" - ], - "base_sections": [ - "/packages/14/section_definitions/0" - ], - "quantities": [ + "type_data": "str" + } + }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 0, + "m_parent_index": 6, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "StringEditQuantity", - "label": "Short name" + "component": "StringEditQuantity" } ] }, - "name": "name", - "description": "A short human readable and descriptive name.", + "name": "smile", + "description": "Smile.", "type": { "type_kind": "python", "type_data": "str" @@ -60679,85 +65245,111 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, + "m_parent_index": 7, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "DateTimeEditQuantity" + "component": "StringEditQuantity" } ] }, - "name": "datetime", - "description": "The date and time associated with this section.", + "name": "canonical_smile", + "description": "Canonical smile.", "type": { - "type_kind": "custom", - "type_data": "nomad.metainfo.metainfo._Datetime" + "type_kind": "python", + "type_data": "str" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, + "m_parent_index": 8, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "StringEditQuantity", - "label": "ID" + "component": "StringEditQuantity" } ] }, - "name": "lab_id", - "description": "An ID string that is unique at least for the lab that produced this\ndata.", + "name": "cas_number", + "description": "CAS number.", "type": { "type_kind": "python", "type_data": "str" } - }, + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 16, + "m_parent_sub_section": "section_definitions", + "name": "PureSubstanceComponent", + "description": "A section for describing a substance component and its role in a composite system.", + "base_sections": [ + "/packages/16/section_definitions/13" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "RichTextEditQuantity" + "component": "StringEditQuantity" } ] }, - "name": "description", - "description": "Any information that cannot be captured in the other fields.", + "name": "substance_name", + "description": "The name of the substance within the section where this component is contained.", "type": { "type_kind": "python", "type_data": "str" } } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "pure_substance", + "description": "Section describing the pure substance that is the component.", + "sub_section": "/packages/16/section_definitions/15" + } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 1, + "m_parent_index": 17, "m_parent_sub_section": "section_definitions", - "name": "Entity", - "description": "An object that persists, endures, or continues to exist through time while maintaining its identity.", - "links": [ - "http://purl.obolibrary.org/obo/BFO_0000002" - ], + "name": "CompositeSystem", + "description": "A base section for a material systems composed of components. Each component of the composite system is of a (sub)type of `System`.", "base_sections": [ - "/packages/15/section_definitions/0" + "/packages/16/section_definitions/10" + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "components", + "description": "A list of all the components of the composite system containing a name, reference\nto the system section and mass of that component.", + "sub_section": "/packages/16/section_definitions/13", + "repeats": true + } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 2, + "m_parent_index": 18, "m_parent_sub_section": "section_definitions", - "name": "Activity", - "description": "An action that has a temporal extension and for some time depends on some entity.", - "links": [ - "http://purl.obolibrary.org/obo/BFO_0000015" - ], + "name": "CompositeSystemReference", + "description": "A section used for referencing a CompositeSystem.", "base_sections": [ - "/packages/15/section_definitions/0" + "/packages/16/section_definitions/5" ], "quantities": [ { @@ -60767,79 +65359,63 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "DateTimeEditQuantity", - "label": "Starting Time" + "component": "ReferenceEditQuantity", + "label": "Composite System Reference" } ] }, - "name": "datetime", - "description": "The date and time when this activity was started.", + "name": "reference", + "description": "A reference to a NOMAD `CompositeSystem` entry.", "type": { - "type_kind": "custom", - "type_data": "nomad.metainfo.metainfo._Datetime" + "type_kind": "reference", + "type_data": "/packages/16/section_definitions/17" } - }, + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 19, + "m_parent_sub_section": "section_definitions", + "name": "ProcessStep", + "description": "Any dependant step of a `Process`.", + "base_sections": [ + "/packages/16/section_definitions/2" + ], + "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 1, + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "DateTimeEditQuantity", - "label": "Ending Time" + "component": "NumberEditQuantity", + "defaultDisplayUnit": "second" } ] }, - "name": "end_time", - "description": "The date and time when this activity was done.", - "type": { - "type_kind": "custom", - "type_data": "nomad.metainfo.metainfo._Datetime" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, - "m_parent_sub_section": "quantities", - "name": "method", - "description": "A short consistent handle for the applied method.", + "name": "duration", + "description": "The duration time of the process step.", "type": { "type_kind": "python", - "type_data": "str" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, - "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "StringEditQuantity" - } - ] + "type_data": "float" }, - "name": "location", - "description": "location of the experiment.", - "type": { - "type_kind": "python", - "type_data": "str" - } + "unit": "second" } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 3, + "m_parent_index": 20, "m_parent_sub_section": "section_definitions", - "name": "ElementalComposition", - "description": "A section for describing the elemental composition of a system, i.e. the element and its atomic fraction.", - "more": { - "label_quantity": "element" - }, + "name": "Process", + "description": "A planned process which results in physical changes in a specified input material. [ obi : prs obi : mc obi : fg obi : jf obi : bp ]\n\nSynonyms:\n - preparative method\n - sample preparation\n - sample preparative method\n - material transformations", + "links": [ + "http://purl.obolibrary.org/obo/OBI_0000094" + ], "base_sections": [ - "/packages/14/section_definitions/0" + "/packages/16/section_definitions/3" ], "quantities": [ { @@ -60849,221 +65425,149 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "AutocompleteEditQuantity" + "component": "DateTimeEditQuantity", + "label": "Ending Time" } ] }, - "name": "element", - "description": "The symbol of the element, e.g. 'Pb'.", + "name": "end_time", + "description": "The date and time when this process was finished.", "type": { - "type_kind": "Enum", - "type_data": [ - "H", - "He", - "Li", - "Be", - "B", - "C", - "N", - "O", - "F", - "Ne", - "Na", - "Mg", - "Al", - "Si", - "P", - "S", - "Cl", - "Ar", - "K", - "Ca", - "Sc", - "Ti", - "V", - "Cr", - "Mn", - "Fe", - "Co", - "Ni", - "Cu", - "Zn", - "Ga", - "Ge", - "As", - "Se", - "Br", - "Kr", - "Rb", - "Sr", - "Y", - "Zr", - "Nb", - "Mo", - "Tc", - "Ru", - "Rh", - "Pd", - "Ag", - "Cd", - "In", - "Sn", - "Sb", - "Te", - "I", - "Xe", - "Cs", - "Ba", - "La", - "Ce", - "Pr", - "Nd", - "Pm", - "Sm", - "Eu", - "Gd", - "Tb", - "Dy", - "Ho", - "Er", - "Tm", - "Yb", - "Lu", - "Hf", - "Ta", - "W", - "Re", - "Os", - "Ir", - "Pt", - "Au", - "Hg", - "Tl", - "Pb", - "Bi", - "Po", - "At", - "Rn", - "Fr", - "Ra", - "Ac", - "Th", - "Pa", - "U", - "Np", - "Pu", - "Am", - "Cm", - "Bk", - "Cf", - "Es", - "Fm", - "Md", - "No", - "Lr", - "Rf", - "Db", - "Sg", - "Bh", - "Hs", - "Mt", - "Ds", - "Rg", - "Cn", - "Nh", - "Fl", - "Mc", - "Lv", - "Ts", - "Og" - ] + "type_kind": "custom", + "type_data": "nomad.metainfo.metainfo._Datetime" } + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "steps", + "description": "An ordered list of all the dependant steps that make up this activity.", + "sub_section": "/packages/16/section_definitions/19", + "repeats": true }, { - "m_def": "nomad.metainfo.metainfo.Quantity", + "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 1, - "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "NumberEditQuantity" - } - ] - }, - "name": "atomic_fraction", - "description": "The atomic fraction of the element in the system it is contained within.\nPer definition a positive value less than or equal to 1.", - "type": { - "type_kind": "numpy", - "type_data": "float64" - } + "m_parent_sub_section": "sub_sections", + "name": "instruments", + "description": "A list of all the instruments and their role in this process.", + "sub_section": "/packages/16/section_definitions/12", + "repeats": true }, { - "m_def": "nomad.metainfo.metainfo.Quantity", + "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 2, + "m_parent_sub_section": "sub_sections", + "name": "samples", + "description": "The samples as that have undergone the process.", + "sub_section": "/packages/16/section_definitions/18", + "repeats": true + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 21, + "m_parent_sub_section": "section_definitions", + "name": "ActivityResult", + "description": "A section for the results of an `Activity`.", + "base_sections": [ + "/packages/15/section_definitions/0" + ], + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { - "component": "NumberEditQuantity" + "component": "StringEditQuantity", + "label": "Short name" } ] }, - "name": "mass_fraction", - "description": "The mass fraction of the element in the system it is contained within.\nPer definition a positive value less than or equal to 1.", + "name": "name", + "description": "A short and descriptive name for the result.", "type": { - "type_kind": "numpy", - "type_data": "float64" + "type_kind": "python", + "type_data": "str" } } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 4, + "m_parent_index": 22, "m_parent_sub_section": "section_definitions", - "name": "System", - "description": "A base section for any system of materials which is investigated or used to construct other systems.", + "name": "AnalysisResult", + "description": "A section for the results of an `Analysis` process.", "base_sections": [ - "/packages/15/section_definitions/1" + "/packages/16/section_definitions/21" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 23, + "m_parent_sub_section": "section_definitions", + "name": "Analysis", + "description": "A planned process that produces output data from input data. Synonyms:\n - data processing\n - data analysis", + "links": [ + "http://purl.obolibrary.org/obo/OBI_0200000" + ], + "base_sections": [ + "/packages/16/section_definitions/3" ], "sub_sections": [ { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 0, "m_parent_sub_section": "sub_sections", - "name": "elemental_composition", - "description": "A list of all the elements found in the system together and their respective\natomic fraction within the system.", - "sub_section": "/packages/15/section_definitions/3", + "name": "inputs", + "description": "The input data of the analysis.", + "sub_section": "/packages/16/section_definitions/4", + "repeats": true + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", + "name": "outputs", + "description": "The output data of the analysis.", + "sub_section": "/packages/16/section_definitions/22", "repeats": true } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 5, + "m_parent_index": 24, "m_parent_sub_section": "section_definitions", - "name": "Instrument", - "description": "A base section that can be used for instruments.", + "name": "SynthesisMethod", + "description": "A method used to synthesise a sample.", + "links": [ + "http://purl.obolibrary.org/obo/CHMO_0001301" + ], "base_sections": [ - "/packages/15/section_definitions/1" + "/packages/16/section_definitions/20" ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 6, + "m_parent_index": 25, "m_parent_sub_section": "section_definitions", - "name": "Process", - "description": "A planned process which results in physical changes in a specified input material. [ obi : prs obi : mc obi : fg obi : jf obi : bp ]\n\nSynonyms:\n - preparative method\n - sample preparation\n - sample preparative method\n - material transformations", - "links": [ - "http://purl.obolibrary.org/obo/OBI_0000094" - ], + "name": "MeasurementResult", + "description": "A section for the results of an `Measurement` process.", "base_sections": [ - "/packages/15/section_definitions/2" + "/packages/16/section_definitions/21" ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 7, + "m_parent_index": 26, "m_parent_sub_section": "section_definitions", "name": "Measurement", "description": "A planned process with the objective to produce information about the material entity that is the evaluant, by physically examining it or its proxies. [ obi : pppb ]", @@ -61071,30 +65575,49 @@ window.nomadArtifacts = { "http://purl.obolibrary.org/obo/OBI_0000070" ], "base_sections": [ - "/packages/15/section_definitions/2" + "/packages/16/section_definitions/3" + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "samples", + "description": "A list of all the samples measured during the measurement.", + "sub_section": "/packages/16/section_definitions/18", + "repeats": true + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", + "name": "instruments", + "description": "A list of all the instruments and their role in this process.", + "sub_section": "/packages/16/section_definitions/12", + "repeats": true + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 2, + "m_parent_sub_section": "sub_sections", + "name": "results", + "description": "The result of the measurement.", + "sub_section": "/packages/16/section_definitions/25", + "repeats": true + } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 8, + "m_parent_index": 27, "m_parent_sub_section": "section_definitions", - "name": "SynthesisMethod", - "description": "A method used to synthesise a sample.", + "name": "PureSubstance", + "description": "A base section for any elemental, molecular, or single phase pure substance.", "links": [ - "http://purl.obolibrary.org/obo/CHMO_0001301" + "http://purl.obolibrary.org/obo/CHEBI_23367" ], "base_sections": [ - "/packages/15/section_definitions/6" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 9, - "m_parent_sub_section": "section_definitions", - "name": "Component", - "description": "A section for describing a component and its role in an ensemble.", - "base_sections": [ - "/packages/14/section_definitions/0" + "/packages/16/section_definitions/10" ], "quantities": [ { @@ -61105,12 +65628,12 @@ window.nomadArtifacts = { "eln": [ { "component": "StringEditQuantity", - "label": "Component name" + "label": "Substance name" } ] }, "name": "name", - "description": "A short name for the component.", + "description": "The name of the substance entry.", "type": { "type_kind": "python", "type_data": "str" @@ -61123,15 +65646,16 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "ReferenceEditQuantity" + "component": "StringEditQuantity", + "label": "Substance ID" } ] }, - "name": "system", - "description": "A reference to the component system.", + "name": "lab_id", + "description": "A human human readable substance ID that is at least unique for the lab.", "type": { - "type_kind": "reference", - "type_data": "/packages/15/section_definitions/4" + "type_kind": "python", + "type_data": "str" } }, { @@ -61141,53 +65665,39 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "NumberEditQuantity", - "defaultDisplayUnit": "mg" + "component": "RichTextEditQuantity", + "label": "Detailed substance description" } ] }, - "name": "mass", - "description": "The mass of the component.", + "name": "description", + "description": "A field for adding additional information about the substance that is not captured\nby the other quantities and subsections.", "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "unit": "kilogram" + "type_kind": "python", + "type_data": "str" + } } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 10, - "m_parent_sub_section": "section_definitions", - "name": "Ensemble", - "description": "A base section for an ensemble of material systems. Each component of the ensemble is of a (sub)type of `System`.", - "base_sections": [ - "/packages/15/section_definitions/4" ], "sub_sections": [ { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 0, "m_parent_sub_section": "sub_sections", - "name": "components", - "description": "A list of all the components of the ensemble containing a name, reference to the\nsystem section and mass of that component.", - "sub_section": "/packages/15/section_definitions/9", - "repeats": true + "name": "pure_substance", + "description": "Section with properties describing the substance.", + "sub_section": "/packages/16/section_definitions/15" } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 11, + "m_parent_index": 28, "m_parent_sub_section": "section_definitions", - "name": "Substance", - "description": "A base section for any elemental, molecular of single phase substance.", - "links": [ - "http://purl.obolibrary.org/obo/CHEBI_23367" - ], + "name": "PubChemPureSubstanceSection", + "label": "PubChem Pure Substance Section", + "description": "A section for pure substances existing as \"compounds\" in the PubChem database.", "base_sections": [ - "/packages/15/section_definitions/4" + "/packages/16/section_definitions/15" ], "quantities": [ { @@ -61197,41 +65707,20 @@ window.nomadArtifacts = { "m_annotations": { "eln": [ { - "component": "StringEditQuantity", - "label": "Substance name" + "component": "NumberEditQuantity" } ] }, - "name": "name", - "description": "The name of the substance entry.", + "name": "pub_chem_cid", "type": { "type_kind": "python", - "type_data": "str" + "type_data": "int" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "StringEditQuantity", - "label": "Substance ID" - } - ] - }, - "name": "lab_id", - "description": "A human human readable substance ID that is at least unique for the lab.", - "type": { - "type_kind": "python", - "type_data": "str" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 2, - "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ { @@ -61239,27 +65728,7 @@ window.nomadArtifacts = { } ] }, - "name": "molecular_formula", - "description": "Molecular formula.", - "type": { - "type_kind": "python", - "type_data": "str" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 3, - "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "RichTextEditQuantity", - "label": "Detailed substance description" - } - ] - }, - "name": "description", - "description": "A field for adding additional information about the substance that is not captured\nby the other quantities and subsections.", + "name": "pub_chem_link", "type": { "type_kind": "python", "type_data": "str" @@ -61269,12 +65738,12 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 12, + "m_parent_index": 29, "m_parent_sub_section": "section_definitions", "name": "CASExperimentalProperty", "description": "A section for experimental properties retrieved from the CAS API.", "base_sections": [ - "/packages/14/section_definitions/0" + "/packages/15/section_definitions/0" ], "quantities": [ { @@ -61314,12 +65783,12 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 13, + "m_parent_index": 30, "m_parent_sub_section": "section_definitions", "name": "CASPropertyCitation", "description": "A section for citations of the experimental properties retrieved from the CAS API.", "base_sections": [ - "/packages/14/section_definitions/0" + "/packages/15/section_definitions/0" ], "quantities": [ { @@ -61361,12 +65830,13 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 14, + "m_parent_index": 31, "m_parent_sub_section": "section_definitions", - "name": "CASSubstance", - "description": "A base section for any Substance with a CAS number.", + "name": "CASPureSubstanceSection", + "label": "CAS Pure Substance Section", + "description": "A base section for any `PureSubstance` with a CAS number.", "base_sections": [ - "/packages/15/section_definitions/11" + "/packages/16/section_definitions/15" ], "quantities": [ { @@ -61453,115 +65923,6 @@ window.nomadArtifacts = { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 4, "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "StringEditQuantity" - } - ] - }, - "name": "inchi", - "description": "CAS inchi.", - "type": { - "type_kind": "python", - "type_data": "str" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 5, - "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "StringEditQuantity" - } - ] - }, - "name": "inchi_key", - "description": "CAS inchi key.", - "type": { - "type_kind": "python", - "type_data": "str" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 6, - "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "StringEditQuantity" - } - ] - }, - "name": "smile", - "description": "CAS smile.", - "type": { - "type_kind": "python", - "type_data": "str" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 7, - "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "StringEditQuantity" - } - ] - }, - "name": "canonical_smile", - "description": "CAS canonical smile.", - "type": { - "type_kind": "python", - "type_data": "str" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 8, - "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "StringEditQuantity" - } - ] - }, - "name": "molecular_formula", - "description": "CAS molecular formula.", - "type": { - "type_kind": "python", - "type_data": "str" - } - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 9, - "m_parent_sub_section": "quantities", - "m_annotations": { - "eln": [ - { - "component": "NumberEditQuantity" - } - ] - }, - "name": "molecular_mass", - "description": "CAS molecular mass.", - "type": { - "type_kind": "numpy", - "type_data": "float64" - }, - "unit": "dalton" - }, - { - "m_def": "nomad.metainfo.metainfo.Quantity", - "m_parent_index": 10, - "m_parent_sub_section": "quantities", "name": "cas_synonyms", "description": "CAS synonyms.", "type": { @@ -61579,7 +65940,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "cas_experimental_properties", - "sub_section": "/packages/15/section_definitions/12", + "sub_section": "/packages/16/section_definitions/29", "repeats": true }, { @@ -61587,19 +65948,19 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "cas_property_citations", - "sub_section": "/packages/15/section_definitions/13", + "sub_section": "/packages/16/section_definitions/30", "repeats": true } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 15, + "m_parent_index": 32, "m_parent_sub_section": "section_definitions", - "name": "SampleID", - "description": "A base section that can be used for sample IDs. If the `sample_owner`, `sample_short_name`, `\u00ecnstitute`, and `creation_datetime`\nquantities are provided, the sample_id will be automatically created as a combination\nof these four quantities.", + "name": "ReadableIdentifiers", + "description": "A base section that can be used to generate readable IDs. If the `owner`, `short_name`, `institute`, and `datetime`\nquantities are provided, the lab_id will be automatically created as a combination\nof these four quantities.", "base_sections": [ - "/packages/14/section_definitions/0" + "/packages/15/section_definitions/0" ], "quantities": [ { @@ -61631,8 +65992,8 @@ window.nomadArtifacts = { } ] }, - "name": "sample_owner", - "description": "Name or alias of the process operator, e.g. jmp", + "name": "owner", + "description": "Alias for the owner of the identified thing. This should be unique within the\ninstitute.", "type": { "type_kind": "python", "type_data": "str" @@ -61650,8 +66011,8 @@ window.nomadArtifacts = { } ] }, - "name": "creation_datetime", - "description": "Creation date of the sample.", + "name": "datetime", + "description": "A datetime associated with the identified thing. In case of an `Activity`, this\nshould be the starting time and, in case of an `Entity`, the creation time.", "type": { "type_kind": "custom", "type_data": "nomad.metainfo.metainfo._Datetime" @@ -61668,8 +66029,8 @@ window.nomadArtifacts = { } ] }, - "name": "sample_short_name", - "description": "A short name of the sample (the identifier scribed on the smaple,\nor in the sample container), e.g. 4001-8, YAG-2-34.\nThis is to be managed and decided internally by the labs,\nalthough we recomend to avoid the following characters on it: \"_\", \"/\", \"\" and \".\"", + "name": "short_name", + "description": "A short name of the the identified thing (e.g. the identifier scribed on the\nsample, the process number, or machine name), e.g. 4001-8, YAG-2-34.\nThis is to be managed and decided internally by the labs, although we recommend\nto avoid the following characters in it: \"_\", \"/\", \"\\\" and \".\".", "type": { "type_kind": "python", "type_data": "str" @@ -61686,8 +66047,8 @@ window.nomadArtifacts = { } ] }, - "name": "sample_id", - "description": "Full sample id. Ideally a human readable sample id convention,\nwhich is simple, understandable and still having chances of becoming unique.\nIf the `sample_owner`, `sample_short_name`, `\u00ecnstitute`, and `creation_datetime`\nare provided, this will be formed automatically by joining these components by an underscore (_).\nSpaces in any of the individual components will be replaced with hyphens (-).\nAn example would be hzb_oah_20200602_4001-08", + "name": "lab_id", + "description": "Full readable id. Ideally a human readable id convention, which is simple,\nunderstandable and still have chances of becoming unique.\nIf the `owner`, `short_name`, `\u00ecnstitute`, and `datetime` are provided, this will\nbe formed automatically by joining these components by an underscore (_).\nSpaces in any of the individual components will be replaced with hyphens (-).\nAn example would be hzb_oah_20200602_4001-08.", "type": { "type_kind": "python", "type_data": "str" @@ -61697,12 +66058,12 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 16, + "m_parent_index": 33, "m_parent_sub_section": "section_definitions", "name": "PublicationReference", "description": "A base section that can be used for references.", "base_sections": [ - "/packages/14/section_definitions/0" + "/packages/15/section_definitions/0" ], "quantities": [ { @@ -61783,7 +66144,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Package", - "m_parent_index": 16, + "m_parent_index": 17, "m_parent_sub_section": "packages", "name": "nomad.datamodel.metainfo.common", "section_definitions": [ @@ -61800,7 +66161,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "quantities", "m_annotations": { "elasticsearch": [ - "results.properties.thermodynamic.trajectory.provenance.label" + "results.properties.spectroscopic.spectra.provenance.electronic_structure.label" ] }, "name": "label", @@ -61825,7 +66186,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "provenance", - "sub_section": "/packages/16/section_definitions/0", + "sub_section": "/packages/17/section_definitions/0", "repeats": false } ] @@ -61843,7 +66204,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Package", - "m_parent_index": 17, + "m_parent_index": 18, "m_parent_sub_section": "packages", "name": "nomad.datamodel.metainfo.simulation.legacy_workflows", "section_definitions": [ @@ -62590,7 +66951,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "eos_fit", - "sub_section": "/packages/17/section_definitions/6", + "sub_section": "/packages/18/section_definitions/6", "repeats": true } ] @@ -63611,7 +67972,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "strain_diagrams", - "sub_section": "/packages/17/section_definitions/11", + "sub_section": "/packages/18/section_definitions/11", "repeats": true } ] @@ -63643,7 +68004,7 @@ window.nomadArtifacts = { "description": "Reference to the resulting system.", "type": { "type_kind": "reference", - "type_data": "/packages/1/section_definitions/8" + "type_data": "/packages/2/section_definitions/8" }, "shape": [] }, @@ -63688,7 +68049,7 @@ window.nomadArtifacts = { "description": "References to the reference systems.", "type": { "type_kind": "reference", - "type_data": "/packages/1/section_definitions/8" + "type_data": "/packages/2/section_definitions/8" }, "shape": [ "n_references" @@ -63739,7 +68100,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "decomposition", - "sub_section": "/packages/17/section_definitions/13", + "sub_section": "/packages/18/section_definitions/13", "repeats": true } ] @@ -63984,7 +68345,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "stability", - "sub_section": "/packages/17/section_definitions/14", + "sub_section": "/packages/18/section_definitions/14", "repeats": false } ] @@ -64243,7 +68604,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "thermostat_parameters", - "sub_section": "/packages/17/section_definitions/16", + "sub_section": "/packages/18/section_definitions/16", "repeats": false }, { @@ -64251,7 +68612,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "barostat_parameters", - "sub_section": "/packages/17/section_definitions/17", + "sub_section": "/packages/18/section_definitions/17", "repeats": false } ] @@ -64268,7 +68629,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "radial_distribution_functions", - "sub_section": "/packages/17/section_definitions/25", + "sub_section": "/packages/18/section_definitions/25", "repeats": true }, { @@ -64276,7 +68637,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "mean_squared_displacements", - "sub_section": "/packages/17/section_definitions/30", + "sub_section": "/packages/18/section_definitions/30", "repeats": true } ] @@ -64348,7 +68709,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "integration_parameters", - "sub_section": "/packages/17/section_definitions/18", + "sub_section": "/packages/18/section_definitions/18", "repeats": false }, { @@ -64356,7 +68717,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "results", - "sub_section": "/packages/17/section_definitions/19", + "sub_section": "/packages/18/section_definitions/19", "repeats": false } ] @@ -64424,7 +68785,7 @@ window.nomadArtifacts = { "description": "References to the atoms_group section containing the group of atoms/molecule/groups of molecules for which the property was calculated.", "type": { "type_kind": "reference", - "type_data": "/packages/1/section_definitions/0" + "type_data": "/packages/2/section_definitions/0" }, "shape": [] }, @@ -64547,7 +68908,7 @@ window.nomadArtifacts = { "name": "RadialDistributionFunctionValues", "description": "Section containing information regarding the values of radial distribution functions (rdfs).", "base_sections": [ - "/packages/17/section_definitions/22" + "/packages/18/section_definitions/22" ], "quantities": [ { @@ -64588,7 +68949,7 @@ window.nomadArtifacts = { "name": "RadialDistributionFunction", "description": "Section containing information about the calculation of radial distribution functions (rdfs).", "base_sections": [ - "/packages/17/section_definitions/23" + "/packages/18/section_definitions/23" ], "sub_sections": [ { @@ -64596,7 +68957,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "radial_distribution_function_values", - "sub_section": "/packages/17/section_definitions/24", + "sub_section": "/packages/18/section_definitions/24", "repeats": true } ] @@ -64628,7 +68989,7 @@ window.nomadArtifacts = { "description": "References to the atoms_group section containing the group of atoms/molecule/groups of molecules for which the property was calculated.", "type": { "type_kind": "reference", - "type_data": "/packages/1/section_definitions/0" + "type_data": "/packages/2/section_definitions/0" }, "shape": [ 1 @@ -64759,7 +69120,7 @@ window.nomadArtifacts = { "name": "MeanSquaredDisplacementValues", "description": "Section containing information regarding the values of a mean squared displacements (msds).", "base_sections": [ - "/packages/17/section_definitions/26" + "/packages/18/section_definitions/26" ], "quantities": [ { @@ -64813,7 +69174,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "diffusion_constant", - "sub_section": "/packages/17/section_definitions/28", + "sub_section": "/packages/18/section_definitions/28", "repeats": false } ] @@ -64825,7 +69186,7 @@ window.nomadArtifacts = { "name": "MeanSquaredDisplacement", "description": "Section containing information about a calculation of any mean squared displacements (msds).", "base_sections": [ - "/packages/17/section_definitions/27" + "/packages/18/section_definitions/27" ], "sub_sections": [ { @@ -64833,7 +69194,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "mean_squared_displacement_values", - "sub_section": "/packages/17/section_definitions/29", + "sub_section": "/packages/18/section_definitions/29", "repeats": true } ] @@ -64853,7 +69214,7 @@ window.nomadArtifacts = { "description": "DFT density of states", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/17" + "type_data": "/packages/3/section_definitions/17" } }, { @@ -64864,7 +69225,7 @@ window.nomadArtifacts = { "description": "GW density of states", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/17" + "type_data": "/packages/3/section_definitions/17" } }, { @@ -64875,7 +69236,7 @@ window.nomadArtifacts = { "description": "DFT density of states", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/14" + "type_data": "/packages/3/section_definitions/14" } }, { @@ -64886,7 +69247,7 @@ window.nomadArtifacts = { "description": "DFT density of states", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/14" + "type_data": "/packages/3/section_definitions/14" } } ] @@ -65024,7 +69385,7 @@ window.nomadArtifacts = { "description": "Reference to the input workflow.", "type": { "type_kind": "reference", - "type_data": "/packages/17/section_definitions/34" + "type_data": "/packages/18/section_definitions/34" }, "shape": [] }, @@ -65036,7 +69397,7 @@ window.nomadArtifacts = { "description": "Reference to the output workflow.", "type": { "type_kind": "reference", - "type_data": "/packages/17/section_definitions/34" + "type_data": "/packages/18/section_definitions/34" }, "shape": [] }, @@ -65048,7 +69409,7 @@ window.nomadArtifacts = { "description": "Reference to the input calculation.", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/36" + "type_data": "/packages/3/section_definitions/36" }, "shape": [] }, @@ -65060,7 +69421,7 @@ window.nomadArtifacts = { "description": "Reference to the output calculation.", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/36" + "type_data": "/packages/3/section_definitions/36" }, "shape": [] }, @@ -65121,7 +69482,7 @@ window.nomadArtifacts = { "description": "Starting structure for geometry optimization.", "type": { "type_kind": "reference", - "type_data": "/packages/1/section_definitions/1" + "type_data": "/packages/2/section_definitions/1" }, "shape": [] }, @@ -65144,11 +69505,11 @@ window.nomadArtifacts = { "name": "calculation_result_ref", "description": "Reference to calculation result. In the case of geometry_optimization and\nmolecular dynamics, this corresponds to the final step in the simulation. For the\nrest of the workflow types, it refers to the original system.", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/36" + "type_data": "/packages/3/section_definitions/36" }, "shape": [] }, @@ -65172,7 +69533,7 @@ window.nomadArtifacts = { "description": "List of references to each section single_configuration_calculation in the\nsimulation.", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/36" + "type_data": "/packages/3/section_definitions/36" }, "shape": [ "n_calculations" @@ -65185,11 +69546,11 @@ window.nomadArtifacts = { "name": "run_ref", "description": "Links the section workflow to the section run that contains the calculations.", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], "type": { "type_kind": "reference", - "type_data": "/packages/3/section_definitions/3" + "type_data": "/packages/4/section_definitions/3" }, "shape": [] }, @@ -65212,11 +69573,11 @@ window.nomadArtifacts = { "name": "workflows_ref", "description": "Links the the current section to other workflow sections. Such a link is necessary\nfor example between an Debye model that uses a the poisson ratio calculated\nfrom an elastic workflow.", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], "type": { "type_kind": "reference", - "type_data": "/packages/17/section_definitions/34" + "type_data": "/packages/18/section_definitions/34" }, "shape": [ "n_references" @@ -65229,7 +69590,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "task", - "sub_section": "/packages/17/section_definitions/33", + "sub_section": "/packages/18/section_definitions/33", "repeats": true }, { @@ -65238,9 +69599,9 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "single_point", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], - "sub_section": "/packages/17/section_definitions/32", + "sub_section": "/packages/18/section_definitions/32", "repeats": false }, { @@ -65249,9 +69610,9 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "gw", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], - "sub_section": "/packages/17/section_definitions/31", + "sub_section": "/packages/18/section_definitions/31", "repeats": false }, { @@ -65260,9 +69621,9 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "geometry_optimization", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], - "sub_section": "/packages/17/section_definitions/9", + "sub_section": "/packages/18/section_definitions/9", "repeats": false }, { @@ -65271,9 +69632,9 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "phonon", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], - "sub_section": "/packages/17/section_definitions/10", + "sub_section": "/packages/18/section_definitions/10", "repeats": false }, { @@ -65281,7 +69642,7 @@ window.nomadArtifacts = { "m_parent_index": 5, "m_parent_sub_section": "sub_sections", "name": "elastic", - "sub_section": "/packages/17/section_definitions/12", + "sub_section": "/packages/18/section_definitions/12", "repeats": false }, { @@ -65289,7 +69650,7 @@ window.nomadArtifacts = { "m_parent_index": 6, "m_parent_sub_section": "sub_sections", "name": "molecular_dynamics", - "sub_section": "/packages/17/section_definitions/20", + "sub_section": "/packages/18/section_definitions/20", "repeats": false }, { @@ -65297,7 +69658,7 @@ window.nomadArtifacts = { "m_parent_index": 7, "m_parent_sub_section": "sub_sections", "name": "debye_model", - "sub_section": "/packages/17/section_definitions/8", + "sub_section": "/packages/18/section_definitions/8", "repeats": false }, { @@ -65305,7 +69666,7 @@ window.nomadArtifacts = { "m_parent_index": 8, "m_parent_sub_section": "sub_sections", "name": "equation_of_state", - "sub_section": "/packages/17/section_definitions/7", + "sub_section": "/packages/18/section_definitions/7", "repeats": false }, { @@ -65313,7 +69674,7 @@ window.nomadArtifacts = { "m_parent_index": 9, "m_parent_sub_section": "sub_sections", "name": "nudged_elastic_band", - "sub_section": "/packages/17/section_definitions/5", + "sub_section": "/packages/18/section_definitions/5", "repeats": false }, { @@ -65321,7 +69682,7 @@ window.nomadArtifacts = { "m_parent_index": 10, "m_parent_sub_section": "sub_sections", "name": "convex_hull", - "sub_section": "/packages/17/section_definitions/4", + "sub_section": "/packages/18/section_definitions/4", "repeats": false }, { @@ -65329,7 +69690,7 @@ window.nomadArtifacts = { "m_parent_index": 11, "m_parent_sub_section": "sub_sections", "name": "adsorption", - "sub_section": "/packages/17/section_definitions/3", + "sub_section": "/packages/18/section_definitions/3", "repeats": false }, { @@ -65337,7 +69698,7 @@ window.nomadArtifacts = { "m_parent_index": 12, "m_parent_sub_section": "sub_sections", "name": "magnetic_ordering", - "sub_section": "/packages/17/section_definitions/2", + "sub_section": "/packages/18/section_definitions/2", "repeats": false }, { @@ -65345,7 +69706,7 @@ window.nomadArtifacts = { "m_parent_index": 13, "m_parent_sub_section": "sub_sections", "name": "raman", - "sub_section": "/packages/17/section_definitions/1", + "sub_section": "/packages/18/section_definitions/1", "repeats": false }, { @@ -65353,7 +69714,7 @@ window.nomadArtifacts = { "m_parent_index": 14, "m_parent_sub_section": "sub_sections", "name": "interface", - "sub_section": "/packages/17/section_definitions/0", + "sub_section": "/packages/18/section_definitions/0", "repeats": false }, { @@ -65361,7 +69722,7 @@ window.nomadArtifacts = { "m_parent_index": 15, "m_parent_sub_section": "sub_sections", "name": "thermodynamics", - "sub_section": "/packages/17/section_definitions/15", + "sub_section": "/packages/18/section_definitions/15", "repeats": false } ] @@ -65370,7 +69731,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Package", - "m_parent_index": 18, + "m_parent_index": 19, "m_parent_sub_section": "packages", "name": "nomad.datamodel.metainfo.simulation.workflow", "section_definitions": [ @@ -65380,7 +69741,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "section_definitions", "name": "SimulationWorkflowMethod", "base_sections": [ - "/packages/14/section_definitions/0" + "/packages/15/section_definitions/0" ] }, { @@ -65389,7 +69750,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "section_definitions", "name": "SimulationWorkflowResults", "base_sections": [ - "/packages/14/section_definitions/0" + "/packages/15/section_definitions/0" ], "quantities": [ { @@ -65399,11 +69760,11 @@ window.nomadArtifacts = { "name": "calculation_result_ref", "description": "Reference to calculation result. In the case of serial workflows, this corresponds\nto the final step in the simulation. For the parallel case, it refers to the reference calculation.", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/36" + "type_data": "/packages/3/section_definitions/36" }, "shape": [] }, @@ -65427,7 +69788,7 @@ window.nomadArtifacts = { "description": "List of references to each calculation section in the simulation.", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/36" + "type_data": "/packages/3/section_definitions/36" }, "shape": [ "n_calculations" @@ -65441,7 +69802,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "section_definitions", "name": "SimulationWorkflow", "base_sections": [ - "/packages/19/section_definitions/3" + "/packages/20/section_definitions/3" ], "sub_sections": [ { @@ -65449,7 +69810,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "method", - "sub_section": "/packages/18/section_definitions/0" + "sub_section": "/packages/19/section_definitions/0" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -65457,9 +69818,9 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "results", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], - "sub_section": "/packages/18/section_definitions/1" + "sub_section": "/packages/19/section_definitions/1" } ] }, @@ -65490,7 +69851,7 @@ window.nomadArtifacts = { "description": "Reference to the resulting system.", "type": { "type_kind": "reference", - "type_data": "/packages/1/section_definitions/8" + "type_data": "/packages/2/section_definitions/8" }, "shape": [] }, @@ -65535,7 +69896,7 @@ window.nomadArtifacts = { "description": "References to the reference systems.", "type": { "type_kind": "reference", - "type_data": "/packages/1/section_definitions/8" + "type_data": "/packages/2/section_definitions/8" }, "shape": [ "n_references" @@ -65586,7 +69947,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "decomposition", - "sub_section": "/packages/18/section_definitions/3", + "sub_section": "/packages/19/section_definitions/3", "repeats": true } ] @@ -65597,7 +69958,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "section_definitions", "name": "ThermodynamicsResults", "base_sections": [ - "/packages/18/section_definitions/1" + "/packages/19/section_definitions/1" ], "quantities": [ { @@ -65848,7 +70209,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "stability", - "sub_section": "/packages/18/section_definitions/4", + "sub_section": "/packages/19/section_definitions/4", "repeats": false } ] @@ -65859,7 +70220,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "section_definitions", "name": "SinglePointResults", "base_sections": [ - "/packages/18/section_definitions/1" + "/packages/19/section_definitions/1" ], "quantities": [ { @@ -65919,7 +70280,7 @@ window.nomadArtifacts = { "description": "Reference to the electronic density of states data.", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/17" + "type_data": "/packages/3/section_definitions/17" }, "shape": [ "n_data" @@ -65933,7 +70294,7 @@ window.nomadArtifacts = { "description": "Reference to the electronic band structure data.", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/14" + "type_data": "/packages/3/section_definitions/14" }, "shape": [ "n_data" @@ -65947,7 +70308,7 @@ window.nomadArtifacts = { "description": "Reference to the eigenvalues.", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/13" + "type_data": "/packages/3/section_definitions/13" }, "shape": [ "n_data" @@ -65961,7 +70322,7 @@ window.nomadArtifacts = { "description": "Reference to the potential data.", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/26" + "type_data": "/packages/3/section_definitions/26" }, "shape": [ "n_data" @@ -65975,7 +70336,7 @@ window.nomadArtifacts = { "description": "Reference to the charge density data.", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/27" + "type_data": "/packages/3/section_definitions/27" }, "shape": [ "n_data" @@ -65989,7 +70350,7 @@ window.nomadArtifacts = { "description": "Reference to the spectral data.", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/28" + "type_data": "/packages/3/section_definitions/28" }, "shape": [ "n_data" @@ -66003,7 +70364,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "section_definitions", "name": "SinglePointMethod", "base_sections": [ - "/packages/18/section_definitions/0" + "/packages/19/section_definitions/0" ], "quantities": [ { @@ -66026,7 +70387,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "section_definitions", "name": "SinglePoint", "base_sections": [ - "/packages/18/section_definitions/2" + "/packages/19/section_definitions/2" ], "sub_sections": [ { @@ -66034,7 +70395,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "method", - "sub_section": "/packages/18/section_definitions/7" + "sub_section": "/packages/19/section_definitions/7" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -66042,9 +70403,9 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "results", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], - "sub_section": "/packages/18/section_definitions/6" + "sub_section": "/packages/19/section_definitions/6" } ] }, @@ -66054,7 +70415,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "section_definitions", "name": "ParallelSimulation", "base_sections": [ - "/packages/18/section_definitions/2" + "/packages/19/section_definitions/2" ] }, { @@ -66063,7 +70424,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "section_definitions", "name": "SerialSimulation", "base_sections": [ - "/packages/18/section_definitions/2" + "/packages/19/section_definitions/2" ] }, { @@ -66072,7 +70433,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "section_definitions", "name": "GeometryOptimizationMethod", "base_sections": [ - "/packages/18/section_definitions/0" + "/packages/19/section_definitions/0" ], "quantities": [ { @@ -66198,7 +70559,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "section_definitions", "name": "GeometryOptimizationResults", "base_sections": [ - "/packages/18/section_definitions/1" + "/packages/19/section_definitions/1" ], "quantities": [ { @@ -66316,7 +70677,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "section_definitions", "name": "GeometryOptimization", "base_sections": [ - "/packages/18/section_definitions/10" + "/packages/19/section_definitions/10" ], "sub_sections": [ { @@ -66324,7 +70685,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "method", - "sub_section": "/packages/18/section_definitions/11" + "sub_section": "/packages/19/section_definitions/11" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -66332,9 +70693,9 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "results", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], - "sub_section": "/packages/18/section_definitions/12" + "sub_section": "/packages/19/section_definitions/12" } ] }, @@ -66350,7 +70711,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "quantities", "name": "thermostat_type", - "description": "The name of the thermostat used for temperature control. If skipped or an empty string is used, it\nmeans no thermostat was applied.\n\nAllowed values are:\n\n| Thermostat Name | Description |\n\n| ---------------------- | ----------------------------------------- |\n\n| `\"\"` | No thermostat |\n\n| `\"andersen\"` | H.C. Andersen, [J. Chem. Phys.\n**72**, 2384 (1980)](https://doi.org/10.1063/1.439486) |\n\n| `\"berendsen\"` | H. J. C. Berendsen, J. P. M. Postma,\nW. F. van Gunsteren, A. DiNola, and J. R. Haak, [J. Chem. Phys.\n**81**, 3684 (1984)](https://doi.org/10.1063/1.448118) |\n\n| `\"brownian\"` | Brownian Dynamics |\n\n| `\"langevin_goga\"` | N. Goga, A. J. Rzepiela, A. H. de Vries,\nS. J. Marrink, and H. J. C. Berendsen, [J. Chem. Theory Comput. **8**, 3637 (2012)]\n(https://doi.org/10.1021/ct3000876) |\n\n| `\"langevin_schneider\"` | T. Schneider and E. Stoll,\n[Phys. Rev. B **17**, 1302](https://doi.org/10.1103/PhysRevB.17.1302) |\n\n| `\"nose_hoover\"` | S. Nos\u00e9, [Mol. Phys. **52**, 255 (1984)]\n(https://doi.org/10.1080/00268978400101201); W.G. Hoover, [Phys. Rev. A\n**31**, 1695 (1985) |\n\n| `\"velocity_rescaling\"` | G. Bussi, D. Donadio, and M. Parrinello,\n[J. Chem. Phys. **126**, 014101 (2007)](https://doi.org/10.1063/1.2408420) |\n\n| `\"velocity_rescaling_langevin\"` | G. Bussi and M. Parrinello,\n[Phys. Rev. E **75**, 056707 (2007)](https://doi.org/10.1103/PhysRevE.75.056707) |", + "description": "The name of the thermostat used for temperature control. If skipped or an empty string is used, it\nmeans no thermostat was applied.\n\nAllowed values are:\n\n| Thermostat Name | Description |\n\n| ---------------------- | ----------------------------------------- |\n\n| `\"\"` | No thermostat |\n\n| `\"andersen\"` | H.C. Andersen, [J. Chem. Phys.\n**72**, 2384 (1980)](https://doi.org/10.1063/1.439486) |\n\n| `\"berendsen\"` | H. J. C. Berendsen, J. P. M. Postma,\nW. F. van Gunsteren, A. DiNola, and J. R. Haak, [J. Chem. Phys.\n**81**, 3684 (1984)](https://doi.org/10.1063/1.448118) |\n\n| `\"brownian\"` | Brownian Dynamics |\n\n| `\"langevin_goga\"` | N. Goga, A. J. Rzepiela, A. H. de Vries,\nS. J. Marrink, and H. J. C. Berendsen, [J. Chem. Theory Comput. **8**, 3637 (2012)]\n(https://doi.org/10.1021/ct3000876) |\n\n| `\"langevin_schneider\"` | T. Schneider and E. Stoll,\n[Phys. Rev. B **17**, 1302](https://doi.org/10.1103/PhysRevB.17.1302) |\n\n| `\"nose_hoover\"` | S. Nos\u00e9, [Mol. Phys. **52**, 255 (1984)]\n(https://doi.org/10.1080/00268978400101201); W.G. Hoover, [Phys. Rev. A\n**31**, 1695 (1985) |\n\n| `\"velocity_rescaling\"` | G. Bussi, D. Donadio, and M. Parrinello,\n[J. Chem. Phys. **126**, 014101 (2007)](https://doi.org/10.1063/1.2408420) |\n\n| `\"velocity_rescaling_langevin\"` | G. Bussi and M. Parrinello,\n[Phys. Rev. E **75**, 056707 (2007)](https://doi.org/10.1103/PhysRevE.75.056707) |\n\n| `\"velocity_rescaling_woodcock\"` | L. V. Woodcock,\n[Chem. Phys. Lett. **10**, 257 (1971)](https://doi.org/10.1016/0009-2614(71)80281-6) |", "type": { "type_kind": "Enum", "type_data": [ @@ -66361,7 +70722,8 @@ window.nomadArtifacts = { "langevin_schneider", "nose_hoover", "velocity_rescaling", - "velocity_rescaling_langevin" + "velocity_rescaling_langevin", + "velocity_rescaling_woodcock" ] }, "shape": [] @@ -66371,7 +70733,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "quantities", "name": "reference_temperature", - "description": "The target temperature for the simulation.", + "description": "The target temperature for the simulation. Typically used when temperature_profile is \"constant\".", "type": { "type_kind": "numpy", "type_data": "float64" @@ -66404,6 +70766,108 @@ window.nomadArtifacts = { }, "shape": [], "unit": "kilogram" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 4, + "m_parent_sub_section": "quantities", + "name": "temperature_profile", + "description": "Type of temperature control (i.e., annealing) procedure. Can be \"constant\" (no annealing), \"linear\", or \"exponential\".\nIf linear, \"temperature_update_delta\" specifies the corresponding update parameter.\nIf exponential, \"temperature_update_factor\" specifies the corresponding update parameter.", + "type": { + "type_kind": "Enum", + "type_data": [ + "constant", + "linear", + "exponential" + ] + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 5, + "m_parent_sub_section": "quantities", + "name": "reference_temperature_start", + "description": "The initial target temperature for the simulation. Typically used when temperature_profile is \"linear\" or \"exponential\".", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [], + "unit": "kelvin" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 6, + "m_parent_sub_section": "quantities", + "name": "reference_temperature_end", + "description": "The final target temperature for the simulation. Typically used when temperature_profile is \"linear\" or \"exponential\".", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [], + "unit": "kelvin" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 7, + "m_parent_sub_section": "quantities", + "name": "temperature_update_frequency", + "description": "Number of simulation steps between changing the target temperature.", + "type": { + "type_kind": "python", + "type_data": "int" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 8, + "m_parent_sub_section": "quantities", + "name": "temperature_update_delta", + "description": "Amount to be added (subtracted if negative) to the current reference_temperature\nat a frequency of temperature_update_frequency when temperature_profile is \"linear\".\nThe reference temperature is then replaced by this new value until the next update.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 9, + "m_parent_sub_section": "quantities", + "name": "temperature_update_factor", + "description": "Factor to be multiplied to the current reference_temperature at a frequency of temperature_update_frequency when temperature_profile is exponential.\nThe reference temperature is then replaced by this new value until the next update.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 10, + "m_parent_sub_section": "quantities", + "name": "step_start", + "description": "Trajectory step where this thermostating starts.", + "type": { + "type_kind": "python", + "type_data": "int" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 11, + "m_parent_sub_section": "quantities", + "name": "step_end", + "description": "Trajectory step number where this thermostating ends.", + "type": { + "type_kind": "python", + "type_data": "int" + }, + "shape": [] } ] }, @@ -66453,7 +70917,7 @@ window.nomadArtifacts = { "m_parent_index": 2, "m_parent_sub_section": "quantities", "name": "reference_pressure", - "description": "The target pressure for the simulation, stored in a 3x3 matrix, indicating the values for individual directions\nalong the diagonal, and coupling between directions on the off-diagonal.", + "description": "The target pressure for the simulation, stored in a 3x3 matrix, indicating the values for individual directions\nalong the diagonal, and coupling between directions on the off-diagonal. Typically used when pressure_profile is \"constant\".", "type": { "type_kind": "numpy", "type_data": "float64" @@ -66495,6 +70959,114 @@ window.nomadArtifacts = { 3 ], "unit": "1 / pascal" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 5, + "m_parent_sub_section": "quantities", + "name": "pressure_profile", + "description": "Type of pressure control procedure. Can be \"constant\" (no annealing), \"linear\", or \"exponential\".\nIf linear, \"pressure_update_delta\" specifies the corresponding update parameter.\nIf exponential, \"pressure_update_factor\" specifies the corresponding update parameter.", + "type": { + "type_kind": "Enum", + "type_data": [ + "constant", + "linear", + "exponential" + ] + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 6, + "m_parent_sub_section": "quantities", + "name": "reference_pressure_start", + "description": "The initial target pressure for the simulation, stored in a 3x3 matrix, indicating the values for individual directions\nalong the diagonal, and coupling between directions on the off-diagonal. Typically used when pressure_profile is \"linear\" or \"exponential\".", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + 3, + 3 + ], + "unit": "pascal" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 7, + "m_parent_sub_section": "quantities", + "name": "reference_pressure_end", + "description": "The final target pressure for the simulation, stored in a 3x3 matrix, indicating the values for individual directions\nalong the diagonal, and coupling between directions on the off-diagonal. Typically used when pressure_profile is \"linear\" or \"exponential\".", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [ + 3, + 3 + ], + "unit": "pascal" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 8, + "m_parent_sub_section": "quantities", + "name": "pressure_update_frequency", + "description": "Number of simulation steps between changing the target pressure.", + "type": { + "type_kind": "python", + "type_data": "int" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 9, + "m_parent_sub_section": "quantities", + "name": "pressure_update_delta", + "description": "Amount to be added (subtracted if negative) to the current reference_pressure\nat a frequency of pressure_update_frequency when pressure_profile is \"linear\".\nThe pressure temperature is then replaced by this new value until the next update.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 10, + "m_parent_sub_section": "quantities", + "name": "pressure_update_factor", + "description": "Factor to be multiplied to the current reference_pressure at a frequency of pressure_update_frequency when pressure_profile is exponential.\nThe reference pressure is then replaced by this new value until the next update.", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 11, + "m_parent_sub_section": "quantities", + "name": "step_start", + "description": "Trajectory step where this barostating starts.", + "type": { + "type_kind": "python", + "type_data": "int" + }, + "shape": [] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 12, + "m_parent_sub_section": "quantities", + "name": "step_end", + "description": "Trajectory step number where this barostating ends.", + "type": { + "type_kind": "python", + "type_data": "int" + }, + "shape": [] } ] }, @@ -66504,7 +71076,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "section_definitions", "name": "MolecularDynamicsMethod", "base_sections": [ - "/packages/18/section_definitions/0" + "/packages/19/section_definitions/0" ], "quantities": [ { @@ -66634,16 +71206,16 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "thermostat_parameters", - "sub_section": "/packages/18/section_definitions/14", - "repeats": false + "sub_section": "/packages/19/section_definitions/14", + "repeats": true }, { "m_def": "nomad.metainfo.metainfo.SubSection", "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "barostat_parameters", - "sub_section": "/packages/18/section_definitions/15", - "repeats": false + "sub_section": "/packages/19/section_definitions/15", + "repeats": true } ] }, @@ -66717,7 +71289,7 @@ window.nomadArtifacts = { "name": "RadialDistributionFunctionValues", "description": "Section containing information regarding the values of radial distribution functions (rdfs).", "base_sections": [ - "/packages/18/section_definitions/17" + "/packages/19/section_definitions/17" ], "quantities": [ { @@ -66758,7 +71330,7 @@ window.nomadArtifacts = { "name": "EnsembleProperty", "description": "Generic section containing information about a calculation of any static observable from a trajectory (i.e., from an ensemble average).", "base_sections": [ - "/packages/14/section_definitions/0" + "/packages/15/section_definitions/0" ], "quantities": [ { @@ -66841,7 +71413,7 @@ window.nomadArtifacts = { "name": "RadialDistributionFunction", "description": "Section containing information about the calculation of radial distribution functions (rdfs).", "base_sections": [ - "/packages/18/section_definitions/19" + "/packages/19/section_definitions/19" ], "sub_sections": [ { @@ -66849,7 +71421,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "radial_distribution_function_values", - "sub_section": "/packages/18/section_definitions/18", + "sub_section": "/packages/19/section_definitions/18", "repeats": true } ] @@ -66861,7 +71433,7 @@ window.nomadArtifacts = { "name": "TrajectoryProperty", "description": "Generic section containing information about a calculation of any observable defined and stored at each individual frame of a trajectory.", "base_sections": [ - "/packages/14/section_definitions/0" + "/packages/15/section_definitions/0" ], "quantities": [ { @@ -66981,7 +71553,7 @@ window.nomadArtifacts = { "name": "RadiusOfGyration", "description": "Section containing information about the calculation of radius of gyration (Rg).", "base_sections": [ - "/packages/18/section_definitions/21" + "/packages/19/section_definitions/21" ], "quantities": [ { @@ -66992,7 +71564,7 @@ window.nomadArtifacts = { "description": "References to the atoms_group section containing the molecule for which Rg was calculated.", "type": { "type_kind": "reference", - "type_data": "/packages/1/section_definitions/0" + "type_data": "/packages/2/section_definitions/0" }, "shape": [ 1 @@ -67109,7 +71681,7 @@ window.nomadArtifacts = { "name": "MeanSquaredDisplacementValues", "description": "Section containing information regarding the values of a mean squared displacements (msds).", "base_sections": [ - "/packages/18/section_definitions/24" + "/packages/19/section_definitions/24" ], "quantities": [ { @@ -67163,7 +71735,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "diffusion_constant", - "sub_section": "/packages/18/section_definitions/23", + "sub_section": "/packages/19/section_definitions/23", "repeats": false } ] @@ -67175,7 +71747,7 @@ window.nomadArtifacts = { "name": "CorrelationFunction", "description": "Generic section containing information about a calculation of any time correlation function from a trajectory.", "base_sections": [ - "/packages/14/section_definitions/0" + "/packages/15/section_definitions/0" ], "quantities": [ { @@ -67240,7 +71812,7 @@ window.nomadArtifacts = { "name": "MeanSquaredDisplacement", "description": "Section containing information about a calculation of any mean squared displacements (msds).", "base_sections": [ - "/packages/18/section_definitions/26" + "/packages/19/section_definitions/26" ], "sub_sections": [ { @@ -67248,7 +71820,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "mean_squared_displacement_values", - "sub_section": "/packages/18/section_definitions/25", + "sub_section": "/packages/19/section_definitions/25", "repeats": true } ] @@ -67259,7 +71831,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "section_definitions", "name": "MolecularDynamicsResults", "base_sections": [ - "/packages/18/section_definitions/5" + "/packages/19/section_definitions/5" ], "quantities": [ { @@ -67294,7 +71866,7 @@ window.nomadArtifacts = { "description": "Reference to the system of each step in the trajectory.", "type": { "type_kind": "reference", - "type_data": "/packages/1/section_definitions/8" + "type_data": "/packages/2/section_definitions/8" }, "shape": [ "n_steps" @@ -67307,7 +71879,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "radial_distribution_functions", - "sub_section": "/packages/18/section_definitions/20", + "sub_section": "/packages/19/section_definitions/20", "repeats": true }, { @@ -67315,7 +71887,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "radius_of_gyration", - "sub_section": "/packages/18/section_definitions/22", + "sub_section": "/packages/19/section_definitions/22", "repeats": true }, { @@ -67323,7 +71895,7 @@ window.nomadArtifacts = { "m_parent_index": 2, "m_parent_sub_section": "sub_sections", "name": "mean_squared_displacements", - "sub_section": "/packages/18/section_definitions/27", + "sub_section": "/packages/19/section_definitions/27", "repeats": true } ] @@ -67334,7 +71906,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "section_definitions", "name": "MolecularDynamics", "base_sections": [ - "/packages/18/section_definitions/10" + "/packages/19/section_definitions/10" ], "sub_sections": [ { @@ -67342,7 +71914,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "method", - "sub_section": "/packages/18/section_definitions/16" + "sub_section": "/packages/19/section_definitions/16" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -67350,9 +71922,9 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "results", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], - "sub_section": "/packages/18/section_definitions/28" + "sub_section": "/packages/19/section_definitions/28" } ] }, @@ -67362,7 +71934,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "section_definitions", "name": "PhononMethod", "base_sections": [ - "/packages/18/section_definitions/0" + "/packages/19/section_definitions/0" ], "quantities": [ { @@ -67434,7 +72006,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "section_definitions", "name": "PhononResults", "base_sections": [ - "/packages/18/section_definitions/5" + "/packages/19/section_definitions/5" ], "quantities": [ { @@ -67554,7 +72126,7 @@ window.nomadArtifacts = { "description": "Reference to the electronic density of states data.", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/17" + "type_data": "/packages/3/section_definitions/17" }, "shape": [ "n_data" @@ -67568,7 +72140,7 @@ window.nomadArtifacts = { "description": "Reference to the electronic band structure data.", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/14" + "type_data": "/packages/3/section_definitions/14" }, "shape": [ "n_data" @@ -67582,7 +72154,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "section_definitions", "name": "Phonon", "base_sections": [ - "/packages/18/section_definitions/9" + "/packages/19/section_definitions/9" ], "sub_sections": [ { @@ -67590,7 +72162,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "method", - "sub_section": "/packages/18/section_definitions/30" + "sub_section": "/packages/19/section_definitions/30" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -67598,9 +72170,9 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "results", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], - "sub_section": "/packages/18/section_definitions/31" + "sub_section": "/packages/19/section_definitions/31" } ] }, @@ -67709,7 +72281,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "section_definitions", "name": "ElasticMethod", "base_sections": [ - "/packages/18/section_definitions/0" + "/packages/19/section_definitions/0" ], "quantities": [ { @@ -67780,7 +72352,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "section_definitions", "name": "ElasticResults", "base_sections": [ - "/packages/18/section_definitions/5" + "/packages/19/section_definitions/5" ], "quantities": [ { @@ -68165,7 +72737,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "strain_diagrams", - "sub_section": "/packages/18/section_definitions/33", + "sub_section": "/packages/19/section_definitions/33", "repeats": true } ] @@ -68176,7 +72748,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "section_definitions", "name": "Elastic", "base_sections": [ - "/packages/18/section_definitions/9" + "/packages/19/section_definitions/9" ], "sub_sections": [ { @@ -68184,7 +72756,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "method", - "sub_section": "/packages/18/section_definitions/34" + "sub_section": "/packages/19/section_definitions/34" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -68192,9 +72764,9 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "results", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], - "sub_section": "/packages/18/section_definitions/35" + "sub_section": "/packages/19/section_definitions/35" } ] }, @@ -68204,7 +72776,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "section_definitions", "name": "ThermodynamicsMethod", "base_sections": [ - "/packages/18/section_definitions/0" + "/packages/19/section_definitions/0" ] }, { @@ -68213,7 +72785,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "section_definitions", "name": "Thermodynamics", "base_sections": [ - "/packages/18/section_definitions/10" + "/packages/19/section_definitions/10" ], "sub_sections": [ { @@ -68221,7 +72793,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "method", - "sub_section": "/packages/18/section_definitions/37" + "sub_section": "/packages/19/section_definitions/37" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -68229,9 +72801,9 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "results", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], - "sub_section": "/packages/18/section_definitions/5" + "sub_section": "/packages/19/section_definitions/5" } ] }, @@ -68240,8 +72812,9 @@ window.nomadArtifacts = { "m_parent_index": 39, "m_parent_sub_section": "section_definitions", "name": "GWResults", + "description": "Groups DFT and GW outputs: band gaps, DOS, band structures. The ResultsNormalizer takes care of adding a label 'DFT' or 'GW' in the method `get_gw_workflow_properties`.", "base_sections": [ - "/packages/18/section_definitions/1" + "/packages/19/section_definitions/1" ], "quantities": [ { @@ -68249,10 +72822,10 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "quantities", "name": "band_gap_dft", - "description": "DFT band gap", + "description": "Reference to the DFT band gap.", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/19" + "type_data": "/packages/3/section_definitions/19" }, "shape": [ "*" @@ -68263,10 +72836,10 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "quantities", "name": "band_gap_gw", - "description": "GW band gap", + "description": "Reference to the GW band gap.", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/19" + "type_data": "/packages/3/section_definitions/19" }, "shape": [ "*" @@ -68277,10 +72850,10 @@ window.nomadArtifacts = { "m_parent_index": 2, "m_parent_sub_section": "quantities", "name": "dos_dft", - "description": "DFT density of states", + "description": "Reference to the DFT density of states.", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/17" + "type_data": "/packages/3/section_definitions/17" }, "shape": [ "*" @@ -68291,10 +72864,10 @@ window.nomadArtifacts = { "m_parent_index": 3, "m_parent_sub_section": "quantities", "name": "dos_gw", - "description": "GW density of states", + "description": "Reference to the GW density of states.", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/17" + "type_data": "/packages/3/section_definitions/17" }, "shape": [ "*" @@ -68305,10 +72878,10 @@ window.nomadArtifacts = { "m_parent_index": 4, "m_parent_sub_section": "quantities", "name": "band_structure_dft", - "description": "DFT density of states", + "description": "Reference to the DFT band structure.", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/14" + "type_data": "/packages/3/section_definitions/14" }, "shape": [ "*" @@ -68319,10 +72892,10 @@ window.nomadArtifacts = { "m_parent_index": 5, "m_parent_sub_section": "quantities", "name": "band_structure_gw", - "description": "DFT density of states", + "description": "Reference to the GW band structure.", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/14" + "type_data": "/packages/3/section_definitions/14" }, "shape": [ "*" @@ -68335,41 +72908,42 @@ window.nomadArtifacts = { "m_parent_index": 40, "m_parent_sub_section": "section_definitions", "name": "GWMethod", + "description": "Groups DFT and GW input methodologies: starting XC functional, electrons representation (basis set), GW method reference.", "base_sections": [ - "/packages/18/section_definitions/0" + "/packages/19/section_definitions/0" ], "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "gw_method_ref", - "description": "GW methodology reference.", + "name": "starting_point", + "description": "Reference to the starting point (XC functional or HF) used.", "type": { "type_kind": "reference", - "type_data": "/packages/0/section_definitions/29" + "type_data": "/packages/1/section_definitions/20" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", - "name": "starting_point", - "description": "Starting point (XC functional or HF) used.", + "name": "electrons_representation", + "description": "Reference to the basis set used.", "type": { "type_kind": "reference", - "type_data": "/packages/0/section_definitions/20" + "type_data": "/packages/1/section_definitions/16" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 2, "m_parent_sub_section": "quantities", - "name": "electrons_representation", - "description": "Basis set used.", + "name": "gw_method_ref", + "description": "Reference to the GW methodology.", "type": { "type_kind": "reference", - "type_data": "/packages/0/section_definitions/16" + "type_data": "/packages/1/section_definitions/29" } } ] @@ -68379,8 +72953,373 @@ window.nomadArtifacts = { "m_parent_index": 41, "m_parent_sub_section": "section_definitions", "name": "GW", + "description": "The GW workflow is generated in an extra EntryArchive IF both the DFT SinglePoint and the GW SinglePoint EntryArchives are present in the upload.", + "base_sections": [ + "/packages/19/section_definitions/10" + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "method", + "sub_section": "/packages/19/section_definitions/40" + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", + "name": "results", + "categories": [ + "/packages/17/category_definitions/0" + ], + "sub_section": "/packages/19/section_definitions/39" + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 42, + "m_parent_sub_section": "section_definitions", + "name": "PhotonPolarizationResults", + "description": "Groups all polarization outputs: spectrum.", + "base_sections": [ + "/packages/19/section_definitions/1" + ], + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "n_polarizations", + "description": "Number of polarizations for the phonons used for the calculations.", + "type": { + "type_kind": "numpy", + "type_data": "int32" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "spectrum_polarization", + "description": "Spectrum for a given polarization of the photon.", + "type": { + "type_kind": "reference", + "type_data": "/packages/3/section_definitions/28" + }, + "shape": [ + "n_polarizations" + ] + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 43, + "m_parent_sub_section": "section_definitions", + "name": "PhotonPolarizationMethod", + "description": "Defines the full macroscopic dielectric tensor methodology: BSE method reference.", + "base_sections": [ + "/packages/19/section_definitions/0" + ], + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "bse_method_ref", + "description": "BSE methodology reference.", + "type": { + "type_kind": "reference", + "type_data": "/packages/1/section_definitions/30" + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 44, + "m_parent_sub_section": "section_definitions", + "name": "PhotonPolarization", + "description": "The PhotonPolarization workflow is generated in an extra EntryArchive FOR all polarization EntryArchives present in the upload. It groups them for a set of given method parameters.\n\nThis entry is also recognized as the full macroscopic dielectric tensor entry (e.g. calculated\nvia BSE).", + "base_sections": [ + "/packages/19/section_definitions/9" + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "method", + "sub_section": "/packages/19/section_definitions/43" + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", + "name": "results", + "categories": [ + "/packages/17/category_definitions/0" + ], + "sub_section": "/packages/19/section_definitions/42" + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 45, + "m_parent_sub_section": "section_definitions", + "name": "XSResults", + "description": "Groups DFT, GW and PhotonPolarization outputs: band gaps (DFT, GW), DOS (DFT, GW), band structures (DFT, GW), spectra (PhotonPolarization). The ResultsNormalizer takes\ncare of adding a label 'DFT' or 'GW' in the method `get_xs_workflow_properties`.", + "base_sections": [ + "/packages/19/section_definitions/1" + ], + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "band_gap_dft", + "description": "Reference to the DFT band gap.", + "type": { + "type_kind": "reference", + "type_data": "/packages/3/section_definitions/19" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "band_gap_gw", + "description": "Reference to the GW band gap.", + "type": { + "type_kind": "reference", + "type_data": "/packages/3/section_definitions/19" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "name": "band_structure_dft", + "description": "Reference to the DFT density of states.", + "type": { + "type_kind": "reference", + "type_data": "/packages/3/section_definitions/14" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 3, + "m_parent_sub_section": "quantities", + "name": "band_structure_gw", + "description": "Reference to the GW density of states.", + "type": { + "type_kind": "reference", + "type_data": "/packages/3/section_definitions/14" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 4, + "m_parent_sub_section": "quantities", + "name": "dos_dft", + "description": "Reference to the DFT band structure.", + "type": { + "type_kind": "reference", + "type_data": "/packages/3/section_definitions/17" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 5, + "m_parent_sub_section": "quantities", + "name": "dos_gw", + "description": "Reference to the GW band structure.", + "type": { + "type_kind": "reference", + "type_data": "/packages/3/section_definitions/17" + }, + "shape": [ + "*" + ] + } + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "spectra", + "sub_section": "/packages/19/section_definitions/42", + "repeats": true + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 46, + "m_parent_sub_section": "section_definitions", + "name": "XSMethod", + "base_sections": [ + "/packages/19/section_definitions/0" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 47, + "m_parent_sub_section": "section_definitions", + "name": "XS", + "description": "The XS workflow is generated in an extra EntryArchive IF both the DFT SinglePoint and the PhotonPolarization EntryArchives are present in the upload.", + "base_sections": [ + "/packages/19/section_definitions/10" + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "method", + "sub_section": "/packages/19/section_definitions/46" + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", + "name": "results", + "categories": [ + "/packages/17/category_definitions/0" + ], + "sub_section": "/packages/19/section_definitions/45" + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 48, + "m_parent_sub_section": "section_definitions", + "name": "MaxEntResults", + "description": "Groups DMFT and MaxEnt outputs: greens functions (DMFT, MaxEnt), band gaps (MaxEnt), DOS (MaxEnt), band structures (MaxEnt). The ResultsNormalizer takes care of adding a\nlabel 'DMFT' or 'MaxEnt' in the method `get_maxent_workflow_properties`.", + "base_sections": [ + "/packages/19/section_definitions/1" + ], + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "greens_functions_dmft", + "description": "Ref to the DMFT Greens functions.", + "type": { + "type_kind": "reference", + "type_data": "/packages/3/section_definitions/29" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "band_gap_maxent", + "description": "MaxEnt band gap.", + "type": { + "type_kind": "reference", + "type_data": "/packages/3/section_definitions/19" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "name": "dos_maxent", + "description": "Ref to the MaxEnt density of states (also called spectral function).", + "type": { + "type_kind": "reference", + "type_data": "/packages/3/section_definitions/17" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 3, + "m_parent_sub_section": "quantities", + "name": "greens_functions_maxent", + "description": "Ref to the MaxEnt Greens functions.", + "type": { + "type_kind": "reference", + "type_data": "/packages/3/section_definitions/29" + }, + "shape": [ + "*" + ] + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 49, + "m_parent_sub_section": "section_definitions", + "name": "MaxEntMethod", + "description": "Groups DMFT and MaxEnt input methodologies: DMFT method references, MaxEnt method reference.", + "base_sections": [ + "/packages/19/section_definitions/0" + ], + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "dmft_method_ref", + "description": "DMFT methodology reference.", + "type": { + "type_kind": "reference", + "type_data": "/packages/1/section_definitions/31" + } + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "maxent_method_ref", + "description": "MaxEnt methodology reference.", + "type": { + "type_kind": "reference", + "type_data": "/packages/1/section_definitions/39" + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 50, + "m_parent_sub_section": "section_definitions", + "name": "MaxEnt", + "description": "The MaxEnt (Maximum Entropy) workflow is generated in an extra EntryArchive IF both the DMFT SinglePoint and the MaxEnt SinglePoint EntryArchives are present in the upload.", "base_sections": [ - "/packages/18/section_definitions/10" + "/packages/19/section_definitions/10" ], "sub_sections": [ { @@ -68388,7 +73327,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "method", - "sub_section": "/packages/18/section_definitions/40" + "sub_section": "/packages/19/section_definitions/49" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -68396,166 +73335,200 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "results", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], - "sub_section": "/packages/18/section_definitions/39" + "sub_section": "/packages/19/section_definitions/48" } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 42, + "m_parent_index": 51, "m_parent_sub_section": "section_definitions", - "name": "PhotonPolarizationResults", + "name": "DMFTResults", + "description": "Groups DFT, Projection and DMFT outputs: band gaps (all), DOS (DFT, Projection), band structures (DFT, Projection), Greens functions (DMFT). The ResultsNormalizer takes care\nof adding a label 'DFT', 'PROJECTION, or 'DMFT' in the method `get_dmft_workflow_properties`.", "base_sections": [ - "/packages/18/section_definitions/1" + "/packages/19/section_definitions/1" ], "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "n_polarizations", - "description": "Number of polarizations for the phonons used for the calculations.", + "name": "band_gap_dft", + "description": "DFT band gap.", "type": { - "type_kind": "numpy", - "type_data": "int32" - } + "type_kind": "reference", + "type_data": "/packages/3/section_definitions/19" + }, + "shape": [ + "*" + ] }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", - "name": "spectrum_polarization", - "description": "Spectrum for a given polarization of the photon.", + "name": "band_gap_projection", + "description": "Projection band gap.", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/28" + "type_data": "/packages/3/section_definitions/19" }, "shape": [ - "n_polarizations" + "*" ] - } - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 43, - "m_parent_sub_section": "section_definitions", - "name": "PhotonPolarizationMethod", - "base_sections": [ - "/packages/18/section_definitions/0" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 44, - "m_parent_sub_section": "section_definitions", - "name": "PhotonPolarization", - "base_sections": [ - "/packages/18/section_definitions/9" - ], - "sub_sections": [ + }, { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 0, - "m_parent_sub_section": "sub_sections", - "name": "method", - "sub_section": "/packages/18/section_definitions/43" + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 2, + "m_parent_sub_section": "quantities", + "name": "band_gap_dmft", + "description": "DMFT band gap.", + "type": { + "type_kind": "reference", + "type_data": "/packages/3/section_definitions/19" + }, + "shape": [ + "*" + ] }, { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 1, - "m_parent_sub_section": "sub_sections", - "name": "results", - "categories": [ - "/packages/16/category_definitions/0" - ], - "sub_section": "/packages/18/section_definitions/42" + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 3, + "m_parent_sub_section": "quantities", + "name": "band_structure_dft", + "description": "Ref to the DFT band structure.", + "type": { + "type_kind": "reference", + "type_data": "/packages/3/section_definitions/14" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 4, + "m_parent_sub_section": "quantities", + "name": "dos_dft", + "description": "Ref to the DFT density of states.", + "type": { + "type_kind": "reference", + "type_data": "/packages/3/section_definitions/17" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 5, + "m_parent_sub_section": "quantities", + "name": "band_structure_projection", + "description": "Ref to the projected band structure.", + "type": { + "type_kind": "reference", + "type_data": "/packages/3/section_definitions/14" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 6, + "m_parent_sub_section": "quantities", + "name": "dos_projection", + "description": "Ref to the projected density of states.", + "type": { + "type_kind": "reference", + "type_data": "/packages/3/section_definitions/17" + }, + "shape": [ + "*" + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 7, + "m_parent_sub_section": "quantities", + "name": "greens_functions_dmft", + "description": "Ref to the DMFT Greens functions.", + "type": { + "type_kind": "reference", + "type_data": "/packages/3/section_definitions/29" + }, + "shape": [ + "*" + ] } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 45, + "m_parent_index": 52, "m_parent_sub_section": "section_definitions", - "name": "ParticleHoleExcitationsResults", + "name": "DMFTMethod", + "description": "Groups DFT, Projection and DMFT input methodologies: starting XC functional, electrons representation (basis set), Projection method reference, DMFT method reference.", "base_sections": [ - "/packages/18/section_definitions/1" + "/packages/19/section_definitions/0" ], "quantities": [ { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 0, "m_parent_sub_section": "quantities", - "name": "dos_dft", - "description": "DFT density of states", + "name": "starting_point", + "description": "Starting point (XC functional or HF) used.", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/17" + "type_data": "/packages/1/section_definitions/20" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 1, "m_parent_sub_section": "quantities", - "name": "dos_gw", - "description": "GW density of states", + "name": "electrons_representation", + "description": "Basis set used.", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/17" + "type_data": "/packages/1/section_definitions/16" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 2, "m_parent_sub_section": "quantities", - "name": "band_structure_dft", - "description": "DFT density of states", + "name": "projection_method_ref", + "description": "Projection methodology reference.", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/14" + "type_data": "/packages/1/section_definitions/23" } }, { "m_def": "nomad.metainfo.metainfo.Quantity", "m_parent_index": 3, "m_parent_sub_section": "quantities", - "name": "band_structure_gw", - "description": "DFT density of states", + "name": "dmft_method_ref", + "description": "DMFT methodology reference.", "type": { "type_kind": "reference", - "type_data": "/packages/2/section_definitions/14" + "type_data": "/packages/1/section_definitions/31" } } - ], - "sub_sections": [ - { - "m_def": "nomad.metainfo.metainfo.SubSection", - "m_parent_index": 0, - "m_parent_sub_section": "sub_sections", - "name": "spectra", - "sub_section": "/packages/18/section_definitions/42", - "repeats": true - } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 46, - "m_parent_sub_section": "section_definitions", - "name": "ParticleHoleExcitationsMethod", - "base_sections": [ - "/packages/18/section_definitions/0" - ] - }, - { - "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 47, + "m_parent_index": 53, "m_parent_sub_section": "section_definitions", - "name": "ParticleHoleExcitations", + "name": "DMFT", + "description": "The DMFT workflow is generated in an extra EntryArchive IF both the Projection SinglePoint and the DMFT SinglePoint EntryArchives are present in the upload.", "base_sections": [ - "/packages/18/section_definitions/10" + "/packages/19/section_definitions/10" ], "sub_sections": [ { @@ -68563,7 +73536,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "method", - "sub_section": "/packages/18/section_definitions/46" + "sub_section": "/packages/19/section_definitions/52" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -68571,19 +73544,19 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "results", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], - "sub_section": "/packages/18/section_definitions/45" + "sub_section": "/packages/19/section_definitions/51" } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 48, + "m_parent_index": 54, "m_parent_sub_section": "section_definitions", "name": "EquationOfStateMethod", "base_sections": [ - "/packages/18/section_definitions/0" + "/packages/19/section_definitions/0" ], "quantities": [ { @@ -68602,7 +73575,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 49, + "m_parent_index": 55, "m_parent_sub_section": "section_definitions", "name": "EOSFit", "description": "Section containing results of an equation of state fit.", @@ -68701,11 +73674,11 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 50, + "m_parent_index": 56, "m_parent_sub_section": "section_definitions", "name": "EquationOfStateResults", "base_sections": [ - "/packages/18/section_definitions/1" + "/packages/19/section_definitions/1" ], "quantities": [ { @@ -68757,18 +73730,18 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "eos_fit", - "sub_section": "/packages/18/section_definitions/49", + "sub_section": "/packages/19/section_definitions/55", "repeats": true } ] }, { "m_def": "nomad.metainfo.metainfo.Section", - "m_parent_index": 51, + "m_parent_index": 57, "m_parent_sub_section": "section_definitions", "name": "EquationOfState", "base_sections": [ - "/packages/18/section_definitions/9" + "/packages/19/section_definitions/9" ], "sub_sections": [ { @@ -68776,7 +73749,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "method", - "sub_section": "/packages/18/section_definitions/48" + "sub_section": "/packages/19/section_definitions/54" }, { "m_def": "nomad.metainfo.metainfo.SubSection", @@ -68784,9 +73757,96 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "results", "categories": [ - "/packages/16/category_definitions/0" + "/packages/17/category_definitions/0" ], - "sub_section": "/packages/18/section_definitions/50" + "sub_section": "/packages/19/section_definitions/56" + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 58, + "m_parent_sub_section": "section_definitions", + "name": "ChemicalReactionMethod", + "base_sections": [ + "/packages/19/section_definitions/0" + ], + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "reaction_type", + "description": "The type of the chemical reaction.", + "type": { + "type_kind": "Enum", + "type_data": [ + "surface_adsorption" + ] + } + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 59, + "m_parent_sub_section": "section_definitions", + "name": "ChemicalReactionResults", + "base_sections": [ + "/packages/19/section_definitions/0" + ], + "quantities": [ + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 0, + "m_parent_sub_section": "quantities", + "name": "reaction_energy", + "description": "Calculated value of the reaction energy, E_reaction= E_products - E_reactants", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "joule" + }, + { + "m_def": "nomad.metainfo.metainfo.Quantity", + "m_parent_index": 1, + "m_parent_sub_section": "quantities", + "name": "activation_energy", + "description": "Calculated value of the activation energy, E_activation = E_transitions - E_reactants", + "type": { + "type_kind": "numpy", + "type_data": "float64" + }, + "unit": "joule" + } + ] + }, + { + "m_def": "nomad.metainfo.metainfo.Section", + "m_parent_index": 60, + "m_parent_sub_section": "section_definitions", + "name": "ChemicalReaction", + "base_sections": [ + "/packages/19/section_definitions/2" + ], + "sub_sections": [ + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 0, + "m_parent_sub_section": "sub_sections", + "name": "method", + "sub_section": "/packages/19/section_definitions/58" + }, + { + "m_def": "nomad.metainfo.metainfo.SubSection", + "m_parent_index": 1, + "m_parent_sub_section": "sub_sections", + "name": "results", + "categories": [ + "/packages/17/category_definitions/0" + ], + "sub_section": "/packages/19/section_definitions/59" } ] } @@ -68794,7 +73854,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Package", - "m_parent_index": 19, + "m_parent_index": 20, "m_parent_sub_section": "packages", "name": "nomad.datamodel.metainfo.workflow", "section_definitions": [ @@ -68805,7 +73865,7 @@ window.nomadArtifacts = { "name": "Link", "description": "Instances of Link are used to represent either a single input or single output of a Task. Using a separate section for links allows to put\nadditional information (e.g. a name) on an input or output.", "base_sections": [ - "/packages/14/section_definitions/0" + "/packages/15/section_definitions/0" ], "quantities": [ { @@ -68841,7 +73901,7 @@ window.nomadArtifacts = { "description": "A reference to the section that contains the actual input or output data.", "type": { "type_kind": "reference", - "type_data": "/packages/14/section_definitions/0" + "type_data": "/packages/15/section_definitions/0" } } ] @@ -68853,7 +73913,7 @@ window.nomadArtifacts = { "name": "Task", "description": "Instances of Task are used to represent an activity that happened during workflow execution and that was acting on inputs to produce outputs.", "base_sections": [ - "/packages/14/section_definitions/0" + "/packages/15/section_definitions/0" ], "quantities": [ { @@ -68882,7 +73942,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "inputs", "description": "All the links to sections that represent the inputs for this task.", - "sub_section": "/packages/19/section_definitions/0", + "sub_section": "/packages/20/section_definitions/0", "repeats": true }, { @@ -68891,7 +73951,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "outputs", "description": "All the links to sections that represent the outputs for this task.", - "sub_section": "/packages/19/section_definitions/0", + "sub_section": "/packages/20/section_definitions/0", "repeats": true } ] @@ -68903,7 +73963,7 @@ window.nomadArtifacts = { "name": "TaskReference", "description": "A proxy section that can be used to compose a workflow of tasks that are contained in a different entry or workflow.", "base_sections": [ - "/packages/19/section_definitions/1" + "/packages/20/section_definitions/1" ], "quantities": [ { @@ -68921,7 +73981,7 @@ window.nomadArtifacts = { "description": "A reference to the task that this section is a proxy for.", "type": { "type_kind": "reference", - "type_data": "/packages/19/section_definitions/1" + "type_data": "/packages/20/section_definitions/1" } } ] @@ -68933,11 +73993,11 @@ window.nomadArtifacts = { "name": "Workflow", "description": "Instances of Workflow are used to represent a set of Tasks that connect input and output data objects to produce a provenance graph for those data.\n\nWorkflows themselves can be tasks. This allows to build nested workflows where some\nof the workflow tasks are workflows themselves.", "categories": [ - "/packages/14/category_definitions/5" + "/packages/15/category_definitions/5" ], "base_sections": [ - "/packages/19/section_definitions/1", - "/packages/14/section_definitions/1" + "/packages/20/section_definitions/1", + "/packages/15/section_definitions/1" ], "sub_sections": [ { @@ -68946,7 +74006,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "tasks", "description": "The tasks of this workflow as a repeating sub section. Use TaskReference if tasks cannot be contained.", - "sub_section": "/packages/19/section_definitions/1", + "sub_section": "/packages/20/section_definitions/1", "repeats": true } ] @@ -68955,7 +74015,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Package", - "m_parent_index": 20, + "m_parent_index": 21, "m_parent_sub_section": "packages", "name": "nomad.datamodel.optimade", "section_definitions": [ @@ -69661,7 +74721,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "species", - "sub_section": "/packages/20/section_definitions/0", + "sub_section": "/packages/21/section_definitions/0", "repeats": true } ] @@ -69670,7 +74730,7 @@ window.nomadArtifacts = { }, { "m_def": "nomad.metainfo.metainfo.Package", - "m_parent_index": 21, + "m_parent_index": 22, "m_parent_sub_section": "packages", "name": "nomad.metainfo.metainfo", "section_definitions": [ @@ -69736,7 +74796,7 @@ window.nomadArtifacts = { "description": "All metainfo definitions can be put into one or more `categories`.\nCategories allow to organize the definitions themselves. It is different from\nsections, which organize the data (e.g. quantity values) and not the definitions\nof data (e.g. quantities definitions). See :ref:`metainfo-categories` for more\ndetails.", "type": { "type_kind": "reference", - "type_data": "/packages/21/section_definitions/5" + "type_data": "/packages/22/section_definitions/5" }, "shape": [ "0..*" @@ -69813,7 +74873,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "attributes", "description": "The attributes that can further qualify property values.", - "sub_section": "/packages/21/section_definitions/1", + "sub_section": "/packages/22/section_definitions/1", "repeats": true } ] @@ -69825,7 +74885,7 @@ window.nomadArtifacts = { "name": "Attribute", "description": "Attributes can be used to qualify all properties (subsections and quantities) with simple scalar values.", "base_sections": [ - "/packages/21/section_definitions/0" + "/packages/22/section_definitions/0" ], "constraints": [ "is_primitive" @@ -69865,7 +74925,7 @@ window.nomadArtifacts = { "name": "Property", "description": "A common base-class for section properties: subsections and quantities.", "base_sections": [ - "/packages/21/section_definitions/0" + "/packages/22/section_definitions/0" ] }, { @@ -69875,7 +74935,7 @@ window.nomadArtifacts = { "name": "Section", "description": "Instances of the class :class:`Section` are created by writing Python classes that extend :class:`MSection` like this:\n\n.. code-block:: python\n\n class SectionName(BaseSection):\n ''' Section description '''\n m_def = Section(**section_attributes)\n\n quantity_name = Quantity(**quantity_attributes)\n sub_section_name = SubSection(**sub_section_attributes)\n\nWe call such classes *section classes*. They are not the *section definition*, but just\nrepresentation of it in Python syntax. The *section definition* (in instance of :class:`Section`)\nwill be created for each of these classes and stored in the ``m_def`` property. See\n:ref:`metainfo-reflection` for more details.\n\nMost of the attributes for a :class:`Section` instance will be set automatically from\nthe section class:", "base_sections": [ - "/packages/21/section_definitions/0" + "/packages/22/section_definitions/0" ], "constraints": [ "resolved_base_sections", @@ -69889,7 +74949,7 @@ window.nomadArtifacts = { "name": "base_sections", "type": { "type_kind": "reference", - "type_data": "/packages/21/section_definitions/3" + "type_data": "/packages/22/section_definitions/3" }, "shape": [ "0..*" @@ -69903,7 +74963,7 @@ window.nomadArtifacts = { "name": "extending_sections", "type": { "type_kind": "reference", - "type_data": "/packages/21/section_definitions/3" + "type_data": "/packages/22/section_definitions/3" }, "shape": [ "0..*" @@ -69928,7 +74988,7 @@ window.nomadArtifacts = { "name": "inheriting_sections", "type": { "type_kind": "reference", - "type_data": "/packages/21/section_definitions/3" + "type_data": "/packages/22/section_definitions/3" }, "shape": [ "0..*" @@ -70105,7 +75165,7 @@ window.nomadArtifacts = { "m_parent_index": 0, "m_parent_sub_section": "sub_sections", "name": "quantities", - "sub_section": "/packages/21/section_definitions/6", + "sub_section": "/packages/22/section_definitions/6", "repeats": true }, { @@ -70113,7 +75173,7 @@ window.nomadArtifacts = { "m_parent_index": 1, "m_parent_sub_section": "sub_sections", "name": "sub_sections", - "sub_section": "/packages/21/section_definitions/7", + "sub_section": "/packages/22/section_definitions/7", "repeats": true }, { @@ -70127,7 +75187,7 @@ window.nomadArtifacts = { "inner_sections", "sections" ], - "sub_section": "/packages/21/section_definitions/3", + "sub_section": "/packages/22/section_definitions/3", "repeats": true } ] @@ -70139,7 +75199,7 @@ window.nomadArtifacts = { "name": "Package", "description": "Packages organize metainfo definitions alongside Python modules Each Python module with metainfo Definition (explicitly or implicitly) has a member\n``m_package`` with an instance of this class. Definitions (categories, sections) in\nPython modules are automatically added to the module's :class:`Package`.\nPackages are not nested and rather have the fully qualified Python module name as\nname.\n\nThis allows to inspect all definitions in a Python module and automatically puts\nmodule name and docstring as :class:`Package` name and description.\n\nBesides the regular :class:`Definition` attributes, packages can have the following\nattributes:", "base_sections": [ - "/packages/21/section_definitions/0" + "/packages/22/section_definitions/0" ], "quantities": [ { @@ -70178,7 +75238,7 @@ window.nomadArtifacts = { "section_defs", "sections" ], - "sub_section": "/packages/21/section_definitions/3", + "sub_section": "/packages/22/section_definitions/3", "repeats": true }, { @@ -70190,7 +75250,7 @@ window.nomadArtifacts = { "aliases": [ "category_defs" ], - "sub_section": "/packages/21/section_definitions/5", + "sub_section": "/packages/22/section_definitions/5", "repeats": true } ] @@ -70202,7 +75262,7 @@ window.nomadArtifacts = { "name": "Category", "description": "Categories allow to organize metainfo definitions (not metainfo data like sections do) Each definition, including categories themselves, can belong to a set of categories.\nCategories therefore form a hierarchy of concepts that definitions can belong to, i.e.\nthey form a `is a` relationship.", "base_sections": [ - "/packages/21/section_definitions/0" + "/packages/22/section_definitions/0" ] }, { @@ -70212,7 +75272,7 @@ window.nomadArtifacts = { "name": "Quantity", "description": "To define quantities, instantiate :class:`Quantity` as a class attribute values in a `section classes`. The name of a quantity is automatically taken from its `section class`\nattribute. You can provide all other attributes to the constructor with keyword arguments\n\nSee :ref:`metainfo-sections` to learn about `section classes`.\nIn Python terms, ``Quantity`` is a descriptor. Descriptors define how to get and\nset attributes in a Python object. This allows us to use sections like regular\nPython objects and quantity like regular Python attributes.\n\nEach quantity must define a basic data type and a shape. The values of a quantity must\nfulfil the given type. The default shape is a single value. Quantities can also have\nphysical units. Units are applied to all values.", "base_sections": [ - "/packages/21/section_definitions/2" + "/packages/22/section_definitions/2" ], "constraints": [ "dimensions", @@ -70364,7 +75424,7 @@ window.nomadArtifacts = { "name": "SubSection", "description": "Like quantities, subsections are defined in a `section class` as attributes of this class. Unlike quantities, each subsection definition becomes a property of\nthe corresponding `section definition` (parent). A subsection definition references\nanother `section definition` as the subsection (child). As a consequence, parent\n`section instances` can contain child `section instances` as subsections.\n\nContrary to the old NOMAD metainfo, we distinguish between subsection the section\nand subsection the property. This allows to use on child `section definition` as\nsubsection of many parent `section definitions`.", "base_sections": [ - "/packages/21/section_definitions/2" + "/packages/22/section_definitions/2" ], "constraints": [ "has_sub_section" @@ -70383,7 +75443,7 @@ window.nomadArtifacts = { ], "type": { "type_kind": "reference", - "type_data": "/packages/21/section_definitions/3" + "type_data": "/packages/22/section_definitions/3" } }, { @@ -70437,7 +75497,7 @@ window.nomadArtifacts = { "m_parent_sub_section": "sub_sections", "name": "packages", "description": "Packages in this environment.", - "sub_section": "/packages/21/section_definitions/4", + "sub_section": "/packages/22/section_definitions/4", "repeats": true } ] @@ -71629,15 +76689,30 @@ window.nomadArtifacts = { "title": "XPS", "description": "This example presents the capabilities of the NOMAD platform to store and standardize XPS data.\nIt shows the generation of a NeXus file according to the\n[NXmpes](https://manual.nexusformat.org/classes/contributed_definitions/NXmpes.html#nxmpes)\napplication definition and a successive analysis of an example data set.\n" }, + "sts": { + "path": "examples/data/uploads/sts.zip", + "title": "STS", + "description": "AT this moment, the reader works for two types of experiments Scanning Tunneling Microscopy (STM) and Scanning Tunneling Spectroscopy (STS) from Scanning Probe Microscopy.\nIt can only transform the data from Nanonis machine generate files into standarized nexus application definition NXsts. In this zip file, the data file are collected from\ntwo specific software versions generic 5e and genric 4.5.\n" + }, "apm": { "path": "examples/data/uploads/apm.zip", - "title": "Electronic Lab Notebook for Atom Probe Microscopy (APM)", - "description": "This is an example for atom probe microscopy.\nThe example contains a custom NOMAD *schema* to create an **Electronic\nLab Notebook (ELN)** with which users can enter metadata that are usually\nnot stored in vendor or community file formats. The example serves two\npurposes. On the one hand it shows how custom NOMAD *schema* can be\ncreated for a research community, here atom probe. On the other hand it\nshows how all required data in a NeXus NXapm file can be added to supplement\ncontent from vendor and community files.\n" + "title": "Atom Probe Microscopy", + "description": "This is an example for atom probe microscopy offering\nan atom-probe-specific custom schema for an ELN and aligned NeXus data schema\n(NXapm) supporting standardization, parsing capabilities for the most frequently\nused file formats (POS, ePOS, APT) for storing reconstruction and ranging\ndefinitions (RNG, RRNG), real world example data, and a docker container apmtools\nwhich contains configured open-source tools for analyzing atom probe dataset\nfor exploring composition and microstructural features described using methods\nfrom the research fields of computational geometry and materials engineering.\n" }, "em_spctrscpy": { "path": "examples/data/uploads/em_spctrscpy.zip", - "title": "Electronic Lab Notebook for Electron Microscopy (EM)", - "description": "This is an example for electron microscopy.\nSpecifically for spectroscopy methods in the SEM and TEM, exemplified\nfor energy-dispersive X-ray (EDXS/EDS) spectroscopy and\nelectron energy loss spectroscopy (EELS).\nThe example contains a custom NOMAD *schema* to create an **Electronic\nLab Notebook (ELN)** with which users can enter metadata that are usually\nnot stored in vendor or community file formats. The example serves two\npurposes. On the one hand it shows how custom NOMAD *schema* can be\ncreated for a research community, here electron microscopy. On the other hand\nit shows how required data in a NeXus NXem file can be added to supplement\ncontent from vendor and community files.\n" + "title": "Spectroscopy Experiments with Electron Microscopy", + "description": "This is an example for scanning and/or transmission electron microscopy offering\nexamples how NOMAD can be customized to support spectroscopy methods like\nenergy-dispersive X-ray (EDXS/EDS) and electron energy loss spectroscopy (EELS).\nThe example offers a domain-specific custom schema for an ELN and aligned NeXus\ndata schema (NXem) supporting standardization, parsing capabilities for some\nexamples of file formats supported via hyperspy and third-party tools.\nExamples implement how to parse data from DM3, Velox EMD and Bruker BCF files.\n" + }, + "em_om": { + "path": "examples/data/uploads/em_om.zip", + "title": "Orientation Microscopy with Electron Microscopy", + "description": "This is an example for scanning and/or transmission electron microscopy offering\na proof-of-concept how NOMAD can be customized to support orientation microscopy\nmethods and thus one large group of diffraction-based methods in an electron\nmicroscope.\nSpecifically, the example shows how electron backscatter diffraction as a\ntechnique can be conceptually represented in a research data management system.\nThe example offers a domain-specific custom schema for storing EBSD data and\nrelated practical steps and mathematical conventions assumed including an aligned\nNeXus data schema (NXem_ebsd) as a draft proposal for convincing why more\nstandardization in the research field of orientation microscopy is useful.\nFurthermore, the example comes with real world data from multiple sources\ndifferent tools/analysis strategies used. The example includes a set of parsers\nusing the pynxtools library which implements proof-of-concepts how EBSD data\nin different representation can be loaded (HDF5-based files from technology\npartners exemplified for H5OINA, analysis results from third-party community\nsoftware like MTex, how to interface with an use the pyxem/orix/kikuchipy library,\nand an example of correlative studies where a set of serial-sectioning\norientation maps is processed into a three-dimensionally reconstructed\nmicrostructure using the popular community tool DREAM.3D.\nFeedback from the EBSD community is welcome to substantially enhance\nthe capabilities of the underlying tools, specifically pynxtools to\noffer a library that can be used in research data management systems\nsuch as but not exclusively NOMAD OASIS.\n" + }, + "em_nion": { + "path": "examples/data/uploads/em_nion.zip", + "title": "Reading electron microscopy data from compressed nionswift project files", + "description": "This is an initial implementation and draft example using the pynxtools\nlibrary capabilities and em_nion reader to show how data can be read\ndirectly from nionswift project files and then mapped using mapping\ntables on an instance of the NeXus NXem application definition.\n" }, "iv_temp": { "path": "examples/data/uploads/iv_temp.zip", @@ -71648,7 +76723,7 @@ window.nomadArtifacts = { }, "northTools": { "jupyter": { - "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/jupyterlab:latest", + "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/jupyterlab:v0.0.1", "description": "### **Jupyter Notebook**: The Classic Notebook Interface\n\nThe Jupyter Notebook is the original web application for creating and sharing computational documents. It offers a simple, streamlined, document-centric experience.", "short_description": "Basic jupyter run with an empty notebook or on given notebook file.", "cmd": null, @@ -71668,10 +76743,11 @@ window.nomadArtifacts = { "email": "markus.scheidgen@physik.hu-berlin.de" } ], - "privileged": false + "privileged": false, + "external_mounts": [] }, "nionswift": { - "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/nionswift-webtop:latest", + "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/nionswift-webtop", "description": "Run Nion Swift to analyze data.", "short_description": "Run NionSwift to analyze data as well as prepare focus series reconstructions", "cmd": null, @@ -71685,10 +76761,11 @@ window.nomadArtifacts = { "email": "sherjeel.shabih@hu-berlin.de" } ], - "privileged": true + "privileged": true, + "external_mounts": [] }, "nexustools": { - "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/nexus-webtop:latest", + "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/nexus-webtop", "description": "Includes multiple NeXus tools for visualization and analysis.", "short_description": null, "cmd": null, @@ -71711,7 +76788,8 @@ window.nomadArtifacts = { "email": "sandor.brockhauser@physik.hu-berlin.de" } ], - "privileged": true + "privileged": true, + "external_mounts": [] }, "ellips": { "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/ellips-jupyter", @@ -71735,7 +76813,8 @@ window.nomadArtifacts = { "email": "emminger.carola@physik.hu-berlin.de" } ], - "privileged": false + "privileged": false, + "external_mounts": [] }, "mpes": { "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/mpes-webtop", @@ -71757,10 +76836,11 @@ window.nomadArtifacts = { "email": "florian.dobener@physik.hu-berlin.de" } ], - "privileged": true + "privileged": true, + "external_mounts": [] }, "xps": { - "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/xps-jupyter:0.1", + "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/xps-jupyter", "description": "Includes tools for analyzing X-ray Photoelectron Spectroscopy (XPS) spectra and converting SPECS xml files into NeXus.", "short_description": "An example for analyzing XPS data.", "cmd": null, @@ -71783,7 +76863,31 @@ window.nomadArtifacts = { "email": "rubel.mozumder@physik.hu-berlin.de" } ], - "privileged": false + "privileged": false, + "external_mounts": [] + }, + "sts": { + "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/sts-jupyter", + "description": "AT this moment, the reader works for two types of experiments, Scanning Tunneling Microscopy (STM) and Scanning Tunneling Spectroscopy (STS) from Scanning Probe Microscopy. It can only transform the data from Nanonis machine generated files into standarised nexus application definition NXsts. The present version of STS reader can handle files from two specific software versions generic 5e and genric 4.5.", + "short_description": "An example for analyzing SPM (STM /STS) experiment.", + "cmd": null, + "path_prefix": "lab/tree", + "mount_path": "/home/jovyan", + "icon": "jupyter_logo.svg", + "file_extensions": [ + "ipynb", + "nxs", + "h5", + "hdf5" + ], + "maintainer": [ + { + "name": "Rubel Mozumder", + "email": "rubel.mozumder@physik.hu-berlin.de" + } + ], + "privileged": false, + "external_mounts": [] }, "webtop": { "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/webtop", @@ -71800,11 +76904,12 @@ window.nomadArtifacts = { "email": "sherjeel.shabih@hu-berlin.de" } ], - "privileged": true + "privileged": true, + "external_mounts": [] }, "apmtools": { "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/apmtools-webtop", - "description": "Miscellaneous tools from the atom probe community:\nCurrently the Leoben APT_analyzer and the paraprobe-toolbox.", + "description": "Miscellaneous tools from the atom probe community:\nCurrently APTyzer, paraprobe-toolbox, and APAV", "short_description": "An example for analyzing atom probe data.", "cmd": null, "path_prefix": null, @@ -71817,7 +76922,8 @@ window.nomadArtifacts = { "email": "markus.kuehbach@physik.hu-berlin.de" } ], - "privileged": true + "privileged": true, + "external_mounts": [] }, "fiji": { "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/fiji-webtop", @@ -71834,7 +76940,8 @@ window.nomadArtifacts = { "email": "markus.kuehbach@physik.hu-berlin.de" } ], - "privileged": true + "privileged": true, + "external_mounts": [] }, "frwr": { "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/frwr-webtop", @@ -71851,7 +76958,8 @@ window.nomadArtifacts = { "email": "markus.kuehbach@physik.hu-berlin.de" } ], - "privileged": true + "privileged": true, + "external_mounts": [] }, "abtem": { "image": "gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/abtem-webtop", @@ -71868,7 +76976,8 @@ window.nomadArtifacts = { "email": "markus.kuehbach@physik.hu-berlin.de" } ], - "privileged": true + "privileged": true, + "external_mounts": [] } }, "unitList": [ diff --git a/gui/tests/data/entry/eln-author.json b/gui/tests/data/entry/eln-author.json index a0774ce691cc63b75a57669f2c7710f9350c0391..c1f540336a9db86b1c555306b7be85649aea7d1c 100644 --- a/gui/tests/data/entry/eln-author.json +++ b/gui/tests/data/entry/eln-author.json @@ -7,7 +7,7 @@ "body": "", "headers": { "accept": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiJjMGRmNDEwMS0zMGYwLTRhMDktOTEwZi04ZWMwOGUxODIzYjAiLCJleHAiOjE2ODc0NjI1NTIsIm5iZiI6MCwiaWF0IjoxNjg3NDI2NTY1LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNjg4NzhhZjctNjg0NS00NmMwLWIyYzEtMjUwZDRkOGViNDcwIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImViMDU3NmExLTU0Y2ItNDQ3ZC04MjNlLTMxYTQ1ZDRkNGMyMiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoibWFya3VzIFNjaGVpZGdlbiIsInByZWZlcnJlZF91c2VybmFtZSI6InRlc3QiLCJnaXZlbl9uYW1lIjoibWFya3VzIiwiZmFtaWx5X25hbWUiOiJTY2hlaWRnZW4iLCJlbWFpbCI6Im1hcmt1cy5zY2hlaWRnZW5AZmhpLWJlcmxpbi5kZSJ9.IomuGvnFhfqs5fgJEDGEIUcVCY2BtRLe_Wxe-GB8cKWsunfnswf4nHC2a8EC_VI6HAFaZsEtZVHGXMMZCyOSJrr8Ir2z5m19_tH9W23ZmbGkUsNr6TI0fLwPCG6Z2OeLUZ_9aQzC8D4W2JX5XbUhoHffN5IaQrSrgu9jxMuB7L9QvJw6eeeInBJfSy5y35w_FmGJVtPjjaeE_ROmpkZyCjebsVNy1DepZeNSORFyJjnpwdTr0sVDSNkFjLhlt0WouaGxoSna6s_ea1A2PXF9zRp5dk-7uE-ArNtenZa2tzA-JjFEXG3m3jYU2gODUmm-lIVcsRMyLxdYWLumCnyi2Q", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiI4YTViZDEyMi00NmE4LTRiMTUtYmYzNi0zN2U2NjA2NzQxYzgiLCJleHAiOjE2OTc4NzIxMjEsIm5iZiI6MCwiaWF0IjoxNjk3ODM2MTM0LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNjg4NzhhZjctNjg0NS00NmMwLWIyYzEtMjUwZDRkOGViNDcwIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjVkMmY0Nzk3LTE5NGYtNDM0Yi1hYmJmLTZiZjU4OGJlNDE2ZCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiTWFya3VzIFNjaGVpZGdlbiIsInByZWZlcnJlZF91c2VybmFtZSI6InRlc3QiLCJnaXZlbl9uYW1lIjoiTWFya3VzIiwiZmFtaWx5X25hbWUiOiJTY2hlaWRnZW4iLCJlbWFpbCI6Im1hcmt1cy5zY2hlaWRnZW5AZmhpLWJlcmxpbi5kZSJ9.cxUkEdOZcRBiu3oVzE2g3PS3j-YeBDYP-A2wtPMuoreeb6rDLrRSn6tGf_fOxTO0rsATPsdxCXv5u0Vmfg4WGSne1zqDFic9tkqZnA9YjvwTNf6ck5xVv6YqVgPKcmrtvqc1u7xlST5HUnnjceynJaH0AFE7BlTnXgqNKZpOnrOVt6Ku_ri6aHHrMCuCvTODRYzAyHAG5gdORxEmvYT6HyOWNEliU2lSXPKIy1955fDdSyCpzNyaKj9DCd6iMNt2ceQNmpUGH8f8CNs5-ULURnovG2vDLFzdPWT1zK-vEbyVRkmSL05GTIbAaCQGufRqtOcEQeL8wRvbv8gANBg5Pw", "cookie": null } }, @@ -36,6 +36,8 @@ "data.processes.pvd_evaporation.chamber_pressure", "data.processes.pvd_evaporation.data_file", "data.processes.pvd_evaporation.datetime", + "data.processes.pvd_evaporation.figures", + "data.processes.pvd_evaporation.figures.figure", "data.processes.pvd_evaporation.fill_archive_from_datafile", "data.processes.pvd_evaporation.substrate_temperature", "data.processes.pvd_evaporation.time", @@ -89,34 +91,34 @@ "results.properties" ], "datasets": [], - "n_quantities": 59, - "nomad_version": "1.2.0rc1.dev181+gce78efe22.d20230609", - "upload_create_time": "2023-06-22T09:35:59.826000+00:00", + "n_quantities": 65, + "nomad_version": "1.2.2.dev85+g6f47bb0a0", + "upload_create_time": "2023-10-20T21:08:49.528000+00:00", "nomad_commit": "", "section_defs": [ { "used_directly": true, - "definition_id": "88f0ccdc3585c154e0d1b67cf28b734e69a0791b", + "definition_id": "7e0331d2df29682413535f00d4aad156783fee2e", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Process" }, { "used_directly": true, - "definition_id": "61cee898fcd24be5040ffc76163cd645f26c9ff8", + "definition_id": "030133d881170f0d9e31da6086ed5641f0c4403c", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample" }, { "used_directly": true, - "definition_id": "b82ee685f3b0fd55329dbafada317987feac3051", + "definition_id": "f0086b987424b1001666c6f5df9ad1071164a27e", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes" }, { "used_directly": true, - "definition_id": "1341c9d51198599e0cf17a12d00694469e6fce8f", + "definition_id": "d39f4397900226398e6c17eb00467e874e5955c4", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes.HotplateAnnealing" }, { "used_directly": true, - "definition_id": "fdd23ea5c11d32f9b780e5e5b0f6349712bafe6e", + "definition_id": "c640c9585e8d4549f248582763427a7dd7c417a0", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes.PvdEvaporation" }, { @@ -131,7 +133,7 @@ }, { "used_directly": true, - "definition_id": "9e36824ae135f1e5ee5485911cb5fc03bc47af1d", + "definition_id": "1a38309e86abd87e7ef9ff7aa89560cf22ab111e", "definition_qualified_name": "nomad.datamodel.datamodel.EntryArchive" }, { @@ -146,7 +148,7 @@ }, { "used_directly": false, - "definition_id": "870f59b3b42ceab01a604bddc86c39b90a897366", + "definition_id": "fc2735d177bf36f9718ca66a764a56fc0c6200a0", "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Activity" }, { @@ -154,25 +156,40 @@ "definition_id": "add2edfa25a61ff3bbfdebacc870181f64f41634", "definition_qualified_name": "nomad.datamodel.metainfo.basesections.BaseSection" }, + { + "used_directly": true, + "definition_id": "c7254c9b461a4baec86cb3179e2f84513f5c9053", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.CompositeSystem" + }, { "used_directly": false, - "definition_id": "af4b2af6fde599256cf9d75c51958a41b3245b25", - "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Process" + "definition_id": "7ce6bdcaa183a9685582b275e1c2b2ea3139c74d", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Entity" }, { "used_directly": false, - "definition_id": "f05adb2ccbe04cbeced6213c4b6bd8f78e3d4ead", - "definition_qualified_name": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "definition_id": "8d81e1f95c60f39a6a8c9f954143a55e6f4c984c", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Process" }, { "used_directly": false, - "definition_id": "ada854aefd11fd40e6c161fe2d9207a7bb104052", - "definition_qualified_name": "nomad.datamodel.metainfo.eln.ElnWithFormulaBaseSection" + "definition_id": "3ab3a09d615ab58aefbaa3acdd8d6af4e73aaae5", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.System" + }, + { + "used_directly": true, + "definition_id": "55ef08f33dcf9fb374aea217458bd34a23bec57b", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.Figure" + }, + { + "used_directly": true, + "definition_id": "7bb17e35ed91dca88bf6238fc51ed212693593d0", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.PlotSection" }, { "used_directly": true, - "definition_id": "a830a6d8c03f2a0baa0203e07efcbbd54328daaa", - "definition_qualified_name": "nomad.datamodel.metainfo.eln.Sample" + "definition_id": "491cdc3c5ea21cdc576275a5c1e600cdaa4256c1", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.PlotlyFigure" }, { "used_directly": true, @@ -181,12 +198,12 @@ }, { "used_directly": true, - "definition_id": "9fcaeef3034c9b3861ab45bcea5014c65ffb3da2", + "definition_id": "43288046582240d7a33ec8b5fe4ca86988c2378c", "definition_qualified_name": "nomad.datamodel.results.Properties" }, { "used_directly": true, - "definition_id": "1ee9d4d17197a78dcfa5f1814b1ff3e2b275c195", + "definition_id": "ba0a320c9aa599c7c4a0af8c545f3cfe76cc4e70", "definition_qualified_name": "nomad.datamodel.results.Results" }, { @@ -225,7 +242,7 @@ } }, "entry_name": "ELN example sample", - "last_processing_time": "2023-06-22T09:36:00.317000+00:00", + "last_processing_time": "2023-10-20T21:08:49.893000+00:00", "parser_name": "parsers/archive", "searchable_quantities": [ { @@ -238,13 +255,13 @@ "text_value": "001", "path": "data.lab_id", "quantity_name": "lab_id", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection" }, { "text_value": "<p>A simple example for an \"sample\" that demonstrates how to combine different data entities.</p>\n<p>The sample it-self defines a few properties (involved chemicals, used substrate) and uses inherited default properties (formula, name, lab id, ...)</p>\n<p>But the sample also contains sub-sections that prodivde inforamtion about proccessed that were applied to this sample (PVD evaporation, hotplate annealing). </p>\n<p>The sample also show references to other entries (chemicals, instruments).</p>\n<p> </p>", "path": "data.description", "quantity_name": "description", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection" }, { "path": "data.substrate_type", @@ -284,9 +301,9 @@ }, { "path": "data.datetime", - "date_value": "2023-06-22T11:36:00.420237+00:00", + "date_value": "2023-10-20T23:08:49.949982+00:00", "quantity_name": "datetime", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection" } ], "calc_id": "bC7byHvWJp62Sn9uiuJUB38MT5j-", @@ -309,6 +326,7 @@ "nomad.datamodel.datamodel.EntryArchive", "nomad.datamodel.datamodel.EntryMetadata", "nomad.datamodel.datamodel.RFC3161Timestamp", + "nomad.datamodel.metainfo.plot.PlotlyFigure", "nomad.datamodel.results.ELN", "nomad.datamodel.results.Properties", "nomad.datamodel.results.Results" @@ -333,7 +351,7 @@ "name": "Test Tester" } ], - "entry_create_time": "2023-06-22T09:35:59.945000+00:00", + "entry_create_time": "2023-10-20T21:08:49.604000+00:00", "with_embargo": false, "files": [ "sample.archive.json", @@ -356,8 +374,9 @@ } }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "12998", + "content-length": "13756", "content-type": "application/json", "server": "uvicorn" } @@ -370,7 +389,7 @@ "body": "", "headers": { "accept": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiJjMGRmNDEwMS0zMGYwLTRhMDktOTEwZi04ZWMwOGUxODIzYjAiLCJleHAiOjE2ODc0NjI1NTIsIm5iZiI6MCwiaWF0IjoxNjg3NDI2NTY1LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNjg4NzhhZjctNjg0NS00NmMwLWIyYzEtMjUwZDRkOGViNDcwIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImViMDU3NmExLTU0Y2ItNDQ3ZC04MjNlLTMxYTQ1ZDRkNGMyMiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoibWFya3VzIFNjaGVpZGdlbiIsInByZWZlcnJlZF91c2VybmFtZSI6InRlc3QiLCJnaXZlbl9uYW1lIjoibWFya3VzIiwiZmFtaWx5X25hbWUiOiJTY2hlaWRnZW4iLCJlbWFpbCI6Im1hcmt1cy5zY2hlaWRnZW5AZmhpLWJlcmxpbi5kZSJ9.IomuGvnFhfqs5fgJEDGEIUcVCY2BtRLe_Wxe-GB8cKWsunfnswf4nHC2a8EC_VI6HAFaZsEtZVHGXMMZCyOSJrr8Ir2z5m19_tH9W23ZmbGkUsNr6TI0fLwPCG6Z2OeLUZ_9aQzC8D4W2JX5XbUhoHffN5IaQrSrgu9jxMuB7L9QvJw6eeeInBJfSy5y35w_FmGJVtPjjaeE_ROmpkZyCjebsVNy1DepZeNSORFyJjnpwdTr0sVDSNkFjLhlt0WouaGxoSna6s_ea1A2PXF9zRp5dk-7uE-ArNtenZa2tzA-JjFEXG3m3jYU2gODUmm-lIVcsRMyLxdYWLumCnyi2Q", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiI4YTViZDEyMi00NmE4LTRiMTUtYmYzNi0zN2U2NjA2NzQxYzgiLCJleHAiOjE2OTc4NzIxMjEsIm5iZiI6MCwiaWF0IjoxNjk3ODM2MTM0LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNjg4NzhhZjctNjg0NS00NmMwLWIyYzEtMjUwZDRkOGViNDcwIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjVkMmY0Nzk3LTE5NGYtNDM0Yi1hYmJmLTZiZjU4OGJlNDE2ZCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiTWFya3VzIFNjaGVpZGdlbiIsInByZWZlcnJlZF91c2VybmFtZSI6InRlc3QiLCJnaXZlbl9uYW1lIjoiTWFya3VzIiwiZmFtaWx5X25hbWUiOiJTY2hlaWRnZW4iLCJlbWFpbCI6Im1hcmt1cy5zY2hlaWRnZW5AZmhpLWJlcmxpbi5kZSJ9.cxUkEdOZcRBiu3oVzE2g3PS3j-YeBDYP-A2wtPMuoreeb6rDLrRSn6tGf_fOxTO0rsATPsdxCXv5u0Vmfg4WGSne1zqDFic9tkqZnA9YjvwTNf6ck5xVv6YqVgPKcmrtvqc1u7xlST5HUnnjceynJaH0AFE7BlTnXgqNKZpOnrOVt6Ku_ri6aHHrMCuCvTODRYzAyHAG5gdORxEmvYT6HyOWNEliU2lSXPKIy1955fDdSyCpzNyaKj9DCd6iMNt2ceQNmpUGH8f8CNs5-ULURnovG2vDLFzdPWT1zK-vEbyVRkmSL05GTIbAaCQGufRqtOcEQeL8wRvbv8gANBg5Pw", "cookie": null } }, @@ -399,6 +418,8 @@ "data.processes.pvd_evaporation.chamber_pressure", "data.processes.pvd_evaporation.data_file", "data.processes.pvd_evaporation.datetime", + "data.processes.pvd_evaporation.figures", + "data.processes.pvd_evaporation.figures.figure", "data.processes.pvd_evaporation.fill_archive_from_datafile", "data.processes.pvd_evaporation.substrate_temperature", "data.processes.pvd_evaporation.time", @@ -452,34 +473,34 @@ "results.properties" ], "datasets": [], - "n_quantities": 59, - "nomad_version": "1.2.0rc1.dev181+gce78efe22.d20230609", - "upload_create_time": "2023-06-22T09:35:59.826000+00:00", + "n_quantities": 65, + "nomad_version": "1.2.2.dev85+g6f47bb0a0", + "upload_create_time": "2023-10-20T21:08:49.528000+00:00", "nomad_commit": "", "section_defs": [ { "used_directly": true, - "definition_id": "88f0ccdc3585c154e0d1b67cf28b734e69a0791b", + "definition_id": "7e0331d2df29682413535f00d4aad156783fee2e", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Process" }, { "used_directly": true, - "definition_id": "61cee898fcd24be5040ffc76163cd645f26c9ff8", + "definition_id": "030133d881170f0d9e31da6086ed5641f0c4403c", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample" }, { "used_directly": true, - "definition_id": "b82ee685f3b0fd55329dbafada317987feac3051", + "definition_id": "f0086b987424b1001666c6f5df9ad1071164a27e", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes" }, { "used_directly": true, - "definition_id": "1341c9d51198599e0cf17a12d00694469e6fce8f", + "definition_id": "d39f4397900226398e6c17eb00467e874e5955c4", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes.HotplateAnnealing" }, { "used_directly": true, - "definition_id": "fdd23ea5c11d32f9b780e5e5b0f6349712bafe6e", + "definition_id": "c640c9585e8d4549f248582763427a7dd7c417a0", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes.PvdEvaporation" }, { @@ -494,7 +515,7 @@ }, { "used_directly": true, - "definition_id": "9e36824ae135f1e5ee5485911cb5fc03bc47af1d", + "definition_id": "1a38309e86abd87e7ef9ff7aa89560cf22ab111e", "definition_qualified_name": "nomad.datamodel.datamodel.EntryArchive" }, { @@ -509,7 +530,7 @@ }, { "used_directly": false, - "definition_id": "870f59b3b42ceab01a604bddc86c39b90a897366", + "definition_id": "fc2735d177bf36f9718ca66a764a56fc0c6200a0", "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Activity" }, { @@ -517,25 +538,40 @@ "definition_id": "add2edfa25a61ff3bbfdebacc870181f64f41634", "definition_qualified_name": "nomad.datamodel.metainfo.basesections.BaseSection" }, + { + "used_directly": true, + "definition_id": "c7254c9b461a4baec86cb3179e2f84513f5c9053", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.CompositeSystem" + }, { "used_directly": false, - "definition_id": "af4b2af6fde599256cf9d75c51958a41b3245b25", - "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Process" + "definition_id": "7ce6bdcaa183a9685582b275e1c2b2ea3139c74d", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Entity" }, { "used_directly": false, - "definition_id": "f05adb2ccbe04cbeced6213c4b6bd8f78e3d4ead", - "definition_qualified_name": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "definition_id": "8d81e1f95c60f39a6a8c9f954143a55e6f4c984c", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Process" }, { "used_directly": false, - "definition_id": "ada854aefd11fd40e6c161fe2d9207a7bb104052", - "definition_qualified_name": "nomad.datamodel.metainfo.eln.ElnWithFormulaBaseSection" + "definition_id": "3ab3a09d615ab58aefbaa3acdd8d6af4e73aaae5", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.System" + }, + { + "used_directly": true, + "definition_id": "55ef08f33dcf9fb374aea217458bd34a23bec57b", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.Figure" + }, + { + "used_directly": true, + "definition_id": "7bb17e35ed91dca88bf6238fc51ed212693593d0", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.PlotSection" }, { "used_directly": true, - "definition_id": "a830a6d8c03f2a0baa0203e07efcbbd54328daaa", - "definition_qualified_name": "nomad.datamodel.metainfo.eln.Sample" + "definition_id": "491cdc3c5ea21cdc576275a5c1e600cdaa4256c1", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.PlotlyFigure" }, { "used_directly": true, @@ -544,12 +580,12 @@ }, { "used_directly": true, - "definition_id": "9fcaeef3034c9b3861ab45bcea5014c65ffb3da2", + "definition_id": "43288046582240d7a33ec8b5fe4ca86988c2378c", "definition_qualified_name": "nomad.datamodel.results.Properties" }, { "used_directly": true, - "definition_id": "1ee9d4d17197a78dcfa5f1814b1ff3e2b275c195", + "definition_id": "ba0a320c9aa599c7c4a0af8c545f3cfe76cc4e70", "definition_qualified_name": "nomad.datamodel.results.Results" }, { @@ -588,7 +624,7 @@ } }, "entry_name": "ELN example sample", - "last_processing_time": "2023-06-22T09:36:00.317000+00:00", + "last_processing_time": "2023-10-20T21:08:49.893000+00:00", "parser_name": "parsers/archive", "searchable_quantities": [ { @@ -601,13 +637,13 @@ "text_value": "001", "path": "data.lab_id", "quantity_name": "lab_id", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection" }, { "text_value": "<p>A simple example for an \"sample\" that demonstrates how to combine different data entities.</p>\n<p>The sample it-self defines a few properties (involved chemicals, used substrate) and uses inherited default properties (formula, name, lab id, ...)</p>\n<p>But the sample also contains sub-sections that prodivde inforamtion about proccessed that were applied to this sample (PVD evaporation, hotplate annealing). </p>\n<p>The sample also show references to other entries (chemicals, instruments).</p>\n<p> </p>", "path": "data.description", "quantity_name": "description", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection" }, { "path": "data.substrate_type", @@ -647,9 +683,9 @@ }, { "path": "data.datetime", - "date_value": "2023-06-22T11:36:00.420237+00:00", + "date_value": "2023-10-20T23:08:49.949982+00:00", "quantity_name": "datetime", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection" } ], "calc_id": "bC7byHvWJp62Sn9uiuJUB38MT5j-", @@ -672,6 +708,7 @@ "nomad.datamodel.datamodel.EntryArchive", "nomad.datamodel.datamodel.EntryMetadata", "nomad.datamodel.datamodel.RFC3161Timestamp", + "nomad.datamodel.metainfo.plot.PlotlyFigure", "nomad.datamodel.results.ELN", "nomad.datamodel.results.Properties", "nomad.datamodel.results.Results" @@ -696,7 +733,7 @@ "name": "Test Tester" } ], - "entry_create_time": "2023-06-22T09:35:59.945000+00:00", + "entry_create_time": "2023-10-20T21:08:49.604000+00:00", "with_embargo": false, "files": [ "sample.archive.json", @@ -719,8 +756,9 @@ } }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "12998", + "content-length": "13756", "content-type": "application/json", "server": "uvicorn" } @@ -733,7 +771,7 @@ "body": "", "headers": { "accept": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiJjMjY1NTcxNC0yYWI2LTQ1OWItYWEwZi0yYTgyMDVlYTNhMmEiLCJleHAiOjE2ODc0NjI1NTIsIm5iZiI6MCwiaWF0IjoxNjg3NDI2NTY4LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNjg4NzhhZjctNjg0NS00NmMwLWIyYzEtMjUwZDRkOGViNDcwIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImViMDU3NmExLTU0Y2ItNDQ3ZC04MjNlLTMxYTQ1ZDRkNGMyMiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoibWFya3VzIFNjaGVpZGdlbiIsInByZWZlcnJlZF91c2VybmFtZSI6InRlc3QiLCJnaXZlbl9uYW1lIjoibWFya3VzIiwiZmFtaWx5X25hbWUiOiJTY2hlaWRnZW4iLCJlbWFpbCI6Im1hcmt1cy5zY2hlaWRnZW5AZmhpLWJlcmxpbi5kZSJ9.YWKCuNzxv0AudW0yUfzS8YTaOYxZ5xp620GHIMXkETrC7qzTZM4CtnvdzPbX64S2iEdEVXezf8CXBho2lgY1jZM1HQD9_sF-yznZos-SgonlFGO_4_Ck7icFbU3-RzYo1MDG49lYW27PZmnTCOvx81kHYKVG9Ud4yvM9CPKiSZBncwqc_s2BW47SPHXAUF9gyXNhiuc81wCpph_EVXyjhPqcGs895DVlJki9G1RGGarkfJkkPEzM8KNb-RPebiMw038fOgwfl4MtO106lzjuv-Qvybi0asmD5uXXdw93kacrIYKqEyyU6-UQV_eIU3bV1j7sAvJXV3rjhesvnsW7FA", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiIxM2E1ZjVlNS1kM2QzLTQ1MjctYTU2MS1iZDY3MzFkMmU5OTUiLCJleHAiOjE2OTc4NzIxMjEsIm5iZiI6MCwiaWF0IjoxNjk3ODM2MTM3LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNjg4NzhhZjctNjg0NS00NmMwLWIyYzEtMjUwZDRkOGViNDcwIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjVkMmY0Nzk3LTE5NGYtNDM0Yi1hYmJmLTZiZjU4OGJlNDE2ZCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiTWFya3VzIFNjaGVpZGdlbiIsInByZWZlcnJlZF91c2VybmFtZSI6InRlc3QiLCJnaXZlbl9uYW1lIjoiTWFya3VzIiwiZmFtaWx5X25hbWUiOiJTY2hlaWRnZW4iLCJlbWFpbCI6Im1hcmt1cy5zY2hlaWRnZW5AZmhpLWJlcmxpbi5kZSJ9.hCAUxKViFqiykm2OO7HHkMU-nAjL0Ss-3m_3KMKHbO05YfM4n_QHgmgZe594kfnvnHeXxdvq7ndRVYlA5MXSQ0gO4DVou47Do22gB6PMqdVsRMk58Pv_4MvDEqOJ0PM98LyP2tfb8kROpOfAHDkyeSqYuvTbHdztq1796JKbAV6rzFHAOU0DFevm2dw6Cnu1GNt5TgFIfz7CgfcoGRr9JhWNIRuii3_e5CKGjASouHE1F065tZxZh9WY72ijvYKykQ9dApnD9Hk0EHStLpeRXtNopDHPITJ20mNGhhXZfO6zESEe7wu0Y6prrrPPfL2yFuwUGPyf2eq6RyiOl-XCcw", "cookie": null } }, @@ -762,6 +800,8 @@ "data.processes.pvd_evaporation.chamber_pressure", "data.processes.pvd_evaporation.data_file", "data.processes.pvd_evaporation.datetime", + "data.processes.pvd_evaporation.figures", + "data.processes.pvd_evaporation.figures.figure", "data.processes.pvd_evaporation.fill_archive_from_datafile", "data.processes.pvd_evaporation.substrate_temperature", "data.processes.pvd_evaporation.time", @@ -815,34 +855,34 @@ "results.properties" ], "datasets": [], - "n_quantities": 59, - "nomad_version": "1.2.0rc1.dev181+gce78efe22.d20230609", - "upload_create_time": "2023-06-22T09:35:59.826000+00:00", + "n_quantities": 65, + "nomad_version": "1.2.2.dev85+g6f47bb0a0", + "upload_create_time": "2023-10-20T21:08:49.528000+00:00", "nomad_commit": "", "section_defs": [ { "used_directly": true, - "definition_id": "88f0ccdc3585c154e0d1b67cf28b734e69a0791b", + "definition_id": "7e0331d2df29682413535f00d4aad156783fee2e", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Process" }, { "used_directly": true, - "definition_id": "61cee898fcd24be5040ffc76163cd645f26c9ff8", + "definition_id": "030133d881170f0d9e31da6086ed5641f0c4403c", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample" }, { "used_directly": true, - "definition_id": "b82ee685f3b0fd55329dbafada317987feac3051", + "definition_id": "f0086b987424b1001666c6f5df9ad1071164a27e", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes" }, { "used_directly": true, - "definition_id": "1341c9d51198599e0cf17a12d00694469e6fce8f", + "definition_id": "d39f4397900226398e6c17eb00467e874e5955c4", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes.HotplateAnnealing" }, { "used_directly": true, - "definition_id": "fdd23ea5c11d32f9b780e5e5b0f6349712bafe6e", + "definition_id": "c640c9585e8d4549f248582763427a7dd7c417a0", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes.PvdEvaporation" }, { @@ -857,7 +897,7 @@ }, { "used_directly": true, - "definition_id": "9e36824ae135f1e5ee5485911cb5fc03bc47af1d", + "definition_id": "1a38309e86abd87e7ef9ff7aa89560cf22ab111e", "definition_qualified_name": "nomad.datamodel.datamodel.EntryArchive" }, { @@ -872,7 +912,7 @@ }, { "used_directly": false, - "definition_id": "870f59b3b42ceab01a604bddc86c39b90a897366", + "definition_id": "fc2735d177bf36f9718ca66a764a56fc0c6200a0", "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Activity" }, { @@ -880,25 +920,40 @@ "definition_id": "add2edfa25a61ff3bbfdebacc870181f64f41634", "definition_qualified_name": "nomad.datamodel.metainfo.basesections.BaseSection" }, + { + "used_directly": true, + "definition_id": "c7254c9b461a4baec86cb3179e2f84513f5c9053", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.CompositeSystem" + }, { "used_directly": false, - "definition_id": "af4b2af6fde599256cf9d75c51958a41b3245b25", - "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Process" + "definition_id": "7ce6bdcaa183a9685582b275e1c2b2ea3139c74d", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Entity" }, { "used_directly": false, - "definition_id": "f05adb2ccbe04cbeced6213c4b6bd8f78e3d4ead", - "definition_qualified_name": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "definition_id": "8d81e1f95c60f39a6a8c9f954143a55e6f4c984c", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Process" }, { "used_directly": false, - "definition_id": "ada854aefd11fd40e6c161fe2d9207a7bb104052", - "definition_qualified_name": "nomad.datamodel.metainfo.eln.ElnWithFormulaBaseSection" + "definition_id": "3ab3a09d615ab58aefbaa3acdd8d6af4e73aaae5", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.System" }, { "used_directly": true, - "definition_id": "a830a6d8c03f2a0baa0203e07efcbbd54328daaa", - "definition_qualified_name": "nomad.datamodel.metainfo.eln.Sample" + "definition_id": "55ef08f33dcf9fb374aea217458bd34a23bec57b", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.Figure" + }, + { + "used_directly": true, + "definition_id": "7bb17e35ed91dca88bf6238fc51ed212693593d0", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.PlotSection" + }, + { + "used_directly": true, + "definition_id": "491cdc3c5ea21cdc576275a5c1e600cdaa4256c1", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.PlotlyFigure" }, { "used_directly": true, @@ -907,12 +962,12 @@ }, { "used_directly": true, - "definition_id": "9fcaeef3034c9b3861ab45bcea5014c65ffb3da2", + "definition_id": "43288046582240d7a33ec8b5fe4ca86988c2378c", "definition_qualified_name": "nomad.datamodel.results.Properties" }, { "used_directly": true, - "definition_id": "1ee9d4d17197a78dcfa5f1814b1ff3e2b275c195", + "definition_id": "ba0a320c9aa599c7c4a0af8c545f3cfe76cc4e70", "definition_qualified_name": "nomad.datamodel.results.Results" }, { @@ -951,7 +1006,7 @@ } }, "entry_name": "ELN example sample", - "last_processing_time": "2023-06-22T09:36:00.317000+00:00", + "last_processing_time": "2023-10-20T21:08:49.893000+00:00", "parser_name": "parsers/archive", "searchable_quantities": [ { @@ -964,13 +1019,13 @@ "text_value": "001", "path": "data.lab_id", "quantity_name": "lab_id", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection" }, { "text_value": "<p>A simple example for an \"sample\" that demonstrates how to combine different data entities.</p>\n<p>The sample it-self defines a few properties (involved chemicals, used substrate) and uses inherited default properties (formula, name, lab id, ...)</p>\n<p>But the sample also contains sub-sections that prodivde inforamtion about proccessed that were applied to this sample (PVD evaporation, hotplate annealing). </p>\n<p>The sample also show references to other entries (chemicals, instruments).</p>\n<p> </p>", "path": "data.description", "quantity_name": "description", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection" }, { "path": "data.substrate_type", @@ -1010,9 +1065,9 @@ }, { "path": "data.datetime", - "date_value": "2023-06-22T11:36:00.420237+00:00", + "date_value": "2023-10-20T23:08:49.949982+00:00", "quantity_name": "datetime", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection" } ], "calc_id": "bC7byHvWJp62Sn9uiuJUB38MT5j-", @@ -1035,6 +1090,7 @@ "nomad.datamodel.datamodel.EntryArchive", "nomad.datamodel.datamodel.EntryMetadata", "nomad.datamodel.datamodel.RFC3161Timestamp", + "nomad.datamodel.metainfo.plot.PlotlyFigure", "nomad.datamodel.results.ELN", "nomad.datamodel.results.Properties", "nomad.datamodel.results.Results" @@ -1059,7 +1115,7 @@ "name": "Test Tester" } ], - "entry_create_time": "2023-06-22T09:35:59.945000+00:00", + "entry_create_time": "2023-10-20T21:08:49.604000+00:00", "with_embargo": false, "files": [ "sample.archive.json", @@ -1082,63 +1138,9 @@ } }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "12998", - "content-type": "application/json", - "server": "uvicorn" - } - } - } - ], - "afa783d98e040c74b68e5cfd3d82f3f0": [ - { - "request": { - "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/query", - "method": "POST", - "body": { - "required": { - "metadata": "*" - }, - "owner": "visible", - "pagination": { - "order_by": "upload_create_time", - "order": "desc", - "page_size": 20 - }, - "query": { - "entry_references.target_entry_id": "bC7byHvWJp62Sn9uiuJUB38MT5j-" - } - }, - "headers": { - "accept": "application/json, text/plain, */*", - "content-type": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiI2MjBiOTUxNS1jMmVlLTRlYTMtOWYwNi1iODFlMjY5OTFmMGMiLCJleHAiOjE2ODc0NjI1NTIsIm5iZiI6MCwiaWF0IjoxNjg3NDI2NTY2LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNjg4NzhhZjctNjg0NS00NmMwLWIyYzEtMjUwZDRkOGViNDcwIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImViMDU3NmExLTU0Y2ItNDQ3ZC04MjNlLTMxYTQ1ZDRkNGMyMiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoibWFya3VzIFNjaGVpZGdlbiIsInByZWZlcnJlZF91c2VybmFtZSI6InRlc3QiLCJnaXZlbl9uYW1lIjoibWFya3VzIiwiZmFtaWx5X25hbWUiOiJTY2hlaWRnZW4iLCJlbWFpbCI6Im1hcmt1cy5zY2hlaWRnZW5AZmhpLWJlcmxpbi5kZSJ9.KVDbjspPAb4b2PwXSNk0u-atl-8fsGpqI4vQlZhiYkzHhQ3JMm6_3UEb2ggnN-RhjgtzMP282oH5fDy9g1GFgxRaN0_DF-1szSeh773woMFhg32yD0AEP35GoleOUFEfLxqYRwOv4DzOcx8DZ-qf1Dd2tAmSZnY0x4BCzZTCgOUS0qKXOz6HIQ6-fFwEY7qdIhYfkkqWhRNwShi6x4eMNTmtuCXKcI_Mkv6lV5G_suAQC6SzneAElaSUhjcJn4NTwM8w9g43fWnLWQRkd_pYjwEZPD-dnhdyVLBacapzVp3P81HN9QVF9bRVD9mUCFZvQKTTxLo0TqM1Uiz_DMgfOw", - "cookie": null - } - }, - "response": { - "status": 200, - "body": { - "owner": "visible", - "query": { - "prefix": "entry_references", - "query": { - "name": "target_entry_id", - "value": "bC7byHvWJp62Sn9uiuJUB38MT5j-" - } - }, - "pagination": { - "page_size": 20, - "order_by": "upload_create_time", - "order": "desc", - "total": 0 - }, - "required": {}, - "data": [] - }, - "headers": { - "connection": "close", - "content-length": "326", + "content-length": "13756", "content-type": "application/json", "server": "uvicorn" } @@ -1170,7 +1172,7 @@ "band_gap": "*" }, "mechanical": "include-resolved", - "spectroscopy": "include-resolved", + "spectroscopic": "include-resolved", "vibrational": "include-resolved", "thermodynamic": "include-resolved", "geometry_optimization": { @@ -1184,7 +1186,7 @@ "headers": { "accept": "application/json", "content-type": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiJjOTFiOTAyYy1iZWI5LTQ5NDgtYTM2OC1hMjMyM2FlNmE0ZWIiLCJleHAiOjE2ODc0NjI1NTIsIm5iZiI6MCwiaWF0IjoxNjg3NDI2NTY1LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNjg4NzhhZjctNjg0NS00NmMwLWIyYzEtMjUwZDRkOGViNDcwIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImViMDU3NmExLTU0Y2ItNDQ3ZC04MjNlLTMxYTQ1ZDRkNGMyMiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoibWFya3VzIFNjaGVpZGdlbiIsInByZWZlcnJlZF91c2VybmFtZSI6InRlc3QiLCJnaXZlbl9uYW1lIjoibWFya3VzIiwiZmFtaWx5X25hbWUiOiJTY2hlaWRnZW4iLCJlbWFpbCI6Im1hcmt1cy5zY2hlaWRnZW5AZmhpLWJlcmxpbi5kZSJ9.FowPbg4dZ7ZBDpoFunMgl53J0-uIScnKeHnjTgnKFGxk5tNU1Th0FMrJf6N9mk-tdBVdqaxEJ379Y5BhmGVWKf_-DLmyhg8kzp5y0ua_7ej1UCY6TYUYA2gf7QUGHEGHV3jPhZ_OhHnOM-1SULZXf6i6w7i_Wvoyw3RVF3MIlT4jpLM5lad-S947GMi1sDHEF_I2Bw5Tj4rGRkWOR2ApUvyEcNY9kvesmI3d-D4W8CLQGtV-pZ2NRMc1u5nYhqBDuvIE3WqI8YrGXhVCfwoRiSCF3M2Va4gdU0W9ZaFf7F_zvcW4gOWeU-0hVUQXvo4pDUDMUfkYcFGFWLyP6ooBkQ", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiI4ZmVlM2MyNC1lNjJhLTQ5NDMtYTQzNC1iMjJiNjk5ZjY4NDkiLCJleHAiOjE2OTc4NzIxMjEsIm5iZiI6MCwiaWF0IjoxNjk3ODM2MTM1LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNjg4NzhhZjctNjg0NS00NmMwLWIyYzEtMjUwZDRkOGViNDcwIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjVkMmY0Nzk3LTE5NGYtNDM0Yi1hYmJmLTZiZjU4OGJlNDE2ZCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiTWFya3VzIFNjaGVpZGdlbiIsInByZWZlcnJlZF91c2VybmFtZSI6InRlc3QiLCJnaXZlbl9uYW1lIjoiTWFya3VzIiwiZmFtaWx5X25hbWUiOiJTY2hlaWRnZW4iLCJlbWFpbCI6Im1hcmt1cy5zY2hlaWRnZW5AZmhpLWJlcmxpbi5kZSJ9.YswUJHC-hRlT_bKSvWJxQ_euuyAaz1sfqyZJv4_624DaE9xU4mAh4W-Ieo0z57kn4DPp2c0ky_RFFem301ch7DIC629ZUoC6jGV8fdXrGp_puJHH4s0YEJyqFLUO5ZX154Ntm3wp9O6y5ay9ESOW0uum7KMJcUdZ1zvYhHEgYDoVyEgVSvLtG-vrosio0-AzHdHCsso5X8dRqaGEY1wTkK2a4HwD7y0vRwNETUWIRA0oyKQHXyklkoQ3mLYh-b_tini0uJ95Kq-OP6Se1I3DG7xFlwY8h7nGZq7JFUiFEJrS5Fldtb4PvUHOLLrUaukFnIryNJjOUDTXsGtllkYAOQ", "cookie": null } }, @@ -1210,7 +1212,7 @@ "band_gap": "*" }, "mechanical": "include-resolved", - "spectroscopy": "include-resolved", + "spectroscopic": "include-resolved", "vibrational": "include-resolved", "thermodynamic": "include-resolved", "geometry_optimization": { @@ -1228,12 +1230,12 @@ "archive": { "metadata": { "upload_id": "eln_upload_id", - "upload_create_time": "2023-06-22T09:35:59.826000+00:00", + "upload_create_time": "2023-10-20T21:08:49.528000+00:00", "entry_id": "bC7byHvWJp62Sn9uiuJUB38MT5j-", "entry_name": "ELN example sample", "entry_type": "Sample", - "entry_hash": "IJhNf0P3rAOk-Hl8HpTHMQlEv1jt", - "entry_create_time": "2023-06-22T09:35:59.945000+00:00", + "entry_hash": "y0C2H_I6f9gmZ_S6RNlk_v9P_Clg", + "entry_create_time": "2023-10-20T21:08:49.604000+00:00", "parser_name": "parsers/archive", "mainfile": "sample.archive.json", "files": [ @@ -1246,9 +1248,9 @@ "embargo_length": 0, "license": "CC BY 4.0", "processed": true, - "last_processing_time": "2023-06-22T09:36:00.317236+00:00", + "last_processing_time": "2023-10-20T21:08:49.893840+00:00", "processing_errors": [], - "nomad_version": "1.2.0rc1.dev181+gce78efe22.d20230609", + "nomad_version": "1.2.2.dev85+g6f47bb0a0", "nomad_commit": "", "references": [], "main_author": "68878af7-6845-46c0-b2c1-250d4d8eb470", @@ -1260,7 +1262,7 @@ "54cb1f64-f84e-4815-9ade-440ce0b5430f" ], "datasets": [], - "n_quantities": 59, + "n_quantities": 65, "quantities": [ "", "data", @@ -1277,6 +1279,8 @@ "data.processes.pvd_evaporation.chamber_pressure", "data.processes.pvd_evaporation.data_file", "data.processes.pvd_evaporation.datetime", + "data.processes.pvd_evaporation.figures", + "data.processes.pvd_evaporation.figures.figure", "data.processes.pvd_evaporation.fill_archive_from_datafile", "data.processes.pvd_evaporation.substrate_temperature", "data.processes.pvd_evaporation.time", @@ -1337,40 +1341,41 @@ "nomad.datamodel.datamodel.EntryArchive", "nomad.datamodel.datamodel.EntryMetadata", "nomad.datamodel.datamodel.RFC3161Timestamp", + "nomad.datamodel.metainfo.plot.PlotlyFigure", "nomad.datamodel.results.ELN", "nomad.datamodel.results.Properties", "nomad.datamodel.results.Results" ], "entry_timestamp": { - "token_seed": "IJhNf0P3rAOk-Hl8HpTHMQlEv1jt", - "token": "MIIYDQYJKoZIhvcNAQcCoIIX/jCCF/oCAQMxDTALBglghkgBZQMEAgIwgcwGCyqGSIb3DQEJEAEEoIG8BIG5MIG2AgEBBgsqhGgBhvZ3AgUBCzAvMAsGCWCGSAFlAwQCAQQgllBuEy/QmmRCOSqul92agyRnwGZaILVVVeHXh47TWvYCBwqofCa7XekYDzIwMjMwNjIyMDkzNjAwWjADAgEBoFSkUjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjKgghMiMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0BAQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAMZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK/9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWajXfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKzHtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO/tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3XmfeR+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAWgBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgwJjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUFBwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhLmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTCMtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHAEQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz+TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q7M4KMIIGlDCCBHygAwIBAgIQK9SucLnQY1sq6YTI1nSqMDANBgkqhkiG9w0BAQwFADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0EwHhcNMjIwNzI4MDg1NjI2WhcNMzMwNzI3MDg1NjI2WjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKxV7tHwlG8ETLal5Yhm+isISwnj+L8khxKkASO/MRXI6kGntuse79tVL5Fkvl9KE4etck3HaGWkAIOYTXAalmxp+2/DjhF5BsFLxmeuTFipdpVwY4rHOndRllSOX15D/fnXS1V+Bv6T+3iHQLSORYeKxgv8ff7zWp/QvAuCOejeduR8Iis6j0s+meTdl2DNPm0+FXWLGccj0cC5I4XKnc4NrQgdvmD+pXfrgTpHHwq4RQnnkweGP2Wpa2V2ghhSJQVoyMl2/VBrKQGqA7z9iwkkkXJ76z+PaiCBg+06h2w6GLprm1g4MfP2BOzOQX3exdeJkDqp6+yJghUuU8v530ju11UkOk65SGF/KywOAUo5zrtFqGGUyzlsmnpFj62gAIb8yUN5l7eq7hmulRJY8sw01H4BJkg6Z8T+jhUjjnOMQTl25FfDjuIrxn9KSH3/iDrMrDsL7kkh3xdRcUnqzWW91XFJ3skGk/qJgvpGhkz6b7Mpcud1fzFCrh1YYESKxoliCYDfU6+96GVx5Opm7s5F4h4WqP9QEK0N+avprRir517X+tnbCRc7WH/13HhC08PyiXdWC+4ZUPcxkf3xRPn8faby3dsmd2NTwraWjc6uouyWdpkZXQtV8IpAbY6EOhk9k95MkZ9JQFPGOP03Tf+KabcKLhZPu+SbHU6D0OgQIDAQABo4IBYjCCAV4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUI8E8zFMzGVaO2OPzzjz8qHNHVuowHwYDVR0jBBgwFoAUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0c2NhMjAyMS5jcmwwbwYIKwYBBQUHAQEEYzBhMCgGCCsGAQUFBzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDUGCCsGAQUFBzAChilodHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RzY2EyMDIxLmNlcjBABgNVHSAEOTA3MDUGCyqEaAGG9ncCBQELMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAa8b3PSM+L1eQ+ewXgKZtaX1YAY0yloH5W9YbcSQPR0r153qv4//uZKIbv9adI+iCTGE6Um0+6BwLYOfZtMDNB55q43DeN6jDaOU7P4F/0gZmNKjM3ZTuptQ/XoJ+1OPRIBjviGRQJ5jB9YS8fqbHunYLU4WeGqq/s0X0TaExTUlMcjkqOnJlSn0W2YE4ixHDHoRiU3jOQkLNQJg6RfoasqtF+jL9ATLR1NsD6FZSN8a0UNeu5TOuP4JfHQmMzDxfJfFvPXbNkX66PWNaeXSNC/MetKKW9X/J+R3+GslvSnO64FHZZ3yXOHGHb1dCcVmKUmTzeSyTOeMUiq73l52KtTTSLqL6iTjPZosVTCdk01j5H0NqZdB/2aJMcVweKhCgMkmum33Io6EIjmkecCkEftMq3OyiHarfoTlYZeblLYvXGcQPCTIjXV+kmmrIJZyfaJU0jCeAUTurQgEhLyXngs1+mVYikQx2xUAmjGdV3cZcEegqpH2tqeRDdQykEo8SNaepXXUJnPT01RljPHaW0SrRxwaDkL31hHYoD9xCO0Rmalk6J8K/AGjAoE82GxabmXnd5Ru8otI8FCaPf68lDRQPNpvQqcy3GgCmi0NLNbm6Ees2lkrfX6lAEjc/cw/vCIhpclKiiABVYkDKqsh3o9LyuxtoD6hMuRg3cS/wwWkwgga5MIIEoaADAgECAhEA5/9pxzs1zkuRJth0fGilhzANBgkqhkiG9w0BAQwFADCBgDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMB4XDTIxMDUxOTA1MzIwN1oXDTM2MDUxODA1MzIwN1owVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIFRpbWVzdGFtcGluZyAyMDIxIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6RIfBDXtuV16xaaVQb6KZX9Od9FtJXXTZo7b+GEof3+3g0ChWiKnO7R4+6MfrvLyLCWZa6GpFHjEt4t0/GiUQvnkLOBRdBqr5DOvlmTvJJs2X8ZmWgWJjC7PBZLYBWAs8sJl3kNXxBMX5XntjqWx1ZOuuXl0R4x+zGGSMzZ45dpvB8vLpQfZkfMC/1tL9KYyjU+htLH68dZJPtzhqLBVG+8ljZ1ZFilOKksS79epCeqFSeAUm2eMTGpOiS3gfLM6yvb8Bg6bxg5yglDGC9zbr4sB9ceIGRtCQF1N8dqTgM/dSViiUgJkcv5dLNJeWxGCqJYPgzKlYZTgDXfGIeZpEFmjBLwURP5ABsyKoFocMzdjrCiFbTvJn+bD1kq78qZUgAQGGtd6zGJ88H4NPJ5Y2R4IargiWAmv8RyvWnHr/VA+2PrrK9eXe5q7M88YRdSTq9TKbqdnITUgZcjjm4ZUjteq8K331a4P0s2in0p3UubMEYa/G5w6jSWPUzchGLwWKYBfeSu6dIOC4LkeAPvmdZxSB1lWOb9HzVWZoM8Q/blaP4LWt6JxjkI9yQsYGMdCqwl7uMnPUIlcExS1mzXRxUowQref/EPaS7kYVaHHQrp4XB7nTEtQhkP0Z9Puz/n8zIFnUSnxDof4Yy650PAXSYmK2TcbyDoTNmmt8xAxzcMCAwEAAaOCAVUwggFRMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFL5UAi+/QGxzQ86sCSVOnkNEGu7gMB8GA1UdIwQYMBaAFLahVDkCw6A/joq8+tT4HKbROg79MA4GA1UdDwEB/wQEAwIBBjATBgNVHSUEDDAKBggrBgEFBQcDCDAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vY3JsLmNlcnR1bS5wbC9jdG5jYTIuY3JsMGwGCCsGAQUFBwEBBGAwXjAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAyBggrBgEFBQcwAoYmaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhMi5jZXIwOQYDVR0gBDIwMDAuBgRVHSAAMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAuJNZd8lMFf2UBwigp3qgLPBBk58BFCS3Q6aJDf3TISoytK0eal/JyCB88aUEd0wMNiEcNVMbK9j5Yht2whaknUE1G32k6uld7wcxHmw67vUBY6pSp8QhdodY4SzRRaZWzyYlviUpyU4dXyhKhHSncYJfa1U75cXxCe3sTp9uTBm3f8Bj8LkpjMUSVTtMJ6oEu5JqCYzRfc6nnoRUgwz/GVZFoOBGdrSEtDN7mZgcka/tS5MI47fALVvN5lZ2U8k7Dm/hTX8CWOw0uBZloZEW4HB0Xra3qE4qzzq/6M8gyoU/DE0k3+i7bYOrOk/7tPJg1sOhytOGUQ30PbG++0FfJioDuOFhj99b151SqFlSaRQYz74y/P2XJP+cF19oqozmi0rRTkfyEJIvhIZ+M5XIFZttmVQgTxfpfJwMFFEoQrSrklOxpmSygppsUDJEoliC05vBLVQ+gMZyYaKvBJ4YxBMlKH5ZHkRdloRYlUDplk8GUa+OCMVhpDSQurU6K1ua5dmZftnvSSz2H96UrQDzA6DyiI1V3ejVtvn2azVAXg6NnjmuRZ+wa7Pxy0H3+V4K4rOTHlG3VYA6xfLsTunCz72T6Ot4+tkrDYOeaU1pPX1CBfYj6EW2+ELq46GP8KCNUQDirWLU4nOmgCat7vN0SD6RlwUiSsMeCiQDmZwgwrUxggPvMIID6wIBATBqMFYxCzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIQK9SucLnQY1sq6YTI1nSqMDANBglghkgBZQMEAgIFAKCCAVYwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yMzA2MjIwOTM2MDBaMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEIAO5mmRJdJhKlbbMXYDTRNB0+972yiQEhCvmzw5EIgeKMD8GCSqGSIb3DQEJBDEyBDBKIAgTbTtoo/FCU7fSXw03k/ZVQXyTStF5ZY0KcEug4xulN+9ETbEMQmASpSD61W0wgZ8GCyqGSIb3DQEJEAIMMYGPMIGMMIGJMIGGBBS/T2vEmC3eFQWo78jHp51NFDUAzjBuMFqkWDBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0ECECvUrnC50GNbKumEyNZ0qjAwDQYJKoZIhvcNAQEBBQAEggIAhQtQwGN41NRrl1RLIx5BYnaUgt0PnQbJGBRzNsdL7KVHZdmgArdykWBTe+eEea7ID+/Om9zqWtFKu1Dzk7xzTj1/v9Y1ApuHNDDXOPl/uwIaFqWY0Lb5n1EP/FElxhSVqq1OSUqxyD88fWTmsgaKg7/Cts97OZTSgcbYjEvjjMJewRF1cPd0jHX9L8Mgl812YdN/u3SROKZBHQvQSKZxYQGj4PdPE6Q57Kd0n0UO776y6/UaIhuQGc5lT3zanBXdFIDPmhOA29rjsT4ywpXS732L3M9XD7MHfMxpLRcyS2GY1FJn/ju5pBCoYGFRzakjH250rKouLXV3uNMLvXLXP/JZsmhNCvrT3ZZLkdDUwAC7CCpbcULL4XM6srssxjjKuOVbOAPPgja3myLb+6ok6YO7pnOvB6zPNZdCHqXl8R6BlpQFnrFvfJkaILhdtYQzxQTSX326TpHEqLLVbLsQzca2yKrRh9scGPNDG9tNoS7E5xkNETRE/Ln7sJHIHRKfHyiVmSax8MDtCqGK8uqugDF74+P40q0aNj+xsRLnSsVKIswA7eFkBFs0oRieRtlFr2z2U86ftY9Ao9+g20rVV7BCf2BAWhavf4jyaDa1K9QqR2oGKbEG7dct85BUK/JVxsNhrMmMYtZTHHBR//LP7LkLCXgiBKUmIu72bhXtUQE=", + "token_seed": "y0C2H_I6f9gmZ_S6RNlk_v9P_Clg", + "token": "MIIYDQYJKoZIhvcNAQcCoIIX/jCCF/oCAQMxDTALBglghkgBZQMEAgIwgcwGCyqGSIb3DQEJEAEEoIG8BIG5MIG2AgEBBgsqhGgBhvZ3AgUBCzAvMAsGCWCGSAFlAwQCAQQgH+tIlnWFjx9gX8jLYhF++wFRFuetPDBAEKSYfKr6mrMCBwqofC4XuMAYDzIwMjMxMDIwMjEwODQ5WjADAgEBoFSkUjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjKgghMiMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0BAQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAMZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK/9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWajXfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKzHtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO/tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3XmfeR+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAWgBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgwJjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUFBwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhLmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTCMtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHAEQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz+TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q7M4KMIIGlDCCBHygAwIBAgIQK9SucLnQY1sq6YTI1nSqMDANBgkqhkiG9w0BAQwFADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0EwHhcNMjIwNzI4MDg1NjI2WhcNMzMwNzI3MDg1NjI2WjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKxV7tHwlG8ETLal5Yhm+isISwnj+L8khxKkASO/MRXI6kGntuse79tVL5Fkvl9KE4etck3HaGWkAIOYTXAalmxp+2/DjhF5BsFLxmeuTFipdpVwY4rHOndRllSOX15D/fnXS1V+Bv6T+3iHQLSORYeKxgv8ff7zWp/QvAuCOejeduR8Iis6j0s+meTdl2DNPm0+FXWLGccj0cC5I4XKnc4NrQgdvmD+pXfrgTpHHwq4RQnnkweGP2Wpa2V2ghhSJQVoyMl2/VBrKQGqA7z9iwkkkXJ76z+PaiCBg+06h2w6GLprm1g4MfP2BOzOQX3exdeJkDqp6+yJghUuU8v530ju11UkOk65SGF/KywOAUo5zrtFqGGUyzlsmnpFj62gAIb8yUN5l7eq7hmulRJY8sw01H4BJkg6Z8T+jhUjjnOMQTl25FfDjuIrxn9KSH3/iDrMrDsL7kkh3xdRcUnqzWW91XFJ3skGk/qJgvpGhkz6b7Mpcud1fzFCrh1YYESKxoliCYDfU6+96GVx5Opm7s5F4h4WqP9QEK0N+avprRir517X+tnbCRc7WH/13HhC08PyiXdWC+4ZUPcxkf3xRPn8faby3dsmd2NTwraWjc6uouyWdpkZXQtV8IpAbY6EOhk9k95MkZ9JQFPGOP03Tf+KabcKLhZPu+SbHU6D0OgQIDAQABo4IBYjCCAV4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUI8E8zFMzGVaO2OPzzjz8qHNHVuowHwYDVR0jBBgwFoAUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0c2NhMjAyMS5jcmwwbwYIKwYBBQUHAQEEYzBhMCgGCCsGAQUFBzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDUGCCsGAQUFBzAChilodHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RzY2EyMDIxLmNlcjBABgNVHSAEOTA3MDUGCyqEaAGG9ncCBQELMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAa8b3PSM+L1eQ+ewXgKZtaX1YAY0yloH5W9YbcSQPR0r153qv4//uZKIbv9adI+iCTGE6Um0+6BwLYOfZtMDNB55q43DeN6jDaOU7P4F/0gZmNKjM3ZTuptQ/XoJ+1OPRIBjviGRQJ5jB9YS8fqbHunYLU4WeGqq/s0X0TaExTUlMcjkqOnJlSn0W2YE4ixHDHoRiU3jOQkLNQJg6RfoasqtF+jL9ATLR1NsD6FZSN8a0UNeu5TOuP4JfHQmMzDxfJfFvPXbNkX66PWNaeXSNC/MetKKW9X/J+R3+GslvSnO64FHZZ3yXOHGHb1dCcVmKUmTzeSyTOeMUiq73l52KtTTSLqL6iTjPZosVTCdk01j5H0NqZdB/2aJMcVweKhCgMkmum33Io6EIjmkecCkEftMq3OyiHarfoTlYZeblLYvXGcQPCTIjXV+kmmrIJZyfaJU0jCeAUTurQgEhLyXngs1+mVYikQx2xUAmjGdV3cZcEegqpH2tqeRDdQykEo8SNaepXXUJnPT01RljPHaW0SrRxwaDkL31hHYoD9xCO0Rmalk6J8K/AGjAoE82GxabmXnd5Ru8otI8FCaPf68lDRQPNpvQqcy3GgCmi0NLNbm6Ees2lkrfX6lAEjc/cw/vCIhpclKiiABVYkDKqsh3o9LyuxtoD6hMuRg3cS/wwWkwgga5MIIEoaADAgECAhEA5/9pxzs1zkuRJth0fGilhzANBgkqhkiG9w0BAQwFADCBgDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMB4XDTIxMDUxOTA1MzIwN1oXDTM2MDUxODA1MzIwN1owVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIFRpbWVzdGFtcGluZyAyMDIxIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6RIfBDXtuV16xaaVQb6KZX9Od9FtJXXTZo7b+GEof3+3g0ChWiKnO7R4+6MfrvLyLCWZa6GpFHjEt4t0/GiUQvnkLOBRdBqr5DOvlmTvJJs2X8ZmWgWJjC7PBZLYBWAs8sJl3kNXxBMX5XntjqWx1ZOuuXl0R4x+zGGSMzZ45dpvB8vLpQfZkfMC/1tL9KYyjU+htLH68dZJPtzhqLBVG+8ljZ1ZFilOKksS79epCeqFSeAUm2eMTGpOiS3gfLM6yvb8Bg6bxg5yglDGC9zbr4sB9ceIGRtCQF1N8dqTgM/dSViiUgJkcv5dLNJeWxGCqJYPgzKlYZTgDXfGIeZpEFmjBLwURP5ABsyKoFocMzdjrCiFbTvJn+bD1kq78qZUgAQGGtd6zGJ88H4NPJ5Y2R4IargiWAmv8RyvWnHr/VA+2PrrK9eXe5q7M88YRdSTq9TKbqdnITUgZcjjm4ZUjteq8K331a4P0s2in0p3UubMEYa/G5w6jSWPUzchGLwWKYBfeSu6dIOC4LkeAPvmdZxSB1lWOb9HzVWZoM8Q/blaP4LWt6JxjkI9yQsYGMdCqwl7uMnPUIlcExS1mzXRxUowQref/EPaS7kYVaHHQrp4XB7nTEtQhkP0Z9Puz/n8zIFnUSnxDof4Yy650PAXSYmK2TcbyDoTNmmt8xAxzcMCAwEAAaOCAVUwggFRMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFL5UAi+/QGxzQ86sCSVOnkNEGu7gMB8GA1UdIwQYMBaAFLahVDkCw6A/joq8+tT4HKbROg79MA4GA1UdDwEB/wQEAwIBBjATBgNVHSUEDDAKBggrBgEFBQcDCDAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vY3JsLmNlcnR1bS5wbC9jdG5jYTIuY3JsMGwGCCsGAQUFBwEBBGAwXjAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAyBggrBgEFBQcwAoYmaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhMi5jZXIwOQYDVR0gBDIwMDAuBgRVHSAAMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAuJNZd8lMFf2UBwigp3qgLPBBk58BFCS3Q6aJDf3TISoytK0eal/JyCB88aUEd0wMNiEcNVMbK9j5Yht2whaknUE1G32k6uld7wcxHmw67vUBY6pSp8QhdodY4SzRRaZWzyYlviUpyU4dXyhKhHSncYJfa1U75cXxCe3sTp9uTBm3f8Bj8LkpjMUSVTtMJ6oEu5JqCYzRfc6nnoRUgwz/GVZFoOBGdrSEtDN7mZgcka/tS5MI47fALVvN5lZ2U8k7Dm/hTX8CWOw0uBZloZEW4HB0Xra3qE4qzzq/6M8gyoU/DE0k3+i7bYOrOk/7tPJg1sOhytOGUQ30PbG++0FfJioDuOFhj99b151SqFlSaRQYz74y/P2XJP+cF19oqozmi0rRTkfyEJIvhIZ+M5XIFZttmVQgTxfpfJwMFFEoQrSrklOxpmSygppsUDJEoliC05vBLVQ+gMZyYaKvBJ4YxBMlKH5ZHkRdloRYlUDplk8GUa+OCMVhpDSQurU6K1ua5dmZftnvSSz2H96UrQDzA6DyiI1V3ejVtvn2azVAXg6NnjmuRZ+wa7Pxy0H3+V4K4rOTHlG3VYA6xfLsTunCz72T6Ot4+tkrDYOeaU1pPX1CBfYj6EW2+ELq46GP8KCNUQDirWLU4nOmgCat7vN0SD6RlwUiSsMeCiQDmZwgwrUxggPvMIID6wIBATBqMFYxCzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIQK9SucLnQY1sq6YTI1nSqMDANBglghkgBZQMEAgIFAKCCAVYwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yMzEwMjAyMTA4NDlaMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEIAO5mmRJdJhKlbbMXYDTRNB0+972yiQEhCvmzw5EIgeKMD8GCSqGSIb3DQEJBDEyBDAeYzZWOeK3jLCXB+WyLnPCmxRvVvYrOq/x/xB28JkjNxJIib3pQGvPM9H3oq2cHLkwgZ8GCyqGSIb3DQEJEAIMMYGPMIGMMIGJMIGGBBS/T2vEmC3eFQWo78jHp51NFDUAzjBuMFqkWDBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0ECECvUrnC50GNbKumEyNZ0qjAwDQYJKoZIhvcNAQEBBQAEggIAbNuzq92PPUrBZXVMfKVrJjvYoyaRr2alzHkOY/nqvbWP2n4Bb9RmtwGPEkSldkXWVQBxTmGBOmnlQBaG5rTaztVVVi51AtK7PzmG/0eOGkD7M5CtegTjkTXZTWKXPBBkocJ/0RsOspRM7sSrbVAfldxxkUkjbhu4RSfSzjLDyv91ABoCvWVq9+/W22h1BE/heczNAkXY3mkoByc/Gs/huWTHpRSrbcU2Eo4aEEDx1WSJNe8SKJAn9apRO8/OpFKjAF0fTJWfxA6swZVrAlQEoww7EC/MW9mbI05HS5wGxxAMUezC5kw/RGT/A9TpHxpOBDdl22OPFudOFBrljekw32yevl0l+jleCRSh2/lKM6VTqtYTcszAPCmsw4fKhjlaTqX1EwTmL8YAU/cZGmBKNDhxhOdOZFK56ds8QqSCwYYU8Ox3yzWRRbZkzwCm4JxCY/1RALYbQs46hoUTB4oMT/c/ToPZge0aeJZ2fxQMoUTiPaCksQdQZJFfXbOkjeixQ0MFcDxLoGh53qYU/VHo68EPOsrNLNd9xicWQ6YpMi5vpRaJRYIp5K8yqLQgwoSXmeucbfTEtRxn2Jmg+M8z4oeQWf626itkns8svLFBxL7m72+yH0LNO1vS0040JMaaK5y2egFWIXPYd4d7mu0F5S7wHPyZbKgnIzqP5ndoYXE=", "tsa_server": "http://time.certum.pl/", - "timestamp": "2023-06-22T09:36:00+00:00" + "timestamp": "2023-10-20T21:08:49+00:00" }, "section_defs": [ { "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Process", - "definition_id": "88f0ccdc3585c154e0d1b67cf28b734e69a0791b", + "definition_id": "7e0331d2df29682413535f00d4aad156783fee2e", "used_directly": true }, { "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample", - "definition_id": "61cee898fcd24be5040ffc76163cd645f26c9ff8", + "definition_id": "030133d881170f0d9e31da6086ed5641f0c4403c", "used_directly": true }, { "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes", - "definition_id": "b82ee685f3b0fd55329dbafada317987feac3051", + "definition_id": "f0086b987424b1001666c6f5df9ad1071164a27e", "used_directly": true }, { "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes.HotplateAnnealing", - "definition_id": "1341c9d51198599e0cf17a12d00694469e6fce8f", + "definition_id": "d39f4397900226398e6c17eb00467e874e5955c4", "used_directly": true }, { "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes.PvdEvaporation", - "definition_id": "fdd23ea5c11d32f9b780e5e5b0f6349712bafe6e", + "definition_id": "c640c9585e8d4549f248582763427a7dd7c417a0", "used_directly": true }, { @@ -1385,7 +1390,7 @@ }, { "definition_qualified_name": "nomad.datamodel.datamodel.EntryArchive", - "definition_id": "9e36824ae135f1e5ee5485911cb5fc03bc47af1d", + "definition_id": "1a38309e86abd87e7ef9ff7aa89560cf22ab111e", "used_directly": true }, { @@ -1400,7 +1405,7 @@ }, { "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Activity", - "definition_id": "870f59b3b42ceab01a604bddc86c39b90a897366", + "definition_id": "fc2735d177bf36f9718ca66a764a56fc0c6200a0", "used_directly": false }, { @@ -1409,23 +1414,38 @@ "used_directly": false }, { - "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Process", - "definition_id": "af4b2af6fde599256cf9d75c51958a41b3245b25", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.CompositeSystem", + "definition_id": "c7254c9b461a4baec86cb3179e2f84513f5c9053", + "used_directly": true + }, + { + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Entity", + "definition_id": "7ce6bdcaa183a9685582b275e1c2b2ea3139c74d", "used_directly": false }, { - "definition_qualified_name": "nomad.datamodel.metainfo.eln.ElnBaseSection", - "definition_id": "f05adb2ccbe04cbeced6213c4b6bd8f78e3d4ead", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Process", + "definition_id": "8d81e1f95c60f39a6a8c9f954143a55e6f4c984c", "used_directly": false }, { - "definition_qualified_name": "nomad.datamodel.metainfo.eln.ElnWithFormulaBaseSection", - "definition_id": "ada854aefd11fd40e6c161fe2d9207a7bb104052", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.System", + "definition_id": "3ab3a09d615ab58aefbaa3acdd8d6af4e73aaae5", "used_directly": false }, { - "definition_qualified_name": "nomad.datamodel.metainfo.eln.Sample", - "definition_id": "a830a6d8c03f2a0baa0203e07efcbbd54328daaa", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.Figure", + "definition_id": "55ef08f33dcf9fb374aea217458bd34a23bec57b", + "used_directly": true + }, + { + "definition_qualified_name": "nomad.datamodel.metainfo.plot.PlotSection", + "definition_id": "7bb17e35ed91dca88bf6238fc51ed212693593d0", + "used_directly": true + }, + { + "definition_qualified_name": "nomad.datamodel.metainfo.plot.PlotlyFigure", + "definition_id": "491cdc3c5ea21cdc576275a5c1e600cdaa4256c1", "used_directly": true }, { @@ -1435,12 +1455,12 @@ }, { "definition_qualified_name": "nomad.datamodel.results.Properties", - "definition_id": "9fcaeef3034c9b3861ab45bcea5014c65ffb3da2", + "definition_id": "43288046582240d7a33ec8b5fe4ca86988c2378c", "used_directly": true }, { "definition_qualified_name": "nomad.datamodel.results.Results", - "definition_id": "1ee9d4d17197a78dcfa5f1814b1ff3e2b275c195", + "definition_id": "ba0a320c9aa599c7c4a0af8c545f3cfe76cc4e70", "used_directly": true }, { @@ -1458,13 +1478,13 @@ }, { "quantity_name": "lab_id", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection", + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection", "path": "data.lab_id", "text_value": "001" }, { "quantity_name": "description", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection", + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection", "path": "data.description", "text_value": "<p>A simple example for an \"sample\" that demonstrates how to combine different data entities.</p>\n<p>The sample it-self defines a few properties (involved chemicals, used substrate) and uses inherited default properties (formula, name, lab id, ...)</p>\n<p>But the sample also contains sub-sections that prodivde inforamtion about proccessed that were applied to this sample (PVD evaporation, hotplate annealing). </p>\n<p>The sample also show references to other entries (chemicals, instruments).</p>\n<p> </p>" }, @@ -1506,16 +1526,16 @@ }, { "quantity_name": "datetime", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection", + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection", "path": "data.datetime", - "date_value": "2023-06-22T11:36:00.420237+00:00" + "date_value": "2023-10-20T23:08:49.949982+00:00" } ] }, "data": { "m_def": "../upload/raw/schema.archive.yaml#/definitions/section_definitions/3", "name": "ELN example sample", - "datetime": "2023-06-22T11:36:00.420237+00:00", + "datetime": "2023-10-20T23:08:49.949982+00:00", "lab_id": "001", "description": "<p>A simple example for an \"sample\" that demonstrates how to combine different data entities.</p>\n<p>The sample it-self defines a few properties (involved chemicals, used substrate) and uses inherited default properties (formula, name, lab id, ...)</p>\n<p>But the sample also contains sub-sections that prodivde inforamtion about proccessed that were applied to this sample (PVD evaporation, hotplate annealing). </p>\n<p>The sample also show references to other entries (chemicals, instruments).</p>\n<p> </p>", "tags": [ @@ -1667,6 +1687,48 @@ 36.4472, 36.4526, 36.4504 + ], + "figures": [ + { + "figure": { + "data": [ + { + "x": "#time", + "y": "#chamber_pressure" + }, + { + "x": "#time", + "y": "#substrate_temperature", + "yaxis": "y2" + } + ], + "layout": { + "title": { + "text": "Pressure and Temperature over Time" + }, + "yaxis2": { + "overlaying": "y", + "side": "right" + } + } + } + }, + { + "figure": { + "data": { + "x": "#time", + "y": "#chamber_pressure" + } + } + }, + { + "figure": { + "data": { + "x": "#time", + "y": "#substrate_temperature" + } + } + } ] }, "hotplate_annealing": { @@ -1684,8 +1746,9 @@ } }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "26227", + "content-length": "28243", "content-type": "application/json", "server": "uvicorn" } @@ -1701,7 +1764,7 @@ "headers": { "accept": "application/json", "content-type": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiJkNjNiMjM2ZS00ZGM2LTRhNjQtODJmNC04ZmZmOGE4N2VmYWYiLCJleHAiOjE2ODc0NjI1NTIsIm5iZiI6MCwiaWF0IjoxNjg3NDI2NTY5LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNjg4NzhhZjctNjg0NS00NmMwLWIyYzEtMjUwZDRkOGViNDcwIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImViMDU3NmExLTU0Y2ItNDQ3ZC04MjNlLTMxYTQ1ZDRkNGMyMiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoibWFya3VzIFNjaGVpZGdlbiIsInByZWZlcnJlZF91c2VybmFtZSI6InRlc3QiLCJnaXZlbl9uYW1lIjoibWFya3VzIiwiZmFtaWx5X25hbWUiOiJTY2hlaWRnZW4iLCJlbWFpbCI6Im1hcmt1cy5zY2hlaWRnZW5AZmhpLWJlcmxpbi5kZSJ9.Z55SamjqpzSP2MzuUi49czTIHxNTAA9-vu_lSvcWp2FPQuHA_7hW52bKjyzp-4XSNQDhtHoBD-vL_pVLixovtD1M2EJofoEUzHrrO_Yr_-7iFSmfMNiehsesupOm0ZDiGRjyr0Ig2gamXw8RRHAmDr9_kXpkgim0hl9rJY5EV6fMDnOD8ndRQlyWG-T-s2APjf_JjR1V9pTcYFbfKBap_2iKf36ToFlNhdNIA0_LLsVZq9U6JJ4Ht6nCwS18Gix12xBIMA0Dm5PIK42VztwOMXUObULHrqG2EGg6bp1H15hsFKhOrn2_9JDfuRy130nhQe-BMcnES3XAsnPvCF4qQw", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiI4MDMzNTNjMi0wMzMwLTQ4MjItYTk1YS0xNmRjZTU1NTQ1MWIiLCJleHAiOjE2OTc4NzIxMjEsIm5iZiI6MCwiaWF0IjoxNjk3ODM2MTM4LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNjg4NzhhZjctNjg0NS00NmMwLWIyYzEtMjUwZDRkOGViNDcwIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjVkMmY0Nzk3LTE5NGYtNDM0Yi1hYmJmLTZiZjU4OGJlNDE2ZCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiTWFya3VzIFNjaGVpZGdlbiIsInByZWZlcnJlZF91c2VybmFtZSI6InRlc3QiLCJnaXZlbl9uYW1lIjoiTWFya3VzIiwiZmFtaWx5X25hbWUiOiJTY2hlaWRnZW4iLCJlbWFpbCI6Im1hcmt1cy5zY2hlaWRnZW5AZmhpLWJlcmxpbi5kZSJ9.Us2QoMdeAQCbR5ZBfJJp2G4_7lQ0f83m7F2PC6S5vxFkChEMiFQne7GzaH0wUZ5IxBgjnaVr0RNMIE4rjLUl7en309oIBzsXO1zip5txdfCUPoFH-vgGWH0krnWm_rB2YgXHFBS_uoYsVQyXlASGqIgD-L8jvkh3Ii6vaOTy7uEPIxT5BGhxBN5oKhsVBPXfZZ-GV4xowUgXqyXIs1bwGjahVzGS0SBjZYUfexckZa43zrz755JlyCg1BMZC2rFyqOBsAXOGaHDtzbhd3fRMDatupH-kyBCRVIfCLqiAlsENs6AX9Gic6QDe3VFGpJxio8bRQvHzk2m0o-DrsVf-Mw", "cookie": null } }, @@ -1720,23 +1783,23 @@ "event": "Executing celery task", "proc": "Entry", "process": "process_entry", - "process_worker_id": "wkOvzQLPRkmg_LIzOBUDEw", + "process_worker_id": "9VM-FvfITtmASXYbk7Y9sg", "parser": "parsers/archive", "logger": "nomad.processing", - "timestamp": "2023-06-22 11:36.00", + "timestamp": "2023-10-20 23:08.49", "level": "DEBUG" }, { - "exec_time": "0.026175260543823242", + "exec_time": "0.03218412399291992", "input_size": "1176", "event": "parser executed", "proc": "Entry", "process": "process_entry", - "process_worker_id": "wkOvzQLPRkmg_LIzOBUDEw", + "process_worker_id": "9VM-FvfITtmASXYbk7Y9sg", "parser": "parsers/archive", "step": "parsers/archive", "logger": "nomad.processing", - "timestamp": "2023-06-22 11:36.00", + "timestamp": "2023-10-20 23:08.49", "level": "INFO" }, { @@ -1745,24 +1808,24 @@ "event": "normalizer completed successfully", "proc": "Entry", "process": "process_entry", - "process_worker_id": "wkOvzQLPRkmg_LIzOBUDEw", + "process_worker_id": "9VM-FvfITtmASXYbk7Y9sg", "parser": "parsers/archive", "logger": "nomad.processing", - "timestamp": "2023-06-22 11:36.00", + "timestamp": "2023-10-20 23:08.49", "level": "INFO" }, { - "exec_time": "0.0003139972686767578", + "exec_time": "0.0003657341003417969", "input_size": "1176", "event": "normalizer executed", "proc": "Entry", "process": "process_entry", - "process_worker_id": "wkOvzQLPRkmg_LIzOBUDEw", + "process_worker_id": "9VM-FvfITtmASXYbk7Y9sg", "parser": "parsers/archive", "normalizer": "ResultsNormalizer", "step": "ResultsNormalizer", "logger": "nomad.processing", - "timestamp": "2023-06-22 11:36.00", + "timestamp": "2023-10-20 23:08.49", "level": "INFO" }, { @@ -1771,53 +1834,53 @@ "event": "normalizer completed successfully", "proc": "Entry", "process": "process_entry", - "process_worker_id": "wkOvzQLPRkmg_LIzOBUDEw", + "process_worker_id": "9VM-FvfITtmASXYbk7Y9sg", "parser": "parsers/archive", "logger": "nomad.processing", - "timestamp": "2023-06-22 11:36.00", + "timestamp": "2023-10-20 23:08.49", "level": "INFO" }, { - "exec_time": "0.06625771522521973", + "exec_time": "0.01673126220703125", "input_size": "1176", "event": "normalizer executed", "proc": "Entry", "process": "process_entry", - "process_worker_id": "wkOvzQLPRkmg_LIzOBUDEw", + "process_worker_id": "9VM-FvfITtmASXYbk7Y9sg", "parser": "parsers/archive", "normalizer": "MetainfoNormalizer", "step": "MetainfoNormalizer", "logger": "nomad.processing", - "timestamp": "2023-06-22 11:36.00", + "timestamp": "2023-10-20 23:08.49", "level": "INFO" }, { - "exec_time": "0.004113435745239258", + "exec_time": "0.0036163330078125", "event": "entry metadata saved", "proc": "Entry", "process": "process_entry", - "process_worker_id": "wkOvzQLPRkmg_LIzOBUDEw", + "process_worker_id": "9VM-FvfITtmASXYbk7Y9sg", "parser": "parsers/archive", "logger": "nomad.processing", - "timestamp": "2023-06-22 11:36.00", + "timestamp": "2023-10-20 23:08.49", "level": "INFO" }, { - "exec_time": "0.014285564422607422", + "exec_time": "0.009942293167114258", "event": "entry metadata indexed", "proc": "Entry", "process": "process_entry", - "process_worker_id": "wkOvzQLPRkmg_LIzOBUDEw", + "process_worker_id": "9VM-FvfITtmASXYbk7Y9sg", "parser": "parsers/archive", "logger": "nomad.processing", - "timestamp": "2023-06-22 11:36.00", + "timestamp": "2023-10-20 23:08.49", "level": "INFO" } ], "data": { "m_def": "../upload/raw/schema.archive.yaml#/definitions/section_definitions/3", "name": "ELN example sample", - "datetime": "2023-06-22T11:36:00.420237+00:00", + "datetime": "2023-10-20T23:08:49.949982+00:00", "lab_id": "001", "description": "<p>A simple example for an \"sample\" that demonstrates how to combine different data entities.</p>\n<p>The sample it-self defines a few properties (involved chemicals, used substrate) and uses inherited default properties (formula, name, lab id, ...)</p>\n<p>But the sample also contains sub-sections that prodivde inforamtion about proccessed that were applied to this sample (PVD evaporation, hotplate annealing). </p>\n<p>The sample also show references to other entries (chemicals, instruments).</p>\n<p> </p>", "tags": [ @@ -1969,6 +2032,48 @@ 36.4472, 36.4526, 36.4504 + ], + "figures": [ + { + "figure": { + "data": [ + { + "x": "#time", + "y": "#chamber_pressure" + }, + { + "x": "#time", + "y": "#substrate_temperature", + "yaxis": "y2" + } + ], + "layout": { + "title": { + "text": "Pressure and Temperature over Time" + }, + "yaxis2": { + "overlaying": "y", + "side": "right" + } + } + } + }, + { + "figure": { + "data": { + "x": "#time", + "y": "#chamber_pressure" + } + } + }, + { + "figure": { + "data": { + "x": "#time", + "y": "#substrate_temperature" + } + } + } ] }, "hotplate_annealing": { @@ -1980,12 +2085,12 @@ }, "metadata": { "upload_id": "eln_upload_id", - "upload_create_time": "2023-06-22T09:35:59.826000+00:00", + "upload_create_time": "2023-10-20T21:08:49.528000+00:00", "entry_id": "bC7byHvWJp62Sn9uiuJUB38MT5j-", "entry_name": "ELN example sample", "entry_type": "Sample", - "entry_hash": "IJhNf0P3rAOk-Hl8HpTHMQlEv1jt", - "entry_create_time": "2023-06-22T09:35:59.945000+00:00", + "entry_hash": "y0C2H_I6f9gmZ_S6RNlk_v9P_Clg", + "entry_create_time": "2023-10-20T21:08:49.604000+00:00", "parser_name": "parsers/archive", "mainfile": "sample.archive.json", "files": [ @@ -1998,9 +2103,9 @@ "embargo_length": 0, "license": "CC BY 4.0", "processed": true, - "last_processing_time": "2023-06-22T09:36:00.317236+00:00", + "last_processing_time": "2023-10-20T21:08:49.893840+00:00", "processing_errors": [], - "nomad_version": "1.2.0rc1.dev181+gce78efe22.d20230609", + "nomad_version": "1.2.2.dev85+g6f47bb0a0", "nomad_commit": "", "references": [], "main_author": "68878af7-6845-46c0-b2c1-250d4d8eb470", @@ -2012,7 +2117,7 @@ "54cb1f64-f84e-4815-9ade-440ce0b5430f" ], "datasets": [], - "n_quantities": 59, + "n_quantities": 65, "quantities": [ "", "data", @@ -2029,6 +2134,8 @@ "data.processes.pvd_evaporation.chamber_pressure", "data.processes.pvd_evaporation.data_file", "data.processes.pvd_evaporation.datetime", + "data.processes.pvd_evaporation.figures", + "data.processes.pvd_evaporation.figures.figure", "data.processes.pvd_evaporation.fill_archive_from_datafile", "data.processes.pvd_evaporation.substrate_temperature", "data.processes.pvd_evaporation.time", @@ -2089,40 +2196,41 @@ "nomad.datamodel.datamodel.EntryArchive", "nomad.datamodel.datamodel.EntryMetadata", "nomad.datamodel.datamodel.RFC3161Timestamp", + "nomad.datamodel.metainfo.plot.PlotlyFigure", "nomad.datamodel.results.ELN", "nomad.datamodel.results.Properties", "nomad.datamodel.results.Results" ], "entry_timestamp": { - "token_seed": "IJhNf0P3rAOk-Hl8HpTHMQlEv1jt", - "token": "MIIYDQYJKoZIhvcNAQcCoIIX/jCCF/oCAQMxDTALBglghkgBZQMEAgIwgcwGCyqGSIb3DQEJEAEEoIG8BIG5MIG2AgEBBgsqhGgBhvZ3AgUBCzAvMAsGCWCGSAFlAwQCAQQgllBuEy/QmmRCOSqul92agyRnwGZaILVVVeHXh47TWvYCBwqofCa7XekYDzIwMjMwNjIyMDkzNjAwWjADAgEBoFSkUjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjKgghMiMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0BAQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAMZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK/9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWajXfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKzHtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO/tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3XmfeR+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAWgBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgwJjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUFBwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhLmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTCMtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHAEQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz+TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q7M4KMIIGlDCCBHygAwIBAgIQK9SucLnQY1sq6YTI1nSqMDANBgkqhkiG9w0BAQwFADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0EwHhcNMjIwNzI4MDg1NjI2WhcNMzMwNzI3MDg1NjI2WjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKxV7tHwlG8ETLal5Yhm+isISwnj+L8khxKkASO/MRXI6kGntuse79tVL5Fkvl9KE4etck3HaGWkAIOYTXAalmxp+2/DjhF5BsFLxmeuTFipdpVwY4rHOndRllSOX15D/fnXS1V+Bv6T+3iHQLSORYeKxgv8ff7zWp/QvAuCOejeduR8Iis6j0s+meTdl2DNPm0+FXWLGccj0cC5I4XKnc4NrQgdvmD+pXfrgTpHHwq4RQnnkweGP2Wpa2V2ghhSJQVoyMl2/VBrKQGqA7z9iwkkkXJ76z+PaiCBg+06h2w6GLprm1g4MfP2BOzOQX3exdeJkDqp6+yJghUuU8v530ju11UkOk65SGF/KywOAUo5zrtFqGGUyzlsmnpFj62gAIb8yUN5l7eq7hmulRJY8sw01H4BJkg6Z8T+jhUjjnOMQTl25FfDjuIrxn9KSH3/iDrMrDsL7kkh3xdRcUnqzWW91XFJ3skGk/qJgvpGhkz6b7Mpcud1fzFCrh1YYESKxoliCYDfU6+96GVx5Opm7s5F4h4WqP9QEK0N+avprRir517X+tnbCRc7WH/13HhC08PyiXdWC+4ZUPcxkf3xRPn8faby3dsmd2NTwraWjc6uouyWdpkZXQtV8IpAbY6EOhk9k95MkZ9JQFPGOP03Tf+KabcKLhZPu+SbHU6D0OgQIDAQABo4IBYjCCAV4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUI8E8zFMzGVaO2OPzzjz8qHNHVuowHwYDVR0jBBgwFoAUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0c2NhMjAyMS5jcmwwbwYIKwYBBQUHAQEEYzBhMCgGCCsGAQUFBzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDUGCCsGAQUFBzAChilodHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RzY2EyMDIxLmNlcjBABgNVHSAEOTA3MDUGCyqEaAGG9ncCBQELMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAa8b3PSM+L1eQ+ewXgKZtaX1YAY0yloH5W9YbcSQPR0r153qv4//uZKIbv9adI+iCTGE6Um0+6BwLYOfZtMDNB55q43DeN6jDaOU7P4F/0gZmNKjM3ZTuptQ/XoJ+1OPRIBjviGRQJ5jB9YS8fqbHunYLU4WeGqq/s0X0TaExTUlMcjkqOnJlSn0W2YE4ixHDHoRiU3jOQkLNQJg6RfoasqtF+jL9ATLR1NsD6FZSN8a0UNeu5TOuP4JfHQmMzDxfJfFvPXbNkX66PWNaeXSNC/MetKKW9X/J+R3+GslvSnO64FHZZ3yXOHGHb1dCcVmKUmTzeSyTOeMUiq73l52KtTTSLqL6iTjPZosVTCdk01j5H0NqZdB/2aJMcVweKhCgMkmum33Io6EIjmkecCkEftMq3OyiHarfoTlYZeblLYvXGcQPCTIjXV+kmmrIJZyfaJU0jCeAUTurQgEhLyXngs1+mVYikQx2xUAmjGdV3cZcEegqpH2tqeRDdQykEo8SNaepXXUJnPT01RljPHaW0SrRxwaDkL31hHYoD9xCO0Rmalk6J8K/AGjAoE82GxabmXnd5Ru8otI8FCaPf68lDRQPNpvQqcy3GgCmi0NLNbm6Ees2lkrfX6lAEjc/cw/vCIhpclKiiABVYkDKqsh3o9LyuxtoD6hMuRg3cS/wwWkwgga5MIIEoaADAgECAhEA5/9pxzs1zkuRJth0fGilhzANBgkqhkiG9w0BAQwFADCBgDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMB4XDTIxMDUxOTA1MzIwN1oXDTM2MDUxODA1MzIwN1owVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIFRpbWVzdGFtcGluZyAyMDIxIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6RIfBDXtuV16xaaVQb6KZX9Od9FtJXXTZo7b+GEof3+3g0ChWiKnO7R4+6MfrvLyLCWZa6GpFHjEt4t0/GiUQvnkLOBRdBqr5DOvlmTvJJs2X8ZmWgWJjC7PBZLYBWAs8sJl3kNXxBMX5XntjqWx1ZOuuXl0R4x+zGGSMzZ45dpvB8vLpQfZkfMC/1tL9KYyjU+htLH68dZJPtzhqLBVG+8ljZ1ZFilOKksS79epCeqFSeAUm2eMTGpOiS3gfLM6yvb8Bg6bxg5yglDGC9zbr4sB9ceIGRtCQF1N8dqTgM/dSViiUgJkcv5dLNJeWxGCqJYPgzKlYZTgDXfGIeZpEFmjBLwURP5ABsyKoFocMzdjrCiFbTvJn+bD1kq78qZUgAQGGtd6zGJ88H4NPJ5Y2R4IargiWAmv8RyvWnHr/VA+2PrrK9eXe5q7M88YRdSTq9TKbqdnITUgZcjjm4ZUjteq8K331a4P0s2in0p3UubMEYa/G5w6jSWPUzchGLwWKYBfeSu6dIOC4LkeAPvmdZxSB1lWOb9HzVWZoM8Q/blaP4LWt6JxjkI9yQsYGMdCqwl7uMnPUIlcExS1mzXRxUowQref/EPaS7kYVaHHQrp4XB7nTEtQhkP0Z9Puz/n8zIFnUSnxDof4Yy650PAXSYmK2TcbyDoTNmmt8xAxzcMCAwEAAaOCAVUwggFRMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFL5UAi+/QGxzQ86sCSVOnkNEGu7gMB8GA1UdIwQYMBaAFLahVDkCw6A/joq8+tT4HKbROg79MA4GA1UdDwEB/wQEAwIBBjATBgNVHSUEDDAKBggrBgEFBQcDCDAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vY3JsLmNlcnR1bS5wbC9jdG5jYTIuY3JsMGwGCCsGAQUFBwEBBGAwXjAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAyBggrBgEFBQcwAoYmaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhMi5jZXIwOQYDVR0gBDIwMDAuBgRVHSAAMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAuJNZd8lMFf2UBwigp3qgLPBBk58BFCS3Q6aJDf3TISoytK0eal/JyCB88aUEd0wMNiEcNVMbK9j5Yht2whaknUE1G32k6uld7wcxHmw67vUBY6pSp8QhdodY4SzRRaZWzyYlviUpyU4dXyhKhHSncYJfa1U75cXxCe3sTp9uTBm3f8Bj8LkpjMUSVTtMJ6oEu5JqCYzRfc6nnoRUgwz/GVZFoOBGdrSEtDN7mZgcka/tS5MI47fALVvN5lZ2U8k7Dm/hTX8CWOw0uBZloZEW4HB0Xra3qE4qzzq/6M8gyoU/DE0k3+i7bYOrOk/7tPJg1sOhytOGUQ30PbG++0FfJioDuOFhj99b151SqFlSaRQYz74y/P2XJP+cF19oqozmi0rRTkfyEJIvhIZ+M5XIFZttmVQgTxfpfJwMFFEoQrSrklOxpmSygppsUDJEoliC05vBLVQ+gMZyYaKvBJ4YxBMlKH5ZHkRdloRYlUDplk8GUa+OCMVhpDSQurU6K1ua5dmZftnvSSz2H96UrQDzA6DyiI1V3ejVtvn2azVAXg6NnjmuRZ+wa7Pxy0H3+V4K4rOTHlG3VYA6xfLsTunCz72T6Ot4+tkrDYOeaU1pPX1CBfYj6EW2+ELq46GP8KCNUQDirWLU4nOmgCat7vN0SD6RlwUiSsMeCiQDmZwgwrUxggPvMIID6wIBATBqMFYxCzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIQK9SucLnQY1sq6YTI1nSqMDANBglghkgBZQMEAgIFAKCCAVYwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yMzA2MjIwOTM2MDBaMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEIAO5mmRJdJhKlbbMXYDTRNB0+972yiQEhCvmzw5EIgeKMD8GCSqGSIb3DQEJBDEyBDBKIAgTbTtoo/FCU7fSXw03k/ZVQXyTStF5ZY0KcEug4xulN+9ETbEMQmASpSD61W0wgZ8GCyqGSIb3DQEJEAIMMYGPMIGMMIGJMIGGBBS/T2vEmC3eFQWo78jHp51NFDUAzjBuMFqkWDBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0ECECvUrnC50GNbKumEyNZ0qjAwDQYJKoZIhvcNAQEBBQAEggIAhQtQwGN41NRrl1RLIx5BYnaUgt0PnQbJGBRzNsdL7KVHZdmgArdykWBTe+eEea7ID+/Om9zqWtFKu1Dzk7xzTj1/v9Y1ApuHNDDXOPl/uwIaFqWY0Lb5n1EP/FElxhSVqq1OSUqxyD88fWTmsgaKg7/Cts97OZTSgcbYjEvjjMJewRF1cPd0jHX9L8Mgl812YdN/u3SROKZBHQvQSKZxYQGj4PdPE6Q57Kd0n0UO776y6/UaIhuQGc5lT3zanBXdFIDPmhOA29rjsT4ywpXS732L3M9XD7MHfMxpLRcyS2GY1FJn/ju5pBCoYGFRzakjH250rKouLXV3uNMLvXLXP/JZsmhNCvrT3ZZLkdDUwAC7CCpbcULL4XM6srssxjjKuOVbOAPPgja3myLb+6ok6YO7pnOvB6zPNZdCHqXl8R6BlpQFnrFvfJkaILhdtYQzxQTSX326TpHEqLLVbLsQzca2yKrRh9scGPNDG9tNoS7E5xkNETRE/Ln7sJHIHRKfHyiVmSax8MDtCqGK8uqugDF74+P40q0aNj+xsRLnSsVKIswA7eFkBFs0oRieRtlFr2z2U86ftY9Ao9+g20rVV7BCf2BAWhavf4jyaDa1K9QqR2oGKbEG7dct85BUK/JVxsNhrMmMYtZTHHBR//LP7LkLCXgiBKUmIu72bhXtUQE=", + "token_seed": "y0C2H_I6f9gmZ_S6RNlk_v9P_Clg", + "token": "MIIYDQYJKoZIhvcNAQcCoIIX/jCCF/oCAQMxDTALBglghkgBZQMEAgIwgcwGCyqGSIb3DQEJEAEEoIG8BIG5MIG2AgEBBgsqhGgBhvZ3AgUBCzAvMAsGCWCGSAFlAwQCAQQgH+tIlnWFjx9gX8jLYhF++wFRFuetPDBAEKSYfKr6mrMCBwqofC4XuMAYDzIwMjMxMDIwMjEwODQ5WjADAgEBoFSkUjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjKgghMiMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0BAQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAMZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK/9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWajXfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKzHtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO/tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3XmfeR+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAWgBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgwJjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUFBwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhLmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTCMtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHAEQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz+TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q7M4KMIIGlDCCBHygAwIBAgIQK9SucLnQY1sq6YTI1nSqMDANBgkqhkiG9w0BAQwFADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0EwHhcNMjIwNzI4MDg1NjI2WhcNMzMwNzI3MDg1NjI2WjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKxV7tHwlG8ETLal5Yhm+isISwnj+L8khxKkASO/MRXI6kGntuse79tVL5Fkvl9KE4etck3HaGWkAIOYTXAalmxp+2/DjhF5BsFLxmeuTFipdpVwY4rHOndRllSOX15D/fnXS1V+Bv6T+3iHQLSORYeKxgv8ff7zWp/QvAuCOejeduR8Iis6j0s+meTdl2DNPm0+FXWLGccj0cC5I4XKnc4NrQgdvmD+pXfrgTpHHwq4RQnnkweGP2Wpa2V2ghhSJQVoyMl2/VBrKQGqA7z9iwkkkXJ76z+PaiCBg+06h2w6GLprm1g4MfP2BOzOQX3exdeJkDqp6+yJghUuU8v530ju11UkOk65SGF/KywOAUo5zrtFqGGUyzlsmnpFj62gAIb8yUN5l7eq7hmulRJY8sw01H4BJkg6Z8T+jhUjjnOMQTl25FfDjuIrxn9KSH3/iDrMrDsL7kkh3xdRcUnqzWW91XFJ3skGk/qJgvpGhkz6b7Mpcud1fzFCrh1YYESKxoliCYDfU6+96GVx5Opm7s5F4h4WqP9QEK0N+avprRir517X+tnbCRc7WH/13HhC08PyiXdWC+4ZUPcxkf3xRPn8faby3dsmd2NTwraWjc6uouyWdpkZXQtV8IpAbY6EOhk9k95MkZ9JQFPGOP03Tf+KabcKLhZPu+SbHU6D0OgQIDAQABo4IBYjCCAV4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUI8E8zFMzGVaO2OPzzjz8qHNHVuowHwYDVR0jBBgwFoAUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0c2NhMjAyMS5jcmwwbwYIKwYBBQUHAQEEYzBhMCgGCCsGAQUFBzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDUGCCsGAQUFBzAChilodHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RzY2EyMDIxLmNlcjBABgNVHSAEOTA3MDUGCyqEaAGG9ncCBQELMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAa8b3PSM+L1eQ+ewXgKZtaX1YAY0yloH5W9YbcSQPR0r153qv4//uZKIbv9adI+iCTGE6Um0+6BwLYOfZtMDNB55q43DeN6jDaOU7P4F/0gZmNKjM3ZTuptQ/XoJ+1OPRIBjviGRQJ5jB9YS8fqbHunYLU4WeGqq/s0X0TaExTUlMcjkqOnJlSn0W2YE4ixHDHoRiU3jOQkLNQJg6RfoasqtF+jL9ATLR1NsD6FZSN8a0UNeu5TOuP4JfHQmMzDxfJfFvPXbNkX66PWNaeXSNC/MetKKW9X/J+R3+GslvSnO64FHZZ3yXOHGHb1dCcVmKUmTzeSyTOeMUiq73l52KtTTSLqL6iTjPZosVTCdk01j5H0NqZdB/2aJMcVweKhCgMkmum33Io6EIjmkecCkEftMq3OyiHarfoTlYZeblLYvXGcQPCTIjXV+kmmrIJZyfaJU0jCeAUTurQgEhLyXngs1+mVYikQx2xUAmjGdV3cZcEegqpH2tqeRDdQykEo8SNaepXXUJnPT01RljPHaW0SrRxwaDkL31hHYoD9xCO0Rmalk6J8K/AGjAoE82GxabmXnd5Ru8otI8FCaPf68lDRQPNpvQqcy3GgCmi0NLNbm6Ees2lkrfX6lAEjc/cw/vCIhpclKiiABVYkDKqsh3o9LyuxtoD6hMuRg3cS/wwWkwgga5MIIEoaADAgECAhEA5/9pxzs1zkuRJth0fGilhzANBgkqhkiG9w0BAQwFADCBgDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMB4XDTIxMDUxOTA1MzIwN1oXDTM2MDUxODA1MzIwN1owVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIFRpbWVzdGFtcGluZyAyMDIxIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6RIfBDXtuV16xaaVQb6KZX9Od9FtJXXTZo7b+GEof3+3g0ChWiKnO7R4+6MfrvLyLCWZa6GpFHjEt4t0/GiUQvnkLOBRdBqr5DOvlmTvJJs2X8ZmWgWJjC7PBZLYBWAs8sJl3kNXxBMX5XntjqWx1ZOuuXl0R4x+zGGSMzZ45dpvB8vLpQfZkfMC/1tL9KYyjU+htLH68dZJPtzhqLBVG+8ljZ1ZFilOKksS79epCeqFSeAUm2eMTGpOiS3gfLM6yvb8Bg6bxg5yglDGC9zbr4sB9ceIGRtCQF1N8dqTgM/dSViiUgJkcv5dLNJeWxGCqJYPgzKlYZTgDXfGIeZpEFmjBLwURP5ABsyKoFocMzdjrCiFbTvJn+bD1kq78qZUgAQGGtd6zGJ88H4NPJ5Y2R4IargiWAmv8RyvWnHr/VA+2PrrK9eXe5q7M88YRdSTq9TKbqdnITUgZcjjm4ZUjteq8K331a4P0s2in0p3UubMEYa/G5w6jSWPUzchGLwWKYBfeSu6dIOC4LkeAPvmdZxSB1lWOb9HzVWZoM8Q/blaP4LWt6JxjkI9yQsYGMdCqwl7uMnPUIlcExS1mzXRxUowQref/EPaS7kYVaHHQrp4XB7nTEtQhkP0Z9Puz/n8zIFnUSnxDof4Yy650PAXSYmK2TcbyDoTNmmt8xAxzcMCAwEAAaOCAVUwggFRMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFL5UAi+/QGxzQ86sCSVOnkNEGu7gMB8GA1UdIwQYMBaAFLahVDkCw6A/joq8+tT4HKbROg79MA4GA1UdDwEB/wQEAwIBBjATBgNVHSUEDDAKBggrBgEFBQcDCDAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vY3JsLmNlcnR1bS5wbC9jdG5jYTIuY3JsMGwGCCsGAQUFBwEBBGAwXjAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAyBggrBgEFBQcwAoYmaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhMi5jZXIwOQYDVR0gBDIwMDAuBgRVHSAAMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAuJNZd8lMFf2UBwigp3qgLPBBk58BFCS3Q6aJDf3TISoytK0eal/JyCB88aUEd0wMNiEcNVMbK9j5Yht2whaknUE1G32k6uld7wcxHmw67vUBY6pSp8QhdodY4SzRRaZWzyYlviUpyU4dXyhKhHSncYJfa1U75cXxCe3sTp9uTBm3f8Bj8LkpjMUSVTtMJ6oEu5JqCYzRfc6nnoRUgwz/GVZFoOBGdrSEtDN7mZgcka/tS5MI47fALVvN5lZ2U8k7Dm/hTX8CWOw0uBZloZEW4HB0Xra3qE4qzzq/6M8gyoU/DE0k3+i7bYOrOk/7tPJg1sOhytOGUQ30PbG++0FfJioDuOFhj99b151SqFlSaRQYz74y/P2XJP+cF19oqozmi0rRTkfyEJIvhIZ+M5XIFZttmVQgTxfpfJwMFFEoQrSrklOxpmSygppsUDJEoliC05vBLVQ+gMZyYaKvBJ4YxBMlKH5ZHkRdloRYlUDplk8GUa+OCMVhpDSQurU6K1ua5dmZftnvSSz2H96UrQDzA6DyiI1V3ejVtvn2azVAXg6NnjmuRZ+wa7Pxy0H3+V4K4rOTHlG3VYA6xfLsTunCz72T6Ot4+tkrDYOeaU1pPX1CBfYj6EW2+ELq46GP8KCNUQDirWLU4nOmgCat7vN0SD6RlwUiSsMeCiQDmZwgwrUxggPvMIID6wIBATBqMFYxCzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIQK9SucLnQY1sq6YTI1nSqMDANBglghkgBZQMEAgIFAKCCAVYwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yMzEwMjAyMTA4NDlaMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEIAO5mmRJdJhKlbbMXYDTRNB0+972yiQEhCvmzw5EIgeKMD8GCSqGSIb3DQEJBDEyBDAeYzZWOeK3jLCXB+WyLnPCmxRvVvYrOq/x/xB28JkjNxJIib3pQGvPM9H3oq2cHLkwgZ8GCyqGSIb3DQEJEAIMMYGPMIGMMIGJMIGGBBS/T2vEmC3eFQWo78jHp51NFDUAzjBuMFqkWDBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0ECECvUrnC50GNbKumEyNZ0qjAwDQYJKoZIhvcNAQEBBQAEggIAbNuzq92PPUrBZXVMfKVrJjvYoyaRr2alzHkOY/nqvbWP2n4Bb9RmtwGPEkSldkXWVQBxTmGBOmnlQBaG5rTaztVVVi51AtK7PzmG/0eOGkD7M5CtegTjkTXZTWKXPBBkocJ/0RsOspRM7sSrbVAfldxxkUkjbhu4RSfSzjLDyv91ABoCvWVq9+/W22h1BE/heczNAkXY3mkoByc/Gs/huWTHpRSrbcU2Eo4aEEDx1WSJNe8SKJAn9apRO8/OpFKjAF0fTJWfxA6swZVrAlQEoww7EC/MW9mbI05HS5wGxxAMUezC5kw/RGT/A9TpHxpOBDdl22OPFudOFBrljekw32yevl0l+jleCRSh2/lKM6VTqtYTcszAPCmsw4fKhjlaTqX1EwTmL8YAU/cZGmBKNDhxhOdOZFK56ds8QqSCwYYU8Ox3yzWRRbZkzwCm4JxCY/1RALYbQs46hoUTB4oMT/c/ToPZge0aeJZ2fxQMoUTiPaCksQdQZJFfXbOkjeixQ0MFcDxLoGh53qYU/VHo68EPOsrNLNd9xicWQ6YpMi5vpRaJRYIp5K8yqLQgwoSXmeucbfTEtRxn2Jmg+M8z4oeQWf626itkns8svLFBxL7m72+yH0LNO1vS0040JMaaK5y2egFWIXPYd4d7mu0F5S7wHPyZbKgnIzqP5ndoYXE=", "tsa_server": "http://time.certum.pl/", - "timestamp": "2023-06-22T09:36:00+00:00" + "timestamp": "2023-10-20T21:08:49+00:00" }, "section_defs": [ { "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Process", - "definition_id": "88f0ccdc3585c154e0d1b67cf28b734e69a0791b", + "definition_id": "7e0331d2df29682413535f00d4aad156783fee2e", "used_directly": true }, { "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample", - "definition_id": "61cee898fcd24be5040ffc76163cd645f26c9ff8", + "definition_id": "030133d881170f0d9e31da6086ed5641f0c4403c", "used_directly": true }, { "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes", - "definition_id": "b82ee685f3b0fd55329dbafada317987feac3051", + "definition_id": "f0086b987424b1001666c6f5df9ad1071164a27e", "used_directly": true }, { "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes.HotplateAnnealing", - "definition_id": "1341c9d51198599e0cf17a12d00694469e6fce8f", + "definition_id": "d39f4397900226398e6c17eb00467e874e5955c4", "used_directly": true }, { "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes.PvdEvaporation", - "definition_id": "fdd23ea5c11d32f9b780e5e5b0f6349712bafe6e", + "definition_id": "c640c9585e8d4549f248582763427a7dd7c417a0", "used_directly": true }, { @@ -2137,7 +2245,7 @@ }, { "definition_qualified_name": "nomad.datamodel.datamodel.EntryArchive", - "definition_id": "9e36824ae135f1e5ee5485911cb5fc03bc47af1d", + "definition_id": "1a38309e86abd87e7ef9ff7aa89560cf22ab111e", "used_directly": true }, { @@ -2152,7 +2260,7 @@ }, { "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Activity", - "definition_id": "870f59b3b42ceab01a604bddc86c39b90a897366", + "definition_id": "fc2735d177bf36f9718ca66a764a56fc0c6200a0", "used_directly": false }, { @@ -2161,23 +2269,38 @@ "used_directly": false }, { - "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Process", - "definition_id": "af4b2af6fde599256cf9d75c51958a41b3245b25", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.CompositeSystem", + "definition_id": "c7254c9b461a4baec86cb3179e2f84513f5c9053", + "used_directly": true + }, + { + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Entity", + "definition_id": "7ce6bdcaa183a9685582b275e1c2b2ea3139c74d", "used_directly": false }, { - "definition_qualified_name": "nomad.datamodel.metainfo.eln.ElnBaseSection", - "definition_id": "f05adb2ccbe04cbeced6213c4b6bd8f78e3d4ead", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Process", + "definition_id": "8d81e1f95c60f39a6a8c9f954143a55e6f4c984c", "used_directly": false }, { - "definition_qualified_name": "nomad.datamodel.metainfo.eln.ElnWithFormulaBaseSection", - "definition_id": "ada854aefd11fd40e6c161fe2d9207a7bb104052", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.System", + "definition_id": "3ab3a09d615ab58aefbaa3acdd8d6af4e73aaae5", "used_directly": false }, { - "definition_qualified_name": "nomad.datamodel.metainfo.eln.Sample", - "definition_id": "a830a6d8c03f2a0baa0203e07efcbbd54328daaa", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.Figure", + "definition_id": "55ef08f33dcf9fb374aea217458bd34a23bec57b", + "used_directly": true + }, + { + "definition_qualified_name": "nomad.datamodel.metainfo.plot.PlotSection", + "definition_id": "7bb17e35ed91dca88bf6238fc51ed212693593d0", + "used_directly": true + }, + { + "definition_qualified_name": "nomad.datamodel.metainfo.plot.PlotlyFigure", + "definition_id": "491cdc3c5ea21cdc576275a5c1e600cdaa4256c1", "used_directly": true }, { @@ -2187,12 +2310,12 @@ }, { "definition_qualified_name": "nomad.datamodel.results.Properties", - "definition_id": "9fcaeef3034c9b3861ab45bcea5014c65ffb3da2", + "definition_id": "43288046582240d7a33ec8b5fe4ca86988c2378c", "used_directly": true }, { "definition_qualified_name": "nomad.datamodel.results.Results", - "definition_id": "1ee9d4d17197a78dcfa5f1814b1ff3e2b275c195", + "definition_id": "ba0a320c9aa599c7c4a0af8c545f3cfe76cc4e70", "used_directly": true }, { @@ -2210,13 +2333,13 @@ }, { "quantity_name": "lab_id", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection", + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection", "path": "data.lab_id", "text_value": "001" }, { "quantity_name": "description", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection", + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection", "path": "data.description", "text_value": "<p>A simple example for an \"sample\" that demonstrates how to combine different data entities.</p>\n<p>The sample it-self defines a few properties (involved chemicals, used substrate) and uses inherited default properties (formula, name, lab id, ...)</p>\n<p>But the sample also contains sub-sections that prodivde inforamtion about proccessed that were applied to this sample (PVD evaporation, hotplate annealing). </p>\n<p>The sample also show references to other entries (chemicals, instruments).</p>\n<p> </p>" }, @@ -2258,9 +2381,9 @@ }, { "quantity_name": "datetime", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection", + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection", "path": "data.datetime", - "date_value": "2023-06-22T11:36:00.420237+00:00" + "date_value": "2023-10-20T23:08:49.949982+00:00" } ] }, @@ -2295,8 +2418,65 @@ } }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "29909", + "content-length": "31921", + "content-type": "application/json", + "server": "uvicorn" + } + } + } + ], + "afa783d98e040c74b68e5cfd3d82f3f0": [ + { + "request": { + "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/query", + "method": "POST", + "body": { + "required": { + "metadata": "*" + }, + "owner": "visible", + "pagination": { + "order_by": "upload_create_time", + "order": "desc", + "page_size": 20 + }, + "query": { + "entry_references.target_entry_id": "bC7byHvWJp62Sn9uiuJUB38MT5j-" + } + }, + "headers": { + "accept": "application/json, text/plain, */*", + "content-type": "application/json", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiJiMDExZGRmYS04OWQ1LTQ0YmItYjdhZi00MjFmNjc1OTEzNzciLCJleHAiOjE2OTc4NzIxMjEsIm5iZiI6MCwiaWF0IjoxNjk3ODM2MTM1LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNjg4NzhhZjctNjg0NS00NmMwLWIyYzEtMjUwZDRkOGViNDcwIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjVkMmY0Nzk3LTE5NGYtNDM0Yi1hYmJmLTZiZjU4OGJlNDE2ZCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiTWFya3VzIFNjaGVpZGdlbiIsInByZWZlcnJlZF91c2VybmFtZSI6InRlc3QiLCJnaXZlbl9uYW1lIjoiTWFya3VzIiwiZmFtaWx5X25hbWUiOiJTY2hlaWRnZW4iLCJlbWFpbCI6Im1hcmt1cy5zY2hlaWRnZW5AZmhpLWJlcmxpbi5kZSJ9.iWprLNQSEntmSYYHWMYrHolNxV7tOjTp-CrtRK4GSkmXi5FsqBBiv3h6rmENSuGSfTWDtvsjYZ-B4PIv8SYa1dDuL-PkqC4tKeHe0v3fJ-XE_qgv37xmjXkusounFOoZtAuvQ8JACYs3t0NIhpM31MGtG2KV5goV_INJsBWLDcVkF2YZfts7WmPPh2yTVa6-d01ip86xRUIs6UnyMoegoq7UezM4B8wt-jRDTUq1SugV5Q375Z_TT1GDw8IIboLSjfU2dT5k14KY0kBXAyOtQB84dzQKB2a1OaEIHVF4VGUf2nyoGzUrkDLtIzWDV4KvPZ-VKPlkLUVU55aQT-gmww", + "cookie": null + } + }, + "response": { + "status": 200, + "body": { + "owner": "visible", + "query": { + "prefix": "entry_references", + "query": { + "name": "target_entry_id", + "value": "bC7byHvWJp62Sn9uiuJUB38MT5j-" + } + }, + "pagination": { + "page_size": 20, + "order_by": "upload_create_time", + "order": "desc", + "total": 0 + }, + "required": {}, + "data": [] + }, + "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", + "connection": "close", + "content-length": "326", "content-type": "application/json", "server": "uvicorn" } @@ -2311,7 +2491,7 @@ "body": "", "headers": { "accept": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiIxNzk2YWZmMS02MmNhLTRmZDgtYjczYi1jNTdiNTM2ZDY0NDUiLCJleHAiOjE2ODc0NjI1NTIsIm5iZiI6MCwiaWF0IjoxNjg3NDI2NTY2LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNjg4NzhhZjctNjg0NS00NmMwLWIyYzEtMjUwZDRkOGViNDcwIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImViMDU3NmExLTU0Y2ItNDQ3ZC04MjNlLTMxYTQ1ZDRkNGMyMiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoibWFya3VzIFNjaGVpZGdlbiIsInByZWZlcnJlZF91c2VybmFtZSI6InRlc3QiLCJnaXZlbl9uYW1lIjoibWFya3VzIiwiZmFtaWx5X25hbWUiOiJTY2hlaWRnZW4iLCJlbWFpbCI6Im1hcmt1cy5zY2hlaWRnZW5AZmhpLWJlcmxpbi5kZSJ9.jLqEfu27hpvGyXH8Kn3OcoJf011JEmBkhAq5WkELuTMN_dhzyOZ_BmnMFbFRSAFV2xBof3ExCt_aGIoH_bg56-v3zC9RSjqj7JgXW8_FiwMmv8hV3XO9a6w1qQiNkomwOnnv0PpL1uXIz63Ajy5n1fbrB1xsPOwgr6qZtcnqtXc1spXgchdElEKBmGv-8Ni4QKkg8ahRaEThVUxkIdrhRvnetlRSnr4p-9EZCWzRLB-jglhW7RSLrwZUAHVYPIW4UZCbnKv3SQM_VY6BhDpkcIn-iESdEd-DccJl7sqH_vFJZXUY41ZwIgPOWyOIcOI_Ih3Ztig0a6C3A5dK4qF5Ww", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiI3OWM5YTAwNi05Mzc2LTRhMzUtYjI3YS1iMmRhZmJiNWE0MmYiLCJleHAiOjE2OTc4NzIxMjEsIm5iZiI6MCwiaWF0IjoxNjk3ODM2MTM2LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNjg4NzhhZjctNjg0NS00NmMwLWIyYzEtMjUwZDRkOGViNDcwIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjVkMmY0Nzk3LTE5NGYtNDM0Yi1hYmJmLTZiZjU4OGJlNDE2ZCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiTWFya3VzIFNjaGVpZGdlbiIsInByZWZlcnJlZF91c2VybmFtZSI6InRlc3QiLCJnaXZlbl9uYW1lIjoiTWFya3VzIiwiZmFtaWx5X25hbWUiOiJTY2hlaWRnZW4iLCJlbWFpbCI6Im1hcmt1cy5zY2hlaWRnZW5AZmhpLWJlcmxpbi5kZSJ9.iEhpqWy4ONiob07bXR-UvFuZtkpK1DsI8bP_nJVkO0eSJKpzF8oTW-R9lbBLKwEVtpCzPwDiChm8M8geNwQNINqeaJ1Fjc99nB9AbETFQZt3pWq2MlqRo8-0M6fz172igsbkxWusgNaDr-WYAfcgyke7esa9qhpoCdME0fVz4FwATL1xLcQZmMIDMpuv8rECUo0OYV343-bH6h3G6It5NT-MqAR8jr05zPCHraOMJkl6eaUviXm7jLG-pncUAcVFdIzDIVjABYzHhI3tRADT8l8kZ6K0YqqvCNyRO5_duVJAkOIwW_dDhaShBa58xRFwm6ovbNEA59jOZ-4wZiEHOQ", "cookie": null } }, @@ -2319,8 +2499,9 @@ "status": 200, "body": "{\n \"data\": {\n \"m_def\": \"../upload/raw/schema.archive.yaml#/definitions/section_definitions/3\",\n \"name\": \"ELN example sample\",\n \"lab_id\": \"001\",\n \"tags\": [\n \"project\"\n ],\n \"substrate_type\": \"SLG\",\n \"processes\": {\n \"pvd_evaporation\": {\n \"datetime\": \"2022-05-10T07:20:00+00:00\",\n \"data_file\": \"PVDProcess.csv\"\n },\n \"hotplate_annealing\": {\n \"datetime\": \"2022-05-10T07:22:00+00:00\",\n \"set_temperature\": 373.15,\n \"duration\": 60\n }\n },\n \"description\": \"<p>A simple example for an \\\"sample\\\" that demonstrates how to combine different data entities.</p>\\n<p>The sample it-self defines a few properties (involved chemicals, used substrate) and uses inherited default properties (formula, name, lab id, ...)</p>\\n<p>But the sample also contains sub-sections that prodivde inforamtion about proccessed that were applied to this sample (PVD evaporation, hotplate annealing). </p>\\n<p>The sample also show references to other entries (chemicals, instruments).</p>\\n<p> </p>\"\n }\n}\n", "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-disposition": "attatchment; filename=\"sample.archive.json\"", + "content-disposition": "attachment; filename=\"sample.archive.json\"", "content-type": "application/octet-stream", "server": "uvicorn", "transfer-encoding": "chunked" @@ -2334,7 +2515,7 @@ "body": "", "headers": { "accept": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiI0ZmM4M2VlYi1jOWM1LTRmYzYtOWQ5Zi00ODljYmYyZDBhZmQiLCJleHAiOjE2ODc0NjI1NTIsIm5iZiI6MCwiaWF0IjoxNjg3NDI2NTY5LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNjg4NzhhZjctNjg0NS00NmMwLWIyYzEtMjUwZDRkOGViNDcwIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImViMDU3NmExLTU0Y2ItNDQ3ZC04MjNlLTMxYTQ1ZDRkNGMyMiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoibWFya3VzIFNjaGVpZGdlbiIsInByZWZlcnJlZF91c2VybmFtZSI6InRlc3QiLCJnaXZlbl9uYW1lIjoibWFya3VzIiwiZmFtaWx5X25hbWUiOiJTY2hlaWRnZW4iLCJlbWFpbCI6Im1hcmt1cy5zY2hlaWRnZW5AZmhpLWJlcmxpbi5kZSJ9.bpgIAKNiJWYUcQ5kfW7GccLDVp0h5KZXXKwYJW2vd3lJuyH24isP_r9Hyx42k86winKK1kpQJezmf4YLcc9af9jrXUB_ip94fhT6eTq4erctFIxx7CIFJaSjppQld5JFTKw1IajQyp3D16btY_UPlxs_Ih0rkBguN-WBX72kfsKUzRZ6q7gy99UK7y4tECwdq7uYElZo_8M4KnIVinrEvptbtvgUdnFdD0ex6rSIQoSU_3HBf5sJ2pJpxsS_7z_sXzr99tRiDZZ6XTyLhVavVXUUNL5YV3uOpOofOGqCqYppC4xBW3p7wV3qThWVaA4rCW3c_tA_NLLAIAQSlwi6lQ", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiJlZmZiOGQ0NC1iMjYzLTQxYzQtODA5NC02NDM5ZmNmYzNjODYiLCJleHAiOjE2OTc4NzIxMjEsIm5iZiI6MCwiaWF0IjoxNjk3ODM2MTM5LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNjg4NzhhZjctNjg0NS00NmMwLWIyYzEtMjUwZDRkOGViNDcwIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjVkMmY0Nzk3LTE5NGYtNDM0Yi1hYmJmLTZiZjU4OGJlNDE2ZCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiTWFya3VzIFNjaGVpZGdlbiIsInByZWZlcnJlZF91c2VybmFtZSI6InRlc3QiLCJnaXZlbl9uYW1lIjoiTWFya3VzIiwiZmFtaWx5X25hbWUiOiJTY2hlaWRnZW4iLCJlbWFpbCI6Im1hcmt1cy5zY2hlaWRnZW5AZmhpLWJlcmxpbi5kZSJ9.i5YZnBbkHQDN2EBPjVr9EKgD8JM0JwI1CtdzFPLa4y5jN-0M8lE7w3MsOXiXYQVB-OHl0xPQGKlATwgz0ornNxx4lFkzZJvXm9og30FC7Nn4rAuJqJxdwrejF6IbtTO__H8NQkzozmX1I-BR1SNYa52agJNEx9YnLixs6v8kise9HWBGXvh_tClfmdq1u9Ulv17T3PF-XQQU0L8yFAQa_z6NIxrqBEsDGke-OX8dGLAq3m4-vjajR8fY_CMpWb7EjLsWBh3vK4Z4KbikmgjRlo4jVagjxdH78goN9ZdDy__InbP113JbnJjA66nxxm6dUzVShE1w4Ju9IidqCjxgoQ", "cookie": null } }, @@ -2342,8 +2523,9 @@ "status": 200, "body": "{\n \"data\": {\n \"m_def\": \"../upload/raw/schema.archive.yaml#/definitions/section_definitions/3\",\n \"name\": \"ELN example sample\",\n \"lab_id\": \"001\",\n \"tags\": [\n \"project\"\n ],\n \"substrate_type\": \"SLG\",\n \"processes\": {\n \"pvd_evaporation\": {\n \"datetime\": \"2022-05-10T07:20:00+00:00\",\n \"data_file\": \"PVDProcess.csv\"\n },\n \"hotplate_annealing\": {\n \"datetime\": \"2022-05-10T07:22:00+00:00\",\n \"set_temperature\": 373.15,\n \"duration\": 60\n }\n },\n \"description\": \"<p>A simple example for an \\\"sample\\\" that demonstrates how to combine different data entities.</p>\\n<p>The sample it-self defines a few properties (involved chemicals, used substrate) and uses inherited default properties (formula, name, lab id, ...)</p>\\n<p>But the sample also contains sub-sections that prodivde inforamtion about proccessed that were applied to this sample (PVD evaporation, hotplate annealing). </p>\\n<p>The sample also show references to other entries (chemicals, instruments).</p>\\n<p> </p>\"\n }\n}\n", "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-disposition": "attatchment; filename=\"sample.archive.json\"", + "content-disposition": "attachment; filename=\"sample.archive.json\"", "content-type": "application/octet-stream", "server": "uvicorn", "transfer-encoding": "chunked" @@ -2366,7 +2548,7 @@ "headers": { "accept": "application/json", "content-type": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiJjYjA3OTAxZS1kMGE4LTRjMGEtYjY1YS1jMGNkMjQ0MWZiMjMiLCJleHAiOjE2ODc0NjI1NTIsIm5iZiI6MCwiaWF0IjoxNjg3NDI2NTY2LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNjg4NzhhZjctNjg0NS00NmMwLWIyYzEtMjUwZDRkOGViNDcwIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImViMDU3NmExLTU0Y2ItNDQ3ZC04MjNlLTMxYTQ1ZDRkNGMyMiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoibWFya3VzIFNjaGVpZGdlbiIsInByZWZlcnJlZF91c2VybmFtZSI6InRlc3QiLCJnaXZlbl9uYW1lIjoibWFya3VzIiwiZmFtaWx5X25hbWUiOiJTY2hlaWRnZW4iLCJlbWFpbCI6Im1hcmt1cy5zY2hlaWRnZW5AZmhpLWJlcmxpbi5kZSJ9.T2GOkPZJjAp_WMwqw_9tO-cDT6L6WFV7GwHiRb5DFNV7GbjG-q8X2pKAcp6MeGETC_JcgdGC_0Mu97UptMvnvWv4gdFyPW9R9jpVpMzTm0D0bYf4M4fyWlwkDL2io43rNgiDdTaQhUXhy823x-axb3slBtDogTjErgZ1wIS59Sj5eTZLMv4iP_J2TgVy22Hy50oiZA5dCnoyGkCY-_tECnoEhhPTc6fwQiQacUX-m7ovRZhcnskszQ1FfCQUBKRoTB_0Jgtn68MgzezHPCgHaHxTQv6TD0uUA_l8ZfpPdlkfwwRjV-bg90l4JbA3g4aQfvLK1y9j4LYg93npDKjVyQ", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiIyNDk4N2U4Ni1iZTZkLTQ2NDAtYmM1YS1hYmU0NDBiMTJkNTUiLCJleHAiOjE2OTc4NzIxMjEsIm5iZiI6MCwiaWF0IjoxNjk3ODM2MTM2LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNjg4NzhhZjctNjg0NS00NmMwLWIyYzEtMjUwZDRkOGViNDcwIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjVkMmY0Nzk3LTE5NGYtNDM0Yi1hYmJmLTZiZjU4OGJlNDE2ZCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiTWFya3VzIFNjaGVpZGdlbiIsInByZWZlcnJlZF91c2VybmFtZSI6InRlc3QiLCJnaXZlbl9uYW1lIjoiTWFya3VzIiwiZmFtaWx5X25hbWUiOiJTY2hlaWRnZW4iLCJlbWFpbCI6Im1hcmt1cy5zY2hlaWRnZW5AZmhpLWJlcmxpbi5kZSJ9.kKuWd7wpl_DN-D1f0pMMlsS6VPfWntn8uWUjTw1QXS4YkTqwPzM-xAuwkzGzdsX7LXY_HehVHR0tl7AwzWEdwMn70zZ1FD2amyIeBp5w3dOI-0NWLuSkemlJMoVtH-swrdJZdQ1vDVTw3Jy6KIPk_S2Ml98zjLv3SRVltnz78Ov1QdJzYWLL_SDts48iCmeOJ5FZ2ik5tbJ-rApUnDcq-V3uTsdqu8Veu_Xce36K-JBruGJzY33gMM5-IZwTPy3BzOCoFMLPGdKC10ZHjqgBbxSw3xqfl8m24a3i0CNq6NQhalo1O5G-mIsTCzR-6P83pyhVeHOYs3oXygPkmE-28w", "cookie": null } }, @@ -2505,11 +2687,14 @@ "pvd_evaporation": {} } } + ], + "eln": [ + "None" ] }, "name": "Sample", "base_sections": [ - "nomad.datamodel.metainfo.eln.Sample", + "nomad.datamodel.metainfo.basesections.CompositeSystem", "nomad.datamodel.data.EntryData" ], "quantities": [ @@ -2686,20 +2871,48 @@ "overview": true } ], - "plot": [ + "plotly_graph_object": [ { - "x": "time", - "y": [ - "chamber_pressure", - "substrate_temperature" - ] + "data": [ + { + "x": "#time", + "y": "#chamber_pressure" + }, + { + "x": "#time", + "y": "#substrate_temperature", + "yaxis": "y2" + } + ], + "layout": { + "title": { + "text": "Pressure and Temperature over Time" + }, + "yaxis2": { + "overlaying": "y", + "side": "right" + } + } + }, + { + "data": { + "x": "#time", + "y": "#chamber_pressure" + } + }, + { + "data": { + "x": "#time", + "y": "#substrate_temperature" + } } ] }, "name": "PvdEvaporation", "base_sections": [ "#/definitions/section_definitions/2", - "nomad.parsing.tabular.TableData" + "nomad.parsing.tabular.TableData", + "nomad.datamodel.metainfo.plot.PlotSection" ], "quantities": [ { @@ -2709,8 +2922,19 @@ "m_annotations": { "tabular_parser": [ { - "comment": "#", - "sep": "\\t" + "parsing_options": { + "sep": "\\t", + "comment": "#" + }, + "mapping_options": [ + { + "mapping_mode": "column", + "file_mode": "current_entry", + "sections": [ + "#root" + ] + } + ] } ], "browser": [ @@ -2758,20 +2982,12 @@ "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ - { - "defaultDisplayUnit": "mbar" - } + "None" ], "tabular": [ { "name": "Vacuum Pressure1" } - ], - "plot": [ - { - "x": "time", - "y": "chamber_pressure" - } ] }, "name": "chamber_pressure", @@ -2794,12 +3010,6 @@ "name": "Substrate PV", "unit": "degC" } - ], - "plot": [ - { - "x": "time", - "y": "substrate_temperature" - } ] }, "name": "substrate_temperature", @@ -2881,12 +3091,12 @@ }, "metadata": { "upload_id": "eln_upload_id", - "upload_create_time": "2023-06-22T09:35:59.826000+00:00", + "upload_create_time": "2023-10-20T21:08:49.528000+00:00", "entry_id": "83DS7AzwqTKFVwlrdVeaL3kMSLU_", "entry_name": "Electronic Lab Notebook example schema", "entry_type": "Schema", - "entry_hash": "x_zOdo_96pqN_qhfEOW6HCugy3zu", - "entry_create_time": "2023-06-22T09:36:00.005000+00:00", + "entry_hash": "01azS40P52J1MvDpy7hFvRlF1VOj", + "entry_create_time": "2023-10-20T21:08:49.607000+00:00", "parser_name": "parsers/archive", "mainfile": "schema.archive.yaml", "files": [ @@ -2899,9 +3109,9 @@ "embargo_length": 0, "license": "CC BY 4.0", "processed": true, - "last_processing_time": "2023-06-22T09:36:00.318808+00:00", + "last_processing_time": "2023-10-20T21:08:49.893404+00:00", "processing_errors": [], - "nomad_version": "1.2.0rc1.dev181+gce78efe22.d20230609", + "nomad_version": "1.2.2.dev85+g6f47bb0a0", "nomad_commit": "", "references": [], "main_author": "68878af7-6845-46c0-b2c1-250d4d8eb470", @@ -3005,10 +3215,10 @@ "nomad.metainfo.metainfo.SubSection" ], "entry_timestamp": { - "token_seed": "x_zOdo_96pqN_qhfEOW6HCugy3zu", - "token": "MIIYDQYJKoZIhvcNAQcCoIIX/jCCF/oCAQMxDTALBglghkgBZQMEAgIwgcwGCyqGSIb3DQEJEAEEoIG8BIG5MIG2AgEBBgsqhGgBhvZ3AgUBCzAvMAsGCWCGSAFlAwQCAQQg80ZARNPgXCnhfzcf0SvqTNUGd+9CrTsj9L+g4b4aQFwCBwqofCa7XfMYDzIwMjMwNjIyMDkzNjAwWjADAgEBoFSkUjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjKgghMiMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0BAQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAMZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK/9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWajXfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKzHtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO/tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3XmfeR+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAWgBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgwJjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUFBwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhLmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTCMtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHAEQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz+TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q7M4KMIIGlDCCBHygAwIBAgIQK9SucLnQY1sq6YTI1nSqMDANBgkqhkiG9w0BAQwFADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0EwHhcNMjIwNzI4MDg1NjI2WhcNMzMwNzI3MDg1NjI2WjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKxV7tHwlG8ETLal5Yhm+isISwnj+L8khxKkASO/MRXI6kGntuse79tVL5Fkvl9KE4etck3HaGWkAIOYTXAalmxp+2/DjhF5BsFLxmeuTFipdpVwY4rHOndRllSOX15D/fnXS1V+Bv6T+3iHQLSORYeKxgv8ff7zWp/QvAuCOejeduR8Iis6j0s+meTdl2DNPm0+FXWLGccj0cC5I4XKnc4NrQgdvmD+pXfrgTpHHwq4RQnnkweGP2Wpa2V2ghhSJQVoyMl2/VBrKQGqA7z9iwkkkXJ76z+PaiCBg+06h2w6GLprm1g4MfP2BOzOQX3exdeJkDqp6+yJghUuU8v530ju11UkOk65SGF/KywOAUo5zrtFqGGUyzlsmnpFj62gAIb8yUN5l7eq7hmulRJY8sw01H4BJkg6Z8T+jhUjjnOMQTl25FfDjuIrxn9KSH3/iDrMrDsL7kkh3xdRcUnqzWW91XFJ3skGk/qJgvpGhkz6b7Mpcud1fzFCrh1YYESKxoliCYDfU6+96GVx5Opm7s5F4h4WqP9QEK0N+avprRir517X+tnbCRc7WH/13HhC08PyiXdWC+4ZUPcxkf3xRPn8faby3dsmd2NTwraWjc6uouyWdpkZXQtV8IpAbY6EOhk9k95MkZ9JQFPGOP03Tf+KabcKLhZPu+SbHU6D0OgQIDAQABo4IBYjCCAV4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUI8E8zFMzGVaO2OPzzjz8qHNHVuowHwYDVR0jBBgwFoAUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0c2NhMjAyMS5jcmwwbwYIKwYBBQUHAQEEYzBhMCgGCCsGAQUFBzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDUGCCsGAQUFBzAChilodHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RzY2EyMDIxLmNlcjBABgNVHSAEOTA3MDUGCyqEaAGG9ncCBQELMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAa8b3PSM+L1eQ+ewXgKZtaX1YAY0yloH5W9YbcSQPR0r153qv4//uZKIbv9adI+iCTGE6Um0+6BwLYOfZtMDNB55q43DeN6jDaOU7P4F/0gZmNKjM3ZTuptQ/XoJ+1OPRIBjviGRQJ5jB9YS8fqbHunYLU4WeGqq/s0X0TaExTUlMcjkqOnJlSn0W2YE4ixHDHoRiU3jOQkLNQJg6RfoasqtF+jL9ATLR1NsD6FZSN8a0UNeu5TOuP4JfHQmMzDxfJfFvPXbNkX66PWNaeXSNC/MetKKW9X/J+R3+GslvSnO64FHZZ3yXOHGHb1dCcVmKUmTzeSyTOeMUiq73l52KtTTSLqL6iTjPZosVTCdk01j5H0NqZdB/2aJMcVweKhCgMkmum33Io6EIjmkecCkEftMq3OyiHarfoTlYZeblLYvXGcQPCTIjXV+kmmrIJZyfaJU0jCeAUTurQgEhLyXngs1+mVYikQx2xUAmjGdV3cZcEegqpH2tqeRDdQykEo8SNaepXXUJnPT01RljPHaW0SrRxwaDkL31hHYoD9xCO0Rmalk6J8K/AGjAoE82GxabmXnd5Ru8otI8FCaPf68lDRQPNpvQqcy3GgCmi0NLNbm6Ees2lkrfX6lAEjc/cw/vCIhpclKiiABVYkDKqsh3o9LyuxtoD6hMuRg3cS/wwWkwgga5MIIEoaADAgECAhEA5/9pxzs1zkuRJth0fGilhzANBgkqhkiG9w0BAQwFADCBgDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMB4XDTIxMDUxOTA1MzIwN1oXDTM2MDUxODA1MzIwN1owVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIFRpbWVzdGFtcGluZyAyMDIxIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6RIfBDXtuV16xaaVQb6KZX9Od9FtJXXTZo7b+GEof3+3g0ChWiKnO7R4+6MfrvLyLCWZa6GpFHjEt4t0/GiUQvnkLOBRdBqr5DOvlmTvJJs2X8ZmWgWJjC7PBZLYBWAs8sJl3kNXxBMX5XntjqWx1ZOuuXl0R4x+zGGSMzZ45dpvB8vLpQfZkfMC/1tL9KYyjU+htLH68dZJPtzhqLBVG+8ljZ1ZFilOKksS79epCeqFSeAUm2eMTGpOiS3gfLM6yvb8Bg6bxg5yglDGC9zbr4sB9ceIGRtCQF1N8dqTgM/dSViiUgJkcv5dLNJeWxGCqJYPgzKlYZTgDXfGIeZpEFmjBLwURP5ABsyKoFocMzdjrCiFbTvJn+bD1kq78qZUgAQGGtd6zGJ88H4NPJ5Y2R4IargiWAmv8RyvWnHr/VA+2PrrK9eXe5q7M88YRdSTq9TKbqdnITUgZcjjm4ZUjteq8K331a4P0s2in0p3UubMEYa/G5w6jSWPUzchGLwWKYBfeSu6dIOC4LkeAPvmdZxSB1lWOb9HzVWZoM8Q/blaP4LWt6JxjkI9yQsYGMdCqwl7uMnPUIlcExS1mzXRxUowQref/EPaS7kYVaHHQrp4XB7nTEtQhkP0Z9Puz/n8zIFnUSnxDof4Yy650PAXSYmK2TcbyDoTNmmt8xAxzcMCAwEAAaOCAVUwggFRMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFL5UAi+/QGxzQ86sCSVOnkNEGu7gMB8GA1UdIwQYMBaAFLahVDkCw6A/joq8+tT4HKbROg79MA4GA1UdDwEB/wQEAwIBBjATBgNVHSUEDDAKBggrBgEFBQcDCDAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vY3JsLmNlcnR1bS5wbC9jdG5jYTIuY3JsMGwGCCsGAQUFBwEBBGAwXjAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAyBggrBgEFBQcwAoYmaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhMi5jZXIwOQYDVR0gBDIwMDAuBgRVHSAAMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAuJNZd8lMFf2UBwigp3qgLPBBk58BFCS3Q6aJDf3TISoytK0eal/JyCB88aUEd0wMNiEcNVMbK9j5Yht2whaknUE1G32k6uld7wcxHmw67vUBY6pSp8QhdodY4SzRRaZWzyYlviUpyU4dXyhKhHSncYJfa1U75cXxCe3sTp9uTBm3f8Bj8LkpjMUSVTtMJ6oEu5JqCYzRfc6nnoRUgwz/GVZFoOBGdrSEtDN7mZgcka/tS5MI47fALVvN5lZ2U8k7Dm/hTX8CWOw0uBZloZEW4HB0Xra3qE4qzzq/6M8gyoU/DE0k3+i7bYOrOk/7tPJg1sOhytOGUQ30PbG++0FfJioDuOFhj99b151SqFlSaRQYz74y/P2XJP+cF19oqozmi0rRTkfyEJIvhIZ+M5XIFZttmVQgTxfpfJwMFFEoQrSrklOxpmSygppsUDJEoliC05vBLVQ+gMZyYaKvBJ4YxBMlKH5ZHkRdloRYlUDplk8GUa+OCMVhpDSQurU6K1ua5dmZftnvSSz2H96UrQDzA6DyiI1V3ejVtvn2azVAXg6NnjmuRZ+wa7Pxy0H3+V4K4rOTHlG3VYA6xfLsTunCz72T6Ot4+tkrDYOeaU1pPX1CBfYj6EW2+ELq46GP8KCNUQDirWLU4nOmgCat7vN0SD6RlwUiSsMeCiQDmZwgwrUxggPvMIID6wIBATBqMFYxCzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIQK9SucLnQY1sq6YTI1nSqMDANBglghkgBZQMEAgIFAKCCAVYwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yMzA2MjIwOTM2MDBaMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEIAO5mmRJdJhKlbbMXYDTRNB0+972yiQEhCvmzw5EIgeKMD8GCSqGSIb3DQEJBDEyBDDU2ZUusA1an7a2Xf8xT4E9oo4iChX+U9FZdlsNsTCpOOwffdxxVvFCDbb8obAEK70wgZ8GCyqGSIb3DQEJEAIMMYGPMIGMMIGJMIGGBBS/T2vEmC3eFQWo78jHp51NFDUAzjBuMFqkWDBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0ECECvUrnC50GNbKumEyNZ0qjAwDQYJKoZIhvcNAQEBBQAEggIAstsP5e8Sa27pyIRd+FS4xNowYEibmvpoeE5S00TFhMCojdnZffxVo1ZU9IdAVRmskyDHdvqDV3n7ii1Brmj5w/uiAD3QYE6Uh3VH8cfDNg0+ebDlglTxvGr8nD71k158akTDUcS6YOmGTUOi/Or/C8f4G+TREG6iQ0W4pYBqxaHod/Mh4fokgdFYhpwzPujXLmauz2KvSy95iPD8c/la+8ZQE5V8BUVfzGGmmLvhe8nH70FkxLXx8lwCeNBH1Q4o0hAl/HCx3Rmr1sNIUE/MIo4X3LXPEL0Bbug3eUzMV3sqgvq5BOhxVexIGWu29cB5DstjDCTiUwA5Yw0Y0Zh9V1zyBxO8UC2f7prk71dLI8zuxjFxD2IV4yDTcv59QYNjb3b0ZA/DankhDWQzhRK/nndNXVBq4TBqHa9UE0gqQbixJgo6vhw0JD0hV6XtmmL4qfL9WQnUsPRweVJQdUi6p/67XVNZhVvtTZSHFwogx6bwQSgieK6Aj81Qs/w3ug4T+8BM+EuG9icwBNa0vhj0tAOJKOdzENXQeXv0yqmK/Zwu9KlsOGP5dkx6ITWM4U2a9/ZiLufi7YZ16QB2nrTGX9QrqfuMAtRBP7MArtHgF+AvBiYfZqM80gnNOSx+KtvnTcUOxl2YnZjnFQUnPqd9PVIit8u+2Dk2pNnC2HzA3js=", + "token_seed": "01azS40P52J1MvDpy7hFvRlF1VOj", + "token": "MIIYDQYJKoZIhvcNAQcCoIIX/jCCF/oCAQMxDTALBglghkgBZQMEAgIwgcwGCyqGSIb3DQEJEAEEoIG8BIG5MIG2AgEBBgsqhGgBhvZ3AgUBCzAvMAsGCWCGSAFlAwQCAQQg/D5oExphofXQjL22D4SFaLV+OQXdKB6ocpR2OWIb8m4CBwqofC4XuLYYDzIwMjMxMDIwMjEwODQ5WjADAgEBoFSkUjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjKgghMiMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0BAQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAMZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK/9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWajXfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKzHtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO/tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3XmfeR+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAWgBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgwJjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUFBwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhLmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTCMtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHAEQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz+TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q7M4KMIIGlDCCBHygAwIBAgIQK9SucLnQY1sq6YTI1nSqMDANBgkqhkiG9w0BAQwFADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0EwHhcNMjIwNzI4MDg1NjI2WhcNMzMwNzI3MDg1NjI2WjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKxV7tHwlG8ETLal5Yhm+isISwnj+L8khxKkASO/MRXI6kGntuse79tVL5Fkvl9KE4etck3HaGWkAIOYTXAalmxp+2/DjhF5BsFLxmeuTFipdpVwY4rHOndRllSOX15D/fnXS1V+Bv6T+3iHQLSORYeKxgv8ff7zWp/QvAuCOejeduR8Iis6j0s+meTdl2DNPm0+FXWLGccj0cC5I4XKnc4NrQgdvmD+pXfrgTpHHwq4RQnnkweGP2Wpa2V2ghhSJQVoyMl2/VBrKQGqA7z9iwkkkXJ76z+PaiCBg+06h2w6GLprm1g4MfP2BOzOQX3exdeJkDqp6+yJghUuU8v530ju11UkOk65SGF/KywOAUo5zrtFqGGUyzlsmnpFj62gAIb8yUN5l7eq7hmulRJY8sw01H4BJkg6Z8T+jhUjjnOMQTl25FfDjuIrxn9KSH3/iDrMrDsL7kkh3xdRcUnqzWW91XFJ3skGk/qJgvpGhkz6b7Mpcud1fzFCrh1YYESKxoliCYDfU6+96GVx5Opm7s5F4h4WqP9QEK0N+avprRir517X+tnbCRc7WH/13HhC08PyiXdWC+4ZUPcxkf3xRPn8faby3dsmd2NTwraWjc6uouyWdpkZXQtV8IpAbY6EOhk9k95MkZ9JQFPGOP03Tf+KabcKLhZPu+SbHU6D0OgQIDAQABo4IBYjCCAV4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUI8E8zFMzGVaO2OPzzjz8qHNHVuowHwYDVR0jBBgwFoAUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0c2NhMjAyMS5jcmwwbwYIKwYBBQUHAQEEYzBhMCgGCCsGAQUFBzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDUGCCsGAQUFBzAChilodHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RzY2EyMDIxLmNlcjBABgNVHSAEOTA3MDUGCyqEaAGG9ncCBQELMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAa8b3PSM+L1eQ+ewXgKZtaX1YAY0yloH5W9YbcSQPR0r153qv4//uZKIbv9adI+iCTGE6Um0+6BwLYOfZtMDNB55q43DeN6jDaOU7P4F/0gZmNKjM3ZTuptQ/XoJ+1OPRIBjviGRQJ5jB9YS8fqbHunYLU4WeGqq/s0X0TaExTUlMcjkqOnJlSn0W2YE4ixHDHoRiU3jOQkLNQJg6RfoasqtF+jL9ATLR1NsD6FZSN8a0UNeu5TOuP4JfHQmMzDxfJfFvPXbNkX66PWNaeXSNC/MetKKW9X/J+R3+GslvSnO64FHZZ3yXOHGHb1dCcVmKUmTzeSyTOeMUiq73l52KtTTSLqL6iTjPZosVTCdk01j5H0NqZdB/2aJMcVweKhCgMkmum33Io6EIjmkecCkEftMq3OyiHarfoTlYZeblLYvXGcQPCTIjXV+kmmrIJZyfaJU0jCeAUTurQgEhLyXngs1+mVYikQx2xUAmjGdV3cZcEegqpH2tqeRDdQykEo8SNaepXXUJnPT01RljPHaW0SrRxwaDkL31hHYoD9xCO0Rmalk6J8K/AGjAoE82GxabmXnd5Ru8otI8FCaPf68lDRQPNpvQqcy3GgCmi0NLNbm6Ees2lkrfX6lAEjc/cw/vCIhpclKiiABVYkDKqsh3o9LyuxtoD6hMuRg3cS/wwWkwgga5MIIEoaADAgECAhEA5/9pxzs1zkuRJth0fGilhzANBgkqhkiG9w0BAQwFADCBgDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMB4XDTIxMDUxOTA1MzIwN1oXDTM2MDUxODA1MzIwN1owVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIFRpbWVzdGFtcGluZyAyMDIxIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6RIfBDXtuV16xaaVQb6KZX9Od9FtJXXTZo7b+GEof3+3g0ChWiKnO7R4+6MfrvLyLCWZa6GpFHjEt4t0/GiUQvnkLOBRdBqr5DOvlmTvJJs2X8ZmWgWJjC7PBZLYBWAs8sJl3kNXxBMX5XntjqWx1ZOuuXl0R4x+zGGSMzZ45dpvB8vLpQfZkfMC/1tL9KYyjU+htLH68dZJPtzhqLBVG+8ljZ1ZFilOKksS79epCeqFSeAUm2eMTGpOiS3gfLM6yvb8Bg6bxg5yglDGC9zbr4sB9ceIGRtCQF1N8dqTgM/dSViiUgJkcv5dLNJeWxGCqJYPgzKlYZTgDXfGIeZpEFmjBLwURP5ABsyKoFocMzdjrCiFbTvJn+bD1kq78qZUgAQGGtd6zGJ88H4NPJ5Y2R4IargiWAmv8RyvWnHr/VA+2PrrK9eXe5q7M88YRdSTq9TKbqdnITUgZcjjm4ZUjteq8K331a4P0s2in0p3UubMEYa/G5w6jSWPUzchGLwWKYBfeSu6dIOC4LkeAPvmdZxSB1lWOb9HzVWZoM8Q/blaP4LWt6JxjkI9yQsYGMdCqwl7uMnPUIlcExS1mzXRxUowQref/EPaS7kYVaHHQrp4XB7nTEtQhkP0Z9Puz/n8zIFnUSnxDof4Yy650PAXSYmK2TcbyDoTNmmt8xAxzcMCAwEAAaOCAVUwggFRMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFL5UAi+/QGxzQ86sCSVOnkNEGu7gMB8GA1UdIwQYMBaAFLahVDkCw6A/joq8+tT4HKbROg79MA4GA1UdDwEB/wQEAwIBBjATBgNVHSUEDDAKBggrBgEFBQcDCDAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vY3JsLmNlcnR1bS5wbC9jdG5jYTIuY3JsMGwGCCsGAQUFBwEBBGAwXjAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAyBggrBgEFBQcwAoYmaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhMi5jZXIwOQYDVR0gBDIwMDAuBgRVHSAAMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAuJNZd8lMFf2UBwigp3qgLPBBk58BFCS3Q6aJDf3TISoytK0eal/JyCB88aUEd0wMNiEcNVMbK9j5Yht2whaknUE1G32k6uld7wcxHmw67vUBY6pSp8QhdodY4SzRRaZWzyYlviUpyU4dXyhKhHSncYJfa1U75cXxCe3sTp9uTBm3f8Bj8LkpjMUSVTtMJ6oEu5JqCYzRfc6nnoRUgwz/GVZFoOBGdrSEtDN7mZgcka/tS5MI47fALVvN5lZ2U8k7Dm/hTX8CWOw0uBZloZEW4HB0Xra3qE4qzzq/6M8gyoU/DE0k3+i7bYOrOk/7tPJg1sOhytOGUQ30PbG++0FfJioDuOFhj99b151SqFlSaRQYz74y/P2XJP+cF19oqozmi0rRTkfyEJIvhIZ+M5XIFZttmVQgTxfpfJwMFFEoQrSrklOxpmSygppsUDJEoliC05vBLVQ+gMZyYaKvBJ4YxBMlKH5ZHkRdloRYlUDplk8GUa+OCMVhpDSQurU6K1ua5dmZftnvSSz2H96UrQDzA6DyiI1V3ejVtvn2azVAXg6NnjmuRZ+wa7Pxy0H3+V4K4rOTHlG3VYA6xfLsTunCz72T6Ot4+tkrDYOeaU1pPX1CBfYj6EW2+ELq46GP8KCNUQDirWLU4nOmgCat7vN0SD6RlwUiSsMeCiQDmZwgwrUxggPvMIID6wIBATBqMFYxCzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIQK9SucLnQY1sq6YTI1nSqMDANBglghkgBZQMEAgIFAKCCAVYwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yMzEwMjAyMTA4NDlaMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEIAO5mmRJdJhKlbbMXYDTRNB0+972yiQEhCvmzw5EIgeKMD8GCSqGSIb3DQEJBDEyBDDF5qoifAISOq4sqG7+8BVkbXbupDTw/pPxIgV7ZKFIe3BZzPe2l7ga1KX1Cb2rDaowgZ8GCyqGSIb3DQEJEAIMMYGPMIGMMIGJMIGGBBS/T2vEmC3eFQWo78jHp51NFDUAzjBuMFqkWDBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0ECECvUrnC50GNbKumEyNZ0qjAwDQYJKoZIhvcNAQEBBQAEggIAOLRexMrIUCydeNNSXdYoRxI8vx2CPNCmXUJvOe3cB7xa0e5XUpsgP0QDDdYGRKH28o3FeODdBOK+d6JHXTrMUZzp6A10/jN9f/HlbOskmss5RFA/MjnlZZtu3ddf+pEiKRFQwD9qEWbV5MBFw8U0lKdUzfzTjEoN5KAlAk2xhK7xXw8gKCTHlSc5w0lLU/fnZmDe7a+Uh0DEGj5MFQ5FTH9q2uSD+6P2iShCNPilJjRtet5mvBruFB5hLofWY/Emk0aYP59rHg9v81+ZV880EkHt6ahWQnJkl4D4w064OwWFqBx0euloqRV34gskDBulSgYTfiN066Ag6eFRsZ8Uoz0gAiCqSNU0ErDngKsmUCbsYRIw87pQTzbcm7/YDFSO0FZHnngAPHB574XkBzfg/J3zWFJgXJ1gPDFlJTkOtGV/lBN9Tz+z4EWODgYGXn3sU2asYvwe/U06ucaAxGNjhYgxXXh/kF4uwNGW+17dbsATV4pjp1etjnT+CnxRe2KbBXvVGwfCT+yoOisobEz3N4XZRl1UBqvAE9CSiATEAhJtOquFHPIvixLDUVHISdG353cKtDaSq/RoZoCqOykeZ7gxAHqa7ALVT6HV7GFXXrfaO9cz+C5mGUVdRsCX+dCiUN/h8KEtmm5aSro2Q7VApsIAfOTwOmeGGASL0mam/B0=", "tsa_server": "http://time.certum.pl/", - "timestamp": "2023-06-22T09:36:00+00:00" + "timestamp": "2023-10-20T21:08:49+00:00" }, "section_defs": [ { @@ -3018,7 +3228,7 @@ }, { "definition_qualified_name": "nomad.datamodel.datamodel.EntryArchive", - "definition_id": "9e36824ae135f1e5ee5485911cb5fc03bc47af1d", + "definition_id": "1a38309e86abd87e7ef9ff7aa89560cf22ab111e", "used_directly": true }, { @@ -3033,12 +3243,12 @@ }, { "definition_qualified_name": "nomad.datamodel.results.Properties", - "definition_id": "9fcaeef3034c9b3861ab45bcea5014c65ffb3da2", + "definition_id": "43288046582240d7a33ec8b5fe4ca86988c2378c", "used_directly": true }, { "definition_qualified_name": "nomad.datamodel.results.Results", - "definition_id": "1ee9d4d17197a78dcfa5f1814b1ff3e2b275c195", + "definition_id": "ba0a320c9aa599c7c4a0af8c545f3cfe76cc4e70", "used_directly": true }, { @@ -3078,8 +3288,9 @@ } }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "35199", + "content-length": "36345", "content-type": "application/json", "server": "uvicorn" } @@ -3094,16 +3305,17 @@ "body": "", "headers": { "accept": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiI0YzdiNGU0Yi1iZTk4LTQwODktOGQ1ZS03ZTNlNGE5Y2NmNjAiLCJleHAiOjE2ODc0NjI1NTIsIm5iZiI6MCwiaWF0IjoxNjg3NDI2NTY2LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNjg4NzhhZjctNjg0NS00NmMwLWIyYzEtMjUwZDRkOGViNDcwIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImViMDU3NmExLTU0Y2ItNDQ3ZC04MjNlLTMxYTQ1ZDRkNGMyMiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoibWFya3VzIFNjaGVpZGdlbiIsInByZWZlcnJlZF91c2VybmFtZSI6InRlc3QiLCJnaXZlbl9uYW1lIjoibWFya3VzIiwiZmFtaWx5X25hbWUiOiJTY2hlaWRnZW4iLCJlbWFpbCI6Im1hcmt1cy5zY2hlaWRnZW5AZmhpLWJlcmxpbi5kZSJ9.OoN_j7KcS7N5uYdJIpHaYcC1BxDDO2U8Ckuz9DCzamTKaBhzPIZUklq-nSldvgTf0fk_wnbjG-GLerAbuy3eDO7CG7NzBedctHzRcurOkuHYOvzxyyQ1D3a6KSOIggrYxixvngfjAXnMD9p0R17cvzuPHSajaqtgYBsoyJ1zVb6sWOSXKEpkpjFVKhU9-QG-sd3l-c734sn_XWcir7nmQYYEpgBr6phWyJ7uDncz5SnSjA-WOA14GCeYSu6Bg62xGxM2zkIXntwfCZNXT6gSP1kJNlQfoMZipxFtQC6_-FSohpSY8TaC7wunchDaRVY7KUBEnws-nzH-0bNIj20Wcg", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiJlYjM0NmJiZi05YjlkLTQzYmEtYTNhYi1jNGNmNzY1NDgxMTMiLCJleHAiOjE2OTc4NzIxMjEsIm5iZiI6MCwiaWF0IjoxNjk3ODM2MTM2LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNjg4NzhhZjctNjg0NS00NmMwLWIyYzEtMjUwZDRkOGViNDcwIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjVkMmY0Nzk3LTE5NGYtNDM0Yi1hYmJmLTZiZjU4OGJlNDE2ZCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiTWFya3VzIFNjaGVpZGdlbiIsInByZWZlcnJlZF91c2VybmFtZSI6InRlc3QiLCJnaXZlbl9uYW1lIjoiTWFya3VzIiwiZmFtaWx5X25hbWUiOiJTY2hlaWRnZW4iLCJlbWFpbCI6Im1hcmt1cy5zY2hlaWRnZW5AZmhpLWJlcmxpbi5kZSJ9.Xf0BmvmxA18uQfT9di2RpYX9ALnWuD2IQ8xbeqhjINNhWU-eQC1fX6SExzw-MYWXKXEf2xRMWUmc3lJly8GqbxdzHe7zFAJJX6U1e9ImmAOSPdd_GM0140233Mrh-Z-otgaQo47CTmMqHpqyzJ8vE-7lKnok14hpTwGHModBDxJXo0wowbxWOBQz5GUv2exQp_csMmimdzuXlAtdf-Pb3txSKk2AYwh8yk5NFY-izVU2Y_LbJbzopOaIjL3GLi9yuFu3qO89L9zLGh2BSdH6spdbQUWfv5sMDTD0Qw_Qf8k5c9Eug153E8Ndcfi82X7r7q-nnZuBbsx2x4tK2b5Wuw", "cookie": null } }, "response": { "status": 200, - "body": "# Schemas can be defined as yaml files like this. The archive.yaml format will be\n# interpreted by nomad as a nomad archive. Therefore, all definitions have to be\n# put in a top-level section called \"definitions\"\ndefinitions:\n # The \"definitions\" section is interpreted as a nomad schema package\n # Schema packages can have a name:\n name: 'Electronic Lab Notebook example schema'\n # Schema packages contain section definitions. This is where the interesting schema\n # information begins.\n sections:\n # Here we define a section called \"Chemical\":\n Chemical:\n # Section definition can have base_sections. Base sections are other schema\n # definition and all properties of these will be inherited.\n base_sections:\n - 'nomad.datamodel.metainfo.eln.Chemical' # Provides typical quantities like name, descriptions, chemical_formula and makes those available for search\n - 'nomad.datamodel.data.EntryData' # Declares this as a top-level entry section. This determines the types of entries you can create. With this we will be able to create a \"Chemical\" entry.\n # All definitions, sections, sub_sections, quantities, can provide a description.\n description: |\n This is an example description for Chemical.\n A description can contain **markdown** markup and TeX formulas, like $\\sum\\limits_{i=0}^{n}$.\n # Sections define quantities. Quantities allow to manage actual data. Quantities\n # can have various types, shapes, and units.\n quantities:\n # Here we define a quantity called \"from\"\n form:\n # This defines a Enum type with pre-defined possible values.\n type:\n type_kind: Enum\n type_data:\n - crystalline solid\n - powder\n # Annotations allow to provide additional information that is beyond just defining\n # the possible data.\n m_annotations:\n # The eln annotation allows add the quantity to a ELN\n eln:\n component: EnumEditQuantity # A form field component for EnumQuantities that uses a pull down menu.\n cas_number:\n type: str\n m_annotations:\n eln:\n component: StringEditQuantity\n ec_number:\n type: str\n m_annotations:\n eln:\n component: StringEditQuantity\n Instrument:\n base_sections:\n - nomad.datamodel.metainfo.eln.Instrument\n - nomad.datamodel.data.EntryData\n Process:\n base_section: nomad.datamodel.metainfo.eln.Process\n quantities:\n instrument:\n type: Instrument\n m_annotations:\n eln:\n component: ReferenceEditQuantity\n Sample:\n m_annotations:\n # The template annotation allows to define what freshly created entries (instances of this schema) will look like.\n # In this example we create a sample with an empty pvd_evaporation process.\n template:\n processes:\n pvd_evaporation: {}\n base_sections:\n - 'nomad.datamodel.metainfo.eln.Sample'\n - 'nomad.datamodel.data.EntryData'\n quantities:\n name:\n type: str # The simple string type\n default: Default Sample Name\n m_annotations:\n eln:\n component: StringEditQuantity # A simple text edit form field\n tags:\n type:\n type_kind: Enum\n type_data:\n - internal\n - collaboration\n - project\n - other\n shape: ['*'] # Shapes define non scalar values, like lists ['*'], vectors ['*', 3], etc.\n m_annotations:\n eln:\n component: AutocompleteEditQuantity # Allows to edit enums with an auto complete text form field\n chemicals:\n type: Chemical # Types can also be other sections. This allows to reference a different section.\n shape: ['*']\n m_annotations:\n eln:\n component: ReferenceEditQuantity # A editor component that allows to select from available \"Chemical\"s\n substrate_type:\n type:\n type_kind: Enum\n type_data:\n - Fused quartz glass\n - SLG\n - other\n m_annotations:\n eln:\n component: RadioEnumEditQuantity\n substrate_thickness:\n type: np.float64\n unit: m\n m_annotations:\n eln:\n component: NumberEditQuantity\n sample_is_from_collaboration:\n type: bool\n m_annotations:\n eln:\n component: BoolEditQuantity\n # Besides quantities, a section can define sub_sections. This allows hierarchies\n # of information.\n sub_sections:\n # Here we define a sub_section of \"Sample\" called \"processes\"\n processes:\n section:\n # The sub-section's section, is itself a section definition\n m_annotations:\n eln: # adds the sub-section to the eln and allows users to create new instances of this sub-section\n # We can also nest sub_sections. It goes aribitrarely deep.\n sub_sections:\n pvd_evaporation:\n section:\n base_sections: ['Process', 'nomad.parsing.tabular.TableData']\n m_annotations:\n # We can use the eln annotations to put the section to the overview\n # page, and hide unwanted inherited quantities.\n eln:\n overview: true\n hide: ['name', 'lab_id', 'description', 'method']\n # Plots are shown in the eln. Currently we only support simple x,y\n # line plots\n plot:\n title: Pressure and Temperature over Time\n x: time\n y:\n - chamber_pressure\n - substrate_temperature\n quantities:\n data_file:\n type: str\n description: |\n A reference to an uploaded .csv produced by the PVD evaporation instruments\n control software.\n m_annotations:\n # The tabular_parser annotation, will treat the values of this\n # quantity as files. It will try to interpret the files and fill\n # quantities in this section (and sub_section) with the column\n # data of .csv or .xlsx files. There is also a mode option that by default, is set to column.\n tabular_parser:\n sep: '\\t'\n comment: '#'\n browser:\n adaptor: RawFileAdaptor # Allows to navigate to files in the data browser\n eln:\n component: FileEditQuantity # A form field that allows to drop and select files.\n time:\n type: np.float64\n shape: ['*']\n unit: s\n m_annotations:\n # The tabular annotation defines a mapping to column headers used in\n # tabular data files\n tabular:\n name: Process Time in seconds\n chamber_pressure:\n type: np.float64\n shape: ['*']\n unit: mbar\n m_annotations:\n eln:\n defaultDisplayUnit: mbar\n tabular:\n name: Vacuum Pressure1\n plot:\n x: time\n y: chamber_pressure\n substrate_temperature:\n type: np.float64\n shape: ['*']\n unit: kelvin\n m_annotations:\n tabular:\n name: Substrate PV\n unit: degC\n plot:\n x: time\n y: substrate_temperature\n hotplate_annealing:\n section:\n base_section: Process\n m_annotations:\n # We can use the eln annotations to put the section to the overview\n # page, and hide unwanted inherited quantities.\n eln:\n overview: true\n hide: ['name', 'lab_id', 'description']\n quantities:\n set_temperature:\n type: np.float64 # For actual numbers, we use numpy datatypes\n unit: K # The unit system is based on Pint and allows all kinds of abreviations, prefixes, and complex units\n m_annotations:\n eln:\n component: NumberEditQuantity # A component to enter numbers (with units)\n duration:\n type: np.float64\n unit: s\n m_annotations:\n eln:\n component: NumberEditQuantity\n\n", + "body": "# Schemas can be defined as yaml files like this. The archive.yaml format will be\n# interpreted by nomad as a nomad archive. Therefore, all definitions have to be\n# put in a top-level section called \"definitions\"\ndefinitions:\n # The \"definitions\" section is interpreted as a nomad schema package\n # Schema packages can have a name:\n name: 'Electronic Lab Notebook example schema'\n # Schema packages contain section definitions. This is where the interesting schema\n # information begins.\n sections:\n # Here we define a section called \"Chemical\":\n Chemical:\n # Section definition can have base_sections. Base sections are other schema\n # definition and all properties of these will be inherited.\n base_sections:\n - 'nomad.datamodel.metainfo.eln.Chemical' # Provides typical quantities like name, descriptions, chemical_formula and makes those available for search\n - 'nomad.datamodel.data.EntryData' # Declares this as a top-level entry section. This determines the types of entries you can create. With this we will be able to create a \"Chemical\" entry.\n # All definitions, sections, sub_sections, quantities, can provide a description.\n description: |\n This is an example description for Chemical.\n A description can contain **markdown** markup and TeX formulas, like $\\sum\\limits_{i=0}^{n}$.\n # Sections define quantities. Quantities allow to manage actual data. Quantities\n # can have various types, shapes, and units.\n quantities:\n # Here we define a quantity called \"from\"\n form:\n # This defines a Enum type with pre-defined possible values.\n type:\n type_kind: Enum\n type_data:\n - crystalline solid\n - powder\n # Annotations allow to provide additional information that is beyond just defining\n # the possible data.\n m_annotations:\n # The eln annotation allows add the quantity to a ELN\n eln:\n component: EnumEditQuantity # A form field component for EnumQuantities that uses a pull down menu.\n cas_number:\n type: str\n m_annotations:\n eln:\n component: StringEditQuantity\n ec_number:\n type: str\n m_annotations:\n eln:\n component: StringEditQuantity\n Instrument:\n base_sections:\n - nomad.datamodel.metainfo.eln.Instrument\n - nomad.datamodel.data.EntryData\n Process:\n base_section: nomad.datamodel.metainfo.eln.Process\n quantities:\n instrument:\n type: '#/Instrument'\n m_annotations:\n eln:\n component: ReferenceEditQuantity\n Sample:\n m_annotations:\n # The template annotation allows to define what freshly created entries (instances of this schema) will look like.\n # In this example we create a sample with an empty pvd_evaporation process.\n template:\n processes:\n pvd_evaporation: {}\n eln:\n base_sections:\n - 'nomad.datamodel.metainfo.basesections.CompositeSystem'\n - 'nomad.datamodel.data.EntryData'\n quantities:\n name:\n type: str # The simple string type\n default: Default Sample Name\n m_annotations:\n eln:\n component: StringEditQuantity # A simple text edit form field\n tags:\n type:\n type_kind: Enum\n type_data:\n - internal\n - collaboration\n - project\n - other\n shape: ['*'] # Shapes define non scalar values, like lists ['*'], vectors ['*', 3], etc.\n m_annotations:\n eln:\n component: AutocompleteEditQuantity # Allows to edit enums with an auto complete text form field\n chemicals:\n type: '#/Chemical' # Types can also be other sections. This allows to reference a different section.\n shape: ['*']\n m_annotations:\n eln:\n component: ReferenceEditQuantity # A editor component that allows to select from available \"Chemical\"s\n substrate_type:\n type:\n type_kind: Enum\n type_data:\n - Fused quartz glass\n - SLG\n - other\n m_annotations:\n eln:\n component: RadioEnumEditQuantity\n substrate_thickness:\n type: np.float64\n unit: m\n m_annotations:\n eln:\n component: NumberEditQuantity\n sample_is_from_collaboration:\n type: bool\n m_annotations:\n eln:\n component: BoolEditQuantity\n # Besides quantities, a section can define sub_sections. This allows hierarchies\n # of information.\n sub_sections:\n # Here we define a sub_section of \"Sample\" called \"processes\"\n processes:\n section:\n # The sub-section's section, is itself a section definition\n m_annotations:\n eln: # adds the sub-section to the eln and allows users to create new instances of this sub-section\n # We can also nest sub_sections. It goes aribitrarely deep.\n sub_sections:\n pvd_evaporation:\n section:\n base_sections: ['Process', 'nomad.parsing.tabular.TableData', 'nomad.datamodel.metainfo.plot.PlotSection']\n m_annotations:\n # We can use the eln annotations to put the section to the overview\n # page, and hide unwanted inherited quantities.\n eln:\n overview: true\n hide: ['name', 'lab_id', 'description', 'method']\n # Plots are shown in the eln. Currently we only support simple x,y\n # line plots\n plotly_graph_object:\n - data:\n - x: \"#time\"\n y: \"#chamber_pressure\"\n - x: \"#time\"\n y: \"#substrate_temperature\"\n yaxis: y2\n layout:\n title:\n text: Pressure and Temperature over Time\n yaxis2:\n overlaying: y\n side: right\n - data:\n x: \"#time\"\n y: \"#chamber_pressure\"\n - data:\n x: \"#time\"\n y: \"#substrate_temperature\"\n quantities:\n data_file:\n type: str\n description: |\n A reference to an uploaded .csv produced by the PVD evaporation instruments\n control software.\n m_annotations:\n # The tabular_parser annotation, will treat the values of this\n # quantity as files. It will try to interpret the files and fill\n # quantities in this section (and sub_section) with the column\n # data of .csv or .xlsx files. There is also a mode option that by default, is set to column.\n tabular_parser:\n parsing_options:\n comment: '#'\n sep: '\\t'\n mapping_options:\n - mapping_mode: column\n file_mode: current_entry\n sections:\n - '#root'\n browser:\n adaptor: RawFileAdaptor # Allows to navigate to files in the data browser\n eln:\n component: FileEditQuantity # A form field that allows to drop and select files.\n time:\n type: np.float64\n shape: ['*']\n unit: s\n m_annotations:\n # The tabular annotation defines a mapping to column headers used in\n # tabular data files\n tabular:\n name: Process Time in seconds\n chamber_pressure:\n type: np.float64\n shape: ['*']\n unit: mbar\n m_annotations:\n eln:\n # component: NumberEditQuantity\n # defaultDisplayUnit: mbar ## MUST NOT BE AN ARRAY FOR THIS https://gitlab.mpcdf.mpg.de/nomad-lab/nomad-FAIR/-/issues/932\n tabular:\n name: Vacuum Pressure1\n substrate_temperature:\n type: np.float64\n shape: ['*']\n unit: kelvin\n m_annotations:\n tabular:\n name: Substrate PV\n unit: degC\n hotplate_annealing:\n section:\n base_section: Process\n m_annotations:\n # We can use the eln annotations to put the section to the overview\n # page, and hide unwanted inherited quantities.\n eln:\n overview: true\n hide: ['name', 'lab_id', 'description']\n quantities:\n set_temperature:\n type: np.float64 # For actual numbers, we use numpy datatypes\n unit: K # The unit system is based on Pint and allows all kinds of abreviations, prefixes, and complex units\n m_annotations:\n eln:\n component: NumberEditQuantity # A component to enter numbers (with units)\n duration:\n type: np.float64\n unit: s\n m_annotations:\n eln:\n component: NumberEditQuantity\n\n", "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-disposition": "attatchment; filename=\"schema.archive.yaml\"", + "content-disposition": "attachment; filename=\"schema.archive.yaml\"", "content-type": "application/octet-stream", "server": "uvicorn", "transfer-encoding": "chunked" diff --git a/gui/tests/data/entry/eln-coauthor.json b/gui/tests/data/entry/eln-coauthor.json index c26b3d264662f5ba551f1b2687c520063b3230ce..69a6cf5f6c06745eb17a2215912bb1586e77f090 100644 --- a/gui/tests/data/entry/eln-coauthor.json +++ b/gui/tests/data/entry/eln-coauthor.json @@ -7,7 +7,7 @@ "body": "", "headers": { "accept": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiIyNDgwNDUxNC0yZDljLTQwZWEtOTkwZC0wZTY0MWNlOTUzNGQiLCJleHAiOjE2ODc0NjI3MjUsIm5iZiI6MCwiaWF0IjoxNjg3NDI2NzM3LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOlsicmVhbG0tbWFuYWdlbWVudCIsImFjY291bnQiXSwic3ViIjoiYTAzYWY4YjYtM2FhNy00MjhhLWIzYjEtNGE2MzE3ZTU3NmI2IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjgwYmY0NWMwLTg3OTAtNGEyZS05NmE5LTk4MDZhYzI4NjlhOSIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7InJlYWxtLW1hbmFnZW1lbnQiOnsicm9sZXMiOlsidmlldy11c2VycyIsInF1ZXJ5LWdyb3VwcyIsInF1ZXJ5LXVzZXJzIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlNoZWxkb24gQ29vcGVyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2Nvb3BlciIsImdpdmVuX25hbWUiOiJTaGVsZG9uIiwiZmFtaWx5X25hbWUiOiJDb29wZXIiLCJlbWFpbCI6InNoZWxkb24uY29vcGVyQG5vbWFkLWNvZS5ldSJ9.G4FqC-bOpOmxvgvEEXrVCd3GhGQS7aIq1gvH0ZyhGN4WYBrddY557FJytI_iE_7nsFaRItjw53hxp2_EBXCCYGjdlr1wMpwZoVzqDJiLgdIHo2qFD-6c-3MK_f_BPnY2PCGgIhUFRJaJCtEgXHF1DHNCxNnqGAdNdfvGB3GP1LuwPpyDqTbF1ZkiNkh2yaNEqcfpihlU9yRYSy0Dpxq2C9V1oD1s8pri3QoXGZd3_Gt58aJuyRAsC2QinOzLBLxZwgmHguQIPvNezuPpz0xtTFO7RruVidCMpYDitMhBDQK3XCkN6JbQEGfGKFJsJG6V0bX7sIcJhxpeoKI3LjrOgg", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiI1ODhjYzJkOS1iZDQ3LTQ1NDUtOTJkZC0yOTBlM2JlOWNlNTciLCJleHAiOjE2OTc4NzIyOTYsIm5iZiI6MCwiaWF0IjoxNjk3ODM2MzA5LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOlsicmVhbG0tbWFuYWdlbWVudCIsImFjY291bnQiXSwic3ViIjoiYTAzYWY4YjYtM2FhNy00MjhhLWIzYjEtNGE2MzE3ZTU3NmI2IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImQ5MDVmYmNhLTM2NGYtNGE3YS1hNDk0LWQxYzc2ZjVmMDAwYyIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7InJlYWxtLW1hbmFnZW1lbnQiOnsicm9sZXMiOlsidmlldy11c2VycyIsInF1ZXJ5LWdyb3VwcyIsInF1ZXJ5LXVzZXJzIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlNoZWxkb24gQ29vcGVyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2Nvb3BlciIsImdpdmVuX25hbWUiOiJTaGVsZG9uIiwiZmFtaWx5X25hbWUiOiJDb29wZXIiLCJlbWFpbCI6InNoZWxkb24uY29vcGVyQG5vbWFkLWNvZS5ldSJ9.DARYVBMhqn88zjPIRmLroLxjXeeRBGF3BBYxXziSAzbuSVqjsvmTbTi77AGSInuoiENDHuxQwbnininvnpurLPDQiZPK0a8ymkjmkDouABmu1fLUKtfcKzRMqRkjNT7pdqBH9pFDhUjmIzKqtNk2OVq7PwoAffbwnmwALGTTjLbFxFgFsD_wEzWXKS2FLaZEV4Fc0XIOJF-cajBIQv4JfwFoLQONjA7YXtOElSK-nsAaetcfF9DLbbhOzdsXIB-0lHnGUFsv2Zew2vyaSBNhlq92pCxgYsGz7nJbNwiryB8JGiK1LBII07V8IM0t5yUwmGFypZfBsFDSEuOXsgc_rQ", "cookie": null } }, @@ -36,6 +36,8 @@ "data.processes.pvd_evaporation.chamber_pressure", "data.processes.pvd_evaporation.data_file", "data.processes.pvd_evaporation.datetime", + "data.processes.pvd_evaporation.figures", + "data.processes.pvd_evaporation.figures.figure", "data.processes.pvd_evaporation.fill_archive_from_datafile", "data.processes.pvd_evaporation.substrate_temperature", "data.processes.pvd_evaporation.time", @@ -89,34 +91,34 @@ "results.properties" ], "datasets": [], - "n_quantities": 59, - "nomad_version": "1.2.0rc1.dev181+gce78efe22.d20230609", - "upload_create_time": "2023-06-22T09:38:52.707000+00:00", + "n_quantities": 65, + "nomad_version": "1.2.2.dev85+g6f47bb0a0", + "upload_create_time": "2023-10-20T21:11:44.447000+00:00", "nomad_commit": "", "section_defs": [ { "used_directly": true, - "definition_id": "88f0ccdc3585c154e0d1b67cf28b734e69a0791b", + "definition_id": "7e0331d2df29682413535f00d4aad156783fee2e", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Process" }, { "used_directly": true, - "definition_id": "61cee898fcd24be5040ffc76163cd645f26c9ff8", + "definition_id": "030133d881170f0d9e31da6086ed5641f0c4403c", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample" }, { "used_directly": true, - "definition_id": "b82ee685f3b0fd55329dbafada317987feac3051", + "definition_id": "f0086b987424b1001666c6f5df9ad1071164a27e", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes" }, { "used_directly": true, - "definition_id": "1341c9d51198599e0cf17a12d00694469e6fce8f", + "definition_id": "d39f4397900226398e6c17eb00467e874e5955c4", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes.HotplateAnnealing" }, { "used_directly": true, - "definition_id": "fdd23ea5c11d32f9b780e5e5b0f6349712bafe6e", + "definition_id": "c640c9585e8d4549f248582763427a7dd7c417a0", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes.PvdEvaporation" }, { @@ -131,7 +133,7 @@ }, { "used_directly": true, - "definition_id": "9e36824ae135f1e5ee5485911cb5fc03bc47af1d", + "definition_id": "1a38309e86abd87e7ef9ff7aa89560cf22ab111e", "definition_qualified_name": "nomad.datamodel.datamodel.EntryArchive" }, { @@ -146,7 +148,7 @@ }, { "used_directly": false, - "definition_id": "870f59b3b42ceab01a604bddc86c39b90a897366", + "definition_id": "fc2735d177bf36f9718ca66a764a56fc0c6200a0", "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Activity" }, { @@ -154,25 +156,40 @@ "definition_id": "add2edfa25a61ff3bbfdebacc870181f64f41634", "definition_qualified_name": "nomad.datamodel.metainfo.basesections.BaseSection" }, + { + "used_directly": true, + "definition_id": "c7254c9b461a4baec86cb3179e2f84513f5c9053", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.CompositeSystem" + }, { "used_directly": false, - "definition_id": "af4b2af6fde599256cf9d75c51958a41b3245b25", - "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Process" + "definition_id": "7ce6bdcaa183a9685582b275e1c2b2ea3139c74d", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Entity" }, { "used_directly": false, - "definition_id": "f05adb2ccbe04cbeced6213c4b6bd8f78e3d4ead", - "definition_qualified_name": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "definition_id": "8d81e1f95c60f39a6a8c9f954143a55e6f4c984c", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Process" }, { "used_directly": false, - "definition_id": "ada854aefd11fd40e6c161fe2d9207a7bb104052", - "definition_qualified_name": "nomad.datamodel.metainfo.eln.ElnWithFormulaBaseSection" + "definition_id": "3ab3a09d615ab58aefbaa3acdd8d6af4e73aaae5", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.System" + }, + { + "used_directly": true, + "definition_id": "55ef08f33dcf9fb374aea217458bd34a23bec57b", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.Figure" + }, + { + "used_directly": true, + "definition_id": "7bb17e35ed91dca88bf6238fc51ed212693593d0", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.PlotSection" }, { "used_directly": true, - "definition_id": "a830a6d8c03f2a0baa0203e07efcbbd54328daaa", - "definition_qualified_name": "nomad.datamodel.metainfo.eln.Sample" + "definition_id": "491cdc3c5ea21cdc576275a5c1e600cdaa4256c1", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.PlotlyFigure" }, { "used_directly": true, @@ -181,12 +198,12 @@ }, { "used_directly": true, - "definition_id": "9fcaeef3034c9b3861ab45bcea5014c65ffb3da2", + "definition_id": "43288046582240d7a33ec8b5fe4ca86988c2378c", "definition_qualified_name": "nomad.datamodel.results.Properties" }, { "used_directly": true, - "definition_id": "1ee9d4d17197a78dcfa5f1814b1ff3e2b275c195", + "definition_id": "ba0a320c9aa599c7c4a0af8c545f3cfe76cc4e70", "definition_qualified_name": "nomad.datamodel.results.Results" }, { @@ -225,7 +242,7 @@ } }, "entry_name": "ELN example sample", - "last_processing_time": "2023-06-22T09:38:53.033000+00:00", + "last_processing_time": "2023-10-20T21:11:44.763000+00:00", "parser_name": "parsers/archive", "searchable_quantities": [ { @@ -238,13 +255,13 @@ "text_value": "001", "path": "data.lab_id", "quantity_name": "lab_id", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection" }, { "text_value": "<p>A simple example for an \"sample\" that demonstrates how to combine different data entities.</p>\n<p>The sample it-self defines a few properties (involved chemicals, used substrate) and uses inherited default properties (formula, name, lab id, ...)</p>\n<p>But the sample also contains sub-sections that prodivde inforamtion about proccessed that were applied to this sample (PVD evaporation, hotplate annealing). </p>\n<p>The sample also show references to other entries (chemicals, instruments).</p>\n<p> </p>", "path": "data.description", "quantity_name": "description", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection" }, { "path": "data.substrate_type", @@ -284,9 +301,9 @@ }, { "path": "data.datetime", - "date_value": "2023-06-22T11:38:53.109336+00:00", + "date_value": "2023-10-20T23:11:44.823365+00:00", "quantity_name": "datetime", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection" } ], "calc_id": "bC7byHvWJp62Sn9uiuJUB38MT5j-", @@ -309,6 +326,7 @@ "nomad.datamodel.datamodel.EntryArchive", "nomad.datamodel.datamodel.EntryMetadata", "nomad.datamodel.datamodel.RFC3161Timestamp", + "nomad.datamodel.metainfo.plot.PlotlyFigure", "nomad.datamodel.results.ELN", "nomad.datamodel.results.Properties", "nomad.datamodel.results.Results" @@ -333,7 +351,7 @@ "name": "Test Tester" } ], - "entry_create_time": "2023-06-22T09:38:52.780000+00:00", + "entry_create_time": "2023-10-20T21:11:44.513000+00:00", "with_embargo": false, "files": [ "sample.archive.json", @@ -356,8 +374,9 @@ } }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "12998", + "content-length": "13756", "content-type": "application/json", "server": "uvicorn" } @@ -370,7 +389,7 @@ "body": "", "headers": { "accept": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiIyNDgwNDUxNC0yZDljLTQwZWEtOTkwZC0wZTY0MWNlOTUzNGQiLCJleHAiOjE2ODc0NjI3MjUsIm5iZiI6MCwiaWF0IjoxNjg3NDI2NzM3LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOlsicmVhbG0tbWFuYWdlbWVudCIsImFjY291bnQiXSwic3ViIjoiYTAzYWY4YjYtM2FhNy00MjhhLWIzYjEtNGE2MzE3ZTU3NmI2IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjgwYmY0NWMwLTg3OTAtNGEyZS05NmE5LTk4MDZhYzI4NjlhOSIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7InJlYWxtLW1hbmFnZW1lbnQiOnsicm9sZXMiOlsidmlldy11c2VycyIsInF1ZXJ5LWdyb3VwcyIsInF1ZXJ5LXVzZXJzIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlNoZWxkb24gQ29vcGVyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2Nvb3BlciIsImdpdmVuX25hbWUiOiJTaGVsZG9uIiwiZmFtaWx5X25hbWUiOiJDb29wZXIiLCJlbWFpbCI6InNoZWxkb24uY29vcGVyQG5vbWFkLWNvZS5ldSJ9.G4FqC-bOpOmxvgvEEXrVCd3GhGQS7aIq1gvH0ZyhGN4WYBrddY557FJytI_iE_7nsFaRItjw53hxp2_EBXCCYGjdlr1wMpwZoVzqDJiLgdIHo2qFD-6c-3MK_f_BPnY2PCGgIhUFRJaJCtEgXHF1DHNCxNnqGAdNdfvGB3GP1LuwPpyDqTbF1ZkiNkh2yaNEqcfpihlU9yRYSy0Dpxq2C9V1oD1s8pri3QoXGZd3_Gt58aJuyRAsC2QinOzLBLxZwgmHguQIPvNezuPpz0xtTFO7RruVidCMpYDitMhBDQK3XCkN6JbQEGfGKFJsJG6V0bX7sIcJhxpeoKI3LjrOgg", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiI1ODhjYzJkOS1iZDQ3LTQ1NDUtOTJkZC0yOTBlM2JlOWNlNTciLCJleHAiOjE2OTc4NzIyOTYsIm5iZiI6MCwiaWF0IjoxNjk3ODM2MzA5LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOlsicmVhbG0tbWFuYWdlbWVudCIsImFjY291bnQiXSwic3ViIjoiYTAzYWY4YjYtM2FhNy00MjhhLWIzYjEtNGE2MzE3ZTU3NmI2IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImQ5MDVmYmNhLTM2NGYtNGE3YS1hNDk0LWQxYzc2ZjVmMDAwYyIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7InJlYWxtLW1hbmFnZW1lbnQiOnsicm9sZXMiOlsidmlldy11c2VycyIsInF1ZXJ5LWdyb3VwcyIsInF1ZXJ5LXVzZXJzIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlNoZWxkb24gQ29vcGVyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2Nvb3BlciIsImdpdmVuX25hbWUiOiJTaGVsZG9uIiwiZmFtaWx5X25hbWUiOiJDb29wZXIiLCJlbWFpbCI6InNoZWxkb24uY29vcGVyQG5vbWFkLWNvZS5ldSJ9.DARYVBMhqn88zjPIRmLroLxjXeeRBGF3BBYxXziSAzbuSVqjsvmTbTi77AGSInuoiENDHuxQwbnininvnpurLPDQiZPK0a8ymkjmkDouABmu1fLUKtfcKzRMqRkjNT7pdqBH9pFDhUjmIzKqtNk2OVq7PwoAffbwnmwALGTTjLbFxFgFsD_wEzWXKS2FLaZEV4Fc0XIOJF-cajBIQv4JfwFoLQONjA7YXtOElSK-nsAaetcfF9DLbbhOzdsXIB-0lHnGUFsv2Zew2vyaSBNhlq92pCxgYsGz7nJbNwiryB8JGiK1LBII07V8IM0t5yUwmGFypZfBsFDSEuOXsgc_rQ", "cookie": null } }, @@ -399,6 +418,8 @@ "data.processes.pvd_evaporation.chamber_pressure", "data.processes.pvd_evaporation.data_file", "data.processes.pvd_evaporation.datetime", + "data.processes.pvd_evaporation.figures", + "data.processes.pvd_evaporation.figures.figure", "data.processes.pvd_evaporation.fill_archive_from_datafile", "data.processes.pvd_evaporation.substrate_temperature", "data.processes.pvd_evaporation.time", @@ -452,34 +473,34 @@ "results.properties" ], "datasets": [], - "n_quantities": 59, - "nomad_version": "1.2.0rc1.dev181+gce78efe22.d20230609", - "upload_create_time": "2023-06-22T09:38:52.707000+00:00", + "n_quantities": 65, + "nomad_version": "1.2.2.dev85+g6f47bb0a0", + "upload_create_time": "2023-10-20T21:11:44.447000+00:00", "nomad_commit": "", "section_defs": [ { "used_directly": true, - "definition_id": "88f0ccdc3585c154e0d1b67cf28b734e69a0791b", + "definition_id": "7e0331d2df29682413535f00d4aad156783fee2e", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Process" }, { "used_directly": true, - "definition_id": "61cee898fcd24be5040ffc76163cd645f26c9ff8", + "definition_id": "030133d881170f0d9e31da6086ed5641f0c4403c", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample" }, { "used_directly": true, - "definition_id": "b82ee685f3b0fd55329dbafada317987feac3051", + "definition_id": "f0086b987424b1001666c6f5df9ad1071164a27e", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes" }, { "used_directly": true, - "definition_id": "1341c9d51198599e0cf17a12d00694469e6fce8f", + "definition_id": "d39f4397900226398e6c17eb00467e874e5955c4", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes.HotplateAnnealing" }, { "used_directly": true, - "definition_id": "fdd23ea5c11d32f9b780e5e5b0f6349712bafe6e", + "definition_id": "c640c9585e8d4549f248582763427a7dd7c417a0", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes.PvdEvaporation" }, { @@ -494,7 +515,7 @@ }, { "used_directly": true, - "definition_id": "9e36824ae135f1e5ee5485911cb5fc03bc47af1d", + "definition_id": "1a38309e86abd87e7ef9ff7aa89560cf22ab111e", "definition_qualified_name": "nomad.datamodel.datamodel.EntryArchive" }, { @@ -509,7 +530,7 @@ }, { "used_directly": false, - "definition_id": "870f59b3b42ceab01a604bddc86c39b90a897366", + "definition_id": "fc2735d177bf36f9718ca66a764a56fc0c6200a0", "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Activity" }, { @@ -517,25 +538,40 @@ "definition_id": "add2edfa25a61ff3bbfdebacc870181f64f41634", "definition_qualified_name": "nomad.datamodel.metainfo.basesections.BaseSection" }, + { + "used_directly": true, + "definition_id": "c7254c9b461a4baec86cb3179e2f84513f5c9053", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.CompositeSystem" + }, { "used_directly": false, - "definition_id": "af4b2af6fde599256cf9d75c51958a41b3245b25", - "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Process" + "definition_id": "7ce6bdcaa183a9685582b275e1c2b2ea3139c74d", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Entity" }, { "used_directly": false, - "definition_id": "f05adb2ccbe04cbeced6213c4b6bd8f78e3d4ead", - "definition_qualified_name": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "definition_id": "8d81e1f95c60f39a6a8c9f954143a55e6f4c984c", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Process" }, { "used_directly": false, - "definition_id": "ada854aefd11fd40e6c161fe2d9207a7bb104052", - "definition_qualified_name": "nomad.datamodel.metainfo.eln.ElnWithFormulaBaseSection" + "definition_id": "3ab3a09d615ab58aefbaa3acdd8d6af4e73aaae5", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.System" + }, + { + "used_directly": true, + "definition_id": "55ef08f33dcf9fb374aea217458bd34a23bec57b", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.Figure" + }, + { + "used_directly": true, + "definition_id": "7bb17e35ed91dca88bf6238fc51ed212693593d0", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.PlotSection" }, { "used_directly": true, - "definition_id": "a830a6d8c03f2a0baa0203e07efcbbd54328daaa", - "definition_qualified_name": "nomad.datamodel.metainfo.eln.Sample" + "definition_id": "491cdc3c5ea21cdc576275a5c1e600cdaa4256c1", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.PlotlyFigure" }, { "used_directly": true, @@ -544,12 +580,12 @@ }, { "used_directly": true, - "definition_id": "9fcaeef3034c9b3861ab45bcea5014c65ffb3da2", + "definition_id": "43288046582240d7a33ec8b5fe4ca86988c2378c", "definition_qualified_name": "nomad.datamodel.results.Properties" }, { "used_directly": true, - "definition_id": "1ee9d4d17197a78dcfa5f1814b1ff3e2b275c195", + "definition_id": "ba0a320c9aa599c7c4a0af8c545f3cfe76cc4e70", "definition_qualified_name": "nomad.datamodel.results.Results" }, { @@ -588,7 +624,7 @@ } }, "entry_name": "ELN example sample", - "last_processing_time": "2023-06-22T09:38:53.033000+00:00", + "last_processing_time": "2023-10-20T21:11:44.763000+00:00", "parser_name": "parsers/archive", "searchable_quantities": [ { @@ -601,13 +637,13 @@ "text_value": "001", "path": "data.lab_id", "quantity_name": "lab_id", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection" }, { "text_value": "<p>A simple example for an \"sample\" that demonstrates how to combine different data entities.</p>\n<p>The sample it-self defines a few properties (involved chemicals, used substrate) and uses inherited default properties (formula, name, lab id, ...)</p>\n<p>But the sample also contains sub-sections that prodivde inforamtion about proccessed that were applied to this sample (PVD evaporation, hotplate annealing). </p>\n<p>The sample also show references to other entries (chemicals, instruments).</p>\n<p> </p>", "path": "data.description", "quantity_name": "description", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection" }, { "path": "data.substrate_type", @@ -647,9 +683,9 @@ }, { "path": "data.datetime", - "date_value": "2023-06-22T11:38:53.109336+00:00", + "date_value": "2023-10-20T23:11:44.823365+00:00", "quantity_name": "datetime", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection" } ], "calc_id": "bC7byHvWJp62Sn9uiuJUB38MT5j-", @@ -672,6 +708,7 @@ "nomad.datamodel.datamodel.EntryArchive", "nomad.datamodel.datamodel.EntryMetadata", "nomad.datamodel.datamodel.RFC3161Timestamp", + "nomad.datamodel.metainfo.plot.PlotlyFigure", "nomad.datamodel.results.ELN", "nomad.datamodel.results.Properties", "nomad.datamodel.results.Results" @@ -696,7 +733,7 @@ "name": "Test Tester" } ], - "entry_create_time": "2023-06-22T09:38:52.780000+00:00", + "entry_create_time": "2023-10-20T21:11:44.513000+00:00", "with_embargo": false, "files": [ "sample.archive.json", @@ -719,8 +756,9 @@ } }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "12998", + "content-length": "13756", "content-type": "application/json", "server": "uvicorn" } @@ -733,7 +771,7 @@ "body": "", "headers": { "accept": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiI0ZjVlOWZlZS01NTA3LTRiNDMtOTdhMy01OWIyODBhYjZiYzEiLCJleHAiOjE2ODc0NjI3MjUsIm5iZiI6MCwiaWF0IjoxNjg3NDI2NzQwLCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOlsicmVhbG0tbWFuYWdlbWVudCIsImFjY291bnQiXSwic3ViIjoiYTAzYWY4YjYtM2FhNy00MjhhLWIzYjEtNGE2MzE3ZTU3NmI2IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjgwYmY0NWMwLTg3OTAtNGEyZS05NmE5LTk4MDZhYzI4NjlhOSIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7InJlYWxtLW1hbmFnZW1lbnQiOnsicm9sZXMiOlsidmlldy11c2VycyIsInF1ZXJ5LWdyb3VwcyIsInF1ZXJ5LXVzZXJzIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlNoZWxkb24gQ29vcGVyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2Nvb3BlciIsImdpdmVuX25hbWUiOiJTaGVsZG9uIiwiZmFtaWx5X25hbWUiOiJDb29wZXIiLCJlbWFpbCI6InNoZWxkb24uY29vcGVyQG5vbWFkLWNvZS5ldSJ9.JKJzLnhldYJUs3JkNjTkUDVlh1lAg4hBiFxNpMLOgFHiaslR95yuJypON9wEWOgq8RvwgyQoWUihSqt7XOqdBUrQsvEUHjNdz2uzILtwI5XQ086U-7jDTr_iG31rpnHWyJN47fc1w9bqYpWfBZRt-M12tUL9dLGVuGN35B_z5J9m3jHDNjX021bXE9lEssqtnJWTOpfo3iW-g2kYI_3-oteSmoXPftY6zEAQxbnqKsk2_TZGJYsFx6CyLhLYkFtbt7xmxXf2c66lGW72HgFOBzesGroc5KbwdMAI9931HwxrbCjvWDeOtd9t5xQeL7b_eIqE9avDHiEQqQBUI5RW5Q", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiJhN2YxZDJjMy0xNjkzLTQ5NmMtYTI2NS0yZTEzZGU2M2NjMTIiLCJleHAiOjE2OTc4NzIyOTYsIm5iZiI6MCwiaWF0IjoxNjk3ODM2MzEyLCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOlsicmVhbG0tbWFuYWdlbWVudCIsImFjY291bnQiXSwic3ViIjoiYTAzYWY4YjYtM2FhNy00MjhhLWIzYjEtNGE2MzE3ZTU3NmI2IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImQ5MDVmYmNhLTM2NGYtNGE3YS1hNDk0LWQxYzc2ZjVmMDAwYyIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7InJlYWxtLW1hbmFnZW1lbnQiOnsicm9sZXMiOlsidmlldy11c2VycyIsInF1ZXJ5LWdyb3VwcyIsInF1ZXJ5LXVzZXJzIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlNoZWxkb24gQ29vcGVyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2Nvb3BlciIsImdpdmVuX25hbWUiOiJTaGVsZG9uIiwiZmFtaWx5X25hbWUiOiJDb29wZXIiLCJlbWFpbCI6InNoZWxkb24uY29vcGVyQG5vbWFkLWNvZS5ldSJ9.gyAKpCkK9spnDP2AFTcdT2MAcWKGX0lra-B-L36geda0oThbsC-RdOAUjeRZCa8XNCMybgXj50kuytK9jfBq1KYN_aP4LnzQ-1fhNXrGC3gHuOq0BLCxzXRzTtb3GSI02-JbQsmWqeo3lOzE2bgyiFZGaZ1UvvwcvUsGbYaMJMjU6blCC8bO0R0IuT0yMv54-ELIp00hdiHfSQoW4RE4E5L38mmZQwTI1Acyb9bragw8MuIluXADXLBhoyTB8OsXiPZlFk-LxRMUo7I2poA9AqnS0ZDBUiZvV8E4IObnQmXzQDQT5T0emQm9TyzFOXJLYSbi66-q5MdCyyjAq8dtFg", "cookie": null } }, @@ -762,6 +800,8 @@ "data.processes.pvd_evaporation.chamber_pressure", "data.processes.pvd_evaporation.data_file", "data.processes.pvd_evaporation.datetime", + "data.processes.pvd_evaporation.figures", + "data.processes.pvd_evaporation.figures.figure", "data.processes.pvd_evaporation.fill_archive_from_datafile", "data.processes.pvd_evaporation.substrate_temperature", "data.processes.pvd_evaporation.time", @@ -815,34 +855,34 @@ "results.properties" ], "datasets": [], - "n_quantities": 59, - "nomad_version": "1.2.0rc1.dev181+gce78efe22.d20230609", - "upload_create_time": "2023-06-22T09:38:52.707000+00:00", + "n_quantities": 65, + "nomad_version": "1.2.2.dev85+g6f47bb0a0", + "upload_create_time": "2023-10-20T21:11:44.447000+00:00", "nomad_commit": "", "section_defs": [ { "used_directly": true, - "definition_id": "88f0ccdc3585c154e0d1b67cf28b734e69a0791b", + "definition_id": "7e0331d2df29682413535f00d4aad156783fee2e", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Process" }, { "used_directly": true, - "definition_id": "61cee898fcd24be5040ffc76163cd645f26c9ff8", + "definition_id": "030133d881170f0d9e31da6086ed5641f0c4403c", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample" }, { "used_directly": true, - "definition_id": "b82ee685f3b0fd55329dbafada317987feac3051", + "definition_id": "f0086b987424b1001666c6f5df9ad1071164a27e", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes" }, { "used_directly": true, - "definition_id": "1341c9d51198599e0cf17a12d00694469e6fce8f", + "definition_id": "d39f4397900226398e6c17eb00467e874e5955c4", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes.HotplateAnnealing" }, { "used_directly": true, - "definition_id": "fdd23ea5c11d32f9b780e5e5b0f6349712bafe6e", + "definition_id": "c640c9585e8d4549f248582763427a7dd7c417a0", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes.PvdEvaporation" }, { @@ -857,7 +897,7 @@ }, { "used_directly": true, - "definition_id": "9e36824ae135f1e5ee5485911cb5fc03bc47af1d", + "definition_id": "1a38309e86abd87e7ef9ff7aa89560cf22ab111e", "definition_qualified_name": "nomad.datamodel.datamodel.EntryArchive" }, { @@ -872,7 +912,7 @@ }, { "used_directly": false, - "definition_id": "870f59b3b42ceab01a604bddc86c39b90a897366", + "definition_id": "fc2735d177bf36f9718ca66a764a56fc0c6200a0", "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Activity" }, { @@ -880,25 +920,40 @@ "definition_id": "add2edfa25a61ff3bbfdebacc870181f64f41634", "definition_qualified_name": "nomad.datamodel.metainfo.basesections.BaseSection" }, + { + "used_directly": true, + "definition_id": "c7254c9b461a4baec86cb3179e2f84513f5c9053", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.CompositeSystem" + }, { "used_directly": false, - "definition_id": "af4b2af6fde599256cf9d75c51958a41b3245b25", - "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Process" + "definition_id": "7ce6bdcaa183a9685582b275e1c2b2ea3139c74d", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Entity" }, { "used_directly": false, - "definition_id": "f05adb2ccbe04cbeced6213c4b6bd8f78e3d4ead", - "definition_qualified_name": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "definition_id": "8d81e1f95c60f39a6a8c9f954143a55e6f4c984c", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Process" }, { "used_directly": false, - "definition_id": "ada854aefd11fd40e6c161fe2d9207a7bb104052", - "definition_qualified_name": "nomad.datamodel.metainfo.eln.ElnWithFormulaBaseSection" + "definition_id": "3ab3a09d615ab58aefbaa3acdd8d6af4e73aaae5", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.System" + }, + { + "used_directly": true, + "definition_id": "55ef08f33dcf9fb374aea217458bd34a23bec57b", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.Figure" }, { "used_directly": true, - "definition_id": "a830a6d8c03f2a0baa0203e07efcbbd54328daaa", - "definition_qualified_name": "nomad.datamodel.metainfo.eln.Sample" + "definition_id": "7bb17e35ed91dca88bf6238fc51ed212693593d0", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.PlotSection" + }, + { + "used_directly": true, + "definition_id": "491cdc3c5ea21cdc576275a5c1e600cdaa4256c1", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.PlotlyFigure" }, { "used_directly": true, @@ -907,12 +962,12 @@ }, { "used_directly": true, - "definition_id": "9fcaeef3034c9b3861ab45bcea5014c65ffb3da2", + "definition_id": "43288046582240d7a33ec8b5fe4ca86988c2378c", "definition_qualified_name": "nomad.datamodel.results.Properties" }, { "used_directly": true, - "definition_id": "1ee9d4d17197a78dcfa5f1814b1ff3e2b275c195", + "definition_id": "ba0a320c9aa599c7c4a0af8c545f3cfe76cc4e70", "definition_qualified_name": "nomad.datamodel.results.Results" }, { @@ -951,7 +1006,7 @@ } }, "entry_name": "ELN example sample", - "last_processing_time": "2023-06-22T09:38:53.033000+00:00", + "last_processing_time": "2023-10-20T21:11:44.763000+00:00", "parser_name": "parsers/archive", "searchable_quantities": [ { @@ -964,13 +1019,13 @@ "text_value": "001", "path": "data.lab_id", "quantity_name": "lab_id", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection" }, { "text_value": "<p>A simple example for an \"sample\" that demonstrates how to combine different data entities.</p>\n<p>The sample it-self defines a few properties (involved chemicals, used substrate) and uses inherited default properties (formula, name, lab id, ...)</p>\n<p>But the sample also contains sub-sections that prodivde inforamtion about proccessed that were applied to this sample (PVD evaporation, hotplate annealing). </p>\n<p>The sample also show references to other entries (chemicals, instruments).</p>\n<p> </p>", "path": "data.description", "quantity_name": "description", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection" }, { "path": "data.substrate_type", @@ -1010,9 +1065,9 @@ }, { "path": "data.datetime", - "date_value": "2023-06-22T11:38:53.109336+00:00", + "date_value": "2023-10-20T23:11:44.823365+00:00", "quantity_name": "datetime", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection" } ], "calc_id": "bC7byHvWJp62Sn9uiuJUB38MT5j-", @@ -1035,6 +1090,7 @@ "nomad.datamodel.datamodel.EntryArchive", "nomad.datamodel.datamodel.EntryMetadata", "nomad.datamodel.datamodel.RFC3161Timestamp", + "nomad.datamodel.metainfo.plot.PlotlyFigure", "nomad.datamodel.results.ELN", "nomad.datamodel.results.Properties", "nomad.datamodel.results.Results" @@ -1059,7 +1115,7 @@ "name": "Test Tester" } ], - "entry_create_time": "2023-06-22T09:38:52.780000+00:00", + "entry_create_time": "2023-10-20T21:11:44.513000+00:00", "with_embargo": false, "files": [ "sample.archive.json", @@ -1082,8 +1138,9 @@ } }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "12998", + "content-length": "13756", "content-type": "application/json", "server": "uvicorn" } @@ -1115,7 +1172,7 @@ "band_gap": "*" }, "mechanical": "include-resolved", - "spectroscopy": "include-resolved", + "spectroscopic": "include-resolved", "vibrational": "include-resolved", "thermodynamic": "include-resolved", "geometry_optimization": { @@ -1129,7 +1186,7 @@ "headers": { "accept": "application/json", "content-type": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiJhOGU1ZjBkMC00YmY0LTQ5MDEtOWJlMy1mNGZjMTlhNmQ1OGQiLCJleHAiOjE2ODc0NjI3MjUsIm5iZiI6MCwiaWF0IjoxNjg3NDI2NzM4LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOlsicmVhbG0tbWFuYWdlbWVudCIsImFjY291bnQiXSwic3ViIjoiYTAzYWY4YjYtM2FhNy00MjhhLWIzYjEtNGE2MzE3ZTU3NmI2IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjgwYmY0NWMwLTg3OTAtNGEyZS05NmE5LTk4MDZhYzI4NjlhOSIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7InJlYWxtLW1hbmFnZW1lbnQiOnsicm9sZXMiOlsidmlldy11c2VycyIsInF1ZXJ5LWdyb3VwcyIsInF1ZXJ5LXVzZXJzIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlNoZWxkb24gQ29vcGVyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2Nvb3BlciIsImdpdmVuX25hbWUiOiJTaGVsZG9uIiwiZmFtaWx5X25hbWUiOiJDb29wZXIiLCJlbWFpbCI6InNoZWxkb24uY29vcGVyQG5vbWFkLWNvZS5ldSJ9.Ql8113SOsKEQtTtcDI8WSXm6t021zfg5S8zvEC1AIECQBPYJUUStb3MFSMXEYfCoSZFs_LlQJHDrizI68dIiTVkNIzlSkKceiWSpIYPvKnji3Yqlo6KamAcDJLqg54Vm9Z_5iQiuFZGpRXNDTDse06TZPV92lOkgScytW1on0HrkPuw5Lmlyvc7Xd5XU5Ovu_os3YUcYBGmA1i7EZOXRp7ebiNYflz4nC74H5bc5Ikj677yK_dYwySz6_x4rCJ8uhDBHefOvE1WO4v7SGWFGICdSvVNcZSssQvXwJ6ULWKmfevhj7eXbduHmvdYStIbBq8TCHGhqNHwgDWpqN6ymWQ", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiI2Yjg2MjcwMy02MzRmLTRhYWMtODQxMS00NTIyOWM4ZTZiZjQiLCJleHAiOjE2OTc4NzIyOTYsIm5iZiI6MCwiaWF0IjoxNjk3ODM2MzEwLCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOlsicmVhbG0tbWFuYWdlbWVudCIsImFjY291bnQiXSwic3ViIjoiYTAzYWY4YjYtM2FhNy00MjhhLWIzYjEtNGE2MzE3ZTU3NmI2IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImQ5MDVmYmNhLTM2NGYtNGE3YS1hNDk0LWQxYzc2ZjVmMDAwYyIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7InJlYWxtLW1hbmFnZW1lbnQiOnsicm9sZXMiOlsidmlldy11c2VycyIsInF1ZXJ5LWdyb3VwcyIsInF1ZXJ5LXVzZXJzIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlNoZWxkb24gQ29vcGVyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2Nvb3BlciIsImdpdmVuX25hbWUiOiJTaGVsZG9uIiwiZmFtaWx5X25hbWUiOiJDb29wZXIiLCJlbWFpbCI6InNoZWxkb24uY29vcGVyQG5vbWFkLWNvZS5ldSJ9.gQS4NhZHMstRFDcVXBXszEPfgMsKpB_rK2gWiBnVoSeyk_U0j_7s9Oh3otyr4BOpo6SE-LZYDFGb4B6vHAiLNzw93d401ZBFo9izTCkLoieZV0pzxpWswlj5GAr3xlsGcyCoZrySWzSepdmcmiMPEBCLvDc8djt14S_vxY2uUwAbJW42h8ee_zSr_TpkYf2qTl2sqNcT3RWbhNznOpgEhDZdeEud8xX5-crWOxQYkiIO1MnbPZAhpInISEg7jvchZEWyqnmG9G1zFXjNy5lkoPasWQBuQLMkXCP6ggQ417iMcbPiD5_IXrXDquZ9ipaNfLx78s7r4qPtHt-s0qaWFw", "cookie": null } }, @@ -1155,7 +1212,7 @@ "band_gap": "*" }, "mechanical": "include-resolved", - "spectroscopy": "include-resolved", + "spectroscopic": "include-resolved", "vibrational": "include-resolved", "thermodynamic": "include-resolved", "geometry_optimization": { @@ -1173,12 +1230,12 @@ "archive": { "metadata": { "upload_id": "eln_upload_id", - "upload_create_time": "2023-06-22T09:38:52.707000+00:00", + "upload_create_time": "2023-10-20T21:11:44.447000+00:00", "entry_id": "bC7byHvWJp62Sn9uiuJUB38MT5j-", "entry_name": "ELN example sample", "entry_type": "Sample", - "entry_hash": "IJhNf0P3rAOk-Hl8HpTHMQlEv1jt", - "entry_create_time": "2023-06-22T09:38:52.780000+00:00", + "entry_hash": "y0C2H_I6f9gmZ_S6RNlk_v9P_Clg", + "entry_create_time": "2023-10-20T21:11:44.513000+00:00", "parser_name": "parsers/archive", "mainfile": "sample.archive.json", "files": [ @@ -1191,9 +1248,9 @@ "embargo_length": 0, "license": "CC BY 4.0", "processed": true, - "last_processing_time": "2023-06-22T09:38:53.033253+00:00", + "last_processing_time": "2023-10-20T21:11:44.763742+00:00", "processing_errors": [], - "nomad_version": "1.2.0rc1.dev181+gce78efe22.d20230609", + "nomad_version": "1.2.2.dev85+g6f47bb0a0", "nomad_commit": "", "references": [], "main_author": "68878af7-6845-46c0-b2c1-250d4d8eb470", @@ -1205,7 +1262,7 @@ "54cb1f64-f84e-4815-9ade-440ce0b5430f" ], "datasets": [], - "n_quantities": 59, + "n_quantities": 65, "quantities": [ "", "data", @@ -1222,6 +1279,8 @@ "data.processes.pvd_evaporation.chamber_pressure", "data.processes.pvd_evaporation.data_file", "data.processes.pvd_evaporation.datetime", + "data.processes.pvd_evaporation.figures", + "data.processes.pvd_evaporation.figures.figure", "data.processes.pvd_evaporation.fill_archive_from_datafile", "data.processes.pvd_evaporation.substrate_temperature", "data.processes.pvd_evaporation.time", @@ -1282,40 +1341,41 @@ "nomad.datamodel.datamodel.EntryArchive", "nomad.datamodel.datamodel.EntryMetadata", "nomad.datamodel.datamodel.RFC3161Timestamp", + "nomad.datamodel.metainfo.plot.PlotlyFigure", "nomad.datamodel.results.ELN", "nomad.datamodel.results.Properties", "nomad.datamodel.results.Results" ], "entry_timestamp": { - "token_seed": "IJhNf0P3rAOk-Hl8HpTHMQlEv1jt", - "token": "MIIYDQYJKoZIhvcNAQcCoIIX/jCCF/oCAQMxDTALBglghkgBZQMEAgIwgcwGCyqGSIb3DQEJEAEEoIG8BIG5MIG2AgEBBgsqhGgBhvZ3AgUBCzAvMAsGCWCGSAFlAwQCAQQgllBuEy/QmmRCOSqul92agyRnwGZaILVVVeHXh47TWvYCBwqofCa7YF8YDzIwMjMwNjIyMDkzODUyWjADAgEBoFSkUjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjKgghMiMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0BAQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAMZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK/9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWajXfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKzHtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO/tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3XmfeR+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAWgBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgwJjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUFBwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhLmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTCMtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHAEQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz+TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q7M4KMIIGlDCCBHygAwIBAgIQK9SucLnQY1sq6YTI1nSqMDANBgkqhkiG9w0BAQwFADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0EwHhcNMjIwNzI4MDg1NjI2WhcNMzMwNzI3MDg1NjI2WjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKxV7tHwlG8ETLal5Yhm+isISwnj+L8khxKkASO/MRXI6kGntuse79tVL5Fkvl9KE4etck3HaGWkAIOYTXAalmxp+2/DjhF5BsFLxmeuTFipdpVwY4rHOndRllSOX15D/fnXS1V+Bv6T+3iHQLSORYeKxgv8ff7zWp/QvAuCOejeduR8Iis6j0s+meTdl2DNPm0+FXWLGccj0cC5I4XKnc4NrQgdvmD+pXfrgTpHHwq4RQnnkweGP2Wpa2V2ghhSJQVoyMl2/VBrKQGqA7z9iwkkkXJ76z+PaiCBg+06h2w6GLprm1g4MfP2BOzOQX3exdeJkDqp6+yJghUuU8v530ju11UkOk65SGF/KywOAUo5zrtFqGGUyzlsmnpFj62gAIb8yUN5l7eq7hmulRJY8sw01H4BJkg6Z8T+jhUjjnOMQTl25FfDjuIrxn9KSH3/iDrMrDsL7kkh3xdRcUnqzWW91XFJ3skGk/qJgvpGhkz6b7Mpcud1fzFCrh1YYESKxoliCYDfU6+96GVx5Opm7s5F4h4WqP9QEK0N+avprRir517X+tnbCRc7WH/13HhC08PyiXdWC+4ZUPcxkf3xRPn8faby3dsmd2NTwraWjc6uouyWdpkZXQtV8IpAbY6EOhk9k95MkZ9JQFPGOP03Tf+KabcKLhZPu+SbHU6D0OgQIDAQABo4IBYjCCAV4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUI8E8zFMzGVaO2OPzzjz8qHNHVuowHwYDVR0jBBgwFoAUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0c2NhMjAyMS5jcmwwbwYIKwYBBQUHAQEEYzBhMCgGCCsGAQUFBzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDUGCCsGAQUFBzAChilodHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RzY2EyMDIxLmNlcjBABgNVHSAEOTA3MDUGCyqEaAGG9ncCBQELMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAa8b3PSM+L1eQ+ewXgKZtaX1YAY0yloH5W9YbcSQPR0r153qv4//uZKIbv9adI+iCTGE6Um0+6BwLYOfZtMDNB55q43DeN6jDaOU7P4F/0gZmNKjM3ZTuptQ/XoJ+1OPRIBjviGRQJ5jB9YS8fqbHunYLU4WeGqq/s0X0TaExTUlMcjkqOnJlSn0W2YE4ixHDHoRiU3jOQkLNQJg6RfoasqtF+jL9ATLR1NsD6FZSN8a0UNeu5TOuP4JfHQmMzDxfJfFvPXbNkX66PWNaeXSNC/MetKKW9X/J+R3+GslvSnO64FHZZ3yXOHGHb1dCcVmKUmTzeSyTOeMUiq73l52KtTTSLqL6iTjPZosVTCdk01j5H0NqZdB/2aJMcVweKhCgMkmum33Io6EIjmkecCkEftMq3OyiHarfoTlYZeblLYvXGcQPCTIjXV+kmmrIJZyfaJU0jCeAUTurQgEhLyXngs1+mVYikQx2xUAmjGdV3cZcEegqpH2tqeRDdQykEo8SNaepXXUJnPT01RljPHaW0SrRxwaDkL31hHYoD9xCO0Rmalk6J8K/AGjAoE82GxabmXnd5Ru8otI8FCaPf68lDRQPNpvQqcy3GgCmi0NLNbm6Ees2lkrfX6lAEjc/cw/vCIhpclKiiABVYkDKqsh3o9LyuxtoD6hMuRg3cS/wwWkwgga5MIIEoaADAgECAhEA5/9pxzs1zkuRJth0fGilhzANBgkqhkiG9w0BAQwFADCBgDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMB4XDTIxMDUxOTA1MzIwN1oXDTM2MDUxODA1MzIwN1owVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIFRpbWVzdGFtcGluZyAyMDIxIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6RIfBDXtuV16xaaVQb6KZX9Od9FtJXXTZo7b+GEof3+3g0ChWiKnO7R4+6MfrvLyLCWZa6GpFHjEt4t0/GiUQvnkLOBRdBqr5DOvlmTvJJs2X8ZmWgWJjC7PBZLYBWAs8sJl3kNXxBMX5XntjqWx1ZOuuXl0R4x+zGGSMzZ45dpvB8vLpQfZkfMC/1tL9KYyjU+htLH68dZJPtzhqLBVG+8ljZ1ZFilOKksS79epCeqFSeAUm2eMTGpOiS3gfLM6yvb8Bg6bxg5yglDGC9zbr4sB9ceIGRtCQF1N8dqTgM/dSViiUgJkcv5dLNJeWxGCqJYPgzKlYZTgDXfGIeZpEFmjBLwURP5ABsyKoFocMzdjrCiFbTvJn+bD1kq78qZUgAQGGtd6zGJ88H4NPJ5Y2R4IargiWAmv8RyvWnHr/VA+2PrrK9eXe5q7M88YRdSTq9TKbqdnITUgZcjjm4ZUjteq8K331a4P0s2in0p3UubMEYa/G5w6jSWPUzchGLwWKYBfeSu6dIOC4LkeAPvmdZxSB1lWOb9HzVWZoM8Q/blaP4LWt6JxjkI9yQsYGMdCqwl7uMnPUIlcExS1mzXRxUowQref/EPaS7kYVaHHQrp4XB7nTEtQhkP0Z9Puz/n8zIFnUSnxDof4Yy650PAXSYmK2TcbyDoTNmmt8xAxzcMCAwEAAaOCAVUwggFRMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFL5UAi+/QGxzQ86sCSVOnkNEGu7gMB8GA1UdIwQYMBaAFLahVDkCw6A/joq8+tT4HKbROg79MA4GA1UdDwEB/wQEAwIBBjATBgNVHSUEDDAKBggrBgEFBQcDCDAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vY3JsLmNlcnR1bS5wbC9jdG5jYTIuY3JsMGwGCCsGAQUFBwEBBGAwXjAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAyBggrBgEFBQcwAoYmaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhMi5jZXIwOQYDVR0gBDIwMDAuBgRVHSAAMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAuJNZd8lMFf2UBwigp3qgLPBBk58BFCS3Q6aJDf3TISoytK0eal/JyCB88aUEd0wMNiEcNVMbK9j5Yht2whaknUE1G32k6uld7wcxHmw67vUBY6pSp8QhdodY4SzRRaZWzyYlviUpyU4dXyhKhHSncYJfa1U75cXxCe3sTp9uTBm3f8Bj8LkpjMUSVTtMJ6oEu5JqCYzRfc6nnoRUgwz/GVZFoOBGdrSEtDN7mZgcka/tS5MI47fALVvN5lZ2U8k7Dm/hTX8CWOw0uBZloZEW4HB0Xra3qE4qzzq/6M8gyoU/DE0k3+i7bYOrOk/7tPJg1sOhytOGUQ30PbG++0FfJioDuOFhj99b151SqFlSaRQYz74y/P2XJP+cF19oqozmi0rRTkfyEJIvhIZ+M5XIFZttmVQgTxfpfJwMFFEoQrSrklOxpmSygppsUDJEoliC05vBLVQ+gMZyYaKvBJ4YxBMlKH5ZHkRdloRYlUDplk8GUa+OCMVhpDSQurU6K1ua5dmZftnvSSz2H96UrQDzA6DyiI1V3ejVtvn2azVAXg6NnjmuRZ+wa7Pxy0H3+V4K4rOTHlG3VYA6xfLsTunCz72T6Ot4+tkrDYOeaU1pPX1CBfYj6EW2+ELq46GP8KCNUQDirWLU4nOmgCat7vN0SD6RlwUiSsMeCiQDmZwgwrUxggPvMIID6wIBATBqMFYxCzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIQK9SucLnQY1sq6YTI1nSqMDANBglghkgBZQMEAgIFAKCCAVYwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yMzA2MjIwOTM4NTJaMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEIAO5mmRJdJhKlbbMXYDTRNB0+972yiQEhCvmzw5EIgeKMD8GCSqGSIb3DQEJBDEyBDBxAqB0t/84M5oe1gPPBExQ4xYE4oOinw9zbk24a1OB4y3KDNVfjo17QWSTblGPEkQwgZ8GCyqGSIb3DQEJEAIMMYGPMIGMMIGJMIGGBBS/T2vEmC3eFQWo78jHp51NFDUAzjBuMFqkWDBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0ECECvUrnC50GNbKumEyNZ0qjAwDQYJKoZIhvcNAQEBBQAEggIAStRzrAoKUg2jizvTqzguvimiEjhC0za+n+/yhC5UtHnL6nurlbyHYiLmBE6FN5BkMrJ9d2A5F1VjZs+C721UKB41d3TYysfrNpL4NXlklTCAZzXgcITs1g6eUpSumuZZPPuRg0gYDHQAWCMvt/HtkmmrQuJgyOPEXxvxnvLnY6FsMF8wxjnMhdbtFGWORVR3u15AhSywy3I5js3vJ6mpHjo4g/jFLsMLQQYS8h93BSYf+rwqyzLtT6+CogCGgpm26uxiBoqCirJGcfPs1kLt+WfPRBdTT2GDoEv8hXI3wbyBEThObzboAop2e1ZoEfCL8HXnFpK6IAOozyjDQdnZosjrsA5lhT+U7oSLq3K1y4JyxA552AjWK0YgsjruhGfbdsmHTCFkIG+h4R42Vs2FAz3DpksqF2UpL82QygJbyYc/ZuTaQHPE+df+qYt88pTC5d/9LlBYjDcSHzvWLPd1iqMoaKyOVGbRezIWG5ryeIT9u0NxVECLV4pzjBXOzX8+6QeWRYB7ZGCeTrY9JO32BpB9a2ufl2azYk8sLvFxKbY1ULiaGOM9r58uzhJXB021b6F17WovYRNAvlspJo3Wr19EpeTb3NgMEKkcL4ReY8xfaBsRpD9rtgrsxjT9oVv9WuOlK8sIc/Lb5uJt3vbuHkpqZysk5ne31Go6mAt0i/E=", + "token_seed": "y0C2H_I6f9gmZ_S6RNlk_v9P_Clg", + "token": "MIIYDQYJKoZIhvcNAQcCoIIX/jCCF/oCAQMxDTALBglghkgBZQMEAgIwgcwGCyqGSIb3DQEJEAEEoIG8BIG5MIG2AgEBBgsqhGgBhvZ3AgUBCzAvMAsGCWCGSAFlAwQCAQQgH+tIlnWFjx9gX8jLYhF++wFRFuetPDBAEKSYfKr6mrMCBwqofC4Aza0YDzIwMjMxMDIwMjExMTQ0WjADAgEBoFSkUjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjKgghMiMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0BAQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAMZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK/9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWajXfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKzHtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO/tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3XmfeR+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAWgBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgwJjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUFBwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhLmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTCMtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHAEQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz+TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q7M4KMIIGlDCCBHygAwIBAgIQK9SucLnQY1sq6YTI1nSqMDANBgkqhkiG9w0BAQwFADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0EwHhcNMjIwNzI4MDg1NjI2WhcNMzMwNzI3MDg1NjI2WjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKxV7tHwlG8ETLal5Yhm+isISwnj+L8khxKkASO/MRXI6kGntuse79tVL5Fkvl9KE4etck3HaGWkAIOYTXAalmxp+2/DjhF5BsFLxmeuTFipdpVwY4rHOndRllSOX15D/fnXS1V+Bv6T+3iHQLSORYeKxgv8ff7zWp/QvAuCOejeduR8Iis6j0s+meTdl2DNPm0+FXWLGccj0cC5I4XKnc4NrQgdvmD+pXfrgTpHHwq4RQnnkweGP2Wpa2V2ghhSJQVoyMl2/VBrKQGqA7z9iwkkkXJ76z+PaiCBg+06h2w6GLprm1g4MfP2BOzOQX3exdeJkDqp6+yJghUuU8v530ju11UkOk65SGF/KywOAUo5zrtFqGGUyzlsmnpFj62gAIb8yUN5l7eq7hmulRJY8sw01H4BJkg6Z8T+jhUjjnOMQTl25FfDjuIrxn9KSH3/iDrMrDsL7kkh3xdRcUnqzWW91XFJ3skGk/qJgvpGhkz6b7Mpcud1fzFCrh1YYESKxoliCYDfU6+96GVx5Opm7s5F4h4WqP9QEK0N+avprRir517X+tnbCRc7WH/13HhC08PyiXdWC+4ZUPcxkf3xRPn8faby3dsmd2NTwraWjc6uouyWdpkZXQtV8IpAbY6EOhk9k95MkZ9JQFPGOP03Tf+KabcKLhZPu+SbHU6D0OgQIDAQABo4IBYjCCAV4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUI8E8zFMzGVaO2OPzzjz8qHNHVuowHwYDVR0jBBgwFoAUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0c2NhMjAyMS5jcmwwbwYIKwYBBQUHAQEEYzBhMCgGCCsGAQUFBzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDUGCCsGAQUFBzAChilodHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RzY2EyMDIxLmNlcjBABgNVHSAEOTA3MDUGCyqEaAGG9ncCBQELMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAa8b3PSM+L1eQ+ewXgKZtaX1YAY0yloH5W9YbcSQPR0r153qv4//uZKIbv9adI+iCTGE6Um0+6BwLYOfZtMDNB55q43DeN6jDaOU7P4F/0gZmNKjM3ZTuptQ/XoJ+1OPRIBjviGRQJ5jB9YS8fqbHunYLU4WeGqq/s0X0TaExTUlMcjkqOnJlSn0W2YE4ixHDHoRiU3jOQkLNQJg6RfoasqtF+jL9ATLR1NsD6FZSN8a0UNeu5TOuP4JfHQmMzDxfJfFvPXbNkX66PWNaeXSNC/MetKKW9X/J+R3+GslvSnO64FHZZ3yXOHGHb1dCcVmKUmTzeSyTOeMUiq73l52KtTTSLqL6iTjPZosVTCdk01j5H0NqZdB/2aJMcVweKhCgMkmum33Io6EIjmkecCkEftMq3OyiHarfoTlYZeblLYvXGcQPCTIjXV+kmmrIJZyfaJU0jCeAUTurQgEhLyXngs1+mVYikQx2xUAmjGdV3cZcEegqpH2tqeRDdQykEo8SNaepXXUJnPT01RljPHaW0SrRxwaDkL31hHYoD9xCO0Rmalk6J8K/AGjAoE82GxabmXnd5Ru8otI8FCaPf68lDRQPNpvQqcy3GgCmi0NLNbm6Ees2lkrfX6lAEjc/cw/vCIhpclKiiABVYkDKqsh3o9LyuxtoD6hMuRg3cS/wwWkwgga5MIIEoaADAgECAhEA5/9pxzs1zkuRJth0fGilhzANBgkqhkiG9w0BAQwFADCBgDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMB4XDTIxMDUxOTA1MzIwN1oXDTM2MDUxODA1MzIwN1owVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIFRpbWVzdGFtcGluZyAyMDIxIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6RIfBDXtuV16xaaVQb6KZX9Od9FtJXXTZo7b+GEof3+3g0ChWiKnO7R4+6MfrvLyLCWZa6GpFHjEt4t0/GiUQvnkLOBRdBqr5DOvlmTvJJs2X8ZmWgWJjC7PBZLYBWAs8sJl3kNXxBMX5XntjqWx1ZOuuXl0R4x+zGGSMzZ45dpvB8vLpQfZkfMC/1tL9KYyjU+htLH68dZJPtzhqLBVG+8ljZ1ZFilOKksS79epCeqFSeAUm2eMTGpOiS3gfLM6yvb8Bg6bxg5yglDGC9zbr4sB9ceIGRtCQF1N8dqTgM/dSViiUgJkcv5dLNJeWxGCqJYPgzKlYZTgDXfGIeZpEFmjBLwURP5ABsyKoFocMzdjrCiFbTvJn+bD1kq78qZUgAQGGtd6zGJ88H4NPJ5Y2R4IargiWAmv8RyvWnHr/VA+2PrrK9eXe5q7M88YRdSTq9TKbqdnITUgZcjjm4ZUjteq8K331a4P0s2in0p3UubMEYa/G5w6jSWPUzchGLwWKYBfeSu6dIOC4LkeAPvmdZxSB1lWOb9HzVWZoM8Q/blaP4LWt6JxjkI9yQsYGMdCqwl7uMnPUIlcExS1mzXRxUowQref/EPaS7kYVaHHQrp4XB7nTEtQhkP0Z9Puz/n8zIFnUSnxDof4Yy650PAXSYmK2TcbyDoTNmmt8xAxzcMCAwEAAaOCAVUwggFRMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFL5UAi+/QGxzQ86sCSVOnkNEGu7gMB8GA1UdIwQYMBaAFLahVDkCw6A/joq8+tT4HKbROg79MA4GA1UdDwEB/wQEAwIBBjATBgNVHSUEDDAKBggrBgEFBQcDCDAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vY3JsLmNlcnR1bS5wbC9jdG5jYTIuY3JsMGwGCCsGAQUFBwEBBGAwXjAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAyBggrBgEFBQcwAoYmaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhMi5jZXIwOQYDVR0gBDIwMDAuBgRVHSAAMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAuJNZd8lMFf2UBwigp3qgLPBBk58BFCS3Q6aJDf3TISoytK0eal/JyCB88aUEd0wMNiEcNVMbK9j5Yht2whaknUE1G32k6uld7wcxHmw67vUBY6pSp8QhdodY4SzRRaZWzyYlviUpyU4dXyhKhHSncYJfa1U75cXxCe3sTp9uTBm3f8Bj8LkpjMUSVTtMJ6oEu5JqCYzRfc6nnoRUgwz/GVZFoOBGdrSEtDN7mZgcka/tS5MI47fALVvN5lZ2U8k7Dm/hTX8CWOw0uBZloZEW4HB0Xra3qE4qzzq/6M8gyoU/DE0k3+i7bYOrOk/7tPJg1sOhytOGUQ30PbG++0FfJioDuOFhj99b151SqFlSaRQYz74y/P2XJP+cF19oqozmi0rRTkfyEJIvhIZ+M5XIFZttmVQgTxfpfJwMFFEoQrSrklOxpmSygppsUDJEoliC05vBLVQ+gMZyYaKvBJ4YxBMlKH5ZHkRdloRYlUDplk8GUa+OCMVhpDSQurU6K1ua5dmZftnvSSz2H96UrQDzA6DyiI1V3ejVtvn2azVAXg6NnjmuRZ+wa7Pxy0H3+V4K4rOTHlG3VYA6xfLsTunCz72T6Ot4+tkrDYOeaU1pPX1CBfYj6EW2+ELq46GP8KCNUQDirWLU4nOmgCat7vN0SD6RlwUiSsMeCiQDmZwgwrUxggPvMIID6wIBATBqMFYxCzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIQK9SucLnQY1sq6YTI1nSqMDANBglghkgBZQMEAgIFAKCCAVYwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yMzEwMjAyMTExNDRaMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEIAO5mmRJdJhKlbbMXYDTRNB0+972yiQEhCvmzw5EIgeKMD8GCSqGSIb3DQEJBDEyBDCP+ii9m7TqMPKsw2m725RkGdbBiUdWrjmvZpXxAaz0J2XSi4xdI4aBe9nZK0jqu88wgZ8GCyqGSIb3DQEJEAIMMYGPMIGMMIGJMIGGBBS/T2vEmC3eFQWo78jHp51NFDUAzjBuMFqkWDBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0ECECvUrnC50GNbKumEyNZ0qjAwDQYJKoZIhvcNAQEBBQAEggIAslQbjwxNnJMr4LyP35D9ZHnNLi/dyJuMGnNBzZz/ocXMYK7dFmwHbMwrRpgjUGUEFtLS+02mctcmQtU0Tk6iFwTc4I9P+FXUf/y2FonahbrAROadP5TgQEcLz6CmGEU0YtWEQdAFoES3Vql+UCIhKNb7gk+1/w6/m1oBX5MJW3WEYNHEU6SnJ+Z5ROMto+hfpZsSKNFb9bdXblrMIFbJ9Qlll6mJLEB91PdBWhHmE5HCVfn2ofDlVDjCl1Z8zO+E6x/cSQWw5NAYrQQqqCnam+8KhTGPxjlwNbNgEqZUoCQ6Bz2nn9smoS9wqEVr8rx1TLd4kwxleARYgrx8LXZZNyrdO+dFOe0nQR/W5UI+KC0H+dtxZeeW5EHogLKB1X4r84kjVKGyD5fd8o/WCsz4/9lItI9wfmqqtyu5Js9gMffJv2EgXZ/XNsjQECHHKk9lfi7Q6ZIF9436b/HiFc7s7mPhlQujh/ZZ07RiY5DkYbTr4YlgkymZZKNxnu+khjyCDxlThdj7uvzV5DckZFIarqKn+PfMB1dKZYTejo61WecvwaTkoswRtmHR3bM4tgMs0vp/P0tzcJfYKM1WDvg/8es7yvL3cFPZmTwr1PdF5xcCrW6fQn+konHMPoahJkZx7Xw7Av+Jji+/g1XhcDfduKYgWuk1TUr1iviNmteqWSI=", "tsa_server": "http://time.certum.pl/", - "timestamp": "2023-06-22T09:38:52+00:00" + "timestamp": "2023-10-20T21:11:44+00:00" }, "section_defs": [ { "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Process", - "definition_id": "88f0ccdc3585c154e0d1b67cf28b734e69a0791b", + "definition_id": "7e0331d2df29682413535f00d4aad156783fee2e", "used_directly": true }, { "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample", - "definition_id": "61cee898fcd24be5040ffc76163cd645f26c9ff8", + "definition_id": "030133d881170f0d9e31da6086ed5641f0c4403c", "used_directly": true }, { "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes", - "definition_id": "b82ee685f3b0fd55329dbafada317987feac3051", + "definition_id": "f0086b987424b1001666c6f5df9ad1071164a27e", "used_directly": true }, { "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes.HotplateAnnealing", - "definition_id": "1341c9d51198599e0cf17a12d00694469e6fce8f", + "definition_id": "d39f4397900226398e6c17eb00467e874e5955c4", "used_directly": true }, { "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes.PvdEvaporation", - "definition_id": "fdd23ea5c11d32f9b780e5e5b0f6349712bafe6e", + "definition_id": "c640c9585e8d4549f248582763427a7dd7c417a0", "used_directly": true }, { @@ -1330,7 +1390,7 @@ }, { "definition_qualified_name": "nomad.datamodel.datamodel.EntryArchive", - "definition_id": "9e36824ae135f1e5ee5485911cb5fc03bc47af1d", + "definition_id": "1a38309e86abd87e7ef9ff7aa89560cf22ab111e", "used_directly": true }, { @@ -1345,7 +1405,7 @@ }, { "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Activity", - "definition_id": "870f59b3b42ceab01a604bddc86c39b90a897366", + "definition_id": "fc2735d177bf36f9718ca66a764a56fc0c6200a0", "used_directly": false }, { @@ -1354,23 +1414,38 @@ "used_directly": false }, { - "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Process", - "definition_id": "af4b2af6fde599256cf9d75c51958a41b3245b25", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.CompositeSystem", + "definition_id": "c7254c9b461a4baec86cb3179e2f84513f5c9053", + "used_directly": true + }, + { + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Entity", + "definition_id": "7ce6bdcaa183a9685582b275e1c2b2ea3139c74d", "used_directly": false }, { - "definition_qualified_name": "nomad.datamodel.metainfo.eln.ElnBaseSection", - "definition_id": "f05adb2ccbe04cbeced6213c4b6bd8f78e3d4ead", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Process", + "definition_id": "8d81e1f95c60f39a6a8c9f954143a55e6f4c984c", "used_directly": false }, { - "definition_qualified_name": "nomad.datamodel.metainfo.eln.ElnWithFormulaBaseSection", - "definition_id": "ada854aefd11fd40e6c161fe2d9207a7bb104052", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.System", + "definition_id": "3ab3a09d615ab58aefbaa3acdd8d6af4e73aaae5", "used_directly": false }, { - "definition_qualified_name": "nomad.datamodel.metainfo.eln.Sample", - "definition_id": "a830a6d8c03f2a0baa0203e07efcbbd54328daaa", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.Figure", + "definition_id": "55ef08f33dcf9fb374aea217458bd34a23bec57b", + "used_directly": true + }, + { + "definition_qualified_name": "nomad.datamodel.metainfo.plot.PlotSection", + "definition_id": "7bb17e35ed91dca88bf6238fc51ed212693593d0", + "used_directly": true + }, + { + "definition_qualified_name": "nomad.datamodel.metainfo.plot.PlotlyFigure", + "definition_id": "491cdc3c5ea21cdc576275a5c1e600cdaa4256c1", "used_directly": true }, { @@ -1380,12 +1455,12 @@ }, { "definition_qualified_name": "nomad.datamodel.results.Properties", - "definition_id": "9fcaeef3034c9b3861ab45bcea5014c65ffb3da2", + "definition_id": "43288046582240d7a33ec8b5fe4ca86988c2378c", "used_directly": true }, { "definition_qualified_name": "nomad.datamodel.results.Results", - "definition_id": "1ee9d4d17197a78dcfa5f1814b1ff3e2b275c195", + "definition_id": "ba0a320c9aa599c7c4a0af8c545f3cfe76cc4e70", "used_directly": true }, { @@ -1403,13 +1478,13 @@ }, { "quantity_name": "lab_id", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection", + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection", "path": "data.lab_id", "text_value": "001" }, { "quantity_name": "description", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection", + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection", "path": "data.description", "text_value": "<p>A simple example for an \"sample\" that demonstrates how to combine different data entities.</p>\n<p>The sample it-self defines a few properties (involved chemicals, used substrate) and uses inherited default properties (formula, name, lab id, ...)</p>\n<p>But the sample also contains sub-sections that prodivde inforamtion about proccessed that were applied to this sample (PVD evaporation, hotplate annealing). </p>\n<p>The sample also show references to other entries (chemicals, instruments).</p>\n<p> </p>" }, @@ -1451,16 +1526,16 @@ }, { "quantity_name": "datetime", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection", + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection", "path": "data.datetime", - "date_value": "2023-06-22T11:38:53.109336+00:00" + "date_value": "2023-10-20T23:11:44.823365+00:00" } ] }, "data": { "m_def": "../upload/raw/schema.archive.yaml#/definitions/section_definitions/3", "name": "ELN example sample", - "datetime": "2023-06-22T11:38:53.109336+00:00", + "datetime": "2023-10-20T23:11:44.823365+00:00", "lab_id": "001", "description": "<p>A simple example for an \"sample\" that demonstrates how to combine different data entities.</p>\n<p>The sample it-self defines a few properties (involved chemicals, used substrate) and uses inherited default properties (formula, name, lab id, ...)</p>\n<p>But the sample also contains sub-sections that prodivde inforamtion about proccessed that were applied to this sample (PVD evaporation, hotplate annealing). </p>\n<p>The sample also show references to other entries (chemicals, instruments).</p>\n<p> </p>", "tags": [ @@ -1612,6 +1687,48 @@ 36.4472, 36.4526, 36.4504 + ], + "figures": [ + { + "figure": { + "data": [ + { + "x": "#time", + "y": "#chamber_pressure" + }, + { + "x": "#time", + "y": "#substrate_temperature", + "yaxis": "y2" + } + ], + "layout": { + "title": { + "text": "Pressure and Temperature over Time" + }, + "yaxis2": { + "overlaying": "y", + "side": "right" + } + } + } + }, + { + "figure": { + "data": { + "x": "#time", + "y": "#chamber_pressure" + } + } + }, + { + "figure": { + "data": { + "x": "#time", + "y": "#substrate_temperature" + } + } + } ] }, "hotplate_annealing": { @@ -1629,8 +1746,9 @@ } }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "26227", + "content-length": "28243", "content-type": "application/json", "server": "uvicorn" } @@ -1646,7 +1764,7 @@ "headers": { "accept": "application/json", "content-type": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiIxZWE3MTBmYi1hZTA3LTRiYjMtOGQ1NS03M2FkZjU3ODYxYTYiLCJleHAiOjE2ODc0NjI3MjUsIm5iZiI6MCwiaWF0IjoxNjg3NDI2NzQxLCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOlsicmVhbG0tbWFuYWdlbWVudCIsImFjY291bnQiXSwic3ViIjoiYTAzYWY4YjYtM2FhNy00MjhhLWIzYjEtNGE2MzE3ZTU3NmI2IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjgwYmY0NWMwLTg3OTAtNGEyZS05NmE5LTk4MDZhYzI4NjlhOSIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7InJlYWxtLW1hbmFnZW1lbnQiOnsicm9sZXMiOlsidmlldy11c2VycyIsInF1ZXJ5LWdyb3VwcyIsInF1ZXJ5LXVzZXJzIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlNoZWxkb24gQ29vcGVyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2Nvb3BlciIsImdpdmVuX25hbWUiOiJTaGVsZG9uIiwiZmFtaWx5X25hbWUiOiJDb29wZXIiLCJlbWFpbCI6InNoZWxkb24uY29vcGVyQG5vbWFkLWNvZS5ldSJ9.eq6rdsH-lDQLCf7KWGMCRhQpZlN0czpF7P4vYy8Xmb1zya5ZZEseMWWijb3CNn1n-332CKfCqlgEIGaVvGCh_j3rCa1tqhGwx9bn3XwLhxRQXBtcCfDXv0ap4xR_DTnDIjmKB5tFTl_82UKKLH2ddbc-wmZ1nFY6pXZ2cAIxudJAzXL1nCLjsU26wjU-c_9p1rzYA5FSJ2lrZoOyqKVgw2eN4lXzbmShqzTdIdEK0JEdd1oPM6r-otYH3baMf_P_S58u7JA7DG-4o-gqEqTcQkclprgFsuebW_zFMAQdwc4tX3RUrQJWIxc77S-RarR77Vnl5umIc8fe7k_CSLONQQ", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiJiMDgwZGZkNy02ZDVlLTQxOGItYjU5Zi05YjM2NDQzYTZlOWQiLCJleHAiOjE2OTc4NzIyOTYsIm5iZiI6MCwiaWF0IjoxNjk3ODM2MzEzLCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOlsicmVhbG0tbWFuYWdlbWVudCIsImFjY291bnQiXSwic3ViIjoiYTAzYWY4YjYtM2FhNy00MjhhLWIzYjEtNGE2MzE3ZTU3NmI2IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImQ5MDVmYmNhLTM2NGYtNGE3YS1hNDk0LWQxYzc2ZjVmMDAwYyIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7InJlYWxtLW1hbmFnZW1lbnQiOnsicm9sZXMiOlsidmlldy11c2VycyIsInF1ZXJ5LWdyb3VwcyIsInF1ZXJ5LXVzZXJzIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlNoZWxkb24gQ29vcGVyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2Nvb3BlciIsImdpdmVuX25hbWUiOiJTaGVsZG9uIiwiZmFtaWx5X25hbWUiOiJDb29wZXIiLCJlbWFpbCI6InNoZWxkb24uY29vcGVyQG5vbWFkLWNvZS5ldSJ9.g5TVZP0vnAEdBggGEov8uJ271vLLMwysgfnK9_o9tzl00QRnO0Gx9gbEA4cs6P9VYUQUU1ModrnA8uOLveLSOLqlm4hU_3wT-jy5HMqU7CosRWCNIYhVRWGBSIytlbWRLB_mCL77kVnMYnLpbKJhaQV6P9tucpMPw0_1ClBSUdwfqgR7M3ZbgCosemGjSPO4Uqz2z5DanI2ISrw3Od_w-_wPMk60wmP5DK2DZb0RV0L2rF5sFh5KusxhElecOKiT2gYMu-WmUgMpeTu9dLFDvdOJmWkiMzvCp6dhuZFNhWD8feLn3doCdF10EULebrFCAG79lHCBa7n818Brt8Gzeg", "cookie": null } }, @@ -1665,23 +1783,23 @@ "event": "Executing celery task", "proc": "Entry", "process": "process_entry", - "process_worker_id": "wkOvzQLPRkmg_LIzOBUDEw", + "process_worker_id": "9VM-FvfITtmASXYbk7Y9sg", "parser": "parsers/archive", "logger": "nomad.processing", - "timestamp": "2023-06-22 11:38.52", + "timestamp": "2023-10-20 23:11.44", "level": "DEBUG" }, { - "exec_time": "0.024654626846313477", + "exec_time": "0.03464984893798828", "input_size": "1176", "event": "parser executed", "proc": "Entry", "process": "process_entry", - "process_worker_id": "wkOvzQLPRkmg_LIzOBUDEw", + "process_worker_id": "9VM-FvfITtmASXYbk7Y9sg", "parser": "parsers/archive", "step": "parsers/archive", "logger": "nomad.processing", - "timestamp": "2023-06-22 11:38.53", + "timestamp": "2023-10-20 23:11.44", "level": "INFO" }, { @@ -1690,24 +1808,24 @@ "event": "normalizer completed successfully", "proc": "Entry", "process": "process_entry", - "process_worker_id": "wkOvzQLPRkmg_LIzOBUDEw", + "process_worker_id": "9VM-FvfITtmASXYbk7Y9sg", "parser": "parsers/archive", "logger": "nomad.processing", - "timestamp": "2023-06-22 11:38.53", + "timestamp": "2023-10-20 23:11.44", "level": "INFO" }, { - "exec_time": "0.0004279613494873047", + "exec_time": "0.0003025531768798828", "input_size": "1176", "event": "normalizer executed", "proc": "Entry", "process": "process_entry", - "process_worker_id": "wkOvzQLPRkmg_LIzOBUDEw", + "process_worker_id": "9VM-FvfITtmASXYbk7Y9sg", "parser": "parsers/archive", "normalizer": "ResultsNormalizer", "step": "ResultsNormalizer", "logger": "nomad.processing", - "timestamp": "2023-06-22 11:38.53", + "timestamp": "2023-10-20 23:11.44", "level": "INFO" }, { @@ -1716,53 +1834,53 @@ "event": "normalizer completed successfully", "proc": "Entry", "process": "process_entry", - "process_worker_id": "wkOvzQLPRkmg_LIzOBUDEw", + "process_worker_id": "9VM-FvfITtmASXYbk7Y9sg", "parser": "parsers/archive", "logger": "nomad.processing", - "timestamp": "2023-06-22 11:38.53", + "timestamp": "2023-10-20 23:11.44", "level": "INFO" }, { - "exec_time": "0.043283939361572266", + "exec_time": "0.017973899841308594", "input_size": "1176", "event": "normalizer executed", "proc": "Entry", "process": "process_entry", - "process_worker_id": "wkOvzQLPRkmg_LIzOBUDEw", + "process_worker_id": "9VM-FvfITtmASXYbk7Y9sg", "parser": "parsers/archive", "normalizer": "MetainfoNormalizer", "step": "MetainfoNormalizer", "logger": "nomad.processing", - "timestamp": "2023-06-22 11:38.53", + "timestamp": "2023-10-20 23:11.44", "level": "INFO" }, { - "exec_time": "0.002429485321044922", + "exec_time": "0.003522157669067383", "event": "entry metadata saved", "proc": "Entry", "process": "process_entry", - "process_worker_id": "wkOvzQLPRkmg_LIzOBUDEw", + "process_worker_id": "9VM-FvfITtmASXYbk7Y9sg", "parser": "parsers/archive", "logger": "nomad.processing", - "timestamp": "2023-06-22 11:38.53", + "timestamp": "2023-10-20 23:11.44", "level": "INFO" }, { - "exec_time": "0.009903192520141602", + "exec_time": "0.010565519332885742", "event": "entry metadata indexed", "proc": "Entry", "process": "process_entry", - "process_worker_id": "wkOvzQLPRkmg_LIzOBUDEw", + "process_worker_id": "9VM-FvfITtmASXYbk7Y9sg", "parser": "parsers/archive", "logger": "nomad.processing", - "timestamp": "2023-06-22 11:38.53", + "timestamp": "2023-10-20 23:11.44", "level": "INFO" } ], "data": { "m_def": "../upload/raw/schema.archive.yaml#/definitions/section_definitions/3", "name": "ELN example sample", - "datetime": "2023-06-22T11:38:53.109336+00:00", + "datetime": "2023-10-20T23:11:44.823365+00:00", "lab_id": "001", "description": "<p>A simple example for an \"sample\" that demonstrates how to combine different data entities.</p>\n<p>The sample it-self defines a few properties (involved chemicals, used substrate) and uses inherited default properties (formula, name, lab id, ...)</p>\n<p>But the sample also contains sub-sections that prodivde inforamtion about proccessed that were applied to this sample (PVD evaporation, hotplate annealing). </p>\n<p>The sample also show references to other entries (chemicals, instruments).</p>\n<p> </p>", "tags": [ @@ -1914,6 +2032,48 @@ 36.4472, 36.4526, 36.4504 + ], + "figures": [ + { + "figure": { + "data": [ + { + "x": "#time", + "y": "#chamber_pressure" + }, + { + "x": "#time", + "y": "#substrate_temperature", + "yaxis": "y2" + } + ], + "layout": { + "title": { + "text": "Pressure and Temperature over Time" + }, + "yaxis2": { + "overlaying": "y", + "side": "right" + } + } + } + }, + { + "figure": { + "data": { + "x": "#time", + "y": "#chamber_pressure" + } + } + }, + { + "figure": { + "data": { + "x": "#time", + "y": "#substrate_temperature" + } + } + } ] }, "hotplate_annealing": { @@ -1925,12 +2085,12 @@ }, "metadata": { "upload_id": "eln_upload_id", - "upload_create_time": "2023-06-22T09:38:52.707000+00:00", + "upload_create_time": "2023-10-20T21:11:44.447000+00:00", "entry_id": "bC7byHvWJp62Sn9uiuJUB38MT5j-", "entry_name": "ELN example sample", "entry_type": "Sample", - "entry_hash": "IJhNf0P3rAOk-Hl8HpTHMQlEv1jt", - "entry_create_time": "2023-06-22T09:38:52.780000+00:00", + "entry_hash": "y0C2H_I6f9gmZ_S6RNlk_v9P_Clg", + "entry_create_time": "2023-10-20T21:11:44.513000+00:00", "parser_name": "parsers/archive", "mainfile": "sample.archive.json", "files": [ @@ -1943,9 +2103,9 @@ "embargo_length": 0, "license": "CC BY 4.0", "processed": true, - "last_processing_time": "2023-06-22T09:38:53.033253+00:00", + "last_processing_time": "2023-10-20T21:11:44.763742+00:00", "processing_errors": [], - "nomad_version": "1.2.0rc1.dev181+gce78efe22.d20230609", + "nomad_version": "1.2.2.dev85+g6f47bb0a0", "nomad_commit": "", "references": [], "main_author": "68878af7-6845-46c0-b2c1-250d4d8eb470", @@ -1957,7 +2117,7 @@ "54cb1f64-f84e-4815-9ade-440ce0b5430f" ], "datasets": [], - "n_quantities": 59, + "n_quantities": 65, "quantities": [ "", "data", @@ -1974,6 +2134,8 @@ "data.processes.pvd_evaporation.chamber_pressure", "data.processes.pvd_evaporation.data_file", "data.processes.pvd_evaporation.datetime", + "data.processes.pvd_evaporation.figures", + "data.processes.pvd_evaporation.figures.figure", "data.processes.pvd_evaporation.fill_archive_from_datafile", "data.processes.pvd_evaporation.substrate_temperature", "data.processes.pvd_evaporation.time", @@ -2034,40 +2196,41 @@ "nomad.datamodel.datamodel.EntryArchive", "nomad.datamodel.datamodel.EntryMetadata", "nomad.datamodel.datamodel.RFC3161Timestamp", + "nomad.datamodel.metainfo.plot.PlotlyFigure", "nomad.datamodel.results.ELN", "nomad.datamodel.results.Properties", "nomad.datamodel.results.Results" ], "entry_timestamp": { - "token_seed": "IJhNf0P3rAOk-Hl8HpTHMQlEv1jt", - "token": "MIIYDQYJKoZIhvcNAQcCoIIX/jCCF/oCAQMxDTALBglghkgBZQMEAgIwgcwGCyqGSIb3DQEJEAEEoIG8BIG5MIG2AgEBBgsqhGgBhvZ3AgUBCzAvMAsGCWCGSAFlAwQCAQQgllBuEy/QmmRCOSqul92agyRnwGZaILVVVeHXh47TWvYCBwqofCa7YF8YDzIwMjMwNjIyMDkzODUyWjADAgEBoFSkUjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjKgghMiMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0BAQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAMZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK/9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWajXfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKzHtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO/tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3XmfeR+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAWgBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgwJjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUFBwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhLmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTCMtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHAEQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz+TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q7M4KMIIGlDCCBHygAwIBAgIQK9SucLnQY1sq6YTI1nSqMDANBgkqhkiG9w0BAQwFADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0EwHhcNMjIwNzI4MDg1NjI2WhcNMzMwNzI3MDg1NjI2WjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKxV7tHwlG8ETLal5Yhm+isISwnj+L8khxKkASO/MRXI6kGntuse79tVL5Fkvl9KE4etck3HaGWkAIOYTXAalmxp+2/DjhF5BsFLxmeuTFipdpVwY4rHOndRllSOX15D/fnXS1V+Bv6T+3iHQLSORYeKxgv8ff7zWp/QvAuCOejeduR8Iis6j0s+meTdl2DNPm0+FXWLGccj0cC5I4XKnc4NrQgdvmD+pXfrgTpHHwq4RQnnkweGP2Wpa2V2ghhSJQVoyMl2/VBrKQGqA7z9iwkkkXJ76z+PaiCBg+06h2w6GLprm1g4MfP2BOzOQX3exdeJkDqp6+yJghUuU8v530ju11UkOk65SGF/KywOAUo5zrtFqGGUyzlsmnpFj62gAIb8yUN5l7eq7hmulRJY8sw01H4BJkg6Z8T+jhUjjnOMQTl25FfDjuIrxn9KSH3/iDrMrDsL7kkh3xdRcUnqzWW91XFJ3skGk/qJgvpGhkz6b7Mpcud1fzFCrh1YYESKxoliCYDfU6+96GVx5Opm7s5F4h4WqP9QEK0N+avprRir517X+tnbCRc7WH/13HhC08PyiXdWC+4ZUPcxkf3xRPn8faby3dsmd2NTwraWjc6uouyWdpkZXQtV8IpAbY6EOhk9k95MkZ9JQFPGOP03Tf+KabcKLhZPu+SbHU6D0OgQIDAQABo4IBYjCCAV4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUI8E8zFMzGVaO2OPzzjz8qHNHVuowHwYDVR0jBBgwFoAUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0c2NhMjAyMS5jcmwwbwYIKwYBBQUHAQEEYzBhMCgGCCsGAQUFBzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDUGCCsGAQUFBzAChilodHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RzY2EyMDIxLmNlcjBABgNVHSAEOTA3MDUGCyqEaAGG9ncCBQELMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAa8b3PSM+L1eQ+ewXgKZtaX1YAY0yloH5W9YbcSQPR0r153qv4//uZKIbv9adI+iCTGE6Um0+6BwLYOfZtMDNB55q43DeN6jDaOU7P4F/0gZmNKjM3ZTuptQ/XoJ+1OPRIBjviGRQJ5jB9YS8fqbHunYLU4WeGqq/s0X0TaExTUlMcjkqOnJlSn0W2YE4ixHDHoRiU3jOQkLNQJg6RfoasqtF+jL9ATLR1NsD6FZSN8a0UNeu5TOuP4JfHQmMzDxfJfFvPXbNkX66PWNaeXSNC/MetKKW9X/J+R3+GslvSnO64FHZZ3yXOHGHb1dCcVmKUmTzeSyTOeMUiq73l52KtTTSLqL6iTjPZosVTCdk01j5H0NqZdB/2aJMcVweKhCgMkmum33Io6EIjmkecCkEftMq3OyiHarfoTlYZeblLYvXGcQPCTIjXV+kmmrIJZyfaJU0jCeAUTurQgEhLyXngs1+mVYikQx2xUAmjGdV3cZcEegqpH2tqeRDdQykEo8SNaepXXUJnPT01RljPHaW0SrRxwaDkL31hHYoD9xCO0Rmalk6J8K/AGjAoE82GxabmXnd5Ru8otI8FCaPf68lDRQPNpvQqcy3GgCmi0NLNbm6Ees2lkrfX6lAEjc/cw/vCIhpclKiiABVYkDKqsh3o9LyuxtoD6hMuRg3cS/wwWkwgga5MIIEoaADAgECAhEA5/9pxzs1zkuRJth0fGilhzANBgkqhkiG9w0BAQwFADCBgDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMB4XDTIxMDUxOTA1MzIwN1oXDTM2MDUxODA1MzIwN1owVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIFRpbWVzdGFtcGluZyAyMDIxIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6RIfBDXtuV16xaaVQb6KZX9Od9FtJXXTZo7b+GEof3+3g0ChWiKnO7R4+6MfrvLyLCWZa6GpFHjEt4t0/GiUQvnkLOBRdBqr5DOvlmTvJJs2X8ZmWgWJjC7PBZLYBWAs8sJl3kNXxBMX5XntjqWx1ZOuuXl0R4x+zGGSMzZ45dpvB8vLpQfZkfMC/1tL9KYyjU+htLH68dZJPtzhqLBVG+8ljZ1ZFilOKksS79epCeqFSeAUm2eMTGpOiS3gfLM6yvb8Bg6bxg5yglDGC9zbr4sB9ceIGRtCQF1N8dqTgM/dSViiUgJkcv5dLNJeWxGCqJYPgzKlYZTgDXfGIeZpEFmjBLwURP5ABsyKoFocMzdjrCiFbTvJn+bD1kq78qZUgAQGGtd6zGJ88H4NPJ5Y2R4IargiWAmv8RyvWnHr/VA+2PrrK9eXe5q7M88YRdSTq9TKbqdnITUgZcjjm4ZUjteq8K331a4P0s2in0p3UubMEYa/G5w6jSWPUzchGLwWKYBfeSu6dIOC4LkeAPvmdZxSB1lWOb9HzVWZoM8Q/blaP4LWt6JxjkI9yQsYGMdCqwl7uMnPUIlcExS1mzXRxUowQref/EPaS7kYVaHHQrp4XB7nTEtQhkP0Z9Puz/n8zIFnUSnxDof4Yy650PAXSYmK2TcbyDoTNmmt8xAxzcMCAwEAAaOCAVUwggFRMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFL5UAi+/QGxzQ86sCSVOnkNEGu7gMB8GA1UdIwQYMBaAFLahVDkCw6A/joq8+tT4HKbROg79MA4GA1UdDwEB/wQEAwIBBjATBgNVHSUEDDAKBggrBgEFBQcDCDAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vY3JsLmNlcnR1bS5wbC9jdG5jYTIuY3JsMGwGCCsGAQUFBwEBBGAwXjAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAyBggrBgEFBQcwAoYmaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhMi5jZXIwOQYDVR0gBDIwMDAuBgRVHSAAMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAuJNZd8lMFf2UBwigp3qgLPBBk58BFCS3Q6aJDf3TISoytK0eal/JyCB88aUEd0wMNiEcNVMbK9j5Yht2whaknUE1G32k6uld7wcxHmw67vUBY6pSp8QhdodY4SzRRaZWzyYlviUpyU4dXyhKhHSncYJfa1U75cXxCe3sTp9uTBm3f8Bj8LkpjMUSVTtMJ6oEu5JqCYzRfc6nnoRUgwz/GVZFoOBGdrSEtDN7mZgcka/tS5MI47fALVvN5lZ2U8k7Dm/hTX8CWOw0uBZloZEW4HB0Xra3qE4qzzq/6M8gyoU/DE0k3+i7bYOrOk/7tPJg1sOhytOGUQ30PbG++0FfJioDuOFhj99b151SqFlSaRQYz74y/P2XJP+cF19oqozmi0rRTkfyEJIvhIZ+M5XIFZttmVQgTxfpfJwMFFEoQrSrklOxpmSygppsUDJEoliC05vBLVQ+gMZyYaKvBJ4YxBMlKH5ZHkRdloRYlUDplk8GUa+OCMVhpDSQurU6K1ua5dmZftnvSSz2H96UrQDzA6DyiI1V3ejVtvn2azVAXg6NnjmuRZ+wa7Pxy0H3+V4K4rOTHlG3VYA6xfLsTunCz72T6Ot4+tkrDYOeaU1pPX1CBfYj6EW2+ELq46GP8KCNUQDirWLU4nOmgCat7vN0SD6RlwUiSsMeCiQDmZwgwrUxggPvMIID6wIBATBqMFYxCzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIQK9SucLnQY1sq6YTI1nSqMDANBglghkgBZQMEAgIFAKCCAVYwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yMzA2MjIwOTM4NTJaMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEIAO5mmRJdJhKlbbMXYDTRNB0+972yiQEhCvmzw5EIgeKMD8GCSqGSIb3DQEJBDEyBDBxAqB0t/84M5oe1gPPBExQ4xYE4oOinw9zbk24a1OB4y3KDNVfjo17QWSTblGPEkQwgZ8GCyqGSIb3DQEJEAIMMYGPMIGMMIGJMIGGBBS/T2vEmC3eFQWo78jHp51NFDUAzjBuMFqkWDBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0ECECvUrnC50GNbKumEyNZ0qjAwDQYJKoZIhvcNAQEBBQAEggIAStRzrAoKUg2jizvTqzguvimiEjhC0za+n+/yhC5UtHnL6nurlbyHYiLmBE6FN5BkMrJ9d2A5F1VjZs+C721UKB41d3TYysfrNpL4NXlklTCAZzXgcITs1g6eUpSumuZZPPuRg0gYDHQAWCMvt/HtkmmrQuJgyOPEXxvxnvLnY6FsMF8wxjnMhdbtFGWORVR3u15AhSywy3I5js3vJ6mpHjo4g/jFLsMLQQYS8h93BSYf+rwqyzLtT6+CogCGgpm26uxiBoqCirJGcfPs1kLt+WfPRBdTT2GDoEv8hXI3wbyBEThObzboAop2e1ZoEfCL8HXnFpK6IAOozyjDQdnZosjrsA5lhT+U7oSLq3K1y4JyxA552AjWK0YgsjruhGfbdsmHTCFkIG+h4R42Vs2FAz3DpksqF2UpL82QygJbyYc/ZuTaQHPE+df+qYt88pTC5d/9LlBYjDcSHzvWLPd1iqMoaKyOVGbRezIWG5ryeIT9u0NxVECLV4pzjBXOzX8+6QeWRYB7ZGCeTrY9JO32BpB9a2ufl2azYk8sLvFxKbY1ULiaGOM9r58uzhJXB021b6F17WovYRNAvlspJo3Wr19EpeTb3NgMEKkcL4ReY8xfaBsRpD9rtgrsxjT9oVv9WuOlK8sIc/Lb5uJt3vbuHkpqZysk5ne31Go6mAt0i/E=", + "token_seed": "y0C2H_I6f9gmZ_S6RNlk_v9P_Clg", + "token": "MIIYDQYJKoZIhvcNAQcCoIIX/jCCF/oCAQMxDTALBglghkgBZQMEAgIwgcwGCyqGSIb3DQEJEAEEoIG8BIG5MIG2AgEBBgsqhGgBhvZ3AgUBCzAvMAsGCWCGSAFlAwQCAQQgH+tIlnWFjx9gX8jLYhF++wFRFuetPDBAEKSYfKr6mrMCBwqofC4Aza0YDzIwMjMxMDIwMjExMTQ0WjADAgEBoFSkUjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjKgghMiMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0BAQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAMZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK/9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWajXfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKzHtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO/tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3XmfeR+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAWgBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgwJjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUFBwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhLmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTCMtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHAEQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz+TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q7M4KMIIGlDCCBHygAwIBAgIQK9SucLnQY1sq6YTI1nSqMDANBgkqhkiG9w0BAQwFADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0EwHhcNMjIwNzI4MDg1NjI2WhcNMzMwNzI3MDg1NjI2WjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKxV7tHwlG8ETLal5Yhm+isISwnj+L8khxKkASO/MRXI6kGntuse79tVL5Fkvl9KE4etck3HaGWkAIOYTXAalmxp+2/DjhF5BsFLxmeuTFipdpVwY4rHOndRllSOX15D/fnXS1V+Bv6T+3iHQLSORYeKxgv8ff7zWp/QvAuCOejeduR8Iis6j0s+meTdl2DNPm0+FXWLGccj0cC5I4XKnc4NrQgdvmD+pXfrgTpHHwq4RQnnkweGP2Wpa2V2ghhSJQVoyMl2/VBrKQGqA7z9iwkkkXJ76z+PaiCBg+06h2w6GLprm1g4MfP2BOzOQX3exdeJkDqp6+yJghUuU8v530ju11UkOk65SGF/KywOAUo5zrtFqGGUyzlsmnpFj62gAIb8yUN5l7eq7hmulRJY8sw01H4BJkg6Z8T+jhUjjnOMQTl25FfDjuIrxn9KSH3/iDrMrDsL7kkh3xdRcUnqzWW91XFJ3skGk/qJgvpGhkz6b7Mpcud1fzFCrh1YYESKxoliCYDfU6+96GVx5Opm7s5F4h4WqP9QEK0N+avprRir517X+tnbCRc7WH/13HhC08PyiXdWC+4ZUPcxkf3xRPn8faby3dsmd2NTwraWjc6uouyWdpkZXQtV8IpAbY6EOhk9k95MkZ9JQFPGOP03Tf+KabcKLhZPu+SbHU6D0OgQIDAQABo4IBYjCCAV4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUI8E8zFMzGVaO2OPzzjz8qHNHVuowHwYDVR0jBBgwFoAUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0c2NhMjAyMS5jcmwwbwYIKwYBBQUHAQEEYzBhMCgGCCsGAQUFBzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDUGCCsGAQUFBzAChilodHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RzY2EyMDIxLmNlcjBABgNVHSAEOTA3MDUGCyqEaAGG9ncCBQELMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAa8b3PSM+L1eQ+ewXgKZtaX1YAY0yloH5W9YbcSQPR0r153qv4//uZKIbv9adI+iCTGE6Um0+6BwLYOfZtMDNB55q43DeN6jDaOU7P4F/0gZmNKjM3ZTuptQ/XoJ+1OPRIBjviGRQJ5jB9YS8fqbHunYLU4WeGqq/s0X0TaExTUlMcjkqOnJlSn0W2YE4ixHDHoRiU3jOQkLNQJg6RfoasqtF+jL9ATLR1NsD6FZSN8a0UNeu5TOuP4JfHQmMzDxfJfFvPXbNkX66PWNaeXSNC/MetKKW9X/J+R3+GslvSnO64FHZZ3yXOHGHb1dCcVmKUmTzeSyTOeMUiq73l52KtTTSLqL6iTjPZosVTCdk01j5H0NqZdB/2aJMcVweKhCgMkmum33Io6EIjmkecCkEftMq3OyiHarfoTlYZeblLYvXGcQPCTIjXV+kmmrIJZyfaJU0jCeAUTurQgEhLyXngs1+mVYikQx2xUAmjGdV3cZcEegqpH2tqeRDdQykEo8SNaepXXUJnPT01RljPHaW0SrRxwaDkL31hHYoD9xCO0Rmalk6J8K/AGjAoE82GxabmXnd5Ru8otI8FCaPf68lDRQPNpvQqcy3GgCmi0NLNbm6Ees2lkrfX6lAEjc/cw/vCIhpclKiiABVYkDKqsh3o9LyuxtoD6hMuRg3cS/wwWkwgga5MIIEoaADAgECAhEA5/9pxzs1zkuRJth0fGilhzANBgkqhkiG9w0BAQwFADCBgDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMB4XDTIxMDUxOTA1MzIwN1oXDTM2MDUxODA1MzIwN1owVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIFRpbWVzdGFtcGluZyAyMDIxIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6RIfBDXtuV16xaaVQb6KZX9Od9FtJXXTZo7b+GEof3+3g0ChWiKnO7R4+6MfrvLyLCWZa6GpFHjEt4t0/GiUQvnkLOBRdBqr5DOvlmTvJJs2X8ZmWgWJjC7PBZLYBWAs8sJl3kNXxBMX5XntjqWx1ZOuuXl0R4x+zGGSMzZ45dpvB8vLpQfZkfMC/1tL9KYyjU+htLH68dZJPtzhqLBVG+8ljZ1ZFilOKksS79epCeqFSeAUm2eMTGpOiS3gfLM6yvb8Bg6bxg5yglDGC9zbr4sB9ceIGRtCQF1N8dqTgM/dSViiUgJkcv5dLNJeWxGCqJYPgzKlYZTgDXfGIeZpEFmjBLwURP5ABsyKoFocMzdjrCiFbTvJn+bD1kq78qZUgAQGGtd6zGJ88H4NPJ5Y2R4IargiWAmv8RyvWnHr/VA+2PrrK9eXe5q7M88YRdSTq9TKbqdnITUgZcjjm4ZUjteq8K331a4P0s2in0p3UubMEYa/G5w6jSWPUzchGLwWKYBfeSu6dIOC4LkeAPvmdZxSB1lWOb9HzVWZoM8Q/blaP4LWt6JxjkI9yQsYGMdCqwl7uMnPUIlcExS1mzXRxUowQref/EPaS7kYVaHHQrp4XB7nTEtQhkP0Z9Puz/n8zIFnUSnxDof4Yy650PAXSYmK2TcbyDoTNmmt8xAxzcMCAwEAAaOCAVUwggFRMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFL5UAi+/QGxzQ86sCSVOnkNEGu7gMB8GA1UdIwQYMBaAFLahVDkCw6A/joq8+tT4HKbROg79MA4GA1UdDwEB/wQEAwIBBjATBgNVHSUEDDAKBggrBgEFBQcDCDAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vY3JsLmNlcnR1bS5wbC9jdG5jYTIuY3JsMGwGCCsGAQUFBwEBBGAwXjAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAyBggrBgEFBQcwAoYmaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhMi5jZXIwOQYDVR0gBDIwMDAuBgRVHSAAMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAuJNZd8lMFf2UBwigp3qgLPBBk58BFCS3Q6aJDf3TISoytK0eal/JyCB88aUEd0wMNiEcNVMbK9j5Yht2whaknUE1G32k6uld7wcxHmw67vUBY6pSp8QhdodY4SzRRaZWzyYlviUpyU4dXyhKhHSncYJfa1U75cXxCe3sTp9uTBm3f8Bj8LkpjMUSVTtMJ6oEu5JqCYzRfc6nnoRUgwz/GVZFoOBGdrSEtDN7mZgcka/tS5MI47fALVvN5lZ2U8k7Dm/hTX8CWOw0uBZloZEW4HB0Xra3qE4qzzq/6M8gyoU/DE0k3+i7bYOrOk/7tPJg1sOhytOGUQ30PbG++0FfJioDuOFhj99b151SqFlSaRQYz74y/P2XJP+cF19oqozmi0rRTkfyEJIvhIZ+M5XIFZttmVQgTxfpfJwMFFEoQrSrklOxpmSygppsUDJEoliC05vBLVQ+gMZyYaKvBJ4YxBMlKH5ZHkRdloRYlUDplk8GUa+OCMVhpDSQurU6K1ua5dmZftnvSSz2H96UrQDzA6DyiI1V3ejVtvn2azVAXg6NnjmuRZ+wa7Pxy0H3+V4K4rOTHlG3VYA6xfLsTunCz72T6Ot4+tkrDYOeaU1pPX1CBfYj6EW2+ELq46GP8KCNUQDirWLU4nOmgCat7vN0SD6RlwUiSsMeCiQDmZwgwrUxggPvMIID6wIBATBqMFYxCzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIQK9SucLnQY1sq6YTI1nSqMDANBglghkgBZQMEAgIFAKCCAVYwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yMzEwMjAyMTExNDRaMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEIAO5mmRJdJhKlbbMXYDTRNB0+972yiQEhCvmzw5EIgeKMD8GCSqGSIb3DQEJBDEyBDCP+ii9m7TqMPKsw2m725RkGdbBiUdWrjmvZpXxAaz0J2XSi4xdI4aBe9nZK0jqu88wgZ8GCyqGSIb3DQEJEAIMMYGPMIGMMIGJMIGGBBS/T2vEmC3eFQWo78jHp51NFDUAzjBuMFqkWDBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0ECECvUrnC50GNbKumEyNZ0qjAwDQYJKoZIhvcNAQEBBQAEggIAslQbjwxNnJMr4LyP35D9ZHnNLi/dyJuMGnNBzZz/ocXMYK7dFmwHbMwrRpgjUGUEFtLS+02mctcmQtU0Tk6iFwTc4I9P+FXUf/y2FonahbrAROadP5TgQEcLz6CmGEU0YtWEQdAFoES3Vql+UCIhKNb7gk+1/w6/m1oBX5MJW3WEYNHEU6SnJ+Z5ROMto+hfpZsSKNFb9bdXblrMIFbJ9Qlll6mJLEB91PdBWhHmE5HCVfn2ofDlVDjCl1Z8zO+E6x/cSQWw5NAYrQQqqCnam+8KhTGPxjlwNbNgEqZUoCQ6Bz2nn9smoS9wqEVr8rx1TLd4kwxleARYgrx8LXZZNyrdO+dFOe0nQR/W5UI+KC0H+dtxZeeW5EHogLKB1X4r84kjVKGyD5fd8o/WCsz4/9lItI9wfmqqtyu5Js9gMffJv2EgXZ/XNsjQECHHKk9lfi7Q6ZIF9436b/HiFc7s7mPhlQujh/ZZ07RiY5DkYbTr4YlgkymZZKNxnu+khjyCDxlThdj7uvzV5DckZFIarqKn+PfMB1dKZYTejo61WecvwaTkoswRtmHR3bM4tgMs0vp/P0tzcJfYKM1WDvg/8es7yvL3cFPZmTwr1PdF5xcCrW6fQn+konHMPoahJkZx7Xw7Av+Jji+/g1XhcDfduKYgWuk1TUr1iviNmteqWSI=", "tsa_server": "http://time.certum.pl/", - "timestamp": "2023-06-22T09:38:52+00:00" + "timestamp": "2023-10-20T21:11:44+00:00" }, "section_defs": [ { "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Process", - "definition_id": "88f0ccdc3585c154e0d1b67cf28b734e69a0791b", + "definition_id": "7e0331d2df29682413535f00d4aad156783fee2e", "used_directly": true }, { "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample", - "definition_id": "61cee898fcd24be5040ffc76163cd645f26c9ff8", + "definition_id": "030133d881170f0d9e31da6086ed5641f0c4403c", "used_directly": true }, { "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes", - "definition_id": "b82ee685f3b0fd55329dbafada317987feac3051", + "definition_id": "f0086b987424b1001666c6f5df9ad1071164a27e", "used_directly": true }, { "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes.HotplateAnnealing", - "definition_id": "1341c9d51198599e0cf17a12d00694469e6fce8f", + "definition_id": "d39f4397900226398e6c17eb00467e874e5955c4", "used_directly": true }, { "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes.PvdEvaporation", - "definition_id": "fdd23ea5c11d32f9b780e5e5b0f6349712bafe6e", + "definition_id": "c640c9585e8d4549f248582763427a7dd7c417a0", "used_directly": true }, { @@ -2082,7 +2245,7 @@ }, { "definition_qualified_name": "nomad.datamodel.datamodel.EntryArchive", - "definition_id": "9e36824ae135f1e5ee5485911cb5fc03bc47af1d", + "definition_id": "1a38309e86abd87e7ef9ff7aa89560cf22ab111e", "used_directly": true }, { @@ -2097,7 +2260,7 @@ }, { "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Activity", - "definition_id": "870f59b3b42ceab01a604bddc86c39b90a897366", + "definition_id": "fc2735d177bf36f9718ca66a764a56fc0c6200a0", "used_directly": false }, { @@ -2106,23 +2269,38 @@ "used_directly": false }, { - "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Process", - "definition_id": "af4b2af6fde599256cf9d75c51958a41b3245b25", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.CompositeSystem", + "definition_id": "c7254c9b461a4baec86cb3179e2f84513f5c9053", + "used_directly": true + }, + { + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Entity", + "definition_id": "7ce6bdcaa183a9685582b275e1c2b2ea3139c74d", "used_directly": false }, { - "definition_qualified_name": "nomad.datamodel.metainfo.eln.ElnBaseSection", - "definition_id": "f05adb2ccbe04cbeced6213c4b6bd8f78e3d4ead", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Process", + "definition_id": "8d81e1f95c60f39a6a8c9f954143a55e6f4c984c", "used_directly": false }, { - "definition_qualified_name": "nomad.datamodel.metainfo.eln.ElnWithFormulaBaseSection", - "definition_id": "ada854aefd11fd40e6c161fe2d9207a7bb104052", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.System", + "definition_id": "3ab3a09d615ab58aefbaa3acdd8d6af4e73aaae5", "used_directly": false }, { - "definition_qualified_name": "nomad.datamodel.metainfo.eln.Sample", - "definition_id": "a830a6d8c03f2a0baa0203e07efcbbd54328daaa", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.Figure", + "definition_id": "55ef08f33dcf9fb374aea217458bd34a23bec57b", + "used_directly": true + }, + { + "definition_qualified_name": "nomad.datamodel.metainfo.plot.PlotSection", + "definition_id": "7bb17e35ed91dca88bf6238fc51ed212693593d0", + "used_directly": true + }, + { + "definition_qualified_name": "nomad.datamodel.metainfo.plot.PlotlyFigure", + "definition_id": "491cdc3c5ea21cdc576275a5c1e600cdaa4256c1", "used_directly": true }, { @@ -2132,12 +2310,12 @@ }, { "definition_qualified_name": "nomad.datamodel.results.Properties", - "definition_id": "9fcaeef3034c9b3861ab45bcea5014c65ffb3da2", + "definition_id": "43288046582240d7a33ec8b5fe4ca86988c2378c", "used_directly": true }, { "definition_qualified_name": "nomad.datamodel.results.Results", - "definition_id": "1ee9d4d17197a78dcfa5f1814b1ff3e2b275c195", + "definition_id": "ba0a320c9aa599c7c4a0af8c545f3cfe76cc4e70", "used_directly": true }, { @@ -2155,13 +2333,13 @@ }, { "quantity_name": "lab_id", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection", + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection", "path": "data.lab_id", "text_value": "001" }, { "quantity_name": "description", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection", + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection", "path": "data.description", "text_value": "<p>A simple example for an \"sample\" that demonstrates how to combine different data entities.</p>\n<p>The sample it-self defines a few properties (involved chemicals, used substrate) and uses inherited default properties (formula, name, lab id, ...)</p>\n<p>But the sample also contains sub-sections that prodivde inforamtion about proccessed that were applied to this sample (PVD evaporation, hotplate annealing). </p>\n<p>The sample also show references to other entries (chemicals, instruments).</p>\n<p> </p>" }, @@ -2203,9 +2381,9 @@ }, { "quantity_name": "datetime", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection", + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection", "path": "data.datetime", - "date_value": "2023-06-22T11:38:53.109336+00:00" + "date_value": "2023-10-20T23:11:44.823365+00:00" } ] }, @@ -2240,8 +2418,9 @@ } }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "29910", + "content-length": "31924", "content-type": "application/json", "server": "uvicorn" } @@ -2270,7 +2449,7 @@ "headers": { "accept": "application/json, text/plain, */*", "content-type": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiI5N2M2ZmIwNC1lOTg0LTQxMDYtOTUwMi05Mzk2MGJiYTVlZmIiLCJleHAiOjE2ODc0NjI3MjUsIm5iZiI6MCwiaWF0IjoxNjg3NDI2NzM4LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOlsicmVhbG0tbWFuYWdlbWVudCIsImFjY291bnQiXSwic3ViIjoiYTAzYWY4YjYtM2FhNy00MjhhLWIzYjEtNGE2MzE3ZTU3NmI2IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjgwYmY0NWMwLTg3OTAtNGEyZS05NmE5LTk4MDZhYzI4NjlhOSIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7InJlYWxtLW1hbmFnZW1lbnQiOnsicm9sZXMiOlsidmlldy11c2VycyIsInF1ZXJ5LWdyb3VwcyIsInF1ZXJ5LXVzZXJzIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlNoZWxkb24gQ29vcGVyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2Nvb3BlciIsImdpdmVuX25hbWUiOiJTaGVsZG9uIiwiZmFtaWx5X25hbWUiOiJDb29wZXIiLCJlbWFpbCI6InNoZWxkb24uY29vcGVyQG5vbWFkLWNvZS5ldSJ9.I_OU_t-uY_AEOusysHr64TeaQd7s1Pyy4DMuSUpmwRDze5TY0qpwUD1yebPfuB8_-gq7vFahqoP7VMVyidEa5OBQAyL9lXs0jR30pJ_9vuqoB1TE1WCdVXaUe_QR8A972zV1LlCiwGBoR08mfOfZgRI4iQqDvCD9oo0CsPFZZ3nkNY2lP_DUoBzF5zTNpnZ1jvoVlnO8JfBWyOfNb81ZVAAA8OhHWrd4YPKbZfUaY-nZeo2T0iTPTxg7VgWIhZoMabNXACXwD-bIZhwG9B9GuV8sSmvCLwd_lzcErMOvxFXAOVyOwbm1sOCYqg-FFlT67CXwVFbpV3cohdkBeAaA6A", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiI4MjdiZDgxMi05YTk0LTRmYjUtOTI4Ni1mMzE3N2I0MDkxYWIiLCJleHAiOjE2OTc4NzIyOTYsIm5iZiI6MCwiaWF0IjoxNjk3ODM2MzEwLCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOlsicmVhbG0tbWFuYWdlbWVudCIsImFjY291bnQiXSwic3ViIjoiYTAzYWY4YjYtM2FhNy00MjhhLWIzYjEtNGE2MzE3ZTU3NmI2IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImQ5MDVmYmNhLTM2NGYtNGE3YS1hNDk0LWQxYzc2ZjVmMDAwYyIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7InJlYWxtLW1hbmFnZW1lbnQiOnsicm9sZXMiOlsidmlldy11c2VycyIsInF1ZXJ5LWdyb3VwcyIsInF1ZXJ5LXVzZXJzIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlNoZWxkb24gQ29vcGVyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2Nvb3BlciIsImdpdmVuX25hbWUiOiJTaGVsZG9uIiwiZmFtaWx5X25hbWUiOiJDb29wZXIiLCJlbWFpbCI6InNoZWxkb24uY29vcGVyQG5vbWFkLWNvZS5ldSJ9.VL-mQkH3IDSAjmEXbgKwtli0KqJPPtsmkRXmskfRvCA_tHuFiaGMOVd8131A-kpx1QoBbNG5C8FFIteXfyk6fCA0cxledcgUF2_f2HtxByda9nlu63JCx0OMhaKLX8o17Gs4Fw-t__Xmns01Y8KwR8UhFv7WmIIjb8ecgR97Qm45mUDrUDGMbPbsxMSn0g3vLYl1PJi60XfmtJnljzITokFv_mvgop0HjgVGK1DOJPIAs9FhNO9p7AK1yhuoO_uYIDzKOZwtjFCt2jS_0Ry3vvuYoS_pF2VmxAoFl5HukTfeVUirPdKnCdY0424wzE3BYTrK51Z6rfO5HPKvZ5hqrA", "cookie": null } }, @@ -2295,6 +2474,7 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", "content-length": "326", "content-type": "application/json", @@ -2311,7 +2491,7 @@ "body": "", "headers": { "accept": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiJlODY4YjgxZS0zYzVkLTQ1N2EtODYxOC02NTU4NDhkYTJmZmIiLCJleHAiOjE2ODc0NjI3MjUsIm5iZiI6MCwiaWF0IjoxNjg3NDI2NzM4LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOlsicmVhbG0tbWFuYWdlbWVudCIsImFjY291bnQiXSwic3ViIjoiYTAzYWY4YjYtM2FhNy00MjhhLWIzYjEtNGE2MzE3ZTU3NmI2IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjgwYmY0NWMwLTg3OTAtNGEyZS05NmE5LTk4MDZhYzI4NjlhOSIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7InJlYWxtLW1hbmFnZW1lbnQiOnsicm9sZXMiOlsidmlldy11c2VycyIsInF1ZXJ5LWdyb3VwcyIsInF1ZXJ5LXVzZXJzIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlNoZWxkb24gQ29vcGVyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2Nvb3BlciIsImdpdmVuX25hbWUiOiJTaGVsZG9uIiwiZmFtaWx5X25hbWUiOiJDb29wZXIiLCJlbWFpbCI6InNoZWxkb24uY29vcGVyQG5vbWFkLWNvZS5ldSJ9.OK9AF3OfBpkIsSkhnwxuHULQCEMwA9x7qoaUhzkCC9WR72cB3gZ5JxsV_Vi-VCdy7akIKVwVDLesBtzmrrdRPPlP3iXeJCFgb-SwrYbuatoFv9vymruH8Po-Nd0YXDjhsDWivwCD-VlrIqEHE44vo_0BbCrcM3WZUPa0WKE-oQ-ic8XxbmdM7scvR2pzi8iLP6W5AV-w-YIyi1TE06NRwBaiY06OQ2AYZWQ414rZeR8SJ0wqf4zOGlJbVBbbqPFsQW6-5jStucm8v3fdZp4Ad4poKbD944UfjIjSSwQq3aKzvy3d5JOEQEbQj-Bxt3YDF7K-WcaMr-g4PRzpCbknvQ", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiJkNDJlZTE3My0wMmYwLTQ3NjItODFiYS1lMDM5MDQxYTM2ZTMiLCJleHAiOjE2OTc4NzIyOTYsIm5iZiI6MCwiaWF0IjoxNjk3ODM2MzExLCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOlsicmVhbG0tbWFuYWdlbWVudCIsImFjY291bnQiXSwic3ViIjoiYTAzYWY4YjYtM2FhNy00MjhhLWIzYjEtNGE2MzE3ZTU3NmI2IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImQ5MDVmYmNhLTM2NGYtNGE3YS1hNDk0LWQxYzc2ZjVmMDAwYyIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7InJlYWxtLW1hbmFnZW1lbnQiOnsicm9sZXMiOlsidmlldy11c2VycyIsInF1ZXJ5LWdyb3VwcyIsInF1ZXJ5LXVzZXJzIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlNoZWxkb24gQ29vcGVyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2Nvb3BlciIsImdpdmVuX25hbWUiOiJTaGVsZG9uIiwiZmFtaWx5X25hbWUiOiJDb29wZXIiLCJlbWFpbCI6InNoZWxkb24uY29vcGVyQG5vbWFkLWNvZS5ldSJ9.An9xNmasyMUltt0iYYiWILGwPOCZPLIiGCj4Y2jcttOQhCiu9KxRUExT9URonyAg64x4GzkN-vYA_0jQMyxc5zUIo8a9CXhkZchZzFXyrBRI2uEXeZFVnRMay-oiCT6WDKc-A9dKsKzKwp8SOocQVpG5l4VmB73tDY4Glyx0HtmpE_G2mAZGzmSIhZvRpWofQFfHiUtbCxI-bSg3-bio1JPdNfscytR1GwTDxm_OtWEvYuaro6tdRrT_w-eLd3rbIkEs-HR9Ys1nu0NIkxfW3qhGszaBMQ0ebMSrPO0Gz9j0ps025tysO0a-S88qKm7KeetQfJ-EPMpfo6WdyyuR6A", "cookie": null } }, @@ -2319,8 +2499,9 @@ "status": 200, "body": "{\n \"data\": {\n \"m_def\": \"../upload/raw/schema.archive.yaml#/definitions/section_definitions/3\",\n \"name\": \"ELN example sample\",\n \"lab_id\": \"001\",\n \"tags\": [\n \"project\"\n ],\n \"substrate_type\": \"SLG\",\n \"processes\": {\n \"pvd_evaporation\": {\n \"datetime\": \"2022-05-10T07:20:00+00:00\",\n \"data_file\": \"PVDProcess.csv\"\n },\n \"hotplate_annealing\": {\n \"datetime\": \"2022-05-10T07:22:00+00:00\",\n \"set_temperature\": 373.15,\n \"duration\": 60\n }\n },\n \"description\": \"<p>A simple example for an \\\"sample\\\" that demonstrates how to combine different data entities.</p>\\n<p>The sample it-self defines a few properties (involved chemicals, used substrate) and uses inherited default properties (formula, name, lab id, ...)</p>\\n<p>But the sample also contains sub-sections that prodivde inforamtion about proccessed that were applied to this sample (PVD evaporation, hotplate annealing). </p>\\n<p>The sample also show references to other entries (chemicals, instruments).</p>\\n<p> </p>\"\n }\n}\n", "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-disposition": "attatchment; filename=\"sample.archive.json\"", + "content-disposition": "attachment; filename=\"sample.archive.json\"", "content-type": "application/octet-stream", "server": "uvicorn", "transfer-encoding": "chunked" @@ -2334,7 +2515,7 @@ "body": "", "headers": { "accept": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiJhOGZkMTUwZi00YzliLTQ4ODYtYjU1MC00ZTM2ZmM5NjRjNjAiLCJleHAiOjE2ODc0NjI3MjUsIm5iZiI6MCwiaWF0IjoxNjg3NDI2NzQyLCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOlsicmVhbG0tbWFuYWdlbWVudCIsImFjY291bnQiXSwic3ViIjoiYTAzYWY4YjYtM2FhNy00MjhhLWIzYjEtNGE2MzE3ZTU3NmI2IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjgwYmY0NWMwLTg3OTAtNGEyZS05NmE5LTk4MDZhYzI4NjlhOSIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7InJlYWxtLW1hbmFnZW1lbnQiOnsicm9sZXMiOlsidmlldy11c2VycyIsInF1ZXJ5LWdyb3VwcyIsInF1ZXJ5LXVzZXJzIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlNoZWxkb24gQ29vcGVyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2Nvb3BlciIsImdpdmVuX25hbWUiOiJTaGVsZG9uIiwiZmFtaWx5X25hbWUiOiJDb29wZXIiLCJlbWFpbCI6InNoZWxkb24uY29vcGVyQG5vbWFkLWNvZS5ldSJ9.FY2dUlMZBViAaR1p-8-GVsS56_6mN9Qv93sFWiD6ihJ-0YVstoChJ-NzdhciQQCSpLLSzGUvZc3_RLbIJHzS_MRLhX5ejZbPPVwmQVuUh2fVWfYI0Ba6h-Rc6BZhZ5dzv2T72Pdxd-X8rjzgw-QjEkdBzcbKYs78LE4-F93weyGRkqvaTBAQHatkctBTwTJ113HJYuDQHwcXdS5jR40Yb5Y73dcgSM4kr7K6f8hgcnfkejzmfexy7gr2d858EJnlSekQPTB2Ztb8IhbvY-pBBLHUIYkfETV5eVxSlgoQcNvVDZUbiPUGAFLNApfFJarBc0YFtQBjQuaIOlX9_zYPiw", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiJmYjU0MGZmNC1kYzAxLTRlNGQtOTc4Yi0wNTA2ODQzYzJlZDciLCJleHAiOjE2OTc4NzIyOTYsIm5iZiI6MCwiaWF0IjoxNjk3ODM2MzEzLCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOlsicmVhbG0tbWFuYWdlbWVudCIsImFjY291bnQiXSwic3ViIjoiYTAzYWY4YjYtM2FhNy00MjhhLWIzYjEtNGE2MzE3ZTU3NmI2IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImQ5MDVmYmNhLTM2NGYtNGE3YS1hNDk0LWQxYzc2ZjVmMDAwYyIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7InJlYWxtLW1hbmFnZW1lbnQiOnsicm9sZXMiOlsidmlldy11c2VycyIsInF1ZXJ5LWdyb3VwcyIsInF1ZXJ5LXVzZXJzIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlNoZWxkb24gQ29vcGVyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2Nvb3BlciIsImdpdmVuX25hbWUiOiJTaGVsZG9uIiwiZmFtaWx5X25hbWUiOiJDb29wZXIiLCJlbWFpbCI6InNoZWxkb24uY29vcGVyQG5vbWFkLWNvZS5ldSJ9.jup9kegwH_gNol5qRJ_kK3HQ0wuRFJnNiRKebyO0ugUGX-E_WlN0b4T_lps09Sh6Doqm524ONa7lP83hLOM3JljmD7anacT7v4RbLv4YMUfv3BDKzgamgGWWs0NZoI5iMjNmRDIr-Hqs6-Xcz1PBTIoUPX3XLsx8aW-9hJA0_zlYQZi7xI3gi8ktFzypMYgb9Td5Jqq_SBFz_AqLmKcnLH-A4rlnPGUBbbn1QalHdN43bPtyK4GMmdFKDvyjfLERMpHwe7kJoUSfA6J_FTkUoaFRTyWYaClTLvp2N4EukJ77PygJHAKbkHHb0jXw5psGQyHPxgvRFzyWmLonuHgsUQ", "cookie": null } }, @@ -2342,8 +2523,9 @@ "status": 200, "body": "{\n \"data\": {\n \"m_def\": \"../upload/raw/schema.archive.yaml#/definitions/section_definitions/3\",\n \"name\": \"ELN example sample\",\n \"lab_id\": \"001\",\n \"tags\": [\n \"project\"\n ],\n \"substrate_type\": \"SLG\",\n \"processes\": {\n \"pvd_evaporation\": {\n \"datetime\": \"2022-05-10T07:20:00+00:00\",\n \"data_file\": \"PVDProcess.csv\"\n },\n \"hotplate_annealing\": {\n \"datetime\": \"2022-05-10T07:22:00+00:00\",\n \"set_temperature\": 373.15,\n \"duration\": 60\n }\n },\n \"description\": \"<p>A simple example for an \\\"sample\\\" that demonstrates how to combine different data entities.</p>\\n<p>The sample it-self defines a few properties (involved chemicals, used substrate) and uses inherited default properties (formula, name, lab id, ...)</p>\\n<p>But the sample also contains sub-sections that prodivde inforamtion about proccessed that were applied to this sample (PVD evaporation, hotplate annealing). </p>\\n<p>The sample also show references to other entries (chemicals, instruments).</p>\\n<p> </p>\"\n }\n}\n", "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-disposition": "attatchment; filename=\"sample.archive.json\"", + "content-disposition": "attachment; filename=\"sample.archive.json\"", "content-type": "application/octet-stream", "server": "uvicorn", "transfer-encoding": "chunked" @@ -2366,7 +2548,7 @@ "headers": { "accept": "application/json", "content-type": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiIxYzZhZmZiZS0zNTNlLTRmZjAtYmUwOS01MDQwY2QzM2M5NTQiLCJleHAiOjE2ODc0NjI3MjUsIm5iZiI6MCwiaWF0IjoxNjg3NDI2NzM5LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOlsicmVhbG0tbWFuYWdlbWVudCIsImFjY291bnQiXSwic3ViIjoiYTAzYWY4YjYtM2FhNy00MjhhLWIzYjEtNGE2MzE3ZTU3NmI2IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjgwYmY0NWMwLTg3OTAtNGEyZS05NmE5LTk4MDZhYzI4NjlhOSIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7InJlYWxtLW1hbmFnZW1lbnQiOnsicm9sZXMiOlsidmlldy11c2VycyIsInF1ZXJ5LWdyb3VwcyIsInF1ZXJ5LXVzZXJzIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlNoZWxkb24gQ29vcGVyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2Nvb3BlciIsImdpdmVuX25hbWUiOiJTaGVsZG9uIiwiZmFtaWx5X25hbWUiOiJDb29wZXIiLCJlbWFpbCI6InNoZWxkb24uY29vcGVyQG5vbWFkLWNvZS5ldSJ9.FuvEMrngnNWODuR9MnUOThfkR3Q3MDepGd-9EXrZmPyvbnfKa6BU44ii0GEX6Ijeq5_mMJXB5cS0ghEamun6h44vxXt3ab1FdCuS4oSG78cSJjLtINdrhClaeto6xsiiOdgQ8Z0dWIX0OM_qICylcntE6Aebqnmg81zpa3YZAJkeAHp3eNpYidSs65k9RtxPZv_Jyix4wde9C02fRg_Mipu5wjykr6NeevKiIOx046SThIPyPBlyPOCbcdRIO-O5PrFftRaPeid9bdeJ--_MV072GxlaDIL173v3f1xI3EBWJXzgCO6N3uH2zgtV0GV_dT_EpRRoYmW1HFe7zPOSfg", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiJhYWYzZjE3OS0wYWJiLTQ4MjMtYTY2MS05YTEzOGRkMDZmMDIiLCJleHAiOjE2OTc4NzIyOTYsIm5iZiI6MCwiaWF0IjoxNjk3ODM2MzExLCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOlsicmVhbG0tbWFuYWdlbWVudCIsImFjY291bnQiXSwic3ViIjoiYTAzYWY4YjYtM2FhNy00MjhhLWIzYjEtNGE2MzE3ZTU3NmI2IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImQ5MDVmYmNhLTM2NGYtNGE3YS1hNDk0LWQxYzc2ZjVmMDAwYyIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7InJlYWxtLW1hbmFnZW1lbnQiOnsicm9sZXMiOlsidmlldy11c2VycyIsInF1ZXJ5LWdyb3VwcyIsInF1ZXJ5LXVzZXJzIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlNoZWxkb24gQ29vcGVyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2Nvb3BlciIsImdpdmVuX25hbWUiOiJTaGVsZG9uIiwiZmFtaWx5X25hbWUiOiJDb29wZXIiLCJlbWFpbCI6InNoZWxkb24uY29vcGVyQG5vbWFkLWNvZS5ldSJ9.UuwjMtNlntj3zeOq_8ZLkJkeUp6-J5BOx585pz1_wM0Hq9pV7pA-zPCzcXVRC_M4I6GdAJ_lwf021hD1gvgkntGtxkl68Jlpc6gmf7ULifmuAj98IczoQ9wr05ikL1RmE6HIWnqJBN0Y0Pk0tmdtEJkDhSEZ3ACuSoNqvLBEFaUH9G-hpPPV8YjoAM7GMQGY78ylir394Fc0FVZOOPDrZ4O4WUJdM5QhLwiXeNC4JY_UdB-WxnjGBzKoaD6KptBwIfokWNCmgOE46cB-htdajlRNHgfavcCmev1ZzUT0TTg9NakgYHwFiPtw8YtI4MC8WcTbdJm6uKMaC4f3IRBD9Q", "cookie": null } }, @@ -2505,11 +2687,14 @@ "pvd_evaporation": {} } } + ], + "eln": [ + "None" ] }, "name": "Sample", "base_sections": [ - "nomad.datamodel.metainfo.eln.Sample", + "nomad.datamodel.metainfo.basesections.CompositeSystem", "nomad.datamodel.data.EntryData" ], "quantities": [ @@ -2686,20 +2871,48 @@ "overview": true } ], - "plot": [ + "plotly_graph_object": [ { - "x": "time", - "y": [ - "chamber_pressure", - "substrate_temperature" - ] + "data": [ + { + "x": "#time", + "y": "#chamber_pressure" + }, + { + "x": "#time", + "y": "#substrate_temperature", + "yaxis": "y2" + } + ], + "layout": { + "title": { + "text": "Pressure and Temperature over Time" + }, + "yaxis2": { + "overlaying": "y", + "side": "right" + } + } + }, + { + "data": { + "x": "#time", + "y": "#chamber_pressure" + } + }, + { + "data": { + "x": "#time", + "y": "#substrate_temperature" + } } ] }, "name": "PvdEvaporation", "base_sections": [ "#/definitions/section_definitions/2", - "nomad.parsing.tabular.TableData" + "nomad.parsing.tabular.TableData", + "nomad.datamodel.metainfo.plot.PlotSection" ], "quantities": [ { @@ -2709,8 +2922,19 @@ "m_annotations": { "tabular_parser": [ { - "comment": "#", - "sep": "\\t" + "parsing_options": { + "sep": "\\t", + "comment": "#" + }, + "mapping_options": [ + { + "mapping_mode": "column", + "file_mode": "current_entry", + "sections": [ + "#root" + ] + } + ] } ], "browser": [ @@ -2758,20 +2982,12 @@ "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ - { - "defaultDisplayUnit": "mbar" - } + "None" ], "tabular": [ { "name": "Vacuum Pressure1" } - ], - "plot": [ - { - "x": "time", - "y": "chamber_pressure" - } ] }, "name": "chamber_pressure", @@ -2794,12 +3010,6 @@ "name": "Substrate PV", "unit": "degC" } - ], - "plot": [ - { - "x": "time", - "y": "substrate_temperature" - } ] }, "name": "substrate_temperature", @@ -2881,12 +3091,12 @@ }, "metadata": { "upload_id": "eln_upload_id", - "upload_create_time": "2023-06-22T09:38:52.707000+00:00", + "upload_create_time": "2023-10-20T21:11:44.447000+00:00", "entry_id": "83DS7AzwqTKFVwlrdVeaL3kMSLU_", "entry_name": "Electronic Lab Notebook example schema", "entry_type": "Schema", - "entry_hash": "x_zOdo_96pqN_qhfEOW6HCugy3zu", - "entry_create_time": "2023-06-22T09:38:52.831000+00:00", + "entry_hash": "01azS40P52J1MvDpy7hFvRlF1VOj", + "entry_create_time": "2023-10-20T21:11:44.516000+00:00", "parser_name": "parsers/archive", "mainfile": "schema.archive.yaml", "files": [ @@ -2899,9 +3109,9 @@ "embargo_length": 0, "license": "CC BY 4.0", "processed": true, - "last_processing_time": "2023-06-22T09:38:53.031646+00:00", + "last_processing_time": "2023-10-20T21:11:44.765750+00:00", "processing_errors": [], - "nomad_version": "1.2.0rc1.dev181+gce78efe22.d20230609", + "nomad_version": "1.2.2.dev85+g6f47bb0a0", "nomad_commit": "", "references": [], "main_author": "68878af7-6845-46c0-b2c1-250d4d8eb470", @@ -3005,10 +3215,10 @@ "nomad.metainfo.metainfo.SubSection" ], "entry_timestamp": { - "token_seed": "x_zOdo_96pqN_qhfEOW6HCugy3zu", - "token": "MIIYDQYJKoZIhvcNAQcCoIIX/jCCF/oCAQMxDTALBglghkgBZQMEAgIwgcwGCyqGSIb3DQEJEAEEoIG8BIG5MIG2AgEBBgsqhGgBhvZ3AgUBCzAvMAsGCWCGSAFlAwQCAQQg80ZARNPgXCnhfzcf0SvqTNUGd+9CrTsj9L+g4b4aQFwCBwqofCbSapIYDzIwMjMwNjIyMDkzODUyWjADAgEBoFSkUjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjKgghMiMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0BAQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAMZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK/9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWajXfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKzHtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO/tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3XmfeR+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAWgBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgwJjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUFBwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhLmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTCMtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHAEQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz+TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q7M4KMIIGlDCCBHygAwIBAgIQK9SucLnQY1sq6YTI1nSqMDANBgkqhkiG9w0BAQwFADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0EwHhcNMjIwNzI4MDg1NjI2WhcNMzMwNzI3MDg1NjI2WjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKxV7tHwlG8ETLal5Yhm+isISwnj+L8khxKkASO/MRXI6kGntuse79tVL5Fkvl9KE4etck3HaGWkAIOYTXAalmxp+2/DjhF5BsFLxmeuTFipdpVwY4rHOndRllSOX15D/fnXS1V+Bv6T+3iHQLSORYeKxgv8ff7zWp/QvAuCOejeduR8Iis6j0s+meTdl2DNPm0+FXWLGccj0cC5I4XKnc4NrQgdvmD+pXfrgTpHHwq4RQnnkweGP2Wpa2V2ghhSJQVoyMl2/VBrKQGqA7z9iwkkkXJ76z+PaiCBg+06h2w6GLprm1g4MfP2BOzOQX3exdeJkDqp6+yJghUuU8v530ju11UkOk65SGF/KywOAUo5zrtFqGGUyzlsmnpFj62gAIb8yUN5l7eq7hmulRJY8sw01H4BJkg6Z8T+jhUjjnOMQTl25FfDjuIrxn9KSH3/iDrMrDsL7kkh3xdRcUnqzWW91XFJ3skGk/qJgvpGhkz6b7Mpcud1fzFCrh1YYESKxoliCYDfU6+96GVx5Opm7s5F4h4WqP9QEK0N+avprRir517X+tnbCRc7WH/13HhC08PyiXdWC+4ZUPcxkf3xRPn8faby3dsmd2NTwraWjc6uouyWdpkZXQtV8IpAbY6EOhk9k95MkZ9JQFPGOP03Tf+KabcKLhZPu+SbHU6D0OgQIDAQABo4IBYjCCAV4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUI8E8zFMzGVaO2OPzzjz8qHNHVuowHwYDVR0jBBgwFoAUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0c2NhMjAyMS5jcmwwbwYIKwYBBQUHAQEEYzBhMCgGCCsGAQUFBzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDUGCCsGAQUFBzAChilodHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RzY2EyMDIxLmNlcjBABgNVHSAEOTA3MDUGCyqEaAGG9ncCBQELMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAa8b3PSM+L1eQ+ewXgKZtaX1YAY0yloH5W9YbcSQPR0r153qv4//uZKIbv9adI+iCTGE6Um0+6BwLYOfZtMDNB55q43DeN6jDaOU7P4F/0gZmNKjM3ZTuptQ/XoJ+1OPRIBjviGRQJ5jB9YS8fqbHunYLU4WeGqq/s0X0TaExTUlMcjkqOnJlSn0W2YE4ixHDHoRiU3jOQkLNQJg6RfoasqtF+jL9ATLR1NsD6FZSN8a0UNeu5TOuP4JfHQmMzDxfJfFvPXbNkX66PWNaeXSNC/MetKKW9X/J+R3+GslvSnO64FHZZ3yXOHGHb1dCcVmKUmTzeSyTOeMUiq73l52KtTTSLqL6iTjPZosVTCdk01j5H0NqZdB/2aJMcVweKhCgMkmum33Io6EIjmkecCkEftMq3OyiHarfoTlYZeblLYvXGcQPCTIjXV+kmmrIJZyfaJU0jCeAUTurQgEhLyXngs1+mVYikQx2xUAmjGdV3cZcEegqpH2tqeRDdQykEo8SNaepXXUJnPT01RljPHaW0SrRxwaDkL31hHYoD9xCO0Rmalk6J8K/AGjAoE82GxabmXnd5Ru8otI8FCaPf68lDRQPNpvQqcy3GgCmi0NLNbm6Ees2lkrfX6lAEjc/cw/vCIhpclKiiABVYkDKqsh3o9LyuxtoD6hMuRg3cS/wwWkwgga5MIIEoaADAgECAhEA5/9pxzs1zkuRJth0fGilhzANBgkqhkiG9w0BAQwFADCBgDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMB4XDTIxMDUxOTA1MzIwN1oXDTM2MDUxODA1MzIwN1owVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIFRpbWVzdGFtcGluZyAyMDIxIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6RIfBDXtuV16xaaVQb6KZX9Od9FtJXXTZo7b+GEof3+3g0ChWiKnO7R4+6MfrvLyLCWZa6GpFHjEt4t0/GiUQvnkLOBRdBqr5DOvlmTvJJs2X8ZmWgWJjC7PBZLYBWAs8sJl3kNXxBMX5XntjqWx1ZOuuXl0R4x+zGGSMzZ45dpvB8vLpQfZkfMC/1tL9KYyjU+htLH68dZJPtzhqLBVG+8ljZ1ZFilOKksS79epCeqFSeAUm2eMTGpOiS3gfLM6yvb8Bg6bxg5yglDGC9zbr4sB9ceIGRtCQF1N8dqTgM/dSViiUgJkcv5dLNJeWxGCqJYPgzKlYZTgDXfGIeZpEFmjBLwURP5ABsyKoFocMzdjrCiFbTvJn+bD1kq78qZUgAQGGtd6zGJ88H4NPJ5Y2R4IargiWAmv8RyvWnHr/VA+2PrrK9eXe5q7M88YRdSTq9TKbqdnITUgZcjjm4ZUjteq8K331a4P0s2in0p3UubMEYa/G5w6jSWPUzchGLwWKYBfeSu6dIOC4LkeAPvmdZxSB1lWOb9HzVWZoM8Q/blaP4LWt6JxjkI9yQsYGMdCqwl7uMnPUIlcExS1mzXRxUowQref/EPaS7kYVaHHQrp4XB7nTEtQhkP0Z9Puz/n8zIFnUSnxDof4Yy650PAXSYmK2TcbyDoTNmmt8xAxzcMCAwEAAaOCAVUwggFRMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFL5UAi+/QGxzQ86sCSVOnkNEGu7gMB8GA1UdIwQYMBaAFLahVDkCw6A/joq8+tT4HKbROg79MA4GA1UdDwEB/wQEAwIBBjATBgNVHSUEDDAKBggrBgEFBQcDCDAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vY3JsLmNlcnR1bS5wbC9jdG5jYTIuY3JsMGwGCCsGAQUFBwEBBGAwXjAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAyBggrBgEFBQcwAoYmaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhMi5jZXIwOQYDVR0gBDIwMDAuBgRVHSAAMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAuJNZd8lMFf2UBwigp3qgLPBBk58BFCS3Q6aJDf3TISoytK0eal/JyCB88aUEd0wMNiEcNVMbK9j5Yht2whaknUE1G32k6uld7wcxHmw67vUBY6pSp8QhdodY4SzRRaZWzyYlviUpyU4dXyhKhHSncYJfa1U75cXxCe3sTp9uTBm3f8Bj8LkpjMUSVTtMJ6oEu5JqCYzRfc6nnoRUgwz/GVZFoOBGdrSEtDN7mZgcka/tS5MI47fALVvN5lZ2U8k7Dm/hTX8CWOw0uBZloZEW4HB0Xra3qE4qzzq/6M8gyoU/DE0k3+i7bYOrOk/7tPJg1sOhytOGUQ30PbG++0FfJioDuOFhj99b151SqFlSaRQYz74y/P2XJP+cF19oqozmi0rRTkfyEJIvhIZ+M5XIFZttmVQgTxfpfJwMFFEoQrSrklOxpmSygppsUDJEoliC05vBLVQ+gMZyYaKvBJ4YxBMlKH5ZHkRdloRYlUDplk8GUa+OCMVhpDSQurU6K1ua5dmZftnvSSz2H96UrQDzA6DyiI1V3ejVtvn2azVAXg6NnjmuRZ+wa7Pxy0H3+V4K4rOTHlG3VYA6xfLsTunCz72T6Ot4+tkrDYOeaU1pPX1CBfYj6EW2+ELq46GP8KCNUQDirWLU4nOmgCat7vN0SD6RlwUiSsMeCiQDmZwgwrUxggPvMIID6wIBATBqMFYxCzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIQK9SucLnQY1sq6YTI1nSqMDANBglghkgBZQMEAgIFAKCCAVYwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yMzA2MjIwOTM4NTJaMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEIAO5mmRJdJhKlbbMXYDTRNB0+972yiQEhCvmzw5EIgeKMD8GCSqGSIb3DQEJBDEyBDD3KU/9rR9SmjEMJFduaCxPpeGqMmZ3T7bQkaP1eIOG8cIXwFpC1sXVFvnXaBDgmFswgZ8GCyqGSIb3DQEJEAIMMYGPMIGMMIGJMIGGBBS/T2vEmC3eFQWo78jHp51NFDUAzjBuMFqkWDBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0ECECvUrnC50GNbKumEyNZ0qjAwDQYJKoZIhvcNAQEBBQAEggIAoLAiHVleK0EHkNdi6Bi1bdYqUPAG5j/eiRPo6oaKJ3rBzZOVqNrzptVuIxD3Zu6CzRrs9Jc6NQh86ARTKXqE2PVbmgxsTVzAIgc4g9tZYuv+2TiZ5t2jl67FT8Q5mYOk1+pkCDIdGVvUFui333lluRBicHmdYCAtHrh5VmnlTEhs+efZh7zag7AcNzB+f8GMBj0GF2XoV2xoTCfCymZ2y+hyEQsrzsUlzVxanUutEtYpOolbUReYNh0oZ/P76v3Iyr0jBWQOvvxEGvIhaU3z+e2DqURO1cN85/DuA0MfDSNE37xxn9SJI8luv9vdNdPLMay4+7BU3NLsQs5yjzVLEFqhrclTwUR6rPG+TPe+yApw+f54DEADziBH5AfzBdydqmddWPx/J43UubKMgDRP09zei++bFll6pVCmGbFbY9I4LjBJQ6zssCpg6f2x2bw2ubSjLN+8jJqphkmCnqkALtCQX65vL9nHOiLhvm2duk4GbWyTND+St1ZAQD/UqM8Gd+vNmYoFB+vDxFBq6kRYvB+bD14G6aZSyv22cJgHCQfDZ/NhRUPFVLLCiXKvBrMMSiNTzf8kmUubQv8s+8QiJ6U4BuT4bvzYYsRlDINQjk44kDOZeo714VOM39DX21q6w8JwmADzgfPIBmCzaJcjTorl0uPhrSK+Y98MrRboVVU=", + "token_seed": "01azS40P52J1MvDpy7hFvRlF1VOj", + "token": "MIIYDQYJKoZIhvcNAQcCoIIX/jCCF/oCAQMxDTALBglghkgBZQMEAgIwgcwGCyqGSIb3DQEJEAEEoIG8BIG5MIG2AgEBBgsqhGgBhvZ3AgUBCzAvMAsGCWCGSAFlAwQCAQQg/D5oExphofXQjL22D4SFaLV+OQXdKB6ocpR2OWIb8m4CBwqofC4AzaMYDzIwMjMxMDIwMjExMTQ0WjADAgEBoFSkUjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjKgghMiMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0BAQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAMZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK/9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWajXfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKzHtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO/tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3XmfeR+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAWgBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgwJjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUFBwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhLmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTCMtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHAEQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz+TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q7M4KMIIGlDCCBHygAwIBAgIQK9SucLnQY1sq6YTI1nSqMDANBgkqhkiG9w0BAQwFADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0EwHhcNMjIwNzI4MDg1NjI2WhcNMzMwNzI3MDg1NjI2WjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKxV7tHwlG8ETLal5Yhm+isISwnj+L8khxKkASO/MRXI6kGntuse79tVL5Fkvl9KE4etck3HaGWkAIOYTXAalmxp+2/DjhF5BsFLxmeuTFipdpVwY4rHOndRllSOX15D/fnXS1V+Bv6T+3iHQLSORYeKxgv8ff7zWp/QvAuCOejeduR8Iis6j0s+meTdl2DNPm0+FXWLGccj0cC5I4XKnc4NrQgdvmD+pXfrgTpHHwq4RQnnkweGP2Wpa2V2ghhSJQVoyMl2/VBrKQGqA7z9iwkkkXJ76z+PaiCBg+06h2w6GLprm1g4MfP2BOzOQX3exdeJkDqp6+yJghUuU8v530ju11UkOk65SGF/KywOAUo5zrtFqGGUyzlsmnpFj62gAIb8yUN5l7eq7hmulRJY8sw01H4BJkg6Z8T+jhUjjnOMQTl25FfDjuIrxn9KSH3/iDrMrDsL7kkh3xdRcUnqzWW91XFJ3skGk/qJgvpGhkz6b7Mpcud1fzFCrh1YYESKxoliCYDfU6+96GVx5Opm7s5F4h4WqP9QEK0N+avprRir517X+tnbCRc7WH/13HhC08PyiXdWC+4ZUPcxkf3xRPn8faby3dsmd2NTwraWjc6uouyWdpkZXQtV8IpAbY6EOhk9k95MkZ9JQFPGOP03Tf+KabcKLhZPu+SbHU6D0OgQIDAQABo4IBYjCCAV4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUI8E8zFMzGVaO2OPzzjz8qHNHVuowHwYDVR0jBBgwFoAUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0c2NhMjAyMS5jcmwwbwYIKwYBBQUHAQEEYzBhMCgGCCsGAQUFBzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDUGCCsGAQUFBzAChilodHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RzY2EyMDIxLmNlcjBABgNVHSAEOTA3MDUGCyqEaAGG9ncCBQELMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAa8b3PSM+L1eQ+ewXgKZtaX1YAY0yloH5W9YbcSQPR0r153qv4//uZKIbv9adI+iCTGE6Um0+6BwLYOfZtMDNB55q43DeN6jDaOU7P4F/0gZmNKjM3ZTuptQ/XoJ+1OPRIBjviGRQJ5jB9YS8fqbHunYLU4WeGqq/s0X0TaExTUlMcjkqOnJlSn0W2YE4ixHDHoRiU3jOQkLNQJg6RfoasqtF+jL9ATLR1NsD6FZSN8a0UNeu5TOuP4JfHQmMzDxfJfFvPXbNkX66PWNaeXSNC/MetKKW9X/J+R3+GslvSnO64FHZZ3yXOHGHb1dCcVmKUmTzeSyTOeMUiq73l52KtTTSLqL6iTjPZosVTCdk01j5H0NqZdB/2aJMcVweKhCgMkmum33Io6EIjmkecCkEftMq3OyiHarfoTlYZeblLYvXGcQPCTIjXV+kmmrIJZyfaJU0jCeAUTurQgEhLyXngs1+mVYikQx2xUAmjGdV3cZcEegqpH2tqeRDdQykEo8SNaepXXUJnPT01RljPHaW0SrRxwaDkL31hHYoD9xCO0Rmalk6J8K/AGjAoE82GxabmXnd5Ru8otI8FCaPf68lDRQPNpvQqcy3GgCmi0NLNbm6Ees2lkrfX6lAEjc/cw/vCIhpclKiiABVYkDKqsh3o9LyuxtoD6hMuRg3cS/wwWkwgga5MIIEoaADAgECAhEA5/9pxzs1zkuRJth0fGilhzANBgkqhkiG9w0BAQwFADCBgDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMB4XDTIxMDUxOTA1MzIwN1oXDTM2MDUxODA1MzIwN1owVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIFRpbWVzdGFtcGluZyAyMDIxIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6RIfBDXtuV16xaaVQb6KZX9Od9FtJXXTZo7b+GEof3+3g0ChWiKnO7R4+6MfrvLyLCWZa6GpFHjEt4t0/GiUQvnkLOBRdBqr5DOvlmTvJJs2X8ZmWgWJjC7PBZLYBWAs8sJl3kNXxBMX5XntjqWx1ZOuuXl0R4x+zGGSMzZ45dpvB8vLpQfZkfMC/1tL9KYyjU+htLH68dZJPtzhqLBVG+8ljZ1ZFilOKksS79epCeqFSeAUm2eMTGpOiS3gfLM6yvb8Bg6bxg5yglDGC9zbr4sB9ceIGRtCQF1N8dqTgM/dSViiUgJkcv5dLNJeWxGCqJYPgzKlYZTgDXfGIeZpEFmjBLwURP5ABsyKoFocMzdjrCiFbTvJn+bD1kq78qZUgAQGGtd6zGJ88H4NPJ5Y2R4IargiWAmv8RyvWnHr/VA+2PrrK9eXe5q7M88YRdSTq9TKbqdnITUgZcjjm4ZUjteq8K331a4P0s2in0p3UubMEYa/G5w6jSWPUzchGLwWKYBfeSu6dIOC4LkeAPvmdZxSB1lWOb9HzVWZoM8Q/blaP4LWt6JxjkI9yQsYGMdCqwl7uMnPUIlcExS1mzXRxUowQref/EPaS7kYVaHHQrp4XB7nTEtQhkP0Z9Puz/n8zIFnUSnxDof4Yy650PAXSYmK2TcbyDoTNmmt8xAxzcMCAwEAAaOCAVUwggFRMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFL5UAi+/QGxzQ86sCSVOnkNEGu7gMB8GA1UdIwQYMBaAFLahVDkCw6A/joq8+tT4HKbROg79MA4GA1UdDwEB/wQEAwIBBjATBgNVHSUEDDAKBggrBgEFBQcDCDAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vY3JsLmNlcnR1bS5wbC9jdG5jYTIuY3JsMGwGCCsGAQUFBwEBBGAwXjAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAyBggrBgEFBQcwAoYmaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhMi5jZXIwOQYDVR0gBDIwMDAuBgRVHSAAMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAuJNZd8lMFf2UBwigp3qgLPBBk58BFCS3Q6aJDf3TISoytK0eal/JyCB88aUEd0wMNiEcNVMbK9j5Yht2whaknUE1G32k6uld7wcxHmw67vUBY6pSp8QhdodY4SzRRaZWzyYlviUpyU4dXyhKhHSncYJfa1U75cXxCe3sTp9uTBm3f8Bj8LkpjMUSVTtMJ6oEu5JqCYzRfc6nnoRUgwz/GVZFoOBGdrSEtDN7mZgcka/tS5MI47fALVvN5lZ2U8k7Dm/hTX8CWOw0uBZloZEW4HB0Xra3qE4qzzq/6M8gyoU/DE0k3+i7bYOrOk/7tPJg1sOhytOGUQ30PbG++0FfJioDuOFhj99b151SqFlSaRQYz74y/P2XJP+cF19oqozmi0rRTkfyEJIvhIZ+M5XIFZttmVQgTxfpfJwMFFEoQrSrklOxpmSygppsUDJEoliC05vBLVQ+gMZyYaKvBJ4YxBMlKH5ZHkRdloRYlUDplk8GUa+OCMVhpDSQurU6K1ua5dmZftnvSSz2H96UrQDzA6DyiI1V3ejVtvn2azVAXg6NnjmuRZ+wa7Pxy0H3+V4K4rOTHlG3VYA6xfLsTunCz72T6Ot4+tkrDYOeaU1pPX1CBfYj6EW2+ELq46GP8KCNUQDirWLU4nOmgCat7vN0SD6RlwUiSsMeCiQDmZwgwrUxggPvMIID6wIBATBqMFYxCzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIQK9SucLnQY1sq6YTI1nSqMDANBglghkgBZQMEAgIFAKCCAVYwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yMzEwMjAyMTExNDRaMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEIAO5mmRJdJhKlbbMXYDTRNB0+972yiQEhCvmzw5EIgeKMD8GCSqGSIb3DQEJBDEyBDBgvQs/43SVV5JdNCLF1WsqviuLbNFYIrI9wmif3qt7mIHAEeolpk6HReW5QGB20qQwgZ8GCyqGSIb3DQEJEAIMMYGPMIGMMIGJMIGGBBS/T2vEmC3eFQWo78jHp51NFDUAzjBuMFqkWDBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0ECECvUrnC50GNbKumEyNZ0qjAwDQYJKoZIhvcNAQEBBQAEggIAbWOQ4Os7V/Vc5vxM2sssFNCXxC1TvXHjR6A67wJjzc1xSu7yigx1qLGnqUjuHDaUtzqpJrk6gK9DvyELZAayIIkoVRoxwDjIWDCagPd7rzzITUxP0aPjSaQ+H8Au0vKZLY5qyGMxqUOfJbt7k2K0ymVnuSe6IQMyQYIBJghUPQEqHzxLT6yM7BPYTwcVEAdR+gTh1fo0njSIPFGWT39KpfJqUvXs6WqsJXJQsOUvTx0qfDuQS/foPrkdzD9qBC4sCZQWeQJ/oRWNVzsYYIQAXHIZoc8uY3XdDvzhAJly+C4gSIE6hLaIwu0hLhNWcX3nQGcFIUPMHQDmmexQzZTYyl8aCLemY6msTm3UuMQHCS7JDNDQ0v74OERlfrctMqRngPDdc4YhO/Vof6jskoXSDH1x85ZXcdxN1s8dIXo2fFTUMyEnsTgS555M9nzl9N+45xdVcWfbZD6fy3lzauHpUflrrxBZLdRPbYJzrM+jgAwNafZesWaLWc6PxAKefqcKRMUkVFgIxnvWEYjwT/xgkU9ayzsCnI1mFEwVGUYAL3RcJSB7n7lGiw8WFiN6M3HAVp6Wq/PkIUr0lZSN4op4/pl9YMJXMykrTPUdFPqBruvomz7UsTWf6zkT+2zeQ/xozTd873nc7eEHj3vKQpcaIYEFUPdut7Z97PqPL80Wha8=", "tsa_server": "http://time.certum.pl/", - "timestamp": "2023-06-22T09:38:52+00:00" + "timestamp": "2023-10-20T21:11:44+00:00" }, "section_defs": [ { @@ -3018,7 +3228,7 @@ }, { "definition_qualified_name": "nomad.datamodel.datamodel.EntryArchive", - "definition_id": "9e36824ae135f1e5ee5485911cb5fc03bc47af1d", + "definition_id": "1a38309e86abd87e7ef9ff7aa89560cf22ab111e", "used_directly": true }, { @@ -3033,12 +3243,12 @@ }, { "definition_qualified_name": "nomad.datamodel.results.Properties", - "definition_id": "9fcaeef3034c9b3861ab45bcea5014c65ffb3da2", + "definition_id": "43288046582240d7a33ec8b5fe4ca86988c2378c", "used_directly": true }, { "definition_qualified_name": "nomad.datamodel.results.Results", - "definition_id": "1ee9d4d17197a78dcfa5f1814b1ff3e2b275c195", + "definition_id": "ba0a320c9aa599c7c4a0af8c545f3cfe76cc4e70", "used_directly": true }, { @@ -3078,8 +3288,9 @@ } }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "35199", + "content-length": "36345", "content-type": "application/json", "server": "uvicorn" } @@ -3094,16 +3305,17 @@ "body": "", "headers": { "accept": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiIxMzdmZTU5My03NWM3LTQyYWUtOWFiYS01NmRjY2Y2YWY2NGEiLCJleHAiOjE2ODc0NjI3MjUsIm5iZiI6MCwiaWF0IjoxNjg3NDI2NzM5LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOlsicmVhbG0tbWFuYWdlbWVudCIsImFjY291bnQiXSwic3ViIjoiYTAzYWY4YjYtM2FhNy00MjhhLWIzYjEtNGE2MzE3ZTU3NmI2IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjgwYmY0NWMwLTg3OTAtNGEyZS05NmE5LTk4MDZhYzI4NjlhOSIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7InJlYWxtLW1hbmFnZW1lbnQiOnsicm9sZXMiOlsidmlldy11c2VycyIsInF1ZXJ5LWdyb3VwcyIsInF1ZXJ5LXVzZXJzIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlNoZWxkb24gQ29vcGVyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2Nvb3BlciIsImdpdmVuX25hbWUiOiJTaGVsZG9uIiwiZmFtaWx5X25hbWUiOiJDb29wZXIiLCJlbWFpbCI6InNoZWxkb24uY29vcGVyQG5vbWFkLWNvZS5ldSJ9.KuI5Z6bxSb-b4Zp1tBWTos3LJxl4xLiZcYCB7-ZZCx5FG4CzomDKvQJDkVufdhQg6e6D9g9AFMtk4wK-aOOPyUj9ocBpBTxRPDv4GUwHzC21q8DHAF-mM8iwYmlMjem3VGAv9AmLlWV5L5ek4v0_E7F9EHitE8X4sMt7Ot3A8OUa90T0dsn16Ia_xr-SyEvJMhC_-q2wMIGcEp6IrWb9gaMN24je_LcFE68P6NzbhlEFVlX4n1Z6HdkcF39Y6Ukcdu5DekxelGAW5AFMwMtLCpnM2pLMgkJaYLL3cVKKBcfBoUvRfYVM_e-UN-qJ0kPduq_gic1Zj55tfI72M-G9yw", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiIyZTI1NGJkMy1iYzkzLTRjZmItYjQ4NC0zOWY1NWI1NWM4MTciLCJleHAiOjE2OTc4NzIyOTYsIm5iZiI6MCwiaWF0IjoxNjk3ODM2MzExLCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOlsicmVhbG0tbWFuYWdlbWVudCIsImFjY291bnQiXSwic3ViIjoiYTAzYWY4YjYtM2FhNy00MjhhLWIzYjEtNGE2MzE3ZTU3NmI2IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImQ5MDVmYmNhLTM2NGYtNGE3YS1hNDk0LWQxYzc2ZjVmMDAwYyIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7InJlYWxtLW1hbmFnZW1lbnQiOnsicm9sZXMiOlsidmlldy11c2VycyIsInF1ZXJ5LWdyb3VwcyIsInF1ZXJ5LXVzZXJzIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlNoZWxkb24gQ29vcGVyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2Nvb3BlciIsImdpdmVuX25hbWUiOiJTaGVsZG9uIiwiZmFtaWx5X25hbWUiOiJDb29wZXIiLCJlbWFpbCI6InNoZWxkb24uY29vcGVyQG5vbWFkLWNvZS5ldSJ9.EHEs335TavJ7z6ElX9BJWunDpXpqZtd9wsao9wHud8DYwRIBqnovWksibfk22eoC6eo2OM1D70NeaEBPp5bO1R-k1VFIcK5kut_rE-ctnwp6M-UQcC4BquBGKaZDX19kS-ejajpNZoCRj3wqE8VLj1qLqfDIV815kZ80Oa14kCEylIoPQboB_phTLbteTpoCkm07Nguzo_z2vwgY8J0FpxOKoUIKnNn2wKV7VHN_VEqC578oYkinMzBlzK7WGNN3iSuQ_sqHcNpwLOaR7H_7CGUWtanqWul2UBaYxLXoVV0ZW9t-arB4aeejTAhk5nio6avoJJzFQD3WeDzXGE8b4Q", "cookie": null } }, "response": { "status": 200, - "body": "# Schemas can be defined as yaml files like this. The archive.yaml format will be\n# interpreted by nomad as a nomad archive. Therefore, all definitions have to be\n# put in a top-level section called \"definitions\"\ndefinitions:\n # The \"definitions\" section is interpreted as a nomad schema package\n # Schema packages can have a name:\n name: 'Electronic Lab Notebook example schema'\n # Schema packages contain section definitions. This is where the interesting schema\n # information begins.\n sections:\n # Here we define a section called \"Chemical\":\n Chemical:\n # Section definition can have base_sections. Base sections are other schema\n # definition and all properties of these will be inherited.\n base_sections:\n - 'nomad.datamodel.metainfo.eln.Chemical' # Provides typical quantities like name, descriptions, chemical_formula and makes those available for search\n - 'nomad.datamodel.data.EntryData' # Declares this as a top-level entry section. This determines the types of entries you can create. With this we will be able to create a \"Chemical\" entry.\n # All definitions, sections, sub_sections, quantities, can provide a description.\n description: |\n This is an example description for Chemical.\n A description can contain **markdown** markup and TeX formulas, like $\\sum\\limits_{i=0}^{n}$.\n # Sections define quantities. Quantities allow to manage actual data. Quantities\n # can have various types, shapes, and units.\n quantities:\n # Here we define a quantity called \"from\"\n form:\n # This defines a Enum type with pre-defined possible values.\n type:\n type_kind: Enum\n type_data:\n - crystalline solid\n - powder\n # Annotations allow to provide additional information that is beyond just defining\n # the possible data.\n m_annotations:\n # The eln annotation allows add the quantity to a ELN\n eln:\n component: EnumEditQuantity # A form field component for EnumQuantities that uses a pull down menu.\n cas_number:\n type: str\n m_annotations:\n eln:\n component: StringEditQuantity\n ec_number:\n type: str\n m_annotations:\n eln:\n component: StringEditQuantity\n Instrument:\n base_sections:\n - nomad.datamodel.metainfo.eln.Instrument\n - nomad.datamodel.data.EntryData\n Process:\n base_section: nomad.datamodel.metainfo.eln.Process\n quantities:\n instrument:\n type: Instrument\n m_annotations:\n eln:\n component: ReferenceEditQuantity\n Sample:\n m_annotations:\n # The template annotation allows to define what freshly created entries (instances of this schema) will look like.\n # In this example we create a sample with an empty pvd_evaporation process.\n template:\n processes:\n pvd_evaporation: {}\n base_sections:\n - 'nomad.datamodel.metainfo.eln.Sample'\n - 'nomad.datamodel.data.EntryData'\n quantities:\n name:\n type: str # The simple string type\n default: Default Sample Name\n m_annotations:\n eln:\n component: StringEditQuantity # A simple text edit form field\n tags:\n type:\n type_kind: Enum\n type_data:\n - internal\n - collaboration\n - project\n - other\n shape: ['*'] # Shapes define non scalar values, like lists ['*'], vectors ['*', 3], etc.\n m_annotations:\n eln:\n component: AutocompleteEditQuantity # Allows to edit enums with an auto complete text form field\n chemicals:\n type: Chemical # Types can also be other sections. This allows to reference a different section.\n shape: ['*']\n m_annotations:\n eln:\n component: ReferenceEditQuantity # A editor component that allows to select from available \"Chemical\"s\n substrate_type:\n type:\n type_kind: Enum\n type_data:\n - Fused quartz glass\n - SLG\n - other\n m_annotations:\n eln:\n component: RadioEnumEditQuantity\n substrate_thickness:\n type: np.float64\n unit: m\n m_annotations:\n eln:\n component: NumberEditQuantity\n sample_is_from_collaboration:\n type: bool\n m_annotations:\n eln:\n component: BoolEditQuantity\n # Besides quantities, a section can define sub_sections. This allows hierarchies\n # of information.\n sub_sections:\n # Here we define a sub_section of \"Sample\" called \"processes\"\n processes:\n section:\n # The sub-section's section, is itself a section definition\n m_annotations:\n eln: # adds the sub-section to the eln and allows users to create new instances of this sub-section\n # We can also nest sub_sections. It goes aribitrarely deep.\n sub_sections:\n pvd_evaporation:\n section:\n base_sections: ['Process', 'nomad.parsing.tabular.TableData']\n m_annotations:\n # We can use the eln annotations to put the section to the overview\n # page, and hide unwanted inherited quantities.\n eln:\n overview: true\n hide: ['name', 'lab_id', 'description', 'method']\n # Plots are shown in the eln. Currently we only support simple x,y\n # line plots\n plot:\n title: Pressure and Temperature over Time\n x: time\n y:\n - chamber_pressure\n - substrate_temperature\n quantities:\n data_file:\n type: str\n description: |\n A reference to an uploaded .csv produced by the PVD evaporation instruments\n control software.\n m_annotations:\n # The tabular_parser annotation, will treat the values of this\n # quantity as files. It will try to interpret the files and fill\n # quantities in this section (and sub_section) with the column\n # data of .csv or .xlsx files. There is also a mode option that by default, is set to column.\n tabular_parser:\n sep: '\\t'\n comment: '#'\n browser:\n adaptor: RawFileAdaptor # Allows to navigate to files in the data browser\n eln:\n component: FileEditQuantity # A form field that allows to drop and select files.\n time:\n type: np.float64\n shape: ['*']\n unit: s\n m_annotations:\n # The tabular annotation defines a mapping to column headers used in\n # tabular data files\n tabular:\n name: Process Time in seconds\n chamber_pressure:\n type: np.float64\n shape: ['*']\n unit: mbar\n m_annotations:\n eln:\n defaultDisplayUnit: mbar\n tabular:\n name: Vacuum Pressure1\n plot:\n x: time\n y: chamber_pressure\n substrate_temperature:\n type: np.float64\n shape: ['*']\n unit: kelvin\n m_annotations:\n tabular:\n name: Substrate PV\n unit: degC\n plot:\n x: time\n y: substrate_temperature\n hotplate_annealing:\n section:\n base_section: Process\n m_annotations:\n # We can use the eln annotations to put the section to the overview\n # page, and hide unwanted inherited quantities.\n eln:\n overview: true\n hide: ['name', 'lab_id', 'description']\n quantities:\n set_temperature:\n type: np.float64 # For actual numbers, we use numpy datatypes\n unit: K # The unit system is based on Pint and allows all kinds of abreviations, prefixes, and complex units\n m_annotations:\n eln:\n component: NumberEditQuantity # A component to enter numbers (with units)\n duration:\n type: np.float64\n unit: s\n m_annotations:\n eln:\n component: NumberEditQuantity\n\n", + "body": "# Schemas can be defined as yaml files like this. The archive.yaml format will be\n# interpreted by nomad as a nomad archive. Therefore, all definitions have to be\n# put in a top-level section called \"definitions\"\ndefinitions:\n # The \"definitions\" section is interpreted as a nomad schema package\n # Schema packages can have a name:\n name: 'Electronic Lab Notebook example schema'\n # Schema packages contain section definitions. This is where the interesting schema\n # information begins.\n sections:\n # Here we define a section called \"Chemical\":\n Chemical:\n # Section definition can have base_sections. Base sections are other schema\n # definition and all properties of these will be inherited.\n base_sections:\n - 'nomad.datamodel.metainfo.eln.Chemical' # Provides typical quantities like name, descriptions, chemical_formula and makes those available for search\n - 'nomad.datamodel.data.EntryData' # Declares this as a top-level entry section. This determines the types of entries you can create. With this we will be able to create a \"Chemical\" entry.\n # All definitions, sections, sub_sections, quantities, can provide a description.\n description: |\n This is an example description for Chemical.\n A description can contain **markdown** markup and TeX formulas, like $\\sum\\limits_{i=0}^{n}$.\n # Sections define quantities. Quantities allow to manage actual data. Quantities\n # can have various types, shapes, and units.\n quantities:\n # Here we define a quantity called \"from\"\n form:\n # This defines a Enum type with pre-defined possible values.\n type:\n type_kind: Enum\n type_data:\n - crystalline solid\n - powder\n # Annotations allow to provide additional information that is beyond just defining\n # the possible data.\n m_annotations:\n # The eln annotation allows add the quantity to a ELN\n eln:\n component: EnumEditQuantity # A form field component for EnumQuantities that uses a pull down menu.\n cas_number:\n type: str\n m_annotations:\n eln:\n component: StringEditQuantity\n ec_number:\n type: str\n m_annotations:\n eln:\n component: StringEditQuantity\n Instrument:\n base_sections:\n - nomad.datamodel.metainfo.eln.Instrument\n - nomad.datamodel.data.EntryData\n Process:\n base_section: nomad.datamodel.metainfo.eln.Process\n quantities:\n instrument:\n type: '#/Instrument'\n m_annotations:\n eln:\n component: ReferenceEditQuantity\n Sample:\n m_annotations:\n # The template annotation allows to define what freshly created entries (instances of this schema) will look like.\n # In this example we create a sample with an empty pvd_evaporation process.\n template:\n processes:\n pvd_evaporation: {}\n eln:\n base_sections:\n - 'nomad.datamodel.metainfo.basesections.CompositeSystem'\n - 'nomad.datamodel.data.EntryData'\n quantities:\n name:\n type: str # The simple string type\n default: Default Sample Name\n m_annotations:\n eln:\n component: StringEditQuantity # A simple text edit form field\n tags:\n type:\n type_kind: Enum\n type_data:\n - internal\n - collaboration\n - project\n - other\n shape: ['*'] # Shapes define non scalar values, like lists ['*'], vectors ['*', 3], etc.\n m_annotations:\n eln:\n component: AutocompleteEditQuantity # Allows to edit enums with an auto complete text form field\n chemicals:\n type: '#/Chemical' # Types can also be other sections. This allows to reference a different section.\n shape: ['*']\n m_annotations:\n eln:\n component: ReferenceEditQuantity # A editor component that allows to select from available \"Chemical\"s\n substrate_type:\n type:\n type_kind: Enum\n type_data:\n - Fused quartz glass\n - SLG\n - other\n m_annotations:\n eln:\n component: RadioEnumEditQuantity\n substrate_thickness:\n type: np.float64\n unit: m\n m_annotations:\n eln:\n component: NumberEditQuantity\n sample_is_from_collaboration:\n type: bool\n m_annotations:\n eln:\n component: BoolEditQuantity\n # Besides quantities, a section can define sub_sections. This allows hierarchies\n # of information.\n sub_sections:\n # Here we define a sub_section of \"Sample\" called \"processes\"\n processes:\n section:\n # The sub-section's section, is itself a section definition\n m_annotations:\n eln: # adds the sub-section to the eln and allows users to create new instances of this sub-section\n # We can also nest sub_sections. It goes aribitrarely deep.\n sub_sections:\n pvd_evaporation:\n section:\n base_sections: ['Process', 'nomad.parsing.tabular.TableData', 'nomad.datamodel.metainfo.plot.PlotSection']\n m_annotations:\n # We can use the eln annotations to put the section to the overview\n # page, and hide unwanted inherited quantities.\n eln:\n overview: true\n hide: ['name', 'lab_id', 'description', 'method']\n # Plots are shown in the eln. Currently we only support simple x,y\n # line plots\n plotly_graph_object:\n - data:\n - x: \"#time\"\n y: \"#chamber_pressure\"\n - x: \"#time\"\n y: \"#substrate_temperature\"\n yaxis: y2\n layout:\n title:\n text: Pressure and Temperature over Time\n yaxis2:\n overlaying: y\n side: right\n - data:\n x: \"#time\"\n y: \"#chamber_pressure\"\n - data:\n x: \"#time\"\n y: \"#substrate_temperature\"\n quantities:\n data_file:\n type: str\n description: |\n A reference to an uploaded .csv produced by the PVD evaporation instruments\n control software.\n m_annotations:\n # The tabular_parser annotation, will treat the values of this\n # quantity as files. It will try to interpret the files and fill\n # quantities in this section (and sub_section) with the column\n # data of .csv or .xlsx files. There is also a mode option that by default, is set to column.\n tabular_parser:\n parsing_options:\n comment: '#'\n sep: '\\t'\n mapping_options:\n - mapping_mode: column\n file_mode: current_entry\n sections:\n - '#root'\n browser:\n adaptor: RawFileAdaptor # Allows to navigate to files in the data browser\n eln:\n component: FileEditQuantity # A form field that allows to drop and select files.\n time:\n type: np.float64\n shape: ['*']\n unit: s\n m_annotations:\n # The tabular annotation defines a mapping to column headers used in\n # tabular data files\n tabular:\n name: Process Time in seconds\n chamber_pressure:\n type: np.float64\n shape: ['*']\n unit: mbar\n m_annotations:\n eln:\n # component: NumberEditQuantity\n # defaultDisplayUnit: mbar ## MUST NOT BE AN ARRAY FOR THIS https://gitlab.mpcdf.mpg.de/nomad-lab/nomad-FAIR/-/issues/932\n tabular:\n name: Vacuum Pressure1\n substrate_temperature:\n type: np.float64\n shape: ['*']\n unit: kelvin\n m_annotations:\n tabular:\n name: Substrate PV\n unit: degC\n hotplate_annealing:\n section:\n base_section: Process\n m_annotations:\n # We can use the eln annotations to put the section to the overview\n # page, and hide unwanted inherited quantities.\n eln:\n overview: true\n hide: ['name', 'lab_id', 'description']\n quantities:\n set_temperature:\n type: np.float64 # For actual numbers, we use numpy datatypes\n unit: K # The unit system is based on Pint and allows all kinds of abreviations, prefixes, and complex units\n m_annotations:\n eln:\n component: NumberEditQuantity # A component to enter numbers (with units)\n duration:\n type: np.float64\n unit: s\n m_annotations:\n eln:\n component: NumberEditQuantity\n\n", "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-disposition": "attatchment; filename=\"schema.archive.yaml\"", + "content-disposition": "attachment; filename=\"schema.archive.yaml\"", "content-type": "application/octet-stream", "server": "uvicorn", "transfer-encoding": "chunked" diff --git a/gui/tests/data/entry/eln-reviewer.json b/gui/tests/data/entry/eln-reviewer.json index 551206673df830826bded783b9596878023b27b7..8f796549d749135a95c510217a78837bb486185d 100644 --- a/gui/tests/data/entry/eln-reviewer.json +++ b/gui/tests/data/entry/eln-reviewer.json @@ -7,7 +7,7 @@ "body": "", "headers": { "accept": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiI3ZGUxYjI0YS0xYzM4LTRkNTYtYjhjZS01NzYwN2IzMjBiY2EiLCJleHAiOjE2ODc0NjI3OTksIm5iZiI6MCwiaWF0IjoxNjg3NDI2ODEwLCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNTRjYjFmNjQtZjg0ZS00ODE1LTlhZGUtNDQwY2UwYjU0MzBmIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImRjYjVlMjBmLWY4NjktNDMwMi05ZjZkLThjYjgxZWQ2Y2ZjZiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiVGVzdCBUZXN0ZXIiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJ0dGVzdGVyIiwiZ2l2ZW5fbmFtZSI6IlRlc3QiLCJmYW1pbHlfbmFtZSI6IlRlc3RlciIsImVtYWlsIjoidGVzdEBub21hZC1jb2UuZXUifQ.hpp0lL4AtSOwHGI_tehkb5h2RCPzPwYy_m3RgULW0jbyfcex4LguH_YForxofaNOBC-V2dlvKGrojFxwoCEiZxIuD5F4Pe5d856bnNilNu2hHJqAwEAGCYRhRrgs5egP5A0rJLYEpr_d-qysAL4QAe4uRFuIZk8u9t60CAkDB6NXktaKDCuZQOtmlVvhxPlkbjUNoKlcjr1vvRuDHqbYyEdG2ZXglaRA0tTIciHldwJ1tRI-zCb_EsQyAfIWtcdRQ1M_tds1FIPUv6WimQWLoHDOzAdNQrJLHoa5G7Y0Wm9mQjjJfoilmRmVXynBD7DApfaHfOSo_FD42cio5h1RJg", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiI5NWQyNGNjNi0zOTUzLTQwOTQtYTMxZC1jMDg4NWZkMGZkMTUiLCJleHAiOjE2OTc4NjM1NTEsIm5iZiI6MCwiaWF0IjoxNjk3ODI3NTY0LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNTRjYjFmNjQtZjg0ZS00ODE1LTlhZGUtNDQwY2UwYjU0MzBmIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjI5ZjQ0NThlLThkOTgtNDc1Ny1hYTNkLTU5MWMzYzg1Mjg5ZiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiVGVzdCBUZXN0ZXIiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJ0dGVzdGVyIiwiZ2l2ZW5fbmFtZSI6IlRlc3QiLCJmYW1pbHlfbmFtZSI6IlRlc3RlciIsImVtYWlsIjoidGVzdEBub21hZC1jb2UuZXUifQ.JEYat2ITl1dCGOIGFGT9viphlhX0LivcCKJIY4N9SK7SdULlZ9orRydvLjdPXHxyW5ZdaP03jQUieKQMXKeIXBmwuy36Jz5TU-pFSYGvMETv5-p58IZZ9ckJWMsOqwjbg2oUg8EAvWHkeFTRlBJ07SJ2unYDCtDeavz4_hRn-vQrBqfGaYmmW2sHrRqLQisXbSJK5zI5yGiniEIUznipYw_NncooLUtgw7jHcbqg-cMek0MLD4UVp-VtcWiwV04Ls3BeXTmDefvcZ6gwCaOgBw-tH7CYa1niVxlqY3J_FKEaxVxPaUBtd6nUNMOWQa_wELO2ow5s2rEgPY17JI_2hw", "cookie": null } }, @@ -36,6 +36,8 @@ "data.processes.pvd_evaporation.chamber_pressure", "data.processes.pvd_evaporation.data_file", "data.processes.pvd_evaporation.datetime", + "data.processes.pvd_evaporation.figures", + "data.processes.pvd_evaporation.figures.figure", "data.processes.pvd_evaporation.fill_archive_from_datafile", "data.processes.pvd_evaporation.substrate_temperature", "data.processes.pvd_evaporation.time", @@ -89,34 +91,34 @@ "results.properties" ], "datasets": [], - "n_quantities": 59, - "nomad_version": "1.2.0rc1.dev181+gce78efe22.d20230609", - "upload_create_time": "2023-06-22T09:40:05.999000+00:00", + "n_quantities": 65, + "nomad_version": "1.2.2.dev85+g6f47bb0a0", + "upload_create_time": "2023-10-20T18:46:00.113000+00:00", "nomad_commit": "", "section_defs": [ { "used_directly": true, - "definition_id": "88f0ccdc3585c154e0d1b67cf28b734e69a0791b", + "definition_id": "7e0331d2df29682413535f00d4aad156783fee2e", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Process" }, { "used_directly": true, - "definition_id": "61cee898fcd24be5040ffc76163cd645f26c9ff8", + "definition_id": "030133d881170f0d9e31da6086ed5641f0c4403c", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample" }, { "used_directly": true, - "definition_id": "b82ee685f3b0fd55329dbafada317987feac3051", + "definition_id": "f0086b987424b1001666c6f5df9ad1071164a27e", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes" }, { "used_directly": true, - "definition_id": "1341c9d51198599e0cf17a12d00694469e6fce8f", + "definition_id": "d39f4397900226398e6c17eb00467e874e5955c4", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes.HotplateAnnealing" }, { "used_directly": true, - "definition_id": "fdd23ea5c11d32f9b780e5e5b0f6349712bafe6e", + "definition_id": "c640c9585e8d4549f248582763427a7dd7c417a0", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes.PvdEvaporation" }, { @@ -131,7 +133,7 @@ }, { "used_directly": true, - "definition_id": "9e36824ae135f1e5ee5485911cb5fc03bc47af1d", + "definition_id": "1a38309e86abd87e7ef9ff7aa89560cf22ab111e", "definition_qualified_name": "nomad.datamodel.datamodel.EntryArchive" }, { @@ -146,7 +148,7 @@ }, { "used_directly": false, - "definition_id": "870f59b3b42ceab01a604bddc86c39b90a897366", + "definition_id": "fc2735d177bf36f9718ca66a764a56fc0c6200a0", "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Activity" }, { @@ -154,25 +156,40 @@ "definition_id": "add2edfa25a61ff3bbfdebacc870181f64f41634", "definition_qualified_name": "nomad.datamodel.metainfo.basesections.BaseSection" }, + { + "used_directly": true, + "definition_id": "c7254c9b461a4baec86cb3179e2f84513f5c9053", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.CompositeSystem" + }, { "used_directly": false, - "definition_id": "af4b2af6fde599256cf9d75c51958a41b3245b25", - "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Process" + "definition_id": "7ce6bdcaa183a9685582b275e1c2b2ea3139c74d", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Entity" }, { "used_directly": false, - "definition_id": "f05adb2ccbe04cbeced6213c4b6bd8f78e3d4ead", - "definition_qualified_name": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "definition_id": "8d81e1f95c60f39a6a8c9f954143a55e6f4c984c", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Process" }, { "used_directly": false, - "definition_id": "ada854aefd11fd40e6c161fe2d9207a7bb104052", - "definition_qualified_name": "nomad.datamodel.metainfo.eln.ElnWithFormulaBaseSection" + "definition_id": "3ab3a09d615ab58aefbaa3acdd8d6af4e73aaae5", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.System" + }, + { + "used_directly": true, + "definition_id": "55ef08f33dcf9fb374aea217458bd34a23bec57b", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.Figure" + }, + { + "used_directly": true, + "definition_id": "7bb17e35ed91dca88bf6238fc51ed212693593d0", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.PlotSection" }, { "used_directly": true, - "definition_id": "a830a6d8c03f2a0baa0203e07efcbbd54328daaa", - "definition_qualified_name": "nomad.datamodel.metainfo.eln.Sample" + "definition_id": "491cdc3c5ea21cdc576275a5c1e600cdaa4256c1", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.PlotlyFigure" }, { "used_directly": true, @@ -181,12 +198,12 @@ }, { "used_directly": true, - "definition_id": "9fcaeef3034c9b3861ab45bcea5014c65ffb3da2", + "definition_id": "43288046582240d7a33ec8b5fe4ca86988c2378c", "definition_qualified_name": "nomad.datamodel.results.Properties" }, { "used_directly": true, - "definition_id": "1ee9d4d17197a78dcfa5f1814b1ff3e2b275c195", + "definition_id": "ba0a320c9aa599c7c4a0af8c545f3cfe76cc4e70", "definition_qualified_name": "nomad.datamodel.results.Results" }, { @@ -225,7 +242,7 @@ } }, "entry_name": "ELN example sample", - "last_processing_time": "2023-06-22T09:40:06.340000+00:00", + "last_processing_time": "2023-10-20T18:46:00.489000+00:00", "parser_name": "parsers/archive", "searchable_quantities": [ { @@ -238,13 +255,13 @@ "text_value": "001", "path": "data.lab_id", "quantity_name": "lab_id", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection" }, { "text_value": "<p>A simple example for an \"sample\" that demonstrates how to combine different data entities.</p>\n<p>The sample it-self defines a few properties (involved chemicals, used substrate) and uses inherited default properties (formula, name, lab id, ...)</p>\n<p>But the sample also contains sub-sections that prodivde inforamtion about proccessed that were applied to this sample (PVD evaporation, hotplate annealing). </p>\n<p>The sample also show references to other entries (chemicals, instruments).</p>\n<p> </p>", "path": "data.description", "quantity_name": "description", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection" }, { "path": "data.substrate_type", @@ -284,9 +301,9 @@ }, { "path": "data.datetime", - "date_value": "2023-06-22T11:40:06.399580+00:00", + "date_value": "2023-10-20T20:46:00.543744+00:00", "quantity_name": "datetime", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection" } ], "calc_id": "bC7byHvWJp62Sn9uiuJUB38MT5j-", @@ -309,6 +326,7 @@ "nomad.datamodel.datamodel.EntryArchive", "nomad.datamodel.datamodel.EntryMetadata", "nomad.datamodel.datamodel.RFC3161Timestamp", + "nomad.datamodel.metainfo.plot.PlotlyFigure", "nomad.datamodel.results.ELN", "nomad.datamodel.results.Properties", "nomad.datamodel.results.Results" @@ -333,7 +351,7 @@ "name": "Test Tester" } ], - "entry_create_time": "2023-06-22T09:40:06.083000+00:00", + "entry_create_time": "2023-10-20T18:46:00.171000+00:00", "with_embargo": false, "files": [ "sample.archive.json", @@ -356,8 +374,9 @@ } }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "12998", + "content-length": "13756", "content-type": "application/json", "server": "uvicorn" } @@ -370,7 +389,7 @@ "body": "", "headers": { "accept": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiI3ZGUxYjI0YS0xYzM4LTRkNTYtYjhjZS01NzYwN2IzMjBiY2EiLCJleHAiOjE2ODc0NjI3OTksIm5iZiI6MCwiaWF0IjoxNjg3NDI2ODEwLCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNTRjYjFmNjQtZjg0ZS00ODE1LTlhZGUtNDQwY2UwYjU0MzBmIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImRjYjVlMjBmLWY4NjktNDMwMi05ZjZkLThjYjgxZWQ2Y2ZjZiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiVGVzdCBUZXN0ZXIiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJ0dGVzdGVyIiwiZ2l2ZW5fbmFtZSI6IlRlc3QiLCJmYW1pbHlfbmFtZSI6IlRlc3RlciIsImVtYWlsIjoidGVzdEBub21hZC1jb2UuZXUifQ.hpp0lL4AtSOwHGI_tehkb5h2RCPzPwYy_m3RgULW0jbyfcex4LguH_YForxofaNOBC-V2dlvKGrojFxwoCEiZxIuD5F4Pe5d856bnNilNu2hHJqAwEAGCYRhRrgs5egP5A0rJLYEpr_d-qysAL4QAe4uRFuIZk8u9t60CAkDB6NXktaKDCuZQOtmlVvhxPlkbjUNoKlcjr1vvRuDHqbYyEdG2ZXglaRA0tTIciHldwJ1tRI-zCb_EsQyAfIWtcdRQ1M_tds1FIPUv6WimQWLoHDOzAdNQrJLHoa5G7Y0Wm9mQjjJfoilmRmVXynBD7DApfaHfOSo_FD42cio5h1RJg", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiI5NWQyNGNjNi0zOTUzLTQwOTQtYTMxZC1jMDg4NWZkMGZkMTUiLCJleHAiOjE2OTc4NjM1NTEsIm5iZiI6MCwiaWF0IjoxNjk3ODI3NTY0LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNTRjYjFmNjQtZjg0ZS00ODE1LTlhZGUtNDQwY2UwYjU0MzBmIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjI5ZjQ0NThlLThkOTgtNDc1Ny1hYTNkLTU5MWMzYzg1Mjg5ZiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiVGVzdCBUZXN0ZXIiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJ0dGVzdGVyIiwiZ2l2ZW5fbmFtZSI6IlRlc3QiLCJmYW1pbHlfbmFtZSI6IlRlc3RlciIsImVtYWlsIjoidGVzdEBub21hZC1jb2UuZXUifQ.JEYat2ITl1dCGOIGFGT9viphlhX0LivcCKJIY4N9SK7SdULlZ9orRydvLjdPXHxyW5ZdaP03jQUieKQMXKeIXBmwuy36Jz5TU-pFSYGvMETv5-p58IZZ9ckJWMsOqwjbg2oUg8EAvWHkeFTRlBJ07SJ2unYDCtDeavz4_hRn-vQrBqfGaYmmW2sHrRqLQisXbSJK5zI5yGiniEIUznipYw_NncooLUtgw7jHcbqg-cMek0MLD4UVp-VtcWiwV04Ls3BeXTmDefvcZ6gwCaOgBw-tH7CYa1niVxlqY3J_FKEaxVxPaUBtd6nUNMOWQa_wELO2ow5s2rEgPY17JI_2hw", "cookie": null } }, @@ -399,6 +418,8 @@ "data.processes.pvd_evaporation.chamber_pressure", "data.processes.pvd_evaporation.data_file", "data.processes.pvd_evaporation.datetime", + "data.processes.pvd_evaporation.figures", + "data.processes.pvd_evaporation.figures.figure", "data.processes.pvd_evaporation.fill_archive_from_datafile", "data.processes.pvd_evaporation.substrate_temperature", "data.processes.pvd_evaporation.time", @@ -452,34 +473,34 @@ "results.properties" ], "datasets": [], - "n_quantities": 59, - "nomad_version": "1.2.0rc1.dev181+gce78efe22.d20230609", - "upload_create_time": "2023-06-22T09:40:05.999000+00:00", + "n_quantities": 65, + "nomad_version": "1.2.2.dev85+g6f47bb0a0", + "upload_create_time": "2023-10-20T18:46:00.113000+00:00", "nomad_commit": "", "section_defs": [ { "used_directly": true, - "definition_id": "88f0ccdc3585c154e0d1b67cf28b734e69a0791b", + "definition_id": "7e0331d2df29682413535f00d4aad156783fee2e", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Process" }, { "used_directly": true, - "definition_id": "61cee898fcd24be5040ffc76163cd645f26c9ff8", + "definition_id": "030133d881170f0d9e31da6086ed5641f0c4403c", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample" }, { "used_directly": true, - "definition_id": "b82ee685f3b0fd55329dbafada317987feac3051", + "definition_id": "f0086b987424b1001666c6f5df9ad1071164a27e", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes" }, { "used_directly": true, - "definition_id": "1341c9d51198599e0cf17a12d00694469e6fce8f", + "definition_id": "d39f4397900226398e6c17eb00467e874e5955c4", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes.HotplateAnnealing" }, { "used_directly": true, - "definition_id": "fdd23ea5c11d32f9b780e5e5b0f6349712bafe6e", + "definition_id": "c640c9585e8d4549f248582763427a7dd7c417a0", "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes.PvdEvaporation" }, { @@ -494,7 +515,7 @@ }, { "used_directly": true, - "definition_id": "9e36824ae135f1e5ee5485911cb5fc03bc47af1d", + "definition_id": "1a38309e86abd87e7ef9ff7aa89560cf22ab111e", "definition_qualified_name": "nomad.datamodel.datamodel.EntryArchive" }, { @@ -509,7 +530,7 @@ }, { "used_directly": false, - "definition_id": "870f59b3b42ceab01a604bddc86c39b90a897366", + "definition_id": "fc2735d177bf36f9718ca66a764a56fc0c6200a0", "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Activity" }, { @@ -517,25 +538,40 @@ "definition_id": "add2edfa25a61ff3bbfdebacc870181f64f41634", "definition_qualified_name": "nomad.datamodel.metainfo.basesections.BaseSection" }, + { + "used_directly": true, + "definition_id": "c7254c9b461a4baec86cb3179e2f84513f5c9053", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.CompositeSystem" + }, { "used_directly": false, - "definition_id": "af4b2af6fde599256cf9d75c51958a41b3245b25", - "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Process" + "definition_id": "7ce6bdcaa183a9685582b275e1c2b2ea3139c74d", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Entity" }, { "used_directly": false, - "definition_id": "f05adb2ccbe04cbeced6213c4b6bd8f78e3d4ead", - "definition_qualified_name": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "definition_id": "8d81e1f95c60f39a6a8c9f954143a55e6f4c984c", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Process" }, { "used_directly": false, - "definition_id": "ada854aefd11fd40e6c161fe2d9207a7bb104052", - "definition_qualified_name": "nomad.datamodel.metainfo.eln.ElnWithFormulaBaseSection" + "definition_id": "3ab3a09d615ab58aefbaa3acdd8d6af4e73aaae5", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.System" }, { "used_directly": true, - "definition_id": "a830a6d8c03f2a0baa0203e07efcbbd54328daaa", - "definition_qualified_name": "nomad.datamodel.metainfo.eln.Sample" + "definition_id": "55ef08f33dcf9fb374aea217458bd34a23bec57b", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.Figure" + }, + { + "used_directly": true, + "definition_id": "7bb17e35ed91dca88bf6238fc51ed212693593d0", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.PlotSection" + }, + { + "used_directly": true, + "definition_id": "491cdc3c5ea21cdc576275a5c1e600cdaa4256c1", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.PlotlyFigure" }, { "used_directly": true, @@ -544,12 +580,12 @@ }, { "used_directly": true, - "definition_id": "9fcaeef3034c9b3861ab45bcea5014c65ffb3da2", + "definition_id": "43288046582240d7a33ec8b5fe4ca86988c2378c", "definition_qualified_name": "nomad.datamodel.results.Properties" }, { "used_directly": true, - "definition_id": "1ee9d4d17197a78dcfa5f1814b1ff3e2b275c195", + "definition_id": "ba0a320c9aa599c7c4a0af8c545f3cfe76cc4e70", "definition_qualified_name": "nomad.datamodel.results.Results" }, { @@ -588,7 +624,7 @@ } }, "entry_name": "ELN example sample", - "last_processing_time": "2023-06-22T09:40:06.340000+00:00", + "last_processing_time": "2023-10-20T18:46:00.489000+00:00", "parser_name": "parsers/archive", "searchable_quantities": [ { @@ -601,13 +637,13 @@ "text_value": "001", "path": "data.lab_id", "quantity_name": "lab_id", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection" }, { "text_value": "<p>A simple example for an \"sample\" that demonstrates how to combine different data entities.</p>\n<p>The sample it-self defines a few properties (involved chemicals, used substrate) and uses inherited default properties (formula, name, lab id, ...)</p>\n<p>But the sample also contains sub-sections that prodivde inforamtion about proccessed that were applied to this sample (PVD evaporation, hotplate annealing). </p>\n<p>The sample also show references to other entries (chemicals, instruments).</p>\n<p> </p>", "path": "data.description", "quantity_name": "description", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection" }, { "path": "data.substrate_type", @@ -647,9 +683,9 @@ }, { "path": "data.datetime", - "date_value": "2023-06-22T11:40:06.399580+00:00", + "date_value": "2023-10-20T20:46:00.543744+00:00", "quantity_name": "datetime", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection" + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection" } ], "calc_id": "bC7byHvWJp62Sn9uiuJUB38MT5j-", @@ -672,6 +708,7 @@ "nomad.datamodel.datamodel.EntryArchive", "nomad.datamodel.datamodel.EntryMetadata", "nomad.datamodel.datamodel.RFC3161Timestamp", + "nomad.datamodel.metainfo.plot.PlotlyFigure", "nomad.datamodel.results.ELN", "nomad.datamodel.results.Properties", "nomad.datamodel.results.Results" @@ -696,7 +733,7 @@ "name": "Test Tester" } ], - "entry_create_time": "2023-06-22T09:40:06.083000+00:00", + "entry_create_time": "2023-10-20T18:46:00.171000+00:00", "with_embargo": false, "files": [ "sample.archive.json", @@ -719,8 +756,65 @@ } }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "12998", + "content-length": "13756", + "content-type": "application/json", + "server": "uvicorn" + } + } + } + ], + "afa783d98e040c74b68e5cfd3d82f3f0": [ + { + "request": { + "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/query", + "method": "POST", + "body": { + "required": { + "metadata": "*" + }, + "owner": "visible", + "pagination": { + "order_by": "upload_create_time", + "order": "desc", + "page_size": 20 + }, + "query": { + "entry_references.target_entry_id": "bC7byHvWJp62Sn9uiuJUB38MT5j-" + } + }, + "headers": { + "accept": "application/json, text/plain, */*", + "content-type": "application/json", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiI3Y2IwMzI2ZC1kZDczLTQ4ZDAtYmRhMi05NDg4MDY0Y2UyY2MiLCJleHAiOjE2OTc4NjM1NTEsIm5iZiI6MCwiaWF0IjoxNjk3ODI3NTY2LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNTRjYjFmNjQtZjg0ZS00ODE1LTlhZGUtNDQwY2UwYjU0MzBmIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjI5ZjQ0NThlLThkOTgtNDc1Ny1hYTNkLTU5MWMzYzg1Mjg5ZiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiVGVzdCBUZXN0ZXIiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJ0dGVzdGVyIiwiZ2l2ZW5fbmFtZSI6IlRlc3QiLCJmYW1pbHlfbmFtZSI6IlRlc3RlciIsImVtYWlsIjoidGVzdEBub21hZC1jb2UuZXUifQ.Ytdaw3HBBQLHPWXIB_C77xdikKRX8g8yn-Z0KbwhOus4Cv_r43NFxhBM2EFulbfQfnvFsDL60RvuWbPGd25HxQBL_aJKFEyR-MfWK2mqfX-rCc7BloJP-aMRHJiH9zTgsPR8JGB0OvXXHoIQsMr3zCmgqxV0CG9RV7gRBopprzZ40NwW7h8cOgcX6ozCSwDke5aom5g9TykmnR_AOkMPhfVk_i9u2tzIM8GTkgPADL7V8VrRaSTSJdU7jwvLchckMuJHg5IfwwzIKIqbsihJ5obDumQITXNK7OJpfaOAIKo7ewMpxXdHwSSNbRs0ORWpeOICHjZpvSXmD4Slbdwh0w", + "cookie": null + } + }, + "response": { + "status": 200, + "body": { + "owner": "visible", + "query": { + "prefix": "entry_references", + "query": { + "name": "target_entry_id", + "value": "bC7byHvWJp62Sn9uiuJUB38MT5j-" + } + }, + "pagination": { + "page_size": 20, + "order_by": "upload_create_time", + "order": "desc", + "total": 0 + }, + "required": {}, + "data": [] + }, + "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", + "connection": "close", + "content-length": "326", "content-type": "application/json", "server": "uvicorn" } @@ -752,7 +846,7 @@ "band_gap": "*" }, "mechanical": "include-resolved", - "spectroscopy": "include-resolved", + "spectroscopic": "include-resolved", "vibrational": "include-resolved", "thermodynamic": "include-resolved", "geometry_optimization": { @@ -766,7 +860,7 @@ "headers": { "accept": "application/json", "content-type": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiJiMDgxY2NmYi0zZDNjLTRkY2EtYjE0NS1iN2Q0YTkxNzc1M2UiLCJleHAiOjE2ODc0NjI3OTksIm5iZiI6MCwiaWF0IjoxNjg3NDI2ODExLCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNTRjYjFmNjQtZjg0ZS00ODE1LTlhZGUtNDQwY2UwYjU0MzBmIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImRjYjVlMjBmLWY4NjktNDMwMi05ZjZkLThjYjgxZWQ2Y2ZjZiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiVGVzdCBUZXN0ZXIiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJ0dGVzdGVyIiwiZ2l2ZW5fbmFtZSI6IlRlc3QiLCJmYW1pbHlfbmFtZSI6IlRlc3RlciIsImVtYWlsIjoidGVzdEBub21hZC1jb2UuZXUifQ.C1TvpjaK8yIMsXV-lzQsB2_zl_24scC0znmQ7w7v5QgIM8WfopsUj2J0TjS01gf2175Y51nzKNovYdj-G1-cvPsrFlAAgLYIDg3r7UUJGIt-k6q_ah-VWouRuCoymwkVf1j3jm8MPpzBRCQ5yZNZVprZR7wE4_pAYu7wNxo2YZ-zXa05f7UWB_ZmqhfAm2cNBEnAd4LYcLmR10cT7dVIvhfVtOfUj4y-9mvbmU3XgLxYqi4uqpRca5qMwvp3M12JwAG-r2bA9maeCt2woQyz8wDAg4UaiwhWagZyQx1_ncJ32jKXGyvwoB80vtVlayxKrK4esiYAKyVcTS0N8T-HVg", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiI1ODliYTY2OC00YThjLTQ2MDktOTc0My0xOGNlOTI3N2ViNTgiLCJleHAiOjE2OTc4NjM1NTEsIm5iZiI6MCwiaWF0IjoxNjk3ODI3NTY1LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNTRjYjFmNjQtZjg0ZS00ODE1LTlhZGUtNDQwY2UwYjU0MzBmIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjI5ZjQ0NThlLThkOTgtNDc1Ny1hYTNkLTU5MWMzYzg1Mjg5ZiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiVGVzdCBUZXN0ZXIiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJ0dGVzdGVyIiwiZ2l2ZW5fbmFtZSI6IlRlc3QiLCJmYW1pbHlfbmFtZSI6IlRlc3RlciIsImVtYWlsIjoidGVzdEBub21hZC1jb2UuZXUifQ.Q0So9MzJxGp5TeDevB946NV5JdEwTsieUL7lkxir7elspB0RC-Cx3RhjEm4WDGbIj0CNTQXVajFATHrXqwjG2JBEqaXjIpnxSdhtu1flthBk2fqUlGNq0C4-32Nlgm5MXhd-AihQSYHS1kjg2uNyVCHAIxhBIKuWWwNgNweCLFHMV76CyJc5C5GT-_qEvNULA182tiTvCPoqlWVeD60T1qx7eBJbLDNvZnF3oZcoR5lBth7rHezRt63i8PGZ2SOjER1wplnaYAFvyl5XsFfztGD08BZIAVs2GH6QQx61iCrOxc7A9kgRF6PnIgCrCGAGxbZ2wUKzDupPzJFQOTbS6w", "cookie": null } }, @@ -792,7 +886,7 @@ "band_gap": "*" }, "mechanical": "include-resolved", - "spectroscopy": "include-resolved", + "spectroscopic": "include-resolved", "vibrational": "include-resolved", "thermodynamic": "include-resolved", "geometry_optimization": { @@ -810,12 +904,12 @@ "archive": { "metadata": { "upload_id": "eln_upload_id", - "upload_create_time": "2023-06-22T09:40:05.999000+00:00", + "upload_create_time": "2023-10-20T18:46:00.113000+00:00", "entry_id": "bC7byHvWJp62Sn9uiuJUB38MT5j-", "entry_name": "ELN example sample", "entry_type": "Sample", - "entry_hash": "IJhNf0P3rAOk-Hl8HpTHMQlEv1jt", - "entry_create_time": "2023-06-22T09:40:06.083000+00:00", + "entry_hash": "y0C2H_I6f9gmZ_S6RNlk_v9P_Clg", + "entry_create_time": "2023-10-20T18:46:00.171000+00:00", "parser_name": "parsers/archive", "mainfile": "sample.archive.json", "files": [ @@ -828,9 +922,9 @@ "embargo_length": 0, "license": "CC BY 4.0", "processed": true, - "last_processing_time": "2023-06-22T09:40:06.340649+00:00", + "last_processing_time": "2023-10-20T18:46:00.489800+00:00", "processing_errors": [], - "nomad_version": "1.2.0rc1.dev181+gce78efe22.d20230609", + "nomad_version": "1.2.2.dev85+g6f47bb0a0", "nomad_commit": "", "references": [], "main_author": "68878af7-6845-46c0-b2c1-250d4d8eb470", @@ -842,7 +936,7 @@ "54cb1f64-f84e-4815-9ade-440ce0b5430f" ], "datasets": [], - "n_quantities": 59, + "n_quantities": 65, "quantities": [ "", "data", @@ -859,6 +953,8 @@ "data.processes.pvd_evaporation.chamber_pressure", "data.processes.pvd_evaporation.data_file", "data.processes.pvd_evaporation.datetime", + "data.processes.pvd_evaporation.figures", + "data.processes.pvd_evaporation.figures.figure", "data.processes.pvd_evaporation.fill_archive_from_datafile", "data.processes.pvd_evaporation.substrate_temperature", "data.processes.pvd_evaporation.time", @@ -919,40 +1015,41 @@ "nomad.datamodel.datamodel.EntryArchive", "nomad.datamodel.datamodel.EntryMetadata", "nomad.datamodel.datamodel.RFC3161Timestamp", + "nomad.datamodel.metainfo.plot.PlotlyFigure", "nomad.datamodel.results.ELN", "nomad.datamodel.results.Properties", "nomad.datamodel.results.Results" ], "entry_timestamp": { - "token_seed": "IJhNf0P3rAOk-Hl8HpTHMQlEv1jt", - "token": "MIIYDQYJKoZIhvcNAQcCoIIX/jCCF/oCAQMxDTALBglghkgBZQMEAgIwgcwGCyqGSIb3DQEJEAEEoIG8BIG5MIG2AgEBBgsqhGgBhvZ3AgUBCzAvMAsGCWCGSAFlAwQCAQQgllBuEy/QmmRCOSqul92agyRnwGZaILVVVeHXh47TWvYCBwqofCa7YoUYDzIwMjMwNjIyMDk0MDA2WjADAgEBoFSkUjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjKgghMiMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0BAQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAMZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK/9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWajXfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKzHtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO/tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3XmfeR+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAWgBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgwJjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUFBwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhLmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTCMtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHAEQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz+TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q7M4KMIIGlDCCBHygAwIBAgIQK9SucLnQY1sq6YTI1nSqMDANBgkqhkiG9w0BAQwFADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0EwHhcNMjIwNzI4MDg1NjI2WhcNMzMwNzI3MDg1NjI2WjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKxV7tHwlG8ETLal5Yhm+isISwnj+L8khxKkASO/MRXI6kGntuse79tVL5Fkvl9KE4etck3HaGWkAIOYTXAalmxp+2/DjhF5BsFLxmeuTFipdpVwY4rHOndRllSOX15D/fnXS1V+Bv6T+3iHQLSORYeKxgv8ff7zWp/QvAuCOejeduR8Iis6j0s+meTdl2DNPm0+FXWLGccj0cC5I4XKnc4NrQgdvmD+pXfrgTpHHwq4RQnnkweGP2Wpa2V2ghhSJQVoyMl2/VBrKQGqA7z9iwkkkXJ76z+PaiCBg+06h2w6GLprm1g4MfP2BOzOQX3exdeJkDqp6+yJghUuU8v530ju11UkOk65SGF/KywOAUo5zrtFqGGUyzlsmnpFj62gAIb8yUN5l7eq7hmulRJY8sw01H4BJkg6Z8T+jhUjjnOMQTl25FfDjuIrxn9KSH3/iDrMrDsL7kkh3xdRcUnqzWW91XFJ3skGk/qJgvpGhkz6b7Mpcud1fzFCrh1YYESKxoliCYDfU6+96GVx5Opm7s5F4h4WqP9QEK0N+avprRir517X+tnbCRc7WH/13HhC08PyiXdWC+4ZUPcxkf3xRPn8faby3dsmd2NTwraWjc6uouyWdpkZXQtV8IpAbY6EOhk9k95MkZ9JQFPGOP03Tf+KabcKLhZPu+SbHU6D0OgQIDAQABo4IBYjCCAV4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUI8E8zFMzGVaO2OPzzjz8qHNHVuowHwYDVR0jBBgwFoAUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0c2NhMjAyMS5jcmwwbwYIKwYBBQUHAQEEYzBhMCgGCCsGAQUFBzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDUGCCsGAQUFBzAChilodHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RzY2EyMDIxLmNlcjBABgNVHSAEOTA3MDUGCyqEaAGG9ncCBQELMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAa8b3PSM+L1eQ+ewXgKZtaX1YAY0yloH5W9YbcSQPR0r153qv4//uZKIbv9adI+iCTGE6Um0+6BwLYOfZtMDNB55q43DeN6jDaOU7P4F/0gZmNKjM3ZTuptQ/XoJ+1OPRIBjviGRQJ5jB9YS8fqbHunYLU4WeGqq/s0X0TaExTUlMcjkqOnJlSn0W2YE4ixHDHoRiU3jOQkLNQJg6RfoasqtF+jL9ATLR1NsD6FZSN8a0UNeu5TOuP4JfHQmMzDxfJfFvPXbNkX66PWNaeXSNC/MetKKW9X/J+R3+GslvSnO64FHZZ3yXOHGHb1dCcVmKUmTzeSyTOeMUiq73l52KtTTSLqL6iTjPZosVTCdk01j5H0NqZdB/2aJMcVweKhCgMkmum33Io6EIjmkecCkEftMq3OyiHarfoTlYZeblLYvXGcQPCTIjXV+kmmrIJZyfaJU0jCeAUTurQgEhLyXngs1+mVYikQx2xUAmjGdV3cZcEegqpH2tqeRDdQykEo8SNaepXXUJnPT01RljPHaW0SrRxwaDkL31hHYoD9xCO0Rmalk6J8K/AGjAoE82GxabmXnd5Ru8otI8FCaPf68lDRQPNpvQqcy3GgCmi0NLNbm6Ees2lkrfX6lAEjc/cw/vCIhpclKiiABVYkDKqsh3o9LyuxtoD6hMuRg3cS/wwWkwgga5MIIEoaADAgECAhEA5/9pxzs1zkuRJth0fGilhzANBgkqhkiG9w0BAQwFADCBgDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMB4XDTIxMDUxOTA1MzIwN1oXDTM2MDUxODA1MzIwN1owVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIFRpbWVzdGFtcGluZyAyMDIxIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6RIfBDXtuV16xaaVQb6KZX9Od9FtJXXTZo7b+GEof3+3g0ChWiKnO7R4+6MfrvLyLCWZa6GpFHjEt4t0/GiUQvnkLOBRdBqr5DOvlmTvJJs2X8ZmWgWJjC7PBZLYBWAs8sJl3kNXxBMX5XntjqWx1ZOuuXl0R4x+zGGSMzZ45dpvB8vLpQfZkfMC/1tL9KYyjU+htLH68dZJPtzhqLBVG+8ljZ1ZFilOKksS79epCeqFSeAUm2eMTGpOiS3gfLM6yvb8Bg6bxg5yglDGC9zbr4sB9ceIGRtCQF1N8dqTgM/dSViiUgJkcv5dLNJeWxGCqJYPgzKlYZTgDXfGIeZpEFmjBLwURP5ABsyKoFocMzdjrCiFbTvJn+bD1kq78qZUgAQGGtd6zGJ88H4NPJ5Y2R4IargiWAmv8RyvWnHr/VA+2PrrK9eXe5q7M88YRdSTq9TKbqdnITUgZcjjm4ZUjteq8K331a4P0s2in0p3UubMEYa/G5w6jSWPUzchGLwWKYBfeSu6dIOC4LkeAPvmdZxSB1lWOb9HzVWZoM8Q/blaP4LWt6JxjkI9yQsYGMdCqwl7uMnPUIlcExS1mzXRxUowQref/EPaS7kYVaHHQrp4XB7nTEtQhkP0Z9Puz/n8zIFnUSnxDof4Yy650PAXSYmK2TcbyDoTNmmt8xAxzcMCAwEAAaOCAVUwggFRMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFL5UAi+/QGxzQ86sCSVOnkNEGu7gMB8GA1UdIwQYMBaAFLahVDkCw6A/joq8+tT4HKbROg79MA4GA1UdDwEB/wQEAwIBBjATBgNVHSUEDDAKBggrBgEFBQcDCDAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vY3JsLmNlcnR1bS5wbC9jdG5jYTIuY3JsMGwGCCsGAQUFBwEBBGAwXjAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAyBggrBgEFBQcwAoYmaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhMi5jZXIwOQYDVR0gBDIwMDAuBgRVHSAAMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAuJNZd8lMFf2UBwigp3qgLPBBk58BFCS3Q6aJDf3TISoytK0eal/JyCB88aUEd0wMNiEcNVMbK9j5Yht2whaknUE1G32k6uld7wcxHmw67vUBY6pSp8QhdodY4SzRRaZWzyYlviUpyU4dXyhKhHSncYJfa1U75cXxCe3sTp9uTBm3f8Bj8LkpjMUSVTtMJ6oEu5JqCYzRfc6nnoRUgwz/GVZFoOBGdrSEtDN7mZgcka/tS5MI47fALVvN5lZ2U8k7Dm/hTX8CWOw0uBZloZEW4HB0Xra3qE4qzzq/6M8gyoU/DE0k3+i7bYOrOk/7tPJg1sOhytOGUQ30PbG++0FfJioDuOFhj99b151SqFlSaRQYz74y/P2XJP+cF19oqozmi0rRTkfyEJIvhIZ+M5XIFZttmVQgTxfpfJwMFFEoQrSrklOxpmSygppsUDJEoliC05vBLVQ+gMZyYaKvBJ4YxBMlKH5ZHkRdloRYlUDplk8GUa+OCMVhpDSQurU6K1ua5dmZftnvSSz2H96UrQDzA6DyiI1V3ejVtvn2azVAXg6NnjmuRZ+wa7Pxy0H3+V4K4rOTHlG3VYA6xfLsTunCz72T6Ot4+tkrDYOeaU1pPX1CBfYj6EW2+ELq46GP8KCNUQDirWLU4nOmgCat7vN0SD6RlwUiSsMeCiQDmZwgwrUxggPvMIID6wIBATBqMFYxCzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIQK9SucLnQY1sq6YTI1nSqMDANBglghkgBZQMEAgIFAKCCAVYwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yMzA2MjIwOTQwMDZaMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEIAO5mmRJdJhKlbbMXYDTRNB0+972yiQEhCvmzw5EIgeKMD8GCSqGSIb3DQEJBDEyBDCVUgIE+QnE7yUaa0s90yLkADqnf4jTtmgLjAJhEEXUsUbymNtdGt78l2QpduhR8VMwgZ8GCyqGSIb3DQEJEAIMMYGPMIGMMIGJMIGGBBS/T2vEmC3eFQWo78jHp51NFDUAzjBuMFqkWDBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0ECECvUrnC50GNbKumEyNZ0qjAwDQYJKoZIhvcNAQEBBQAEggIARbvemuicZMJ2EpaKk/BwJJ0k2o2iT9UDXPHHBOKgrWG1tsua79Mq5WIlVjYb1Ikip2JA82ts0UlrN24uJ/qW6ZeQRHEO+ircJ67Co1xqgS3ilZBhz0hp0SZd2WPYvWPF4c8/VZiMEcracE9JPvKejSJoJ7y4NXiZZ57DNaV5RmcKDuw0P2JbGw+CJ5SPBaDxRm6HRmiKEAQbhRfcCSVFxBW4VZJmYIw9Fy7UKtMVFOKCUcSsPEZJvO8V6wN0l5cAy6lktEpmaESeB4bGLYpNRczKOfrqZiRH700sLxdWFyypzS+34paDFzMY4gP4UY2Swj90O2wp5mMtCcWjV8yR3tBzeNjc16OrzUeptoXjls9Q7+SMxFm0DIcR/ZeXfF6pPGdPCPWYJIRgvEivTyac3r7o9zNQeqsI6etRdT+PZmh36N2cD/L2+Gvvoji40BphtC5aurg8WUwCTuDDXx4naHPbNrz+3nqnjAZb09BU5ouilIf3y3f1YFFj66vgP8k0n3Es955W7hWY7u5tkQuaDAOnxwWoTIuWwEkESGRUY9R4sCg+nak4UpU/w2LXrxhY5y9szb9EiPYaqazn+pNWq4puui5V2GT/p9O+Y0lPo606fxglkWiYXTWeYWfqKUnYP9My22sH0x3S5f8smput3cn28BGwRggytxL+xd3jgzk=", + "token_seed": "y0C2H_I6f9gmZ_S6RNlk_v9P_Clg", + "token": "MIIYDQYJKoZIhvcNAQcCoIIX/jCCF/oCAQMxDTALBglghkgBZQMEAgIwgcwGCyqGSIb3DQEJEAEEoIG8BIG5MIG2AgEBBgsqhGgBhvZ3AgUBCzAvMAsGCWCGSAFlAwQCAQQgH+tIlnWFjx9gX8jLYhF++wFRFuetPDBAEKSYfKr6mrMCBwqofC4UfvgYDzIwMjMxMDIwMTg0NjAwWjADAgEBoFSkUjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjKgghMiMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0BAQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAMZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK/9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWajXfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKzHtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO/tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3XmfeR+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAWgBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgwJjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUFBwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhLmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTCMtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHAEQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz+TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q7M4KMIIGlDCCBHygAwIBAgIQK9SucLnQY1sq6YTI1nSqMDANBgkqhkiG9w0BAQwFADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0EwHhcNMjIwNzI4MDg1NjI2WhcNMzMwNzI3MDg1NjI2WjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKxV7tHwlG8ETLal5Yhm+isISwnj+L8khxKkASO/MRXI6kGntuse79tVL5Fkvl9KE4etck3HaGWkAIOYTXAalmxp+2/DjhF5BsFLxmeuTFipdpVwY4rHOndRllSOX15D/fnXS1V+Bv6T+3iHQLSORYeKxgv8ff7zWp/QvAuCOejeduR8Iis6j0s+meTdl2DNPm0+FXWLGccj0cC5I4XKnc4NrQgdvmD+pXfrgTpHHwq4RQnnkweGP2Wpa2V2ghhSJQVoyMl2/VBrKQGqA7z9iwkkkXJ76z+PaiCBg+06h2w6GLprm1g4MfP2BOzOQX3exdeJkDqp6+yJghUuU8v530ju11UkOk65SGF/KywOAUo5zrtFqGGUyzlsmnpFj62gAIb8yUN5l7eq7hmulRJY8sw01H4BJkg6Z8T+jhUjjnOMQTl25FfDjuIrxn9KSH3/iDrMrDsL7kkh3xdRcUnqzWW91XFJ3skGk/qJgvpGhkz6b7Mpcud1fzFCrh1YYESKxoliCYDfU6+96GVx5Opm7s5F4h4WqP9QEK0N+avprRir517X+tnbCRc7WH/13HhC08PyiXdWC+4ZUPcxkf3xRPn8faby3dsmd2NTwraWjc6uouyWdpkZXQtV8IpAbY6EOhk9k95MkZ9JQFPGOP03Tf+KabcKLhZPu+SbHU6D0OgQIDAQABo4IBYjCCAV4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUI8E8zFMzGVaO2OPzzjz8qHNHVuowHwYDVR0jBBgwFoAUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0c2NhMjAyMS5jcmwwbwYIKwYBBQUHAQEEYzBhMCgGCCsGAQUFBzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDUGCCsGAQUFBzAChilodHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RzY2EyMDIxLmNlcjBABgNVHSAEOTA3MDUGCyqEaAGG9ncCBQELMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAa8b3PSM+L1eQ+ewXgKZtaX1YAY0yloH5W9YbcSQPR0r153qv4//uZKIbv9adI+iCTGE6Um0+6BwLYOfZtMDNB55q43DeN6jDaOU7P4F/0gZmNKjM3ZTuptQ/XoJ+1OPRIBjviGRQJ5jB9YS8fqbHunYLU4WeGqq/s0X0TaExTUlMcjkqOnJlSn0W2YE4ixHDHoRiU3jOQkLNQJg6RfoasqtF+jL9ATLR1NsD6FZSN8a0UNeu5TOuP4JfHQmMzDxfJfFvPXbNkX66PWNaeXSNC/MetKKW9X/J+R3+GslvSnO64FHZZ3yXOHGHb1dCcVmKUmTzeSyTOeMUiq73l52KtTTSLqL6iTjPZosVTCdk01j5H0NqZdB/2aJMcVweKhCgMkmum33Io6EIjmkecCkEftMq3OyiHarfoTlYZeblLYvXGcQPCTIjXV+kmmrIJZyfaJU0jCeAUTurQgEhLyXngs1+mVYikQx2xUAmjGdV3cZcEegqpH2tqeRDdQykEo8SNaepXXUJnPT01RljPHaW0SrRxwaDkL31hHYoD9xCO0Rmalk6J8K/AGjAoE82GxabmXnd5Ru8otI8FCaPf68lDRQPNpvQqcy3GgCmi0NLNbm6Ees2lkrfX6lAEjc/cw/vCIhpclKiiABVYkDKqsh3o9LyuxtoD6hMuRg3cS/wwWkwgga5MIIEoaADAgECAhEA5/9pxzs1zkuRJth0fGilhzANBgkqhkiG9w0BAQwFADCBgDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMB4XDTIxMDUxOTA1MzIwN1oXDTM2MDUxODA1MzIwN1owVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIFRpbWVzdGFtcGluZyAyMDIxIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6RIfBDXtuV16xaaVQb6KZX9Od9FtJXXTZo7b+GEof3+3g0ChWiKnO7R4+6MfrvLyLCWZa6GpFHjEt4t0/GiUQvnkLOBRdBqr5DOvlmTvJJs2X8ZmWgWJjC7PBZLYBWAs8sJl3kNXxBMX5XntjqWx1ZOuuXl0R4x+zGGSMzZ45dpvB8vLpQfZkfMC/1tL9KYyjU+htLH68dZJPtzhqLBVG+8ljZ1ZFilOKksS79epCeqFSeAUm2eMTGpOiS3gfLM6yvb8Bg6bxg5yglDGC9zbr4sB9ceIGRtCQF1N8dqTgM/dSViiUgJkcv5dLNJeWxGCqJYPgzKlYZTgDXfGIeZpEFmjBLwURP5ABsyKoFocMzdjrCiFbTvJn+bD1kq78qZUgAQGGtd6zGJ88H4NPJ5Y2R4IargiWAmv8RyvWnHr/VA+2PrrK9eXe5q7M88YRdSTq9TKbqdnITUgZcjjm4ZUjteq8K331a4P0s2in0p3UubMEYa/G5w6jSWPUzchGLwWKYBfeSu6dIOC4LkeAPvmdZxSB1lWOb9HzVWZoM8Q/blaP4LWt6JxjkI9yQsYGMdCqwl7uMnPUIlcExS1mzXRxUowQref/EPaS7kYVaHHQrp4XB7nTEtQhkP0Z9Puz/n8zIFnUSnxDof4Yy650PAXSYmK2TcbyDoTNmmt8xAxzcMCAwEAAaOCAVUwggFRMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFL5UAi+/QGxzQ86sCSVOnkNEGu7gMB8GA1UdIwQYMBaAFLahVDkCw6A/joq8+tT4HKbROg79MA4GA1UdDwEB/wQEAwIBBjATBgNVHSUEDDAKBggrBgEFBQcDCDAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vY3JsLmNlcnR1bS5wbC9jdG5jYTIuY3JsMGwGCCsGAQUFBwEBBGAwXjAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAyBggrBgEFBQcwAoYmaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhMi5jZXIwOQYDVR0gBDIwMDAuBgRVHSAAMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAuJNZd8lMFf2UBwigp3qgLPBBk58BFCS3Q6aJDf3TISoytK0eal/JyCB88aUEd0wMNiEcNVMbK9j5Yht2whaknUE1G32k6uld7wcxHmw67vUBY6pSp8QhdodY4SzRRaZWzyYlviUpyU4dXyhKhHSncYJfa1U75cXxCe3sTp9uTBm3f8Bj8LkpjMUSVTtMJ6oEu5JqCYzRfc6nnoRUgwz/GVZFoOBGdrSEtDN7mZgcka/tS5MI47fALVvN5lZ2U8k7Dm/hTX8CWOw0uBZloZEW4HB0Xra3qE4qzzq/6M8gyoU/DE0k3+i7bYOrOk/7tPJg1sOhytOGUQ30PbG++0FfJioDuOFhj99b151SqFlSaRQYz74y/P2XJP+cF19oqozmi0rRTkfyEJIvhIZ+M5XIFZttmVQgTxfpfJwMFFEoQrSrklOxpmSygppsUDJEoliC05vBLVQ+gMZyYaKvBJ4YxBMlKH5ZHkRdloRYlUDplk8GUa+OCMVhpDSQurU6K1ua5dmZftnvSSz2H96UrQDzA6DyiI1V3ejVtvn2azVAXg6NnjmuRZ+wa7Pxy0H3+V4K4rOTHlG3VYA6xfLsTunCz72T6Ot4+tkrDYOeaU1pPX1CBfYj6EW2+ELq46GP8KCNUQDirWLU4nOmgCat7vN0SD6RlwUiSsMeCiQDmZwgwrUxggPvMIID6wIBATBqMFYxCzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIQK9SucLnQY1sq6YTI1nSqMDANBglghkgBZQMEAgIFAKCCAVYwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yMzEwMjAxODQ2MDBaMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEIAO5mmRJdJhKlbbMXYDTRNB0+972yiQEhCvmzw5EIgeKMD8GCSqGSIb3DQEJBDEyBDCpG1zoY5dDH5lbUZqjRxzbyP+Lxw0E7NDRPNt97iLTLTeLnIrBidXLU8iL5K83X24wgZ8GCyqGSIb3DQEJEAIMMYGPMIGMMIGJMIGGBBS/T2vEmC3eFQWo78jHp51NFDUAzjBuMFqkWDBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0ECECvUrnC50GNbKumEyNZ0qjAwDQYJKoZIhvcNAQEBBQAEggIAEo/7kCgxr1FEYXYAnPBs0a/cJqxqvfdiqBxweomhLgVhAWeSSiJybaheDm7DYdBDlEkbudqt2vtfACaWrl45zZv0KKIS8gVcNHQUHaVoohy2swNq7SRZxT5JfX2hHKw9Jix6pQBXjuWFYjLmsz0yEa3BvXhHF1hue922Gae3KHIoRSkJ7OeqfNZDVC9tZcnsURqazSvXSwm16E84V24W22uDX5vbWMb8tQGRw4XBnspSoKglcDjEIixQ14smmZQpUQS3XQ2LC6v0Oja+hp2aPDPX0QyxUCnh3nRbgUen/EDwR9Yq/FN4yHnwg7kiGW1wTzTeqRCHFr+x9k9cQWHT23hTh2II1tAsgIekuIFNWIfUq4KPmPv0RLOwJsa3lMpUGUcJHnUip1RpzWYWr8wQKCpWP5S+FSo8YWVBNUl28hz5VelD4VNIq/xmEs+2YBwAFdTKy3r8XO62fI/mG04v0TR+bzrg2eMLMsYDAwNbGstZOGdDwt3MyiFnT7AErwaZ9eU5bKgjgq/0H/usenlLiOnRy+1VCUZKWiAziw3zBuzPXLxlU+Zo0jXjVhSEHwfRwCvwq6xqlged1RYKnWl41Xfpt07FXBcIHRig1aaCr/AAyZjNU4s5vJ9BLXDh1GWlqrLKWgfJLG5dHSt//6zAiRRkMD9HpNTMSsgwaBX2X1I=", "tsa_server": "http://time.certum.pl/", - "timestamp": "2023-06-22T09:40:06+00:00" + "timestamp": "2023-10-20T18:46:00+00:00" }, "section_defs": [ { "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Process", - "definition_id": "88f0ccdc3585c154e0d1b67cf28b734e69a0791b", + "definition_id": "7e0331d2df29682413535f00d4aad156783fee2e", "used_directly": true }, { "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample", - "definition_id": "61cee898fcd24be5040ffc76163cd645f26c9ff8", + "definition_id": "030133d881170f0d9e31da6086ed5641f0c4403c", "used_directly": true }, { "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes", - "definition_id": "b82ee685f3b0fd55329dbafada317987feac3051", + "definition_id": "f0086b987424b1001666c6f5df9ad1071164a27e", "used_directly": true }, { "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes.HotplateAnnealing", - "definition_id": "1341c9d51198599e0cf17a12d00694469e6fce8f", + "definition_id": "d39f4397900226398e6c17eb00467e874e5955c4", "used_directly": true }, { "definition_qualified_name": "entry_id:83DS7AzwqTKFVwlrdVeaL3kMSLU_.Sample.Processes.PvdEvaporation", - "definition_id": "fdd23ea5c11d32f9b780e5e5b0f6349712bafe6e", + "definition_id": "c640c9585e8d4549f248582763427a7dd7c417a0", "used_directly": true }, { @@ -967,7 +1064,7 @@ }, { "definition_qualified_name": "nomad.datamodel.datamodel.EntryArchive", - "definition_id": "9e36824ae135f1e5ee5485911cb5fc03bc47af1d", + "definition_id": "1a38309e86abd87e7ef9ff7aa89560cf22ab111e", "used_directly": true }, { @@ -982,7 +1079,7 @@ }, { "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Activity", - "definition_id": "870f59b3b42ceab01a604bddc86c39b90a897366", + "definition_id": "fc2735d177bf36f9718ca66a764a56fc0c6200a0", "used_directly": false }, { @@ -991,23 +1088,38 @@ "used_directly": false }, { - "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Process", - "definition_id": "af4b2af6fde599256cf9d75c51958a41b3245b25", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.CompositeSystem", + "definition_id": "c7254c9b461a4baec86cb3179e2f84513f5c9053", + "used_directly": true + }, + { + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Entity", + "definition_id": "7ce6bdcaa183a9685582b275e1c2b2ea3139c74d", "used_directly": false }, { - "definition_qualified_name": "nomad.datamodel.metainfo.eln.ElnBaseSection", - "definition_id": "f05adb2ccbe04cbeced6213c4b6bd8f78e3d4ead", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.Process", + "definition_id": "8d81e1f95c60f39a6a8c9f954143a55e6f4c984c", "used_directly": false }, { - "definition_qualified_name": "nomad.datamodel.metainfo.eln.ElnWithFormulaBaseSection", - "definition_id": "ada854aefd11fd40e6c161fe2d9207a7bb104052", + "definition_qualified_name": "nomad.datamodel.metainfo.basesections.System", + "definition_id": "3ab3a09d615ab58aefbaa3acdd8d6af4e73aaae5", "used_directly": false }, { - "definition_qualified_name": "nomad.datamodel.metainfo.eln.Sample", - "definition_id": "a830a6d8c03f2a0baa0203e07efcbbd54328daaa", + "definition_qualified_name": "nomad.datamodel.metainfo.plot.Figure", + "definition_id": "55ef08f33dcf9fb374aea217458bd34a23bec57b", + "used_directly": true + }, + { + "definition_qualified_name": "nomad.datamodel.metainfo.plot.PlotSection", + "definition_id": "7bb17e35ed91dca88bf6238fc51ed212693593d0", + "used_directly": true + }, + { + "definition_qualified_name": "nomad.datamodel.metainfo.plot.PlotlyFigure", + "definition_id": "491cdc3c5ea21cdc576275a5c1e600cdaa4256c1", "used_directly": true }, { @@ -1017,12 +1129,12 @@ }, { "definition_qualified_name": "nomad.datamodel.results.Properties", - "definition_id": "9fcaeef3034c9b3861ab45bcea5014c65ffb3da2", + "definition_id": "43288046582240d7a33ec8b5fe4ca86988c2378c", "used_directly": true }, { "definition_qualified_name": "nomad.datamodel.results.Results", - "definition_id": "1ee9d4d17197a78dcfa5f1814b1ff3e2b275c195", + "definition_id": "ba0a320c9aa599c7c4a0af8c545f3cfe76cc4e70", "used_directly": true }, { @@ -1040,13 +1152,13 @@ }, { "quantity_name": "lab_id", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection", + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection", "path": "data.lab_id", "text_value": "001" }, { "quantity_name": "description", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection", + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection", "path": "data.description", "text_value": "<p>A simple example for an \"sample\" that demonstrates how to combine different data entities.</p>\n<p>The sample it-self defines a few properties (involved chemicals, used substrate) and uses inherited default properties (formula, name, lab id, ...)</p>\n<p>But the sample also contains sub-sections that prodivde inforamtion about proccessed that were applied to this sample (PVD evaporation, hotplate annealing). </p>\n<p>The sample also show references to other entries (chemicals, instruments).</p>\n<p> </p>" }, @@ -1088,16 +1200,16 @@ }, { "quantity_name": "datetime", - "section_definition": "nomad.datamodel.metainfo.eln.ElnBaseSection", + "section_definition": "nomad.datamodel.metainfo.basesections.BaseSection", "path": "data.datetime", - "date_value": "2023-06-22T11:40:06.399580+00:00" + "date_value": "2023-10-20T20:46:00.543744+00:00" } ] }, "data": { "m_def": "../upload/raw/schema.archive.yaml#/definitions/section_definitions/3", "name": "ELN example sample", - "datetime": "2023-06-22T11:40:06.399580+00:00", + "datetime": "2023-10-20T20:46:00.543744+00:00", "lab_id": "001", "description": "<p>A simple example for an \"sample\" that demonstrates how to combine different data entities.</p>\n<p>The sample it-self defines a few properties (involved chemicals, used substrate) and uses inherited default properties (formula, name, lab id, ...)</p>\n<p>But the sample also contains sub-sections that prodivde inforamtion about proccessed that were applied to this sample (PVD evaporation, hotplate annealing). </p>\n<p>The sample also show references to other entries (chemicals, instruments).</p>\n<p> </p>", "tags": [ @@ -1249,6 +1361,48 @@ 36.4472, 36.4526, 36.4504 + ], + "figures": [ + { + "figure": { + "data": [ + { + "x": "#time", + "y": "#chamber_pressure" + }, + { + "x": "#time", + "y": "#substrate_temperature", + "yaxis": "y2" + } + ], + "layout": { + "title": { + "text": "Pressure and Temperature over Time" + }, + "yaxis2": { + "overlaying": "y", + "side": "right" + } + } + } + }, + { + "figure": { + "data": { + "x": "#time", + "y": "#chamber_pressure" + } + } + }, + { + "figure": { + "data": { + "x": "#time", + "y": "#substrate_temperature" + } + } + } ] }, "hotplate_annealing": { @@ -1266,63 +1420,9 @@ } }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "26227", - "content-type": "application/json", - "server": "uvicorn" - } - } - } - ], - "afa783d98e040c74b68e5cfd3d82f3f0": [ - { - "request": { - "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/query", - "method": "POST", - "body": { - "required": { - "metadata": "*" - }, - "owner": "visible", - "pagination": { - "order_by": "upload_create_time", - "order": "desc", - "page_size": 20 - }, - "query": { - "entry_references.target_entry_id": "bC7byHvWJp62Sn9uiuJUB38MT5j-" - } - }, - "headers": { - "accept": "application/json, text/plain, */*", - "content-type": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiIzOGI2NzZjOC1lZTgwLTQ3MzctYmRhNy1lZGUzODA1OTUxM2EiLCJleHAiOjE2ODc0NjI3OTksIm5iZiI6MCwiaWF0IjoxNjg3NDI2ODExLCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNTRjYjFmNjQtZjg0ZS00ODE1LTlhZGUtNDQwY2UwYjU0MzBmIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImRjYjVlMjBmLWY4NjktNDMwMi05ZjZkLThjYjgxZWQ2Y2ZjZiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiVGVzdCBUZXN0ZXIiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJ0dGVzdGVyIiwiZ2l2ZW5fbmFtZSI6IlRlc3QiLCJmYW1pbHlfbmFtZSI6IlRlc3RlciIsImVtYWlsIjoidGVzdEBub21hZC1jb2UuZXUifQ.Vmqb0EoHenRUuObeyAlOiSGDg-io73SDv-IgUzNlSiY-GCdMVlbw6yGTEWPZCcYF9dnhl_QwRXfSccU_j0IJiZkxnbvpVohP6nw7uI6CHz84HDtjLVEoyPBHJOkmWdiVGU03ZfX4P1jtPBQ9_shLvZguWY7FcYLie1aPK_pVJ_5Ioqx_wtOUBJrdf_ki2EcqS-PPKia1gT2l-jBoYQoJZ8DJksRaIO8WKFy89dt0pHNb4QielWFVaO6ODXyi0CMmMIeQikU3OSUTdjOqzEwijH0Si4Vv4NY959T4QVCG1ukksVm6Hp5MTFCjG_FtxJjkwAgvwkA57fEMYGqEdmiRow", - "cookie": null - } - }, - "response": { - "status": 200, - "body": { - "owner": "visible", - "query": { - "prefix": "entry_references", - "query": { - "name": "target_entry_id", - "value": "bC7byHvWJp62Sn9uiuJUB38MT5j-" - } - }, - "pagination": { - "page_size": 20, - "order_by": "upload_create_time", - "order": "desc", - "total": 0 - }, - "required": {}, - "data": [] - }, - "headers": { - "connection": "close", - "content-length": "326", + "content-length": "28243", "content-type": "application/json", "server": "uvicorn" } @@ -1337,7 +1437,7 @@ "body": "", "headers": { "accept": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiIyOTIwMWYyYS1iOWUxLTRkZjQtOTU1MC1jNzU3ODdhMjE0M2QiLCJleHAiOjE2ODc0NjI3OTksIm5iZiI6MCwiaWF0IjoxNjg3NDI2ODEyLCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNTRjYjFmNjQtZjg0ZS00ODE1LTlhZGUtNDQwY2UwYjU0MzBmIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImRjYjVlMjBmLWY4NjktNDMwMi05ZjZkLThjYjgxZWQ2Y2ZjZiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiVGVzdCBUZXN0ZXIiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJ0dGVzdGVyIiwiZ2l2ZW5fbmFtZSI6IlRlc3QiLCJmYW1pbHlfbmFtZSI6IlRlc3RlciIsImVtYWlsIjoidGVzdEBub21hZC1jb2UuZXUifQ.CGS1NhfCww5AM9_gg0JNBnkXTv83j-hrZeup7cbb4bq1UlSLt0IsM66w6S6pXsFzzGTfCmelvxeFWrG0w350-Qv7hxr30jbqInwYSWufmLeyZ9vlvswgTIyTsqBUp20nlBKl3aU_Kd122qv8d9nfykPWyEsyP-Q7e6G4peDaflrSsO4ggkb35G4KxA_23wh15q1-CXOPQ73grGxmCsnK2QILPHpe1xJjTZ8f3EDDJQK2X7YWYXxs7STkgfpr4fKEosivm4uFrP459PL6t_T8P45FSTNjzBZS4gPUIlIa8I1bSc2UmpDXCRoglMIlyNZ_9SwvKGpU__TBKzi_0uGj2Q", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiIxYjdiNWMwOC02MjRlLTQ4MzktODQwMi1jN2VlZDg1NDQyZWYiLCJleHAiOjE2OTc4NjM1NTEsIm5iZiI6MCwiaWF0IjoxNjk3ODI3NTY2LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNTRjYjFmNjQtZjg0ZS00ODE1LTlhZGUtNDQwY2UwYjU0MzBmIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjI5ZjQ0NThlLThkOTgtNDc1Ny1hYTNkLTU5MWMzYzg1Mjg5ZiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiVGVzdCBUZXN0ZXIiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJ0dGVzdGVyIiwiZ2l2ZW5fbmFtZSI6IlRlc3QiLCJmYW1pbHlfbmFtZSI6IlRlc3RlciIsImVtYWlsIjoidGVzdEBub21hZC1jb2UuZXUifQ.T3uVajabA4GkQa50i44xON6MFLtaS7D3OpirmJtJpoQj4LznahXW4RQkbWSxNZP-XOYjZAI-8OpM1KAQG4OhP5wMNWwPgHTwKloDjfC63_CqXK6eqg2y9-oNc44kW3Qc-aGWxHPVfRl9-gVQwxCRVom8oJakdikAiSmcd_1C5MLXGLAyzXBOQLwkmFj4gHew6Qn5lBi97Qe6-Lw58OxAlTWR2akofOxGwAdvIotIK8GWVKsIGjAIgEwNtS1Q81_NmJigllf4qn6o6FOXJ_g5535R6S6kv_MTj5Z-NM_-nyDDiY6t1NtDwKsNKbLFg0jKR321fsZFmxG093PyWZng0A", "cookie": null } }, @@ -1345,8 +1445,9 @@ "status": 200, "body": "{\n \"data\": {\n \"m_def\": \"../upload/raw/schema.archive.yaml#/definitions/section_definitions/3\",\n \"name\": \"ELN example sample\",\n \"lab_id\": \"001\",\n \"tags\": [\n \"project\"\n ],\n \"substrate_type\": \"SLG\",\n \"processes\": {\n \"pvd_evaporation\": {\n \"datetime\": \"2022-05-10T07:20:00+00:00\",\n \"data_file\": \"PVDProcess.csv\"\n },\n \"hotplate_annealing\": {\n \"datetime\": \"2022-05-10T07:22:00+00:00\",\n \"set_temperature\": 373.15,\n \"duration\": 60\n }\n },\n \"description\": \"<p>A simple example for an \\\"sample\\\" that demonstrates how to combine different data entities.</p>\\n<p>The sample it-self defines a few properties (involved chemicals, used substrate) and uses inherited default properties (formula, name, lab id, ...)</p>\\n<p>But the sample also contains sub-sections that prodivde inforamtion about proccessed that were applied to this sample (PVD evaporation, hotplate annealing). </p>\\n<p>The sample also show references to other entries (chemicals, instruments).</p>\\n<p> </p>\"\n }\n}\n", "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-disposition": "attatchment; filename=\"sample.archive.json\"", + "content-disposition": "attachment; filename=\"sample.archive.json\"", "content-type": "application/octet-stream", "server": "uvicorn", "transfer-encoding": "chunked" @@ -1369,7 +1470,7 @@ "headers": { "accept": "application/json", "content-type": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiI2M2M5MjM3MC0wNDg2LTQxMzctOTdiNC1kMzcyNzM5MjQyYTEiLCJleHAiOjE2ODc0NjI3OTksIm5iZiI6MCwiaWF0IjoxNjg3NDI2ODEyLCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNTRjYjFmNjQtZjg0ZS00ODE1LTlhZGUtNDQwY2UwYjU0MzBmIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImRjYjVlMjBmLWY4NjktNDMwMi05ZjZkLThjYjgxZWQ2Y2ZjZiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiVGVzdCBUZXN0ZXIiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJ0dGVzdGVyIiwiZ2l2ZW5fbmFtZSI6IlRlc3QiLCJmYW1pbHlfbmFtZSI6IlRlc3RlciIsImVtYWlsIjoidGVzdEBub21hZC1jb2UuZXUifQ.aqhEDBtdQla4mibRsmUkRkDdNlYSmXpugYrG85OzuR_6nDNlcR3Ssozz_vEpkK29Dv3FoAC4q3ZDiUuTkcQ_Nqq32-orA1l1co4YaaEyytIEdNIehaM6ouSmu6qXYlgIpVhYA375kuFbuT5E9vy8qC1U0ktja2UktZOn5VlbW44_8BkOBGG3KgmBJHX_iBzrHWDGMkfQSWiYOyETT2HljTfDYylC1bxf-MiqMj5VdRsUIrIEpDc5WcIGNOvCZg-UA0VoP4Xo60qdFBUTfZYgt21gs-EdYEWfg0cr2aqSrZ4hiJhe4wJjfgqmzzglnuyT-XzPdeFKYdVEzvVmAL9yMg", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiIxOTI3MDgxYi0yZDc0LTQyNTItYmE4ZC0xMzdmMzMzYWY2MDUiLCJleHAiOjE2OTc4NjM1NTEsIm5iZiI6MCwiaWF0IjoxNjk3ODI3NTY2LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNTRjYjFmNjQtZjg0ZS00ODE1LTlhZGUtNDQwY2UwYjU0MzBmIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjI5ZjQ0NThlLThkOTgtNDc1Ny1hYTNkLTU5MWMzYzg1Mjg5ZiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiVGVzdCBUZXN0ZXIiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJ0dGVzdGVyIiwiZ2l2ZW5fbmFtZSI6IlRlc3QiLCJmYW1pbHlfbmFtZSI6IlRlc3RlciIsImVtYWlsIjoidGVzdEBub21hZC1jb2UuZXUifQ.NWB0DOhEKnmtAOVqJV6tkI0lohuzKrAhPVLIsZKRKwDIa3bcp-EB5JJN6j9Z6aFzFLVkIbFLML0pLtNrNemDa9qm7FATI8Q0gbt-gBD_XmY41aOY6VVEbYJb8W1HFyEtIejj1c1ldcO8avWs3bvCyIHPfiaTRGYZD1z_24GC2qXraKQdg_Kkg0tY9qqQLhFhp9RHNhrZEcMkPuS8FRx7-s5s43HVgLKawOMv9i37DJ7m0TZUNd5-xPj6Xamf3ozArEZjlH__G3q-rppDYK88SjWZh3WSIBYFNUIhSPpv-w_GKXJiM464kMb3RfyYLNouem3z5MNu7rmYUJuVyf_u-w", "cookie": null } }, @@ -1508,11 +1609,14 @@ "pvd_evaporation": {} } } + ], + "eln": [ + "None" ] }, "name": "Sample", "base_sections": [ - "nomad.datamodel.metainfo.eln.Sample", + "nomad.datamodel.metainfo.basesections.CompositeSystem", "nomad.datamodel.data.EntryData" ], "quantities": [ @@ -1689,20 +1793,48 @@ "overview": true } ], - "plot": [ + "plotly_graph_object": [ { - "x": "time", - "y": [ - "chamber_pressure", - "substrate_temperature" - ] + "data": [ + { + "x": "#time", + "y": "#chamber_pressure" + }, + { + "x": "#time", + "y": "#substrate_temperature", + "yaxis": "y2" + } + ], + "layout": { + "title": { + "text": "Pressure and Temperature over Time" + }, + "yaxis2": { + "overlaying": "y", + "side": "right" + } + } + }, + { + "data": { + "x": "#time", + "y": "#chamber_pressure" + } + }, + { + "data": { + "x": "#time", + "y": "#substrate_temperature" + } } ] }, "name": "PvdEvaporation", "base_sections": [ "#/definitions/section_definitions/2", - "nomad.parsing.tabular.TableData" + "nomad.parsing.tabular.TableData", + "nomad.datamodel.metainfo.plot.PlotSection" ], "quantities": [ { @@ -1712,8 +1844,19 @@ "m_annotations": { "tabular_parser": [ { - "comment": "#", - "sep": "\\t" + "parsing_options": { + "sep": "\\t", + "comment": "#" + }, + "mapping_options": [ + { + "mapping_mode": "column", + "file_mode": "current_entry", + "sections": [ + "#root" + ] + } + ] } ], "browser": [ @@ -1761,20 +1904,12 @@ "m_parent_sub_section": "quantities", "m_annotations": { "eln": [ - { - "defaultDisplayUnit": "mbar" - } + "None" ], "tabular": [ { "name": "Vacuum Pressure1" } - ], - "plot": [ - { - "x": "time", - "y": "chamber_pressure" - } ] }, "name": "chamber_pressure", @@ -1797,12 +1932,6 @@ "name": "Substrate PV", "unit": "degC" } - ], - "plot": [ - { - "x": "time", - "y": "substrate_temperature" - } ] }, "name": "substrate_temperature", @@ -1884,12 +2013,12 @@ }, "metadata": { "upload_id": "eln_upload_id", - "upload_create_time": "2023-06-22T09:40:05.999000+00:00", + "upload_create_time": "2023-10-20T18:46:00.113000+00:00", "entry_id": "83DS7AzwqTKFVwlrdVeaL3kMSLU_", "entry_name": "Electronic Lab Notebook example schema", "entry_type": "Schema", - "entry_hash": "x_zOdo_96pqN_qhfEOW6HCugy3zu", - "entry_create_time": "2023-06-22T09:40:06.124000+00:00", + "entry_hash": "01azS40P52J1MvDpy7hFvRlF1VOj", + "entry_create_time": "2023-10-20T18:46:00.174000+00:00", "parser_name": "parsers/archive", "mainfile": "schema.archive.yaml", "files": [ @@ -1902,9 +2031,9 @@ "embargo_length": 0, "license": "CC BY 4.0", "processed": true, - "last_processing_time": "2023-06-22T09:40:06.342667+00:00", + "last_processing_time": "2023-10-20T18:46:00.488125+00:00", "processing_errors": [], - "nomad_version": "1.2.0rc1.dev181+gce78efe22.d20230609", + "nomad_version": "1.2.2.dev85+g6f47bb0a0", "nomad_commit": "", "references": [], "main_author": "68878af7-6845-46c0-b2c1-250d4d8eb470", @@ -2008,10 +2137,10 @@ "nomad.metainfo.metainfo.SubSection" ], "entry_timestamp": { - "token_seed": "x_zOdo_96pqN_qhfEOW6HCugy3zu", - "token": "MIIYDQYJKoZIhvcNAQcCoIIX/jCCF/oCAQMxDTALBglghkgBZQMEAgIwgcwGCyqGSIb3DQEJEAEEoIG8BIG5MIG2AgEBBgsqhGgBhvZ3AgUBCzAvMAsGCWCGSAFlAwQCAQQg80ZARNPgXCnhfzcf0SvqTNUGd+9CrTsj9L+g4b4aQFwCBwqofCa7Yo8YDzIwMjMwNjIyMDk0MDA2WjADAgEBoFSkUjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjKgghMiMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0BAQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAMZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK/9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWajXfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKzHtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO/tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3XmfeR+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAWgBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgwJjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUFBwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhLmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTCMtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHAEQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz+TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q7M4KMIIGlDCCBHygAwIBAgIQK9SucLnQY1sq6YTI1nSqMDANBgkqhkiG9w0BAQwFADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0EwHhcNMjIwNzI4MDg1NjI2WhcNMzMwNzI3MDg1NjI2WjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKxV7tHwlG8ETLal5Yhm+isISwnj+L8khxKkASO/MRXI6kGntuse79tVL5Fkvl9KE4etck3HaGWkAIOYTXAalmxp+2/DjhF5BsFLxmeuTFipdpVwY4rHOndRllSOX15D/fnXS1V+Bv6T+3iHQLSORYeKxgv8ff7zWp/QvAuCOejeduR8Iis6j0s+meTdl2DNPm0+FXWLGccj0cC5I4XKnc4NrQgdvmD+pXfrgTpHHwq4RQnnkweGP2Wpa2V2ghhSJQVoyMl2/VBrKQGqA7z9iwkkkXJ76z+PaiCBg+06h2w6GLprm1g4MfP2BOzOQX3exdeJkDqp6+yJghUuU8v530ju11UkOk65SGF/KywOAUo5zrtFqGGUyzlsmnpFj62gAIb8yUN5l7eq7hmulRJY8sw01H4BJkg6Z8T+jhUjjnOMQTl25FfDjuIrxn9KSH3/iDrMrDsL7kkh3xdRcUnqzWW91XFJ3skGk/qJgvpGhkz6b7Mpcud1fzFCrh1YYESKxoliCYDfU6+96GVx5Opm7s5F4h4WqP9QEK0N+avprRir517X+tnbCRc7WH/13HhC08PyiXdWC+4ZUPcxkf3xRPn8faby3dsmd2NTwraWjc6uouyWdpkZXQtV8IpAbY6EOhk9k95MkZ9JQFPGOP03Tf+KabcKLhZPu+SbHU6D0OgQIDAQABo4IBYjCCAV4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUI8E8zFMzGVaO2OPzzjz8qHNHVuowHwYDVR0jBBgwFoAUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0c2NhMjAyMS5jcmwwbwYIKwYBBQUHAQEEYzBhMCgGCCsGAQUFBzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDUGCCsGAQUFBzAChilodHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RzY2EyMDIxLmNlcjBABgNVHSAEOTA3MDUGCyqEaAGG9ncCBQELMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAa8b3PSM+L1eQ+ewXgKZtaX1YAY0yloH5W9YbcSQPR0r153qv4//uZKIbv9adI+iCTGE6Um0+6BwLYOfZtMDNB55q43DeN6jDaOU7P4F/0gZmNKjM3ZTuptQ/XoJ+1OPRIBjviGRQJ5jB9YS8fqbHunYLU4WeGqq/s0X0TaExTUlMcjkqOnJlSn0W2YE4ixHDHoRiU3jOQkLNQJg6RfoasqtF+jL9ATLR1NsD6FZSN8a0UNeu5TOuP4JfHQmMzDxfJfFvPXbNkX66PWNaeXSNC/MetKKW9X/J+R3+GslvSnO64FHZZ3yXOHGHb1dCcVmKUmTzeSyTOeMUiq73l52KtTTSLqL6iTjPZosVTCdk01j5H0NqZdB/2aJMcVweKhCgMkmum33Io6EIjmkecCkEftMq3OyiHarfoTlYZeblLYvXGcQPCTIjXV+kmmrIJZyfaJU0jCeAUTurQgEhLyXngs1+mVYikQx2xUAmjGdV3cZcEegqpH2tqeRDdQykEo8SNaepXXUJnPT01RljPHaW0SrRxwaDkL31hHYoD9xCO0Rmalk6J8K/AGjAoE82GxabmXnd5Ru8otI8FCaPf68lDRQPNpvQqcy3GgCmi0NLNbm6Ees2lkrfX6lAEjc/cw/vCIhpclKiiABVYkDKqsh3o9LyuxtoD6hMuRg3cS/wwWkwgga5MIIEoaADAgECAhEA5/9pxzs1zkuRJth0fGilhzANBgkqhkiG9w0BAQwFADCBgDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMB4XDTIxMDUxOTA1MzIwN1oXDTM2MDUxODA1MzIwN1owVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIFRpbWVzdGFtcGluZyAyMDIxIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6RIfBDXtuV16xaaVQb6KZX9Od9FtJXXTZo7b+GEof3+3g0ChWiKnO7R4+6MfrvLyLCWZa6GpFHjEt4t0/GiUQvnkLOBRdBqr5DOvlmTvJJs2X8ZmWgWJjC7PBZLYBWAs8sJl3kNXxBMX5XntjqWx1ZOuuXl0R4x+zGGSMzZ45dpvB8vLpQfZkfMC/1tL9KYyjU+htLH68dZJPtzhqLBVG+8ljZ1ZFilOKksS79epCeqFSeAUm2eMTGpOiS3gfLM6yvb8Bg6bxg5yglDGC9zbr4sB9ceIGRtCQF1N8dqTgM/dSViiUgJkcv5dLNJeWxGCqJYPgzKlYZTgDXfGIeZpEFmjBLwURP5ABsyKoFocMzdjrCiFbTvJn+bD1kq78qZUgAQGGtd6zGJ88H4NPJ5Y2R4IargiWAmv8RyvWnHr/VA+2PrrK9eXe5q7M88YRdSTq9TKbqdnITUgZcjjm4ZUjteq8K331a4P0s2in0p3UubMEYa/G5w6jSWPUzchGLwWKYBfeSu6dIOC4LkeAPvmdZxSB1lWOb9HzVWZoM8Q/blaP4LWt6JxjkI9yQsYGMdCqwl7uMnPUIlcExS1mzXRxUowQref/EPaS7kYVaHHQrp4XB7nTEtQhkP0Z9Puz/n8zIFnUSnxDof4Yy650PAXSYmK2TcbyDoTNmmt8xAxzcMCAwEAAaOCAVUwggFRMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFL5UAi+/QGxzQ86sCSVOnkNEGu7gMB8GA1UdIwQYMBaAFLahVDkCw6A/joq8+tT4HKbROg79MA4GA1UdDwEB/wQEAwIBBjATBgNVHSUEDDAKBggrBgEFBQcDCDAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vY3JsLmNlcnR1bS5wbC9jdG5jYTIuY3JsMGwGCCsGAQUFBwEBBGAwXjAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAyBggrBgEFBQcwAoYmaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhMi5jZXIwOQYDVR0gBDIwMDAuBgRVHSAAMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAuJNZd8lMFf2UBwigp3qgLPBBk58BFCS3Q6aJDf3TISoytK0eal/JyCB88aUEd0wMNiEcNVMbK9j5Yht2whaknUE1G32k6uld7wcxHmw67vUBY6pSp8QhdodY4SzRRaZWzyYlviUpyU4dXyhKhHSncYJfa1U75cXxCe3sTp9uTBm3f8Bj8LkpjMUSVTtMJ6oEu5JqCYzRfc6nnoRUgwz/GVZFoOBGdrSEtDN7mZgcka/tS5MI47fALVvN5lZ2U8k7Dm/hTX8CWOw0uBZloZEW4HB0Xra3qE4qzzq/6M8gyoU/DE0k3+i7bYOrOk/7tPJg1sOhytOGUQ30PbG++0FfJioDuOFhj99b151SqFlSaRQYz74y/P2XJP+cF19oqozmi0rRTkfyEJIvhIZ+M5XIFZttmVQgTxfpfJwMFFEoQrSrklOxpmSygppsUDJEoliC05vBLVQ+gMZyYaKvBJ4YxBMlKH5ZHkRdloRYlUDplk8GUa+OCMVhpDSQurU6K1ua5dmZftnvSSz2H96UrQDzA6DyiI1V3ejVtvn2azVAXg6NnjmuRZ+wa7Pxy0H3+V4K4rOTHlG3VYA6xfLsTunCz72T6Ot4+tkrDYOeaU1pPX1CBfYj6EW2+ELq46GP8KCNUQDirWLU4nOmgCat7vN0SD6RlwUiSsMeCiQDmZwgwrUxggPvMIID6wIBATBqMFYxCzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIQK9SucLnQY1sq6YTI1nSqMDANBglghkgBZQMEAgIFAKCCAVYwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yMzA2MjIwOTQwMDZaMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEIAO5mmRJdJhKlbbMXYDTRNB0+972yiQEhCvmzw5EIgeKMD8GCSqGSIb3DQEJBDEyBDCtXWdzIA9Bl7eK0AJUnSkjfjjrXaOUDrD1DQ9sBH7SGYI8cAtfRyU56P52Mfd2Mt8wgZ8GCyqGSIb3DQEJEAIMMYGPMIGMMIGJMIGGBBS/T2vEmC3eFQWo78jHp51NFDUAzjBuMFqkWDBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0ECECvUrnC50GNbKumEyNZ0qjAwDQYJKoZIhvcNAQEBBQAEggIASmWZ6b28V5ci8qDd3uaO2JpQ3lpaIylrhR3/esqmmovBG8MCRf32N+kx4XuwXKZTlEND9sSMUk6YUzye+11grkibnKqZkU7NznAJqQ9328UYBESmOmvm2Yi9myAg+n5VG7HhsWkTNS22Rk73H0y02BlatXAV1Do6zHGDrCsADLKWOWIwanDLe8QkhPcptRgT6NTbmOstvBs4SqJpmCKbwZc8Vaf25symIXKCS+ThUBFmWlVPmxgSvyIFooqwGIfst+rCDwxvCPb95AYPEPsDn9/i/zlukoMpij5WRjiAAcPRmadFdnE7FZcCM728cqSdiSfAElkk8/i8s7mmplFmJuCayXYxqLx92LGB1stYxbGu3HI+ddAgAtbz17mQXH7o56DS/NByz7hMtr6lSoUmxKVsHFQ0heT4OMcosbxhDVGj8nztE+fZIpFf2h+bJt9r6WPvH6eRyW2EMa3Y27V9r1gDzpE+Pkd5v+KB1I4gstIxnAk4SBqdUg5iDo2M/pb8KmWJL1olDzHraZI8ebobLBoaVH7nrnMVDHBNFJVz8gYesaLvGbB5vmAYX0QkBmxrQwSkR2hRHOFt2JmnPATLcTruMAnH0KF+U1War2ZFbNwJGZPhyYBo4eVvkzV8hdiCKUvrGyuSYOlLiilUZN1VjIESyBnggdCMxirsXZ9fBG4=", + "token_seed": "01azS40P52J1MvDpy7hFvRlF1VOj", + "token": "MIIYDQYJKoZIhvcNAQcCoIIX/jCCF/oCAQMxDTALBglghkgBZQMEAgIwgcwGCyqGSIb3DQEJEAEEoIG8BIG5MIG2AgEBBgsqhGgBhvZ3AgUBCzAvMAsGCWCGSAFlAwQCAQQg/D5oExphofXQjL22D4SFaLV+OQXdKB6ocpR2OWIb8m4CBwqofC39iy8YDzIwMjMxMDIwMTg0NjAwWjADAgEBoFSkUjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjKgghMiMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0BAQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAMZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK/9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWajXfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKzHtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO/tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3XmfeR+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAWgBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgwJjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUFBwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhLmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTCMtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHAEQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz+TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q7M4KMIIGlDCCBHygAwIBAgIQK9SucLnQY1sq6YTI1nSqMDANBgkqhkiG9w0BAQwFADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0EwHhcNMjIwNzI4MDg1NjI2WhcNMzMwNzI3MDg1NjI2WjBQMQswCQYDVQQGEwJQTDEhMB8GA1UECgwYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMR4wHAYDVQQDDBVDZXJ0dW0gVGltZXN0YW1wIDIwMjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKxV7tHwlG8ETLal5Yhm+isISwnj+L8khxKkASO/MRXI6kGntuse79tVL5Fkvl9KE4etck3HaGWkAIOYTXAalmxp+2/DjhF5BsFLxmeuTFipdpVwY4rHOndRllSOX15D/fnXS1V+Bv6T+3iHQLSORYeKxgv8ff7zWp/QvAuCOejeduR8Iis6j0s+meTdl2DNPm0+FXWLGccj0cC5I4XKnc4NrQgdvmD+pXfrgTpHHwq4RQnnkweGP2Wpa2V2ghhSJQVoyMl2/VBrKQGqA7z9iwkkkXJ76z+PaiCBg+06h2w6GLprm1g4MfP2BOzOQX3exdeJkDqp6+yJghUuU8v530ju11UkOk65SGF/KywOAUo5zrtFqGGUyzlsmnpFj62gAIb8yUN5l7eq7hmulRJY8sw01H4BJkg6Z8T+jhUjjnOMQTl25FfDjuIrxn9KSH3/iDrMrDsL7kkh3xdRcUnqzWW91XFJ3skGk/qJgvpGhkz6b7Mpcud1fzFCrh1YYESKxoliCYDfU6+96GVx5Opm7s5F4h4WqP9QEK0N+avprRir517X+tnbCRc7WH/13HhC08PyiXdWC+4ZUPcxkf3xRPn8faby3dsmd2NTwraWjc6uouyWdpkZXQtV8IpAbY6EOhk9k95MkZ9JQFPGOP03Tf+KabcKLhZPu+SbHU6D0OgQIDAQABo4IBYjCCAV4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUI8E8zFMzGVaO2OPzzjz8qHNHVuowHwYDVR0jBBgwFoAUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0c2NhMjAyMS5jcmwwbwYIKwYBBQUHAQEEYzBhMCgGCCsGAQUFBzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDUGCCsGAQUFBzAChilodHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RzY2EyMDIxLmNlcjBABgNVHSAEOTA3MDUGCyqEaAGG9ncCBQELMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAa8b3PSM+L1eQ+ewXgKZtaX1YAY0yloH5W9YbcSQPR0r153qv4//uZKIbv9adI+iCTGE6Um0+6BwLYOfZtMDNB55q43DeN6jDaOU7P4F/0gZmNKjM3ZTuptQ/XoJ+1OPRIBjviGRQJ5jB9YS8fqbHunYLU4WeGqq/s0X0TaExTUlMcjkqOnJlSn0W2YE4ixHDHoRiU3jOQkLNQJg6RfoasqtF+jL9ATLR1NsD6FZSN8a0UNeu5TOuP4JfHQmMzDxfJfFvPXbNkX66PWNaeXSNC/MetKKW9X/J+R3+GslvSnO64FHZZ3yXOHGHb1dCcVmKUmTzeSyTOeMUiq73l52KtTTSLqL6iTjPZosVTCdk01j5H0NqZdB/2aJMcVweKhCgMkmum33Io6EIjmkecCkEftMq3OyiHarfoTlYZeblLYvXGcQPCTIjXV+kmmrIJZyfaJU0jCeAUTurQgEhLyXngs1+mVYikQx2xUAmjGdV3cZcEegqpH2tqeRDdQykEo8SNaepXXUJnPT01RljPHaW0SrRxwaDkL31hHYoD9xCO0Rmalk6J8K/AGjAoE82GxabmXnd5Ru8otI8FCaPf68lDRQPNpvQqcy3GgCmi0NLNbm6Ees2lkrfX6lAEjc/cw/vCIhpclKiiABVYkDKqsh3o9LyuxtoD6hMuRg3cS/wwWkwgga5MIIEoaADAgECAhEA5/9pxzs1zkuRJth0fGilhzANBgkqhkiG9w0BAQwFADCBgDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMB4XDTIxMDUxOTA1MzIwN1oXDTM2MDUxODA1MzIwN1owVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBEYXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIFRpbWVzdGFtcGluZyAyMDIxIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6RIfBDXtuV16xaaVQb6KZX9Od9FtJXXTZo7b+GEof3+3g0ChWiKnO7R4+6MfrvLyLCWZa6GpFHjEt4t0/GiUQvnkLOBRdBqr5DOvlmTvJJs2X8ZmWgWJjC7PBZLYBWAs8sJl3kNXxBMX5XntjqWx1ZOuuXl0R4x+zGGSMzZ45dpvB8vLpQfZkfMC/1tL9KYyjU+htLH68dZJPtzhqLBVG+8ljZ1ZFilOKksS79epCeqFSeAUm2eMTGpOiS3gfLM6yvb8Bg6bxg5yglDGC9zbr4sB9ceIGRtCQF1N8dqTgM/dSViiUgJkcv5dLNJeWxGCqJYPgzKlYZTgDXfGIeZpEFmjBLwURP5ABsyKoFocMzdjrCiFbTvJn+bD1kq78qZUgAQGGtd6zGJ88H4NPJ5Y2R4IargiWAmv8RyvWnHr/VA+2PrrK9eXe5q7M88YRdSTq9TKbqdnITUgZcjjm4ZUjteq8K331a4P0s2in0p3UubMEYa/G5w6jSWPUzchGLwWKYBfeSu6dIOC4LkeAPvmdZxSB1lWOb9HzVWZoM8Q/blaP4LWt6JxjkI9yQsYGMdCqwl7uMnPUIlcExS1mzXRxUowQref/EPaS7kYVaHHQrp4XB7nTEtQhkP0Z9Puz/n8zIFnUSnxDof4Yy650PAXSYmK2TcbyDoTNmmt8xAxzcMCAwEAAaOCAVUwggFRMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFL5UAi+/QGxzQ86sCSVOnkNEGu7gMB8GA1UdIwQYMBaAFLahVDkCw6A/joq8+tT4HKbROg79MA4GA1UdDwEB/wQEAwIBBjATBgNVHSUEDDAKBggrBgEFBQcDCDAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vY3JsLmNlcnR1bS5wbC9jdG5jYTIuY3JsMGwGCCsGAQUFBwEBBGAwXjAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNvbTAyBggrBgEFBQcwAoYmaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNhMi5jZXIwOQYDVR0gBDIwMDAuBgRVHSAAMCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG9w0BAQwFAAOCAgEAuJNZd8lMFf2UBwigp3qgLPBBk58BFCS3Q6aJDf3TISoytK0eal/JyCB88aUEd0wMNiEcNVMbK9j5Yht2whaknUE1G32k6uld7wcxHmw67vUBY6pSp8QhdodY4SzRRaZWzyYlviUpyU4dXyhKhHSncYJfa1U75cXxCe3sTp9uTBm3f8Bj8LkpjMUSVTtMJ6oEu5JqCYzRfc6nnoRUgwz/GVZFoOBGdrSEtDN7mZgcka/tS5MI47fALVvN5lZ2U8k7Dm/hTX8CWOw0uBZloZEW4HB0Xra3qE4qzzq/6M8gyoU/DE0k3+i7bYOrOk/7tPJg1sOhytOGUQ30PbG++0FfJioDuOFhj99b151SqFlSaRQYz74y/P2XJP+cF19oqozmi0rRTkfyEJIvhIZ+M5XIFZttmVQgTxfpfJwMFFEoQrSrklOxpmSygppsUDJEoliC05vBLVQ+gMZyYaKvBJ4YxBMlKH5ZHkRdloRYlUDplk8GUa+OCMVhpDSQurU6K1ua5dmZftnvSSz2H96UrQDzA6DyiI1V3ejVtvn2azVAXg6NnjmuRZ+wa7Pxy0H3+V4K4rOTHlG3VYA6xfLsTunCz72T6Ot4+tkrDYOeaU1pPX1CBfYj6EW2+ELq46GP8KCNUQDirWLU4nOmgCat7vN0SD6RlwUiSsMeCiQDmZwgwrUxggPvMIID6wIBATBqMFYxCzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIQK9SucLnQY1sq6YTI1nSqMDANBglghkgBZQMEAgIFAKCCAVYwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yMzEwMjAxODQ2MDBaMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEIAO5mmRJdJhKlbbMXYDTRNB0+972yiQEhCvmzw5EIgeKMD8GCSqGSIb3DQEJBDEyBDAe0R39V8/VYHQ3vwbk6awRJ1zzvCm/qIUT0CcauoM025hgSzNWIWvyGoaVoYsANHgwgZ8GCyqGSIb3DQEJEAIMMYGPMIGMMIGJMIGGBBS/T2vEmC3eFQWo78jHp51NFDUAzjBuMFqkWDBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5nIDIwMjEgQ0ECECvUrnC50GNbKumEyNZ0qjAwDQYJKoZIhvcNAQEBBQAEggIALKTaZpq3wVKP4PPtFccQeeWKWi8SQbtDzQyQd5qIvSei/0ENXCHtJ1J6VBu00vPXGKSpwXN+ZGsPbY6wmgypp01KdigGfBVrHZPEivKe/Z2scm6848WiDjEBvA3w6zOR+p3qJXJPsFoh3eG2b3e7Bse/1nwDZ2RLNP8QVTI6WdDyjlGTYKmIW1PysO5i0U4V2egMj9xcCw45VJTphqnMqZkcDKBLK5sXblgmEgiVk0vNVCQZfzIrpthry0rV7phgKN6GK5cngchj4YjJriK7uQ2lTGUdfgukSOwgfkml4uAytXrFoqn9oZ5zA2VfSP4J4nuFJt8yas2+WyZquGCsUdQfyJqEJ8KefqyqrUzMnNscF9GnyyLKmwww7s+Di8k0ly3BD1Bj1WDJnGWxD2xLSdSfb1LAPm8I2HJFQve4vVt5Tp8sA934148SkOvwJE3INmkPOjTKxye3UMKe1SsjUgyNh5k8MNkWjPnccy2BKUMRHNO7MdI+RZiuS/wDIR1TQsOWEhsqVJpLUsZ/CVq0xDT0w9lQm/8zUML+JuyOV62Vj6xOpPYIoNoEy/pc3vTFFZDVXcLQPiJAMgQDMQuK8xpnTs1POmGRBMQWFmDFSkL+8FJSBxLDosT6xyAQ8vF4KOO1sNp4Q1oHGBn0bvgVOrDzi6GnCKBhQg9Z9FNy9EM=", "tsa_server": "http://time.certum.pl/", - "timestamp": "2023-06-22T09:40:06+00:00" + "timestamp": "2023-10-20T18:46:00+00:00" }, "section_defs": [ { @@ -2021,7 +2150,7 @@ }, { "definition_qualified_name": "nomad.datamodel.datamodel.EntryArchive", - "definition_id": "9e36824ae135f1e5ee5485911cb5fc03bc47af1d", + "definition_id": "1a38309e86abd87e7ef9ff7aa89560cf22ab111e", "used_directly": true }, { @@ -2036,12 +2165,12 @@ }, { "definition_qualified_name": "nomad.datamodel.results.Properties", - "definition_id": "9fcaeef3034c9b3861ab45bcea5014c65ffb3da2", + "definition_id": "43288046582240d7a33ec8b5fe4ca86988c2378c", "used_directly": true }, { "definition_qualified_name": "nomad.datamodel.results.Results", - "definition_id": "1ee9d4d17197a78dcfa5f1814b1ff3e2b275c195", + "definition_id": "ba0a320c9aa599c7c4a0af8c545f3cfe76cc4e70", "used_directly": true }, { @@ -2081,8 +2210,9 @@ } }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "35199", + "content-length": "36345", "content-type": "application/json", "server": "uvicorn" } @@ -2097,16 +2227,17 @@ "body": "", "headers": { "accept": "application/json", - "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiJiNjU3NjkxMC1kOTJkLTQwY2UtYWMxNi02MTQ1YmVmYjg0ZjYiLCJleHAiOjE2ODc0NjI3OTksIm5iZiI6MCwiaWF0IjoxNjg3NDI2ODEyLCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNTRjYjFmNjQtZjg0ZS00ODE1LTlhZGUtNDQwY2UwYjU0MzBmIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6ImRjYjVlMjBmLWY4NjktNDMwMi05ZjZkLThjYjgxZWQ2Y2ZjZiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiVGVzdCBUZXN0ZXIiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJ0dGVzdGVyIiwiZ2l2ZW5fbmFtZSI6IlRlc3QiLCJmYW1pbHlfbmFtZSI6IlRlc3RlciIsImVtYWlsIjoidGVzdEBub21hZC1jb2UuZXUifQ.Z-i4Fd7MQBE8xrDQ9CqI5Xm5UXWIY4tD8uwPJIxO7Ap3oDHbAWM9JtvMSkSMxmqgJ65fgnMtwH_eKTyJWdrIHT8oSWHuCefQxERo_Hhkqj9TIdu_TM8HmmDt5bPpjTWRcwvana4oulo2BegqjwzjXQXyz2MRLI5RZjEhtXykpvjjeeKO1eSnXniLqWALWpPw9FviMJo782ibeL7b4lfgC4JK9LT6JOaRwXXi1iWfEUcjBvgmuBrXjvAmalD8j861Ez12QJq9-lLtUBnYsihOE34B_y6UCyNGtniKOCIsvVGtrgvZ3iCNZDQ-FAPBBR-i3KPHVzlEJMkiEYHtmOv6BQ", + "authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSWFFIV1YxSEJ6cmh5U3h3UmRDdkhCcUF1WVNKRzZWSEJSZXg0TW5oX293In0.eyJqdGkiOiI0YjRhZjI1ZS02MjEyLTQzMTUtOGU3Yi1mYWYyMWNhMWRmNTQiLCJleHAiOjE2OTc4NjM1NTEsIm5iZiI6MCwiaWF0IjoxNjk3ODI3NTY3LCJpc3MiOiJodHRwczovL25vbWFkLWxhYi5ldS9mYWlyZGkva2V5Y2xvYWsvYXV0aC9yZWFsbXMvZmFpcmRpX25vbWFkX3Rlc3QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNTRjYjFmNjQtZjg0ZS00ODE1LTlhZGUtNDQwY2UwYjU0MzBmIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibm9tYWRfZ3VpX2RldiIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjI5ZjQ0NThlLThkOTgtNDc1Ny1hYTNkLTU5MWMzYzg1Mjg5ZiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiVGVzdCBUZXN0ZXIiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJ0dGVzdGVyIiwiZ2l2ZW5fbmFtZSI6IlRlc3QiLCJmYW1pbHlfbmFtZSI6IlRlc3RlciIsImVtYWlsIjoidGVzdEBub21hZC1jb2UuZXUifQ.GMkVYx2Y1zEojrNIapvsZR6sXiL0v8HyyX6eQMKSnfGVgkoHons0UuBExiAFYEZrhj5Uy2gBAEin3d1wyamRo8cnTETBjrEwKMaZNAHb0kY0zkbTWyDt5raeUCYx82NUTAXXidrXHQQVvW72AU3fLzOVFh614YIgXWKsSATUH--DXVkZy786qqIFHDN6L8ho8mx0mhn0xb8vB03MzJVzcDs3ZwktkSnrPMJ9JO7-UumXnHoHjwnJYPyx19FcKhnb2ewdffBRDgKlwx6Yc_WgyZfpLtnoTJOfcP7j3307uP7KNBMfnLB-hhSjF3CYUp9qY_eBvx6gKHMCsbthx6lLxQ", "cookie": null } }, "response": { "status": 200, - "body": "# Schemas can be defined as yaml files like this. The archive.yaml format will be\n# interpreted by nomad as a nomad archive. Therefore, all definitions have to be\n# put in a top-level section called \"definitions\"\ndefinitions:\n # The \"definitions\" section is interpreted as a nomad schema package\n # Schema packages can have a name:\n name: 'Electronic Lab Notebook example schema'\n # Schema packages contain section definitions. This is where the interesting schema\n # information begins.\n sections:\n # Here we define a section called \"Chemical\":\n Chemical:\n # Section definition can have base_sections. Base sections are other schema\n # definition and all properties of these will be inherited.\n base_sections:\n - 'nomad.datamodel.metainfo.eln.Chemical' # Provides typical quantities like name, descriptions, chemical_formula and makes those available for search\n - 'nomad.datamodel.data.EntryData' # Declares this as a top-level entry section. This determines the types of entries you can create. With this we will be able to create a \"Chemical\" entry.\n # All definitions, sections, sub_sections, quantities, can provide a description.\n description: |\n This is an example description for Chemical.\n A description can contain **markdown** markup and TeX formulas, like $\\sum\\limits_{i=0}^{n}$.\n # Sections define quantities. Quantities allow to manage actual data. Quantities\n # can have various types, shapes, and units.\n quantities:\n # Here we define a quantity called \"from\"\n form:\n # This defines a Enum type with pre-defined possible values.\n type:\n type_kind: Enum\n type_data:\n - crystalline solid\n - powder\n # Annotations allow to provide additional information that is beyond just defining\n # the possible data.\n m_annotations:\n # The eln annotation allows add the quantity to a ELN\n eln:\n component: EnumEditQuantity # A form field component for EnumQuantities that uses a pull down menu.\n cas_number:\n type: str\n m_annotations:\n eln:\n component: StringEditQuantity\n ec_number:\n type: str\n m_annotations:\n eln:\n component: StringEditQuantity\n Instrument:\n base_sections:\n - nomad.datamodel.metainfo.eln.Instrument\n - nomad.datamodel.data.EntryData\n Process:\n base_section: nomad.datamodel.metainfo.eln.Process\n quantities:\n instrument:\n type: Instrument\n m_annotations:\n eln:\n component: ReferenceEditQuantity\n Sample:\n m_annotations:\n # The template annotation allows to define what freshly created entries (instances of this schema) will look like.\n # In this example we create a sample with an empty pvd_evaporation process.\n template:\n processes:\n pvd_evaporation: {}\n base_sections:\n - 'nomad.datamodel.metainfo.eln.Sample'\n - 'nomad.datamodel.data.EntryData'\n quantities:\n name:\n type: str # The simple string type\n default: Default Sample Name\n m_annotations:\n eln:\n component: StringEditQuantity # A simple text edit form field\n tags:\n type:\n type_kind: Enum\n type_data:\n - internal\n - collaboration\n - project\n - other\n shape: ['*'] # Shapes define non scalar values, like lists ['*'], vectors ['*', 3], etc.\n m_annotations:\n eln:\n component: AutocompleteEditQuantity # Allows to edit enums with an auto complete text form field\n chemicals:\n type: Chemical # Types can also be other sections. This allows to reference a different section.\n shape: ['*']\n m_annotations:\n eln:\n component: ReferenceEditQuantity # A editor component that allows to select from available \"Chemical\"s\n substrate_type:\n type:\n type_kind: Enum\n type_data:\n - Fused quartz glass\n - SLG\n - other\n m_annotations:\n eln:\n component: RadioEnumEditQuantity\n substrate_thickness:\n type: np.float64\n unit: m\n m_annotations:\n eln:\n component: NumberEditQuantity\n sample_is_from_collaboration:\n type: bool\n m_annotations:\n eln:\n component: BoolEditQuantity\n # Besides quantities, a section can define sub_sections. This allows hierarchies\n # of information.\n sub_sections:\n # Here we define a sub_section of \"Sample\" called \"processes\"\n processes:\n section:\n # The sub-section's section, is itself a section definition\n m_annotations:\n eln: # adds the sub-section to the eln and allows users to create new instances of this sub-section\n # We can also nest sub_sections. It goes aribitrarely deep.\n sub_sections:\n pvd_evaporation:\n section:\n base_sections: ['Process', 'nomad.parsing.tabular.TableData']\n m_annotations:\n # We can use the eln annotations to put the section to the overview\n # page, and hide unwanted inherited quantities.\n eln:\n overview: true\n hide: ['name', 'lab_id', 'description', 'method']\n # Plots are shown in the eln. Currently we only support simple x,y\n # line plots\n plot:\n title: Pressure and Temperature over Time\n x: time\n y:\n - chamber_pressure\n - substrate_temperature\n quantities:\n data_file:\n type: str\n description: |\n A reference to an uploaded .csv produced by the PVD evaporation instruments\n control software.\n m_annotations:\n # The tabular_parser annotation, will treat the values of this\n # quantity as files. It will try to interpret the files and fill\n # quantities in this section (and sub_section) with the column\n # data of .csv or .xlsx files. There is also a mode option that by default, is set to column.\n tabular_parser:\n sep: '\\t'\n comment: '#'\n browser:\n adaptor: RawFileAdaptor # Allows to navigate to files in the data browser\n eln:\n component: FileEditQuantity # A form field that allows to drop and select files.\n time:\n type: np.float64\n shape: ['*']\n unit: s\n m_annotations:\n # The tabular annotation defines a mapping to column headers used in\n # tabular data files\n tabular:\n name: Process Time in seconds\n chamber_pressure:\n type: np.float64\n shape: ['*']\n unit: mbar\n m_annotations:\n eln:\n defaultDisplayUnit: mbar\n tabular:\n name: Vacuum Pressure1\n plot:\n x: time\n y: chamber_pressure\n substrate_temperature:\n type: np.float64\n shape: ['*']\n unit: kelvin\n m_annotations:\n tabular:\n name: Substrate PV\n unit: degC\n plot:\n x: time\n y: substrate_temperature\n hotplate_annealing:\n section:\n base_section: Process\n m_annotations:\n # We can use the eln annotations to put the section to the overview\n # page, and hide unwanted inherited quantities.\n eln:\n overview: true\n hide: ['name', 'lab_id', 'description']\n quantities:\n set_temperature:\n type: np.float64 # For actual numbers, we use numpy datatypes\n unit: K # The unit system is based on Pint and allows all kinds of abreviations, prefixes, and complex units\n m_annotations:\n eln:\n component: NumberEditQuantity # A component to enter numbers (with units)\n duration:\n type: np.float64\n unit: s\n m_annotations:\n eln:\n component: NumberEditQuantity\n\n", + "body": "# Schemas can be defined as yaml files like this. The archive.yaml format will be\n# interpreted by nomad as a nomad archive. Therefore, all definitions have to be\n# put in a top-level section called \"definitions\"\ndefinitions:\n # The \"definitions\" section is interpreted as a nomad schema package\n # Schema packages can have a name:\n name: 'Electronic Lab Notebook example schema'\n # Schema packages contain section definitions. This is where the interesting schema\n # information begins.\n sections:\n # Here we define a section called \"Chemical\":\n Chemical:\n # Section definition can have base_sections. Base sections are other schema\n # definition and all properties of these will be inherited.\n base_sections:\n - 'nomad.datamodel.metainfo.eln.Chemical' # Provides typical quantities like name, descriptions, chemical_formula and makes those available for search\n - 'nomad.datamodel.data.EntryData' # Declares this as a top-level entry section. This determines the types of entries you can create. With this we will be able to create a \"Chemical\" entry.\n # All definitions, sections, sub_sections, quantities, can provide a description.\n description: |\n This is an example description for Chemical.\n A description can contain **markdown** markup and TeX formulas, like $\\sum\\limits_{i=0}^{n}$.\n # Sections define quantities. Quantities allow to manage actual data. Quantities\n # can have various types, shapes, and units.\n quantities:\n # Here we define a quantity called \"from\"\n form:\n # This defines a Enum type with pre-defined possible values.\n type:\n type_kind: Enum\n type_data:\n - crystalline solid\n - powder\n # Annotations allow to provide additional information that is beyond just defining\n # the possible data.\n m_annotations:\n # The eln annotation allows add the quantity to a ELN\n eln:\n component: EnumEditQuantity # A form field component for EnumQuantities that uses a pull down menu.\n cas_number:\n type: str\n m_annotations:\n eln:\n component: StringEditQuantity\n ec_number:\n type: str\n m_annotations:\n eln:\n component: StringEditQuantity\n Instrument:\n base_sections:\n - nomad.datamodel.metainfo.eln.Instrument\n - nomad.datamodel.data.EntryData\n Process:\n base_section: nomad.datamodel.metainfo.eln.Process\n quantities:\n instrument:\n type: '#/Instrument'\n m_annotations:\n eln:\n component: ReferenceEditQuantity\n Sample:\n m_annotations:\n # The template annotation allows to define what freshly created entries (instances of this schema) will look like.\n # In this example we create a sample with an empty pvd_evaporation process.\n template:\n processes:\n pvd_evaporation: {}\n eln:\n base_sections:\n - 'nomad.datamodel.metainfo.basesections.CompositeSystem'\n - 'nomad.datamodel.data.EntryData'\n quantities:\n name:\n type: str # The simple string type\n default: Default Sample Name\n m_annotations:\n eln:\n component: StringEditQuantity # A simple text edit form field\n tags:\n type:\n type_kind: Enum\n type_data:\n - internal\n - collaboration\n - project\n - other\n shape: ['*'] # Shapes define non scalar values, like lists ['*'], vectors ['*', 3], etc.\n m_annotations:\n eln:\n component: AutocompleteEditQuantity # Allows to edit enums with an auto complete text form field\n chemicals:\n type: '#/Chemical' # Types can also be other sections. This allows to reference a different section.\n shape: ['*']\n m_annotations:\n eln:\n component: ReferenceEditQuantity # A editor component that allows to select from available \"Chemical\"s\n substrate_type:\n type:\n type_kind: Enum\n type_data:\n - Fused quartz glass\n - SLG\n - other\n m_annotations:\n eln:\n component: RadioEnumEditQuantity\n substrate_thickness:\n type: np.float64\n unit: m\n m_annotations:\n eln:\n component: NumberEditQuantity\n sample_is_from_collaboration:\n type: bool\n m_annotations:\n eln:\n component: BoolEditQuantity\n # Besides quantities, a section can define sub_sections. This allows hierarchies\n # of information.\n sub_sections:\n # Here we define a sub_section of \"Sample\" called \"processes\"\n processes:\n section:\n # The sub-section's section, is itself a section definition\n m_annotations:\n eln: # adds the sub-section to the eln and allows users to create new instances of this sub-section\n # We can also nest sub_sections. It goes aribitrarely deep.\n sub_sections:\n pvd_evaporation:\n section:\n base_sections: ['Process', 'nomad.parsing.tabular.TableData', 'nomad.datamodel.metainfo.plot.PlotSection']\n m_annotations:\n # We can use the eln annotations to put the section to the overview\n # page, and hide unwanted inherited quantities.\n eln:\n overview: true\n hide: ['name', 'lab_id', 'description', 'method']\n # Plots are shown in the eln. Currently we only support simple x,y\n # line plots\n plotly_graph_object:\n - data:\n - x: \"#time\"\n y: \"#chamber_pressure\"\n - x: \"#time\"\n y: \"#substrate_temperature\"\n yaxis: y2\n layout:\n title:\n text: Pressure and Temperature over Time\n yaxis2:\n overlaying: y\n side: right\n - data:\n x: \"#time\"\n y: \"#chamber_pressure\"\n - data:\n x: \"#time\"\n y: \"#substrate_temperature\"\n quantities:\n data_file:\n type: str\n description: |\n A reference to an uploaded .csv produced by the PVD evaporation instruments\n control software.\n m_annotations:\n # The tabular_parser annotation, will treat the values of this\n # quantity as files. It will try to interpret the files and fill\n # quantities in this section (and sub_section) with the column\n # data of .csv or .xlsx files. There is also a mode option that by default, is set to column.\n tabular_parser:\n parsing_options:\n comment: '#'\n sep: '\\t'\n mapping_options:\n - mapping_mode: column\n file_mode: current_entry\n sections:\n - '#root'\n browser:\n adaptor: RawFileAdaptor # Allows to navigate to files in the data browser\n eln:\n component: FileEditQuantity # A form field that allows to drop and select files.\n time:\n type: np.float64\n shape: ['*']\n unit: s\n m_annotations:\n # The tabular annotation defines a mapping to column headers used in\n # tabular data files\n tabular:\n name: Process Time in seconds\n chamber_pressure:\n type: np.float64\n shape: ['*']\n unit: mbar\n m_annotations:\n eln:\n # component: NumberEditQuantity\n # defaultDisplayUnit: mbar ## MUST NOT BE AN ARRAY FOR THIS https://gitlab.mpcdf.mpg.de/nomad-lab/nomad-FAIR/-/issues/932\n tabular:\n name: Vacuum Pressure1\n substrate_temperature:\n type: np.float64\n shape: ['*']\n unit: kelvin\n m_annotations:\n tabular:\n name: Substrate PV\n unit: degC\n hotplate_annealing:\n section:\n base_section: Process\n m_annotations:\n # We can use the eln annotations to put the section to the overview\n # page, and hide unwanted inherited quantities.\n eln:\n overview: true\n hide: ['name', 'lab_id', 'description']\n quantities:\n set_temperature:\n type: np.float64 # For actual numbers, we use numpy datatypes\n unit: K # The unit system is based on Pint and allows all kinds of abreviations, prefixes, and complex units\n m_annotations:\n eln:\n component: NumberEditQuantity # A component to enter numbers (with units)\n duration:\n type: np.float64\n unit: s\n m_annotations:\n eln:\n component: NumberEditQuantity\n\n", "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-disposition": "attatchment; filename=\"schema.archive.yaml\"", + "content-disposition": "attachment; filename=\"schema.archive.yaml\"", "content-type": "application/octet-stream", "server": "uvicorn", "transfer-encoding": "chunked" diff --git a/gui/tests/data/search/searchpage.json b/gui/tests/data/search/searchpage.json index f48c7e48a6ec50e62ab96f6cdcd5986f5332fde5..84e64b9318dd937b9b231eb6214d4992443a1ac4 100644 --- a/gui/tests/data/search/searchpage.json +++ b/gui/tests/data/search/searchpage.json @@ -36,7 +36,7 @@ "page_size": 20, "order_by": "upload_create_time", "order": "desc", - "total": 5 + "total": 15 }, "required": { "exclude": [ @@ -47,10 +47,10 @@ }, "data": [ { - "upload_id": "A-1gerweRKOSzhzOnLn60w", + "upload_id": "l1h8M0AWQp2sxCZoavf7Vg", "parser_name": "parsers/vasp", "origin": "Markus Scheidgen", - "calc_id": "qgKHLISrSPqW2sIHLSqOhg", + "calc_id": "n467IWj4QFWGr7S8EBneGg", "published": true, "writers": [ { @@ -60,7 +60,7 @@ ], "datasets": [], "n_quantities": 0, - "upload_create_time": "2023-01-24T07:45:52.706229+00:00", + "upload_create_time": "2023-10-16T13:56:09.514868+00:00", "processed": true, "mainfile": "upload/archive.json", "main_author": { @@ -73,8 +73,8 @@ "name": "Markus Scheidgen" } ], - "entry_create_time": "2023-01-24T07:45:52.714229+00:00", - "publish_time": "2023-01-24T07:45:52.709229+00:00", + "entry_create_time": "2023-10-16T13:56:09.521868+00:00", + "publish_time": "2023-10-16T13:56:09.517868+00:00", "with_embargo": false, "domain": "dft", "results": { @@ -99,12 +99,142 @@ "material_name": "perovskite", "chemical_formula_hill": "CH6I3NPb" }, + "method": {}, + "properties": { + "optoelectronic": { + "solar_cell": { + "absorber_fabrication": [ + "Spin-coating" + ], + "efficiency": 15.9, + "device_stack": [ + "SLG", + "ITO", + "PEDOT:PSS", + "Perovskite", + "PCBM-60", + "BCP", + "Ag" + ], + "short_circuit_current_density": 203, + "hole_transport_layer": [ + "PEDOT:PSS" + ], + "fill_factor": 0.78, + "illumination_intensity": 1000, + "electron_transport_layer": [ + "PCBM-60", + "BCP" + ], + "device_area": 0.0000125, + "back_contact": [ + "Ag" + ], + "absorber": [ + "MAPbI" + ], + "open_circuit_voltage": 1, + "substrate": [ + "SLG", + "ITO" + ], + "device_architecture": "pin" + } + }, + "available_properties": [ + "band_structure_electronic", + "electronic.band_structure_electronic.band_gap", + "solar_cell" + ], + "electronic": { + "band_structure_electronic": [ + { + "band_gap": [ + { + "value": 2.5634826144e-19 + } + ] + } + ] + } + } + }, + "entry_id": "n467IWj4QFWGr7S8EBneGg", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "license": "CC BY 4.0" + }, + { + "upload_id": "l1h8M0AWQp2sxCZoavf7Vg", + "parser_name": "parsers/vasp", + "origin": "Markus Scheidgen", + "calc_id": "eWQ35GCSR7itWrH9oYkWIg", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "n_quantities": 0, + "upload_create_time": "2023-10-16T13:56:09.514868+00:00", + "processed": true, + "mainfile": "upload/archive.json", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:56:09.518868+00:00", + "publish_time": "2023-10-16T13:56:09.517868+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": { + "elements": [ + "C", + "H" + ], + "elements_exclusive": "C H", + "chemical_formula_anonymous": "AB2", + "material_id": "test_material_id", + "structural_type": "molecule / cluster", + "chemical_formula_reduced": "CH3", + "n_elements": 2, + "chemical_formula_descriptive": "CH3", + "chemical_formula_hill": "CH3" + }, "method": { - "method_name": "EELS" + "simulation": { + "program_version": "not processed", + "dft": { + "basis_set_type": "unavailable", + "core_electron_treatment": "unavailable", + "xc_functional_type": "not processed", + "xc_functional_names": [ + "GGA_X_PBE_SOL", + "GGA_C_PBE_SOL" + ], + "jacobs_ladder": "not processed" + }, + "program_name": "VASP" + } }, - "properties": {} + "properties": { + "available_properties": [] + } }, - "entry_id": "qgKHLISrSPqW2sIHLSqOhg", + "entry_id": "eWQ35GCSR7itWrH9oYkWIg", "authors": [ { "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", @@ -114,10 +244,10 @@ "license": "CC BY 4.0" }, { - "upload_id": "A-1gerweRKOSzhzOnLn60w", + "upload_id": "l1h8M0AWQp2sxCZoavf7Vg", "parser_name": "parsers/vasp", "origin": "Markus Scheidgen", - "calc_id": "ZxkuBlp6Rx65w8W8Inr-AA", + "calc_id": "Z70j6Ab4QW6wq3x45nGsGQ", "published": true, "writers": [ { @@ -127,7 +257,7 @@ ], "datasets": [], "n_quantities": 0, - "upload_create_time": "2023-01-24T07:45:52.706229+00:00", + "upload_create_time": "2023-10-16T13:56:09.514868+00:00", "processed": true, "mainfile": "upload/archive.json", "main_author": { @@ -140,8 +270,8 @@ "name": "Markus Scheidgen" } ], - "entry_create_time": "2023-01-24T07:45:52.711229+00:00", - "publish_time": "2023-01-24T07:45:52.709229+00:00", + "entry_create_time": "2023-10-16T13:56:09.519868+00:00", + "publish_time": "2023-10-16T13:56:09.517868+00:00", "with_embargo": false, "domain": "dft", "results": { @@ -168,14 +298,17 @@ "xc_functional_names": [ "LDA_X_PZ", "LDA_C_PZ" - ] + ], + "jacobs_ladder": "not processed" }, "program_name": "exciting" } }, - "properties": {} + "properties": { + "available_properties": [] + } }, - "entry_id": "ZxkuBlp6Rx65w8W8Inr-AA", + "entry_id": "Z70j6Ab4QW6wq3x45nGsGQ", "authors": [ { "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", @@ -185,10 +318,10 @@ "license": "CC BY 4.0" }, { - "upload_id": "A-1gerweRKOSzhzOnLn60w", + "upload_id": "l1h8M0AWQp2sxCZoavf7Vg", "parser_name": "parsers/vasp", "origin": "Markus Scheidgen", - "calc_id": "OGB9z0aGTACQopmv9rE0-w", + "calc_id": "YCXRUIbWSvuJlfEhY8tAwA", "published": true, "writers": [ { @@ -198,7 +331,7 @@ ], "datasets": [], "n_quantities": 0, - "upload_create_time": "2023-01-24T07:45:52.706229+00:00", + "upload_create_time": "2023-10-16T13:56:09.514868+00:00", "processed": true, "mainfile": "upload/archive.json", "main_author": { @@ -211,8 +344,8 @@ "name": "Markus Scheidgen" } ], - "entry_create_time": "2023-01-24T07:45:52.712229+00:00", - "publish_time": "2023-01-24T07:45:52.709229+00:00", + "entry_create_time": "2023-10-16T13:56:09.520868+00:00", + "publish_time": "2023-10-16T13:56:09.517868+00:00", "with_embargo": false, "domain": "dft", "results": { @@ -243,14 +376,17 @@ "xc_functional_names": [ "GGA_X_PBE_SOL", "GGA_C_PBE_SOL" - ] + ], + "jacobs_ladder": "not processed" }, "program_name": "VASP" } }, - "properties": {} + "properties": { + "available_properties": [] + } }, - "entry_id": "OGB9z0aGTACQopmv9rE0-w", + "entry_id": "YCXRUIbWSvuJlfEhY8tAwA", "authors": [ { "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", @@ -260,10 +396,10 @@ "license": "CC BY 4.0" }, { - "upload_id": "A-1gerweRKOSzhzOnLn60w", + "upload_id": "l1h8M0AWQp2sxCZoavf7Vg", "parser_name": "parsers/vasp", "origin": "Markus Scheidgen", - "calc_id": "OANUVbE6Q6m-cDZsUowxwQ", + "calc_id": "23_DfDutQF2OvB64Y361bg", "published": true, "writers": [ { @@ -273,7 +409,7 @@ ], "datasets": [], "n_quantities": 0, - "upload_create_time": "2023-01-24T07:45:52.706229+00:00", + "upload_create_time": "2023-10-16T13:56:09.514868+00:00", "processed": true, "mainfile": "upload/archive.json", "main_author": { @@ -286,24 +422,96 @@ "name": "Markus Scheidgen" } ], - "entry_create_time": "2023-01-24T07:45:52.710229+00:00", - "publish_time": "2023-01-24T07:45:52.709229+00:00", + "entry_create_time": "2023-10-16T13:56:09.522868+00:00", + "publish_time": "2023-10-16T13:56:09.517868+00:00", "with_embargo": false, "domain": "dft", "results": { "material": { + "functional_type": [ + "semiconductor", + "solar cell" + ], "elements": [ "C", - "H" + "H", + "I", + "N", + "Pb" ], - "elements_exclusive": "C H", - "chemical_formula_anonymous": "AB2", + "elements_exclusive": "C H I N Pb", "material_id": "test_material_id", - "structural_type": "molecule / cluster", - "chemical_formula_reduced": "CH3", - "n_elements": 2, - "chemical_formula_descriptive": "CH3", - "chemical_formula_hill": "CH3" + "structural_type": "bulk", + "chemical_formula_reduced": "H6Pb1C1I3N1", + "n_elements": 5, + "chemical_formula_descriptive": "MAPbI3", + "material_name": "perovskite", + "chemical_formula_hill": "CH6I3NPb" + }, + "method": { + "method_name": "EELS" + }, + "properties": { + "available_properties": [] + } + }, + "entry_id": "23_DfDutQF2OvB64Y361bg", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "license": "CC BY 4.0" + }, + { + "upload_id": "iG8xjpHjS8GKltt3vLssdg", + "parser_name": "parsers/vasp", + "origin": "Markus Scheidgen", + "calc_id": "fFgUgBWZRseVNU5xSssHIQ", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "n_quantities": 0, + "upload_create_time": "2023-10-16T13:53:06.120628+00:00", + "processed": true, + "mainfile": "upload/archive.json", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:53:06.126628+00:00", + "publish_time": "2023-10-16T13:53:06.123628+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": { + "elements": [ + "Hf", + "Nb", + "Ta", + "Ti", + "Zr" + ], + "elements_exclusive": "Hf Nb Ta Ti Zr", + "chemical_formula_anonymous": "ABCDE", + "material_id": "aLzu5XmhATsTfEA4sGIiL45caCMq", + "structural_type": "bulk", + "chemical_formula_reduced": "HfNbTaTiZr", + "n_elements": 5, + "chemical_formula_descriptive": "HfNbTaTiZr", + "chemical_formula_hill": "HfNbTaTiZr" }, "method": { "simulation": { @@ -315,14 +523,17 @@ "xc_functional_names": [ "GGA_X_PBE_SOL", "GGA_C_PBE_SOL" - ] + ], + "jacobs_ladder": "not processed" }, "program_name": "VASP" } }, - "properties": {} + "properties": { + "available_properties": [] + } }, - "entry_id": "OANUVbE6Q6m-cDZsUowxwQ", + "entry_id": "fFgUgBWZRseVNU5xSssHIQ", "authors": [ { "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", @@ -332,10 +543,10 @@ "license": "CC BY 4.0" }, { - "upload_id": "A-1gerweRKOSzhzOnLn60w", + "upload_id": "iG8xjpHjS8GKltt3vLssdg", "parser_name": "parsers/vasp", "origin": "Markus Scheidgen", - "calc_id": "HEO8zWoEQaihNcJpFa7Htw", + "calc_id": "cwZ4FT1aTWKUrgasGR-8MQ", "published": true, "writers": [ { @@ -345,7 +556,7 @@ ], "datasets": [], "n_quantities": 0, - "upload_create_time": "2023-01-24T07:45:52.706229+00:00", + "upload_create_time": "2023-10-16T13:53:06.120628+00:00", "processed": true, "mainfile": "upload/archive.json", "main_author": { @@ -358,47 +569,265 @@ "name": "Markus Scheidgen" } ], - "entry_create_time": "2023-01-24T07:45:52.713229+00:00", - "publish_time": "2023-01-24T07:45:52.709229+00:00", + "entry_create_time": "2023-10-16T13:53:06.125628+00:00", + "publish_time": "2023-10-16T13:53:06.123628+00:00", "with_embargo": false, "domain": "dft", "results": { "material": { - "functional_type": [ - "semiconductor", - "solar cell" - ], "elements": [ - "C", - "H", - "I", - "N", - "Pb" + "C" ], - "elements_exclusive": "C H I N Pb", - "material_id": "test_material_id", - "structural_type": "bulk", - "chemical_formula_reduced": "H6Pb1C1I3N1", - "n_elements": 5, - "chemical_formula_descriptive": "MAPbI3", - "material_name": "perovskite", - "chemical_formula_hill": "CH6I3NPb" + "elements_exclusive": "C", + "chemical_formula_anonymous": "A", + "material_id": "jPcWsq-Rb0gtgx2krJDmLvQUxpcL", + "structural_type": "2D", + "chemical_formula_reduced": "C", + "n_elements": 1, + "chemical_formula_descriptive": "C", + "chemical_formula_hill": "C" }, - "method": {}, - "properties": { - "optoelectronic": { - "solar_cell": { - "absorber_fabrication": [ - "Spin-coating" - ], - "efficiency": 15.9, - "device_stack": [ - "SLG", - "ITO", - "PEDOT:PSS", - "Perovskite", - "PCBM-60", - "BCP", + "method": { + "simulation": { + "program_version": "not processed", + "dft": { + "basis_set_type": "unavailable", + "core_electron_treatment": "unavailable", + "xc_functional_type": "not processed", + "xc_functional_names": [ + "LDA_X_PZ", + "LDA_C_PZ" + ], + "jacobs_ladder": "not processed" + }, + "program_name": "exciting" + } + }, + "properties": { + "available_properties": [] + } + }, + "entry_id": "cwZ4FT1aTWKUrgasGR-8MQ", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "license": "CC BY 4.0" + }, + { + "upload_id": "iG8xjpHjS8GKltt3vLssdg", + "parser_name": "parsers/vasp", + "origin": "Markus Scheidgen", + "calc_id": "WbIJYsArR4e02KlSsvfS8A", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "n_quantities": 0, + "upload_create_time": "2023-10-16T13:53:06.120628+00:00", + "processed": true, + "mainfile": "upload/archive.json", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:53:06.128628+00:00", + "publish_time": "2023-10-16T13:53:06.123628+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": { + "functional_type": [ + "semiconductor", + "solar cell" + ], + "elements": [ + "C", + "H", + "I", + "N", + "Pb" + ], + "elements_exclusive": "C H I N Pb", + "material_id": "test_material_id", + "structural_type": "bulk", + "chemical_formula_reduced": "H6Pb1C1I3N1", + "n_elements": 5, + "chemical_formula_descriptive": "MAPbI3", + "material_name": "perovskite", + "chemical_formula_hill": "CH6I3NPb" + }, + "method": { + "method_name": "EELS" + }, + "properties": { + "available_properties": [] + } + }, + "entry_id": "WbIJYsArR4e02KlSsvfS8A", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "license": "CC BY 4.0" + }, + { + "upload_id": "iG8xjpHjS8GKltt3vLssdg", + "parser_name": "parsers/vasp", + "origin": "Markus Scheidgen", + "calc_id": "DEwHOiivSXWnvf1kvFP97Q", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "n_quantities": 0, + "upload_create_time": "2023-10-16T13:53:06.120628+00:00", + "processed": true, + "mainfile": "upload/archive.json", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:53:06.124628+00:00", + "publish_time": "2023-10-16T13:53:06.123628+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": { + "elements": [ + "C", + "H" + ], + "elements_exclusive": "C H", + "chemical_formula_anonymous": "AB2", + "material_id": "test_material_id", + "structural_type": "molecule / cluster", + "chemical_formula_reduced": "CH3", + "n_elements": 2, + "chemical_formula_descriptive": "CH3", + "chemical_formula_hill": "CH3" + }, + "method": { + "simulation": { + "program_version": "not processed", + "dft": { + "basis_set_type": "unavailable", + "core_electron_treatment": "unavailable", + "xc_functional_type": "not processed", + "xc_functional_names": [ + "GGA_X_PBE_SOL", + "GGA_C_PBE_SOL" + ], + "jacobs_ladder": "not processed" + }, + "program_name": "VASP" + } + }, + "properties": { + "available_properties": [] + } + }, + "entry_id": "DEwHOiivSXWnvf1kvFP97Q", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "license": "CC BY 4.0" + }, + { + "upload_id": "iG8xjpHjS8GKltt3vLssdg", + "parser_name": "parsers/vasp", + "origin": "Markus Scheidgen", + "calc_id": "3EKfNwf_SUm81tmFz4I6gA", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "n_quantities": 0, + "upload_create_time": "2023-10-16T13:53:06.120628+00:00", + "processed": true, + "mainfile": "upload/archive.json", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:53:06.127628+00:00", + "publish_time": "2023-10-16T13:53:06.123628+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": { + "functional_type": [ + "semiconductor", + "solar cell" + ], + "elements": [ + "C", + "H", + "I", + "N", + "Pb" + ], + "elements_exclusive": "C H I N Pb", + "material_id": "test_material_id", + "structural_type": "bulk", + "chemical_formula_reduced": "H6Pb1C1I3N1", + "n_elements": 5, + "chemical_formula_descriptive": "MAPbI3", + "material_name": "perovskite", + "chemical_formula_hill": "CH6I3NPb" + }, + "method": {}, + "properties": { + "optoelectronic": { + "solar_cell": { + "absorber_fabrication": [ + "Spin-coating" + ], + "efficiency": 15.9, + "device_stack": [ + "SLG", + "ITO", + "PEDOT:PSS", + "Perovskite", + "PCBM-60", + "BCP", "Ag" ], "short_circuit_current_density": 203, @@ -427,8 +856,9 @@ } }, "available_properties": [ - "solar_cell", - "electronic.band_structure_electronic.band_gap" + "band_structure_electronic", + "electronic.band_structure_electronic.band_gap", + "solar_cell" ], "electronic": { "band_structure_electronic": [ @@ -443,7 +873,7 @@ } } }, - "entry_id": "HEO8zWoEQaihNcJpFa7Htw", + "entry_id": "3EKfNwf_SUm81tmFz4I6gA", "authors": [ { "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", @@ -451,177 +881,431 @@ } ], "license": "CC BY 4.0" - } - ] - }, - "headers": { - "connection": "close", - "content-length": "12058", - "content-type": "application/json", - "server": "uvicorn" - } - } - }, - { - "request": { - "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/query", - "method": "POST", - "body": { - "owner": "visible", - "query": {}, - "aggregations": { - "results.material.elements:default": { - "terms": { - "exclude_from_search": false, - "update": true, - "size": 119, - "type": "terms", - "changed": true, - "quantity": "results.material.elements" - } }, - "results.material.n_elements:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "interval": 1, - "changed": true, - "quantity": "results.material.n_elements" - } - } - }, - "pagination": { - "page_size": 0 - }, - "required": { - "include": [] - } - }, - "headers": { - "accept": "application/json, text/plain, */*", - "content-type": "application/json", - "cookie": null - } - }, - "response": { - "status": 200, - "body": { - "owner": "visible", - "query": {}, - "pagination": { - "page_size": 0, - "order_by": "entry_id", - "order": "asc", - "total": 5 - }, - "required": { - "include": [ - "entry_id" - ] - }, - "aggregations": { - "results.material.elements:default": { - "terms": { - "quantity": "results.material.elements", - "exclude_from_search": false, - "metrics": [], - "size": 119, - "data": [ - { - "count": 4, - "nested_count": 4, - "value": "C" - }, - { - "count": 3, - "nested_count": 3, - "value": "H" - }, - { - "count": 2, - "nested_count": 2, - "value": "I" - }, - { - "count": 2, - "nested_count": 2, - "value": "N" - }, - { - "count": 2, - "nested_count": 2, - "value": "Pb" - }, - { - "count": 1, - "nested_count": 1, - "value": "Hf" - }, - { - "count": 1, - "nested_count": 1, - "value": "Nb" - }, - { - "count": 1, - "nested_count": 1, - "value": "Ta" - }, - { - "count": 1, - "nested_count": 1, - "value": "Ti" - }, - { - "count": 1, - "nested_count": 1, - "value": "Zr" + { + "upload_id": "OtdaNHWXQKClDFSvTjQFFA", + "parser_name": "parsers/vasp", + "origin": "Markus Scheidgen", + "calc_id": "zjAqfFjvS8izr4M55hNbVA", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "n_quantities": 0, + "upload_create_time": "2023-10-16T13:31:25.648139+00:00", + "processed": true, + "mainfile": "upload/archive.json", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:31:25.652139+00:00", + "publish_time": "2023-10-16T13:31:25.651139+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": { + "elements": [ + "C", + "H" + ], + "elements_exclusive": "C H", + "chemical_formula_anonymous": "AB2", + "material_id": "test_material_id", + "structural_type": "molecule / cluster", + "chemical_formula_reduced": "CH3", + "n_elements": 2, + "chemical_formula_descriptive": "CH3", + "chemical_formula_hill": "CH3" + }, + "method": { + "simulation": { + "program_version": "not processed", + "dft": { + "basis_set_type": "unavailable", + "core_electron_treatment": "unavailable", + "xc_functional_type": "not processed", + "xc_functional_names": [ + "GGA_X_PBE_SOL", + "GGA_C_PBE_SOL" + ], + "jacobs_ladder": "not processed" + }, + "program_name": "VASP" } - ] - } + }, + "properties": { + "available_properties": [] + } + }, + "entry_id": "zjAqfFjvS8izr4M55hNbVA", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "license": "CC BY 4.0" }, - "results.material.n_elements:default_histogram": { - "histogram": { - "quantity": "results.material.n_elements", - "exclude_from_search": true, - "metrics": [], - "interval": 1, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": 1 + { + "upload_id": "OtdaNHWXQKClDFSvTjQFFA", + "parser_name": "parsers/vasp", + "origin": "Markus Scheidgen", + "calc_id": "OsROhDnxTuShX95957NWmQ", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "n_quantities": 0, + "upload_create_time": "2023-10-16T13:31:25.648139+00:00", + "processed": true, + "mainfile": "upload/archive.json", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:31:25.655139+00:00", + "publish_time": "2023-10-16T13:31:25.651139+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": { + "functional_type": [ + "semiconductor", + "solar cell" + ], + "elements": [ + "C", + "H", + "I", + "N", + "Pb" + ], + "elements_exclusive": "C H I N Pb", + "material_id": "test_material_id", + "structural_type": "bulk", + "chemical_formula_reduced": "H6Pb1C1I3N1", + "n_elements": 5, + "chemical_formula_descriptive": "MAPbI3", + "material_name": "perovskite", + "chemical_formula_hill": "CH6I3NPb" + }, + "method": {}, + "properties": { + "optoelectronic": { + "solar_cell": { + "absorber_fabrication": [ + "Spin-coating" + ], + "efficiency": 15.9, + "device_stack": [ + "SLG", + "ITO", + "PEDOT:PSS", + "Perovskite", + "PCBM-60", + "BCP", + "Ag" + ], + "short_circuit_current_density": 203, + "hole_transport_layer": [ + "PEDOT:PSS" + ], + "fill_factor": 0.78, + "illumination_intensity": 1000, + "electron_transport_layer": [ + "PCBM-60", + "BCP" + ], + "device_area": 0.0000125, + "back_contact": [ + "Ag" + ], + "absorber": [ + "MAPbI" + ], + "open_circuit_voltage": 1, + "substrate": [ + "SLG", + "ITO" + ], + "device_architecture": "pin" + } }, - { - "count": 1, - "nested_count": 1, - "value": 2 - }, - { - "count": 0, - "nested_count": 0, - "value": 3 - }, - { - "count": 0, - "nested_count": 0, - "value": 4 - }, - { - "count": 3, - "nested_count": 3, - "value": 5 + "available_properties": [ + "band_structure_electronic", + "electronic.band_structure_electronic.band_gap", + "solar_cell" + ], + "electronic": { + "band_structure_electronic": [ + { + "band_gap": [ + { + "value": 2.5634826144e-19 + } + ] + } + ] } - ] - } + } + }, + "entry_id": "OsROhDnxTuShX95957NWmQ", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "license": "CC BY 4.0" + }, + { + "upload_id": "OtdaNHWXQKClDFSvTjQFFA", + "parser_name": "parsers/vasp", + "origin": "Markus Scheidgen", + "calc_id": "AHTw3P8HQp2f-AqBhMwsfg", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "n_quantities": 0, + "upload_create_time": "2023-10-16T13:31:25.648139+00:00", + "processed": true, + "mainfile": "upload/archive.json", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:31:25.656139+00:00", + "publish_time": "2023-10-16T13:31:25.651139+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": { + "functional_type": [ + "semiconductor", + "solar cell" + ], + "elements": [ + "C", + "H", + "I", + "N", + "Pb" + ], + "elements_exclusive": "C H I N Pb", + "material_id": "test_material_id", + "structural_type": "bulk", + "chemical_formula_reduced": "H6Pb1C1I3N1", + "n_elements": 5, + "chemical_formula_descriptive": "MAPbI3", + "material_name": "perovskite", + "chemical_formula_hill": "CH6I3NPb" + }, + "method": { + "method_name": "EELS" + }, + "properties": { + "available_properties": [] + } + }, + "entry_id": "AHTw3P8HQp2f-AqBhMwsfg", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "license": "CC BY 4.0" + }, + { + "upload_id": "OtdaNHWXQKClDFSvTjQFFA", + "parser_name": "parsers/vasp", + "origin": "Markus Scheidgen", + "calc_id": "594a3xUuQf6I0kTXQ_nIuQ", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "n_quantities": 0, + "upload_create_time": "2023-10-16T13:31:25.648139+00:00", + "processed": true, + "mainfile": "upload/archive.json", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:31:25.653139+00:00", + "publish_time": "2023-10-16T13:31:25.651139+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": { + "elements": [ + "C" + ], + "elements_exclusive": "C", + "chemical_formula_anonymous": "A", + "material_id": "jPcWsq-Rb0gtgx2krJDmLvQUxpcL", + "structural_type": "2D", + "chemical_formula_reduced": "C", + "n_elements": 1, + "chemical_formula_descriptive": "C", + "chemical_formula_hill": "C" + }, + "method": { + "simulation": { + "program_version": "not processed", + "dft": { + "basis_set_type": "unavailable", + "core_electron_treatment": "unavailable", + "xc_functional_type": "not processed", + "xc_functional_names": [ + "LDA_X_PZ", + "LDA_C_PZ" + ], + "jacobs_ladder": "not processed" + }, + "program_name": "exciting" + } + }, + "properties": { + "available_properties": [] + } + }, + "entry_id": "594a3xUuQf6I0kTXQ_nIuQ", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "license": "CC BY 4.0" + }, + { + "upload_id": "OtdaNHWXQKClDFSvTjQFFA", + "parser_name": "parsers/vasp", + "origin": "Markus Scheidgen", + "calc_id": "2EYt_ri_Tpmsf-QLVtfRIg", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "n_quantities": 0, + "upload_create_time": "2023-10-16T13:31:25.648139+00:00", + "processed": true, + "mainfile": "upload/archive.json", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:31:25.654139+00:00", + "publish_time": "2023-10-16T13:31:25.651139+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": { + "elements": [ + "Hf", + "Nb", + "Ta", + "Ti", + "Zr" + ], + "elements_exclusive": "Hf Nb Ta Ti Zr", + "chemical_formula_anonymous": "ABCDE", + "material_id": "aLzu5XmhATsTfEA4sGIiL45caCMq", + "structural_type": "bulk", + "chemical_formula_reduced": "HfNbTaTiZr", + "n_elements": 5, + "chemical_formula_descriptive": "HfNbTaTiZr", + "chemical_formula_hill": "HfNbTaTiZr" + }, + "method": { + "simulation": { + "program_version": "not processed", + "dft": { + "basis_set_type": "unavailable", + "core_electron_treatment": "unavailable", + "xc_functional_type": "not processed", + "xc_functional_names": [ + "GGA_X_PBE_SOL", + "GGA_C_PBE_SOL" + ], + "jacobs_ladder": "not processed" + }, + "program_name": "VASP" + } + }, + "properties": { + "available_properties": [] + } + }, + "entry_id": "2EYt_ri_Tpmsf-QLVtfRIg", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "license": "CC BY 4.0" } - }, - "data": [] + ] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "2312", + "content-length": "36744", "content-type": "application/json", "server": "uvicorn" } @@ -635,47 +1319,197 @@ "owner": "visible", "query": {}, "aggregations": { - "results.material.structural_type:scroll": { + "results.material.elements:default": { "terms": { - "exclude_from_search": true, + "exclude_from_search": false, "update": true, - "size": 6, + "size": 119, "type": "terms", - "include": [ - "bulk", - "surface", - "2D", - "1D", - "molecule / cluster", - "atom" - ], "changed": true, - "quantity": "results.material.structural_type" + "quantity": "results.material.elements" } }, - "results.material.symmetry.bravais_lattice:scroll": { + "results.material.n_elements:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "interval": 1, + "changed": true, + "quantity": "results.material.n_elements" + } + } + }, + "pagination": { + "page_size": 0 + }, + "required": { + "include": [] + } + }, + "headers": { + "accept": "application/json, text/plain, */*", + "content-type": "application/json", + "cookie": null + } + }, + "response": { + "status": 200, + "body": { + "owner": "visible", + "query": {}, + "pagination": { + "page_size": 0, + "order_by": "entry_id", + "order": "asc", + "total": 15 + }, + "required": { + "include": [ + "entry_id" + ] + }, + "aggregations": { + "results.material.elements:default": { + "terms": { + "quantity": "results.material.elements", + "exclude_from_search": false, + "metrics": [], + "size": 119, + "data": [ + { + "count": 12, + "nested_count": 12, + "value": "C" + }, + { + "count": 9, + "nested_count": 9, + "value": "H" + }, + { + "count": 6, + "nested_count": 6, + "value": "I" + }, + { + "count": 6, + "nested_count": 6, + "value": "N" + }, + { + "count": 6, + "nested_count": 6, + "value": "Pb" + }, + { + "count": 3, + "nested_count": 3, + "value": "Hf" + }, + { + "count": 3, + "nested_count": 3, + "value": "Nb" + }, + { + "count": 3, + "nested_count": 3, + "value": "Ta" + }, + { + "count": 3, + "nested_count": 3, + "value": "Ti" + }, + { + "count": 3, + "nested_count": 3, + "value": "Zr" + } + ] + } + }, + "results.material.n_elements:default_histogram": { + "histogram": { + "quantity": "results.material.n_elements", + "exclude_from_search": true, + "metrics": [], + "interval": 1, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": 1 + }, + { + "count": 3, + "nested_count": 3, + "value": 2 + }, + { + "count": 2, + "nested_count": 2, + "value": 3 + }, + { + "count": 0, + "nested_count": 0, + "value": 4 + }, + { + "count": 9, + "nested_count": 9, + "value": 5 + } + ] + } + } + }, + "data": [] + }, + "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", + "connection": "close", + "content-length": "2315", + "content-type": "application/json", + "server": "uvicorn" + } + } + }, + { + "request": { + "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/query", + "method": "POST", + "body": { + "owner": "visible", + "query": {}, + "aggregations": { + "results.material.structural_type:scroll": { "terms": { "exclude_from_search": true, "update": true, - "size": 14, + "size": 6, "type": "terms", "include": [ - "aP", - "mP", - "mS", - "oP", - "oS", - "oF", - "oI", - "tP", - "tI", - "hP", - "hR", - "cP", - "cF", - "cI" + "bulk", + "surface", + "2D", + "1D", + "molecule / cluster", + "atom" ], "changed": true, + "quantity": "results.material.structural_type" + } + }, + "results.material.symmetry.bravais_lattice:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, "quantity": "results.material.symmetry.bravais_lattice" } }, @@ -683,17 +1517,8 @@ "terms": { "exclude_from_search": true, "update": true, - "size": 7, + "size": 5, "type": "terms", - "include": [ - "triclinic", - "monoclinic", - "orthorhombic", - "tetragonal", - "trigonal", - "hexagonal", - "cubic" - ], "changed": true, "quantity": "results.material.symmetry.crystal_system" } @@ -704,6 +1529,25 @@ "update": true, "size": 5, "type": "terms", + "include": [ + "4-member ring", + "Heusler", + "bcc", + "bct", + "bct5", + "clathrate", + "cuprite", + "diamond", + "fcc", + "fct", + "half-Heusler", + "hcp", + "perovskite", + "rock salt", + "simple cubic", + "wurtzite", + "zincblende" + ], "changed": true, "quantity": "results.material.symmetry.structure_name" } @@ -741,7 +1585,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 5 + "total": 15 }, "required": { "include": [ @@ -765,18 +1609,18 @@ ], "data": [ { - "count": 3, - "nested_count": 3, + "count": 9, + "nested_count": 9, "value": "bulk" }, { - "count": 1, - "nested_count": 1, + "count": 3, + "nested_count": 3, "value": "2D" }, { - "count": 1, - "nested_count": 1, + "count": 3, + "nested_count": 3, "value": "molecule / cluster" } ] @@ -787,23 +1631,7 @@ "quantity": "results.material.symmetry.bravais_lattice", "exclude_from_search": true, "metrics": [], - "size": 14, - "include": [ - "aP", - "mP", - "mS", - "oP", - "oS", - "oF", - "oI", - "tP", - "tI", - "hP", - "hR", - "cP", - "cF", - "cI" - ], + "size": 5, "data": [] } }, @@ -812,16 +1640,7 @@ "quantity": "results.material.symmetry.crystal_system", "exclude_from_search": true, "metrics": [], - "size": 7, - "include": [ - "triclinic", - "monoclinic", - "orthorhombic", - "tetragonal", - "trigonal", - "hexagonal", - "cubic" - ], + "size": 5, "data": [] } }, @@ -831,6 +1650,25 @@ "exclude_from_search": true, "metrics": [], "size": 5, + "include": [ + "4-member ring", + "Heusler", + "bcc", + "bct", + "bct5", + "clathrate", + "cuprite", + "diamond", + "fcc", + "fct", + "half-Heusler", + "hcp", + "perovskite", + "rock salt", + "simple cubic", + "wurtzite", + "zincblende" + ], "data": [] } }, @@ -847,8 +1685,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "2455", + "content-length": "2400", "content-type": "application/json", "server": "uvicorn" } @@ -862,104 +1701,14 @@ "owner": "visible", "query": {}, "aggregations": { - "results.method.simulation.dft.xc_functional_type:scroll": { + "results.method.simulation.program_name:scroll": { "terms": { "exclude_from_search": true, "update": true, - "size": 8, - "type": "terms", - "include": [ - "GGA", - "HF", - "OEP", - "hybrid", - "meta-GGA", - "vdW", - "LDA", - "unavailable" - ], - "changed": true, - "quantity": "results.method.simulation.dft.xc_functional_type" - } - }, - "results.method.simulation.dft.xc_functional_names:scroll": { - "terms": { - "exclude_from_search": false, - "update": true, "size": 5, "type": "terms", "changed": true, - "quantity": "results.method.simulation.dft.xc_functional_names" - } - }, - "results.method.simulation.dft.exact_exchange_mixing_factor:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "buckets": 30, - "changed": true, - "quantity": "results.method.simulation.dft.exact_exchange_mixing_factor" - } - }, - "results.method.simulation.dft.hubbard_kanamori_model.u_effective:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "buckets": 30, - "changed": true, - "quantity": "results.method.simulation.dft.hubbard_kanamori_model.u_effective" - } - }, - "results.method.simulation.dft.basis_set_type:scroll": { - "terms": { - "exclude_from_search": true, - "update": true, - "size": 7, - "type": "terms", - "include": [ - "(L)APW+lo", - "gaussians", - "numeric AOs", - "plane waves", - "psinc functions", - "real-space grid", - "unavailable" - ], - "changed": true, - "quantity": "results.method.simulation.dft.basis_set_type" - } - }, - "results.method.simulation.dft.core_electron_treatment:scroll": { - "terms": { - "exclude_from_search": true, - "update": true, - "size": 4, - "type": "terms", - "include": [ - "full all electron", - "all electron frozen core", - "pseudopotential", - "unavailable" - ], - "changed": true, - "quantity": "results.method.simulation.dft.core_electron_treatment" - } - }, - "results.method.simulation.dft.relativity_method:scroll": { - "terms": { - "exclude_from_search": true, - "update": true, - "size": 3, - "type": "terms", - "include": [ - "scalar_relativistic", - "pseudo_scalar_relativistic", - "scalar_relativistic_atomic_ZORA" - ], - "changed": true, - "quantity": "results.method.simulation.dft.relativity_method" + "quantity": "results.method.simulation.program_name" } } }, @@ -985,7 +1734,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 5 + "total": 15 }, "required": { "include": [ @@ -993,138 +1742,37 @@ ] }, "aggregations": { - "results.method.simulation.dft.xc_functional_type:scroll": { + "results.method.simulation.program_name:scroll": { "terms": { - "quantity": "results.method.simulation.dft.xc_functional_type", + "quantity": "results.method.simulation.program_name", "exclude_from_search": true, "metrics": [], - "size": 8, - "include": [ - "GGA", - "HF", - "OEP", - "hybrid", - "meta-GGA", - "vdW", - "LDA", - "unavailable" - ], - "data": [] - } - }, - "results.method.simulation.dft.xc_functional_names:scroll": { - "terms": { - "quantity": "results.method.simulation.dft.xc_functional_names", - "exclude_from_search": false, - "metrics": [], "size": 5, "data": [ { - "count": 2, - "nested_count": 2, - "value": "GGA_C_PBE_SOL" - }, - { - "count": 2, - "nested_count": 2, - "value": "GGA_X_PBE_SOL" - }, - { - "count": 1, - "nested_count": 1, - "value": "LDA_C_PZ" + "count": 6, + "nested_count": 6, + "value": "VASP" }, - { - "count": 1, - "nested_count": 1, - "value": "LDA_X_PZ" - } - ] - } - }, - "results.method.simulation.dft.exact_exchange_mixing_factor:default_histogram": { - "histogram": { - "quantity": "results.method.simulation.dft.exact_exchange_mixing_factor", - "exclude_from_search": true, - "metrics": [], - "buckets": 30, - "data": [] - } - }, - "results.method.simulation.dft.hubbard_kanamori_model.u_effective:default_histogram": { - "histogram": { - "quantity": "results.method.simulation.dft.hubbard_kanamori_model.u_effective", - "exclude_from_search": true, - "metrics": [], - "buckets": 30, - "data": [] - } - }, - "results.method.simulation.dft.basis_set_type:scroll": { - "terms": { - "quantity": "results.method.simulation.dft.basis_set_type", - "exclude_from_search": true, - "metrics": [], - "size": 7, - "include": [ - "(L)APW+lo", - "gaussians", - "numeric AOs", - "plane waves", - "psinc functions", - "real-space grid", - "unavailable" - ], - "data": [ { "count": 3, "nested_count": 3, - "value": "unavailable" - } - ] - } - }, - "results.method.simulation.dft.core_electron_treatment:scroll": { - "terms": { - "quantity": "results.method.simulation.dft.core_electron_treatment", - "exclude_from_search": true, - "metrics": [], - "size": 4, - "include": [ - "full all electron", - "all electron frozen core", - "pseudopotential", - "unavailable" - ], - "data": [ + "value": "exciting" + }, { - "count": 3, - "nested_count": 3, + "count": 0, "value": "unavailable" } ] } - }, - "results.method.simulation.dft.relativity_method:scroll": { - "terms": { - "quantity": "results.method.simulation.dft.relativity_method", - "exclude_from_search": true, - "metrics": [], - "size": 3, - "include": [ - "scalar_relativistic", - "pseudo_scalar_relativistic", - "scalar_relativistic_atomic_ZORA" - ], - "data": [] - } } }, "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "3613", + "content-length": "804", "content-type": "application/json", "server": "uvicorn" } @@ -1138,61 +1786,44 @@ "owner": "visible", "query": {}, "aggregations": { - "results.method.simulation.gw.type:scroll": { - "terms": { + "results.method.simulation.precision.k_line_density:default_histogram": { + "histogram": { "exclude_from_search": true, "update": true, - "size": 6, - "type": "terms", - "include": [ - "G0W0", - "scGW", - "scGW0", - "scG0W", - "ev-scGW", - "qp-scGW" - ], + "type": "histogram", + "buckets": 30, "changed": true, - "quantity": "results.method.simulation.gw.type" + "quantity": "results.method.simulation.precision.k_line_density" } }, - "results.method.simulation.gw.starting_point_type:scroll": { + "results.method.simulation.precision.basis_set:scroll": { "terms": { "exclude_from_search": true, "update": true, - "size": 8, + "size": 5, "type": "terms", - "include": [ - "GGA", - "HF", - "OEP", - "hybrid", - "meta-GGA", - "vdW", - "LDA", - "unavailable" - ], "changed": true, - "quantity": "results.method.simulation.gw.starting_point_type" + "quantity": "results.method.simulation.precision.basis_set" } }, - "results.method.simulation.gw.basis_set_type:scroll": { - "terms": { + "results.method.simulation.precision.planewave_cutoff:default_histogram": { + "histogram": { "exclude_from_search": true, "update": true, - "size": 7, - "type": "terms", - "include": [ - "(L)APW+lo", - "gaussians", - "numeric AOs", - "plane waves", - "psinc functions", - "real-space grid", - "unavailable" - ], + "type": "histogram", + "buckets": 30, "changed": true, - "quantity": "results.method.simulation.gw.basis_set_type" + "quantity": "results.method.simulation.precision.planewave_cutoff" + } + }, + "results.method.simulation.precision.apw_cutoff:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.method.simulation.precision.apw_cutoff" } } }, @@ -1218,7 +1849,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 5 + "total": 15 }, "required": { "include": [ @@ -1226,57 +1857,39 @@ ] }, "aggregations": { - "results.method.simulation.gw.type:scroll": { - "terms": { - "quantity": "results.method.simulation.gw.type", + "results.method.simulation.precision.k_line_density:default_histogram": { + "histogram": { + "quantity": "results.method.simulation.precision.k_line_density", "exclude_from_search": true, "metrics": [], - "size": 6, - "include": [ - "G0W0", - "scGW", - "scGW0", - "scG0W", - "ev-scGW", - "qp-scGW" - ], + "buckets": 30, "data": [] } }, - "results.method.simulation.gw.starting_point_type:scroll": { + "results.method.simulation.precision.basis_set:scroll": { "terms": { - "quantity": "results.method.simulation.gw.starting_point_type", + "quantity": "results.method.simulation.precision.basis_set", "exclude_from_search": true, "metrics": [], - "size": 8, - "include": [ - "GGA", - "HF", - "OEP", - "hybrid", - "meta-GGA", - "vdW", - "LDA", - "unavailable" - ], + "size": 5, "data": [] } }, - "results.method.simulation.gw.basis_set_type:scroll": { - "terms": { - "quantity": "results.method.simulation.gw.basis_set_type", + "results.method.simulation.precision.planewave_cutoff:default_histogram": { + "histogram": { + "quantity": "results.method.simulation.precision.planewave_cutoff", "exclude_from_search": true, "metrics": [], - "size": 7, - "include": [ - "(L)APW+lo", - "gaussians", - "numeric AOs", - "plane waves", - "psinc functions", - "real-space grid", - "unavailable" - ], + "buckets": 30, + "data": [] + } + }, + "results.method.simulation.precision.apw_cutoff:default_histogram": { + "histogram": { + "quantity": "results.method.simulation.precision.apw_cutoff", + "exclude_from_search": true, + "metrics": [], + "buckets": 30, "data": [] } } @@ -1284,8 +1897,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "1544", + "content-length": "1372", "content-type": "application/json", "server": "uvicorn" } @@ -1299,33 +1913,71 @@ "owner": "visible", "query": {}, "aggregations": { - "results.method.simulation.projection.type:scroll": { + "results.method.simulation.dft.xc_functional_type:scroll": { "terms": { "exclude_from_search": true, "update": true, - "size": 3, + "size": 5, "type": "terms", "include": [ - "wannier", - "slater_koster", - "custom" + "LDA", + "GGA", + "meta-GGA", + "hyper-GGA", + "hybrid" ], "changed": true, - "quantity": "results.method.simulation.projection.type" + "quantity": "results.method.simulation.dft.xc_functional_type" } }, - "results.method.simulation.projection.localization_type:scroll": { + "results.method.simulation.dft.xc_functional_names:scroll": { "terms": { + "exclude_from_search": false, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.method.simulation.dft.xc_functional_names" + } + }, + "results.method.simulation.dft.exact_exchange_mixing_factor:default_histogram": { + "histogram": { "exclude_from_search": true, "update": true, - "size": 2, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.method.simulation.dft.exact_exchange_mixing_factor" + } + }, + "results.method.simulation.dft.hubbard_kanamori_model.u_effective:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.method.simulation.dft.hubbard_kanamori_model.u_effective" + } + }, + "results.method.simulation.dft.core_electron_treatment:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, "type": "terms", - "include": [ - "single_shot", - "maximally_localized" - ], "changed": true, - "quantity": "results.method.simulation.projection.localization_type" + "quantity": "results.method.simulation.dft.core_electron_treatment" + } + }, + "results.method.simulation.dft.relativity_method:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.method.simulation.dft.relativity_method" } } }, @@ -1351,7 +2003,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 5 + "total": 15 }, "required": { "include": [ @@ -1359,39 +2011,101 @@ ] }, "aggregations": { - "results.method.simulation.projection.type:scroll": { + "results.method.simulation.dft.xc_functional_type:scroll": { "terms": { - "quantity": "results.method.simulation.projection.type", + "quantity": "results.method.simulation.dft.xc_functional_type", "exclude_from_search": true, "metrics": [], - "size": 3, + "size": 5, "include": [ - "wannier", - "slater_koster", - "custom" + "LDA", + "GGA", + "meta-GGA", + "hyper-GGA", + "hybrid" ], "data": [] } }, - "results.method.simulation.projection.localization_type:scroll": { + "results.method.simulation.dft.xc_functional_names:scroll": { "terms": { - "quantity": "results.method.simulation.projection.localization_type", + "quantity": "results.method.simulation.dft.xc_functional_names", + "exclude_from_search": false, + "metrics": [], + "size": 5, + "data": [ + { + "count": 6, + "nested_count": 6, + "value": "GGA_C_PBE_SOL" + }, + { + "count": 6, + "nested_count": 6, + "value": "GGA_X_PBE_SOL" + }, + { + "count": 3, + "nested_count": 3, + "value": "LDA_C_PZ" + }, + { + "count": 3, + "nested_count": 3, + "value": "LDA_X_PZ" + } + ] + } + }, + "results.method.simulation.dft.exact_exchange_mixing_factor:default_histogram": { + "histogram": { + "quantity": "results.method.simulation.dft.exact_exchange_mixing_factor", "exclude_from_search": true, "metrics": [], - "size": 2, - "include": [ - "single_shot", - "maximally_localized" - ], + "buckets": 30, "data": [] } - } + }, + "results.method.simulation.dft.hubbard_kanamori_model.u_effective:default_histogram": { + "histogram": { + "quantity": "results.method.simulation.dft.hubbard_kanamori_model.u_effective", + "exclude_from_search": true, + "metrics": [], + "buckets": 30, + "data": [] + } + }, + "results.method.simulation.dft.core_electron_treatment:scroll": { + "terms": { + "quantity": "results.method.simulation.dft.core_electron_treatment", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [ + { + "count": 9, + "nested_count": 9, + "value": "unavailable" + } + ] + } + }, + "results.method.simulation.dft.relativity_method:scroll": { + "terms": { + "quantity": "results.method.simulation.dft.relativity_method", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + } }, "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "964", + "content-length": "2667", "content-type": "application/json", "server": "uvicorn" } @@ -1405,82 +2119,42 @@ "owner": "visible", "query": {}, "aggregations": { - "results.method.simulation.dmft.impurity_solver_type:scroll": { + "results.method.simulation.gw.type:scroll": { "terms": { "exclude_from_search": true, "update": true, - "size": 11, + "size": 5, "type": "terms", - "include": [ - "CT-INT", - "CT-HYB", - "CT-AUX", - "ED", - "NRG", - "MPS", - "IPT", - "NCA", - "OCA", - "slave_bosons", - "hubbard_I" - ], - "changed": true, - "quantity": "results.method.simulation.dmft.impurity_solver_type" - } - }, - "results.method.simulation.dmft.total_filling:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "buckets": 30, - "changed": true, - "quantity": "results.method.simulation.dmft.total_filling" - } - }, - "results.method.simulation.dmft.inverse_temperature:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "buckets": 30, "changed": true, - "quantity": "results.method.simulation.dmft.inverse_temperature" + "quantity": "results.method.simulation.gw.type" } }, - "results.method.simulation.dmft.magnetic_state:scroll": { + "results.method.simulation.gw.starting_point_type:scroll": { "terms": { "exclude_from_search": true, "update": true, - "size": 3, + "size": 6, "type": "terms", "include": [ - "paramagnetic", - "ferromagnetic", - "antiferromagnetic" + "LDA", + "GGA", + "meta-GGA", + "hyper-GGA", + "hybrid", + "HF" ], "changed": true, - "quantity": "results.method.simulation.dmft.magnetic_state" - } - }, - "results.method.simulation.dmft.u:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "buckets": 30, - "changed": true, - "quantity": "results.method.simulation.dmft.u" + "quantity": "results.method.simulation.gw.starting_point_type" } }, - "results.method.simulation.dmft.hunds_hubbard_ratio:default_histogram": { - "histogram": { + "results.method.simulation.gw.basis_set_type:scroll": { + "terms": { "exclude_from_search": true, "update": true, - "type": "histogram", - "buckets": 30, + "size": 5, + "type": "terms", "changed": true, - "quantity": "results.method.simulation.dmft.hunds_hubbard_ratio" + "quantity": "results.method.simulation.gw.basis_set_type" } } }, @@ -1506,7 +2180,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 5 + "total": 15 }, "required": { "include": [ @@ -1514,75 +2188,38 @@ ] }, "aggregations": { - "results.method.simulation.dmft.impurity_solver_type:scroll": { + "results.method.simulation.gw.type:scroll": { "terms": { - "quantity": "results.method.simulation.dmft.impurity_solver_type", - "exclude_from_search": true, - "metrics": [], - "size": 11, - "include": [ - "CT-INT", - "CT-HYB", - "CT-AUX", - "ED", - "NRG", - "MPS", - "IPT", - "NCA", - "OCA", - "slave_bosons", - "hubbard_I" - ], - "data": [] - } - }, - "results.method.simulation.dmft.total_filling:default_histogram": { - "histogram": { - "quantity": "results.method.simulation.dmft.total_filling", - "exclude_from_search": true, - "metrics": [], - "buckets": 30, - "data": [] - } - }, - "results.method.simulation.dmft.inverse_temperature:default_histogram": { - "histogram": { - "quantity": "results.method.simulation.dmft.inverse_temperature", + "quantity": "results.method.simulation.gw.type", "exclude_from_search": true, "metrics": [], - "buckets": 30, + "size": 5, "data": [] } }, - "results.method.simulation.dmft.magnetic_state:scroll": { + "results.method.simulation.gw.starting_point_type:scroll": { "terms": { - "quantity": "results.method.simulation.dmft.magnetic_state", + "quantity": "results.method.simulation.gw.starting_point_type", "exclude_from_search": true, "metrics": [], - "size": 3, + "size": 6, "include": [ - "paramagnetic", - "ferromagnetic", - "antiferromagnetic" + "LDA", + "GGA", + "meta-GGA", + "hyper-GGA", + "hybrid", + "HF" ], "data": [] } }, - "results.method.simulation.dmft.u:default_histogram": { - "histogram": { - "quantity": "results.method.simulation.dmft.u", - "exclude_from_search": true, - "metrics": [], - "buckets": 30, - "data": [] - } - }, - "results.method.simulation.dmft.hunds_hubbard_ratio:default_histogram": { - "histogram": { - "quantity": "results.method.simulation.dmft.hunds_hubbard_ratio", + "results.method.simulation.gw.basis_set_type:scroll": { + "terms": { + "quantity": "results.method.simulation.gw.basis_set_type", "exclude_from_search": true, "metrics": [], - "buckets": 30, + "size": 5, "data": [] } } @@ -1590,8 +2227,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "2247", + "content-length": "1152", "content-type": "application/json", "server": "uvicorn" } @@ -1605,44 +2243,62 @@ "owner": "visible", "query": {}, "aggregations": { - "results.properties.spectroscopy.eels.resolution:default_histogram": { - "histogram": { + "results.method.simulation.bse.type:scroll": { + "terms": { "exclude_from_search": true, "update": true, - "type": "histogram", - "buckets": 30, + "size": 5, + "type": "terms", "changed": true, - "quantity": "results.properties.spectroscopy.eels.resolution" + "quantity": "results.method.simulation.bse.type" } }, - "results.properties.spectroscopy.eels.min_energy:default_histogram": { - "histogram": { + "results.method.simulation.bse.solver:scroll": { + "terms": { "exclude_from_search": true, "update": true, - "type": "histogram", - "buckets": 30, + "size": 5, + "type": "terms", "changed": true, - "quantity": "results.properties.spectroscopy.eels.min_energy" + "quantity": "results.method.simulation.bse.solver" } }, - "results.properties.spectroscopy.eels.max_energy:default_histogram": { - "histogram": { + "results.method.simulation.bse.starting_point_type:scroll": { + "terms": { "exclude_from_search": true, "update": true, - "type": "histogram", - "buckets": 30, + "size": 6, + "type": "terms", + "include": [ + "LDA", + "GGA", + "meta-GGA", + "hyper-GGA", + "hybrid", + "HF" + ], + "changed": true, + "quantity": "results.method.simulation.bse.starting_point_type" + } + }, + "results.method.simulation.bse.basis_set_type:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", "changed": true, - "quantity": "results.properties.spectroscopy.eels.max_energy" + "quantity": "results.method.simulation.bse.basis_set_type" } }, - "results.properties.spectroscopy.eels.detector_type:scroll": { + "results.method.simulation.bse.gw_type:scroll": { "terms": { "exclude_from_search": true, "update": true, "size": 5, "type": "terms", "changed": true, - "quantity": "results.properties.spectroscopy.eels.detector_type" + "quantity": "results.method.simulation.bse.gw_type" } } }, @@ -1668,7 +2324,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 5 + "total": 15 }, "required": { "include": [ @@ -1676,36 +2332,53 @@ ] }, "aggregations": { - "results.properties.spectroscopy.eels.resolution:default_histogram": { - "histogram": { - "quantity": "results.properties.spectroscopy.eels.resolution", + "results.method.simulation.bse.type:scroll": { + "terms": { + "quantity": "results.method.simulation.bse.type", "exclude_from_search": true, "metrics": [], - "buckets": 30, + "size": 5, "data": [] } }, - "results.properties.spectroscopy.eels.min_energy:default_histogram": { - "histogram": { - "quantity": "results.properties.spectroscopy.eels.min_energy", + "results.method.simulation.bse.solver:scroll": { + "terms": { + "quantity": "results.method.simulation.bse.solver", "exclude_from_search": true, "metrics": [], - "buckets": 30, + "size": 5, "data": [] } }, - "results.properties.spectroscopy.eels.max_energy:default_histogram": { - "histogram": { - "quantity": "results.properties.spectroscopy.eels.max_energy", + "results.method.simulation.bse.starting_point_type:scroll": { + "terms": { + "quantity": "results.method.simulation.bse.starting_point_type", "exclude_from_search": true, "metrics": [], - "buckets": 30, + "size": 6, + "include": [ + "LDA", + "GGA", + "meta-GGA", + "hyper-GGA", + "hybrid", + "HF" + ], + "data": [] + } + }, + "results.method.simulation.bse.basis_set_type:scroll": { + "terms": { + "quantity": "results.method.simulation.bse.basis_set_type", + "exclude_from_search": true, + "metrics": [], + "size": 5, "data": [] } }, - "results.properties.spectroscopy.eels.detector_type:scroll": { + "results.method.simulation.bse.gw_type:scroll": { "terms": { - "quantity": "results.properties.spectroscopy.eels.detector_type", + "quantity": "results.method.simulation.bse.gw_type", "exclude_from_search": true, "metrics": [], "size": 5, @@ -1716,8 +2389,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "1367", + "content-length": "1646", "content-type": "application/json", "server": "uvicorn" } @@ -1731,46 +2405,24 @@ "owner": "visible", "query": {}, "aggregations": { - "results.properties.thermodynamic.trajectory.available_properties:scroll": { + "results.method.simulation.projection.type:scroll": { "terms": { - "exclude_from_search": false, + "exclude_from_search": true, "update": true, - "size": 4, + "size": 5, "type": "terms", - "include": [ - "temperature", - "pressure", - "volume", - "energy_potential" - ], "changed": true, - "quantity": "results.properties.thermodynamic.trajectory.available_properties" + "quantity": "results.method.simulation.projection.type" } }, - "results.properties.thermodynamic.trajectory.methodology.molecular_dynamics.ensemble_type:scroll": { + "results.method.simulation.projection.localization_type:scroll": { "terms": { "exclude_from_search": true, "update": true, - "size": 4, + "size": 5, "type": "terms", - "include": [ - "NVE", - "NVT", - "NPT", - "NPH" - ], - "changed": true, - "quantity": "results.properties.thermodynamic.trajectory.methodology.molecular_dynamics.ensemble_type" - } - }, - "results.properties.thermodynamic.trajectory.methodology.molecular_dynamics.time_step:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "buckets": 30, "changed": true, - "quantity": "results.properties.thermodynamic.trajectory.methodology.molecular_dynamics.time_step" + "quantity": "results.method.simulation.projection.localization_type" } } }, @@ -1796,7 +2448,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 5 + "total": 15 }, "required": { "include": [ @@ -1804,42 +2456,21 @@ ] }, "aggregations": { - "results.properties.thermodynamic.trajectory.available_properties:scroll": { - "terms": { - "quantity": "results.properties.thermodynamic.trajectory.available_properties", - "exclude_from_search": false, - "metrics": [], - "size": 4, - "include": [ - "temperature", - "pressure", - "volume", - "energy_potential" - ], - "data": [] - } - }, - "results.properties.thermodynamic.trajectory.methodology.molecular_dynamics.ensemble_type:scroll": { + "results.method.simulation.projection.type:scroll": { "terms": { - "quantity": "results.properties.thermodynamic.trajectory.methodology.molecular_dynamics.ensemble_type", + "quantity": "results.method.simulation.projection.type", "exclude_from_search": true, "metrics": [], - "size": 4, - "include": [ - "NVE", - "NVT", - "NPT", - "NPH" - ], + "size": 5, "data": [] } }, - "results.properties.thermodynamic.trajectory.methodology.molecular_dynamics.time_step:default_histogram": { - "histogram": { - "quantity": "results.properties.thermodynamic.trajectory.methodology.molecular_dynamics.time_step", + "results.method.simulation.projection.localization_type:scroll": { + "terms": { + "quantity": "results.method.simulation.projection.localization_type", "exclude_from_search": true, "metrics": [], - "buckets": 30, + "size": 5, "data": [] } } @@ -1847,8 +2478,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "1476", + "content-length": "777", "content-type": "application/json", "server": "uvicorn" } @@ -1862,34 +2494,64 @@ "owner": "visible", "query": {}, "aggregations": { - "results.properties.geometry_optimization.final_energy_difference:default_histogram": { - "histogram": { + "results.method.simulation.dmft.impurity_solver_type:scroll": { + "terms": { "exclude_from_search": true, "update": true, - "type": "histogram", - "buckets": 30, + "size": 5, + "type": "terms", "changed": true, - "quantity": "results.properties.geometry_optimization.final_energy_difference" + "quantity": "results.method.simulation.dmft.impurity_solver_type" } }, - "results.properties.geometry_optimization.final_force_maximum:default_histogram": { + "results.method.simulation.dmft.inverse_temperature:default_histogram": { "histogram": { "exclude_from_search": true, "update": true, "type": "histogram", "buckets": 30, "changed": true, - "quantity": "results.properties.geometry_optimization.final_force_maximum" + "quantity": "results.method.simulation.dmft.inverse_temperature" } }, - "results.properties.geometry_optimization.final_displacement_maximum:default_histogram": { - "histogram": { + "results.method.simulation.dmft.magnetic_state:scroll": { + "terms": { "exclude_from_search": true, "update": true, - "type": "histogram", + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.method.simulation.dmft.magnetic_state" + } + }, + "results.method.simulation.dmft.u:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", "buckets": 30, "changed": true, - "quantity": "results.properties.geometry_optimization.final_displacement_maximum" + "quantity": "results.method.simulation.dmft.u" + } + }, + "results.method.simulation.dmft.jh:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.method.simulation.dmft.jh" + } + }, + "results.method.simulation.dmft.analytical_continuation:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.method.simulation.dmft.analytical_continuation" } } }, @@ -1915,7 +2577,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 5 + "total": 15 }, "required": { "include": [ @@ -1923,39 +2585,67 @@ ] }, "aggregations": { - "results.properties.geometry_optimization.final_energy_difference:default_histogram": { + "results.method.simulation.dmft.impurity_solver_type:scroll": { + "terms": { + "quantity": "results.method.simulation.dmft.impurity_solver_type", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + }, + "results.method.simulation.dmft.inverse_temperature:default_histogram": { "histogram": { - "quantity": "results.properties.geometry_optimization.final_energy_difference", + "quantity": "results.method.simulation.dmft.inverse_temperature", "exclude_from_search": true, "metrics": [], "buckets": 30, "data": [] } }, - "results.properties.geometry_optimization.final_force_maximum:default_histogram": { + "results.method.simulation.dmft.magnetic_state:scroll": { + "terms": { + "quantity": "results.method.simulation.dmft.magnetic_state", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + }, + "results.method.simulation.dmft.u:default_histogram": { "histogram": { - "quantity": "results.properties.geometry_optimization.final_force_maximum", + "quantity": "results.method.simulation.dmft.u", "exclude_from_search": true, "metrics": [], "buckets": 30, "data": [] } }, - "results.properties.geometry_optimization.final_displacement_maximum:default_histogram": { + "results.method.simulation.dmft.jh:default_histogram": { "histogram": { - "quantity": "results.properties.geometry_optimization.final_displacement_maximum", + "quantity": "results.method.simulation.dmft.jh", "exclude_from_search": true, "metrics": [], "buckets": 30, "data": [] } + }, + "results.method.simulation.dmft.analytical_continuation:scroll": { + "terms": { + "quantity": "results.method.simulation.dmft.analytical_continuation", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } } }, "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "1196", + "content-length": "1858", "content-type": "application/json", "server": "uvicorn" } @@ -1969,73 +2659,44 @@ "owner": "visible", "query": {}, "aggregations": { - "electronic_properties:scroll": { - "terms": { - "exclude_from_search": false, - "quantity": "results.properties.available_properties", - "include": [ - "electronic.band_structure_electronic.band_gap", - "band_structure_electronic", - "dos_electronic", - "greens_functions_electronic", - "eels" - ], - "update": true, - "type": "terms", - "size": 5, - "changed": true - } - }, - "results.properties.electronic.band_structure_electronic.band_gap.type:scroll": { + "results.properties.spectroscopic.spectra.provenance.eels.detector_type:scroll": { "terms": { "exclude_from_search": true, "update": true, - "size": 2, + "size": 5, "type": "terms", - "include": [ - "direct", - "indirect" - ], "changed": true, - "quantity": "results.properties.electronic.band_structure_electronic.band_gap.type" + "quantity": "results.properties.spectroscopic.spectra.provenance.eels.detector_type" } }, - "results.properties.electronic.band_structure_electronic.band_gap.value:default_histogram": { + "results.properties.spectroscopic.spectra.provenance.eels.resolution:default_histogram": { "histogram": { "exclude_from_search": true, "update": true, "type": "histogram", "buckets": 30, "changed": true, - "quantity": "results.properties.electronic.band_structure_electronic.band_gap.value" + "quantity": "results.properties.spectroscopic.spectra.provenance.eels.resolution" } }, - "results.properties.electronic.band_structure_electronic.spin_polarized:scroll": { - "terms": { + "results.properties.spectroscopic.spectra.provenance.eels.min_energy:default_histogram": { + "histogram": { "exclude_from_search": true, "update": true, - "size": 2, - "include": [ - "false", - "true" - ], - "type": "terms", + "type": "histogram", + "buckets": 30, "changed": true, - "quantity": "results.properties.electronic.band_structure_electronic.spin_polarized" + "quantity": "results.properties.spectroscopic.spectra.provenance.eels.min_energy" } }, - "results.properties.electronic.dos_electronic.spin_polarized:scroll": { - "terms": { + "results.properties.spectroscopic.spectra.provenance.eels.max_energy:default_histogram": { + "histogram": { "exclude_from_search": true, "update": true, - "size": 2, - "include": [ - "false", - "true" - ], - "type": "terms", + "type": "histogram", + "buckets": 30, "changed": true, - "quantity": "results.properties.electronic.dos_electronic.spin_polarized" + "quantity": "results.properties.spectroscopic.spectra.provenance.eels.max_energy" } } }, @@ -2061,7 +2722,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 5 + "total": 15 }, "required": { "include": [ @@ -2069,80 +2730,39 @@ ] }, "aggregations": { - "electronic_properties:scroll": { - "terms": { - "quantity": "results.properties.available_properties", - "exclude_from_search": false, - "metrics": [], - "size": 5, - "include": [ - "electronic.band_structure_electronic.band_gap", - "band_structure_electronic", - "dos_electronic", - "greens_functions_electronic", - "eels" - ], - "data": [ - { - "count": 1, - "nested_count": 1, - "value": "electronic.band_structure_electronic.band_gap" - } - ] - } - }, - "results.properties.electronic.band_structure_electronic.band_gap.type:scroll": { + "results.properties.spectroscopic.spectra.provenance.eels.detector_type:scroll": { "terms": { - "quantity": "results.properties.electronic.band_structure_electronic.band_gap.type", + "quantity": "results.properties.spectroscopic.spectra.provenance.eels.detector_type", "exclude_from_search": true, "metrics": [], - "size": 2, - "include": [ - "direct", - "indirect" - ], + "size": 5, "data": [] } }, - "results.properties.electronic.band_structure_electronic.band_gap.value:default_histogram": { + "results.properties.spectroscopic.spectra.provenance.eels.resolution:default_histogram": { "histogram": { - "quantity": "results.properties.electronic.band_structure_electronic.band_gap.value", + "quantity": "results.properties.spectroscopic.spectra.provenance.eels.resolution", "exclude_from_search": true, "metrics": [], "buckets": 30, - "offset": 2.5634826144e-19, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": 2.5634826144e-19 - } - ] + "data": [] } }, - "results.properties.electronic.band_structure_electronic.spin_polarized:scroll": { - "terms": { - "quantity": "results.properties.electronic.band_structure_electronic.spin_polarized", + "results.properties.spectroscopic.spectra.provenance.eels.min_energy:default_histogram": { + "histogram": { + "quantity": "results.properties.spectroscopic.spectra.provenance.eels.min_energy", "exclude_from_search": true, "metrics": [], - "size": 2, - "include": [ - "false", - "true" - ], + "buckets": 30, "data": [] } }, - "results.properties.electronic.dos_electronic.spin_polarized:scroll": { - "terms": { - "quantity": "results.properties.electronic.dos_electronic.spin_polarized", + "results.properties.spectroscopic.spectra.provenance.eels.max_energy:default_histogram": { + "histogram": { + "quantity": "results.properties.spectroscopic.spectra.provenance.eels.max_energy", "exclude_from_search": true, "metrics": [], - "size": 2, - "include": [ - "false", - "true" - ], + "buckets": 30, "data": [] } } @@ -2150,8 +2770,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "2459", + "content-length": "1528", "content-type": "application/json", "server": "uvicorn" } @@ -2165,20 +2786,34 @@ "owner": "visible", "query": {}, "aggregations": { - "vibrational_properties:scroll": { + "results.properties.thermodynamic.trajectory.available_properties:scroll": { "terms": { "exclude_from_search": false, - "quantity": "results.properties.available_properties", - "include": [ - "dos_phonon", - "band_structure_phonon", - "energy_free_helmholtz", - "heat_capacity_constant_volume" - ], "update": true, + "size": 5, "type": "terms", - "size": 4, - "changed": true + "changed": true, + "quantity": "results.properties.thermodynamic.trajectory.available_properties" + } + }, + "results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.ensemble_type:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.ensemble_type" + } + }, + "results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.time_step:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.time_step" } } }, @@ -2204,7 +2839,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 5 + "total": 15 }, "required": { "include": [ @@ -2212,18 +2847,30 @@ ] }, "aggregations": { - "vibrational_properties:scroll": { + "results.properties.thermodynamic.trajectory.available_properties:scroll": { "terms": { - "quantity": "results.properties.available_properties", + "quantity": "results.properties.thermodynamic.trajectory.available_properties", "exclude_from_search": false, "metrics": [], - "size": 4, - "include": [ - "dos_phonon", - "band_structure_phonon", - "energy_free_helmholtz", - "heat_capacity_constant_volume" - ], + "size": 5, + "data": [] + } + }, + "results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.ensemble_type:scroll": { + "terms": { + "quantity": "results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.ensemble_type", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + }, + "results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.time_step:default_histogram": { + "histogram": { + "quantity": "results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.time_step", + "exclude_from_search": true, + "metrics": [], + "buckets": 30, "data": [] } } @@ -2231,8 +2878,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "645", + "content-length": "1246", "content-type": "application/json", "server": "uvicorn" } @@ -2246,74 +2894,34 @@ "owner": "visible", "query": {}, "aggregations": { - "mechanical_properties:scroll": { - "terms": { - "exclude_from_search": false, - "quantity": "results.properties.available_properties", - "include": [ - "bulk_modulus", - "shear_modulus", - "energy_volume_curve" - ], - "update": true, - "type": "terms", - "size": 3, - "changed": true - } - }, - "results.properties.mechanical.bulk_modulus.type:scroll": { - "terms": { + "results.properties.geometry_optimization.final_energy_difference:default_histogram": { + "histogram": { "exclude_from_search": true, "update": true, - "size": 5, - "type": "terms", + "type": "histogram", + "buckets": 30, "changed": true, - "quantity": "results.properties.mechanical.bulk_modulus.type" + "quantity": "results.properties.geometry_optimization.final_energy_difference" } }, - "results.properties.mechanical.bulk_modulus.value:default_histogram": { + "results.properties.geometry_optimization.final_force_maximum:default_histogram": { "histogram": { "exclude_from_search": true, "update": true, "type": "histogram", "buckets": 30, "changed": true, - "quantity": "results.properties.mechanical.bulk_modulus.value" - } - }, - "results.properties.mechanical.shear_modulus.type:scroll": { - "terms": { - "exclude_from_search": true, - "update": true, - "size": 3, - "type": "terms", - "include": [ - "voigt_average", - "reuss_average", - "voigt_reuss_hill_average" - ], - "changed": true, - "quantity": "results.properties.mechanical.shear_modulus.type" + "quantity": "results.properties.geometry_optimization.final_force_maximum" } }, - "results.properties.mechanical.shear_modulus.value:default_histogram": { + "results.properties.geometry_optimization.final_displacement_maximum:default_histogram": { "histogram": { "exclude_from_search": true, "update": true, "type": "histogram", "buckets": 30, "changed": true, - "quantity": "results.properties.mechanical.shear_modulus.value" - } - }, - "results.properties.mechanical.energy_volume_curve.type:scroll": { - "terms": { - "exclude_from_search": true, - "update": true, - "size": 5, - "type": "terms", - "changed": true, - "quantity": "results.properties.mechanical.energy_volume_curve.type" + "quantity": "results.properties.geometry_optimization.final_displacement_maximum" } } }, @@ -2339,7 +2947,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 5 + "total": 15 }, "required": { "include": [ @@ -2347,67 +2955,30 @@ ] }, "aggregations": { - "mechanical_properties:scroll": { - "terms": { - "quantity": "results.properties.available_properties", - "exclude_from_search": false, - "metrics": [], - "size": 3, - "include": [ - "bulk_modulus", - "shear_modulus", - "energy_volume_curve" - ], - "data": [] - } - }, - "results.properties.mechanical.bulk_modulus.type:scroll": { - "terms": { - "quantity": "results.properties.mechanical.bulk_modulus.type", - "exclude_from_search": true, - "metrics": [], - "size": 5, - "data": [] - } - }, - "results.properties.mechanical.bulk_modulus.value:default_histogram": { + "results.properties.geometry_optimization.final_energy_difference:default_histogram": { "histogram": { - "quantity": "results.properties.mechanical.bulk_modulus.value", + "quantity": "results.properties.geometry_optimization.final_energy_difference", "exclude_from_search": true, "metrics": [], "buckets": 30, "data": [] } }, - "results.properties.mechanical.shear_modulus.type:scroll": { - "terms": { - "quantity": "results.properties.mechanical.shear_modulus.type", - "exclude_from_search": true, - "metrics": [], - "size": 3, - "include": [ - "voigt_average", - "reuss_average", - "voigt_reuss_hill_average" - ], - "data": [] - } - }, - "results.properties.mechanical.shear_modulus.value:default_histogram": { + "results.properties.geometry_optimization.final_force_maximum:default_histogram": { "histogram": { - "quantity": "results.properties.mechanical.shear_modulus.value", + "quantity": "results.properties.geometry_optimization.final_force_maximum", "exclude_from_search": true, "metrics": [], "buckets": 30, "data": [] } }, - "results.properties.mechanical.energy_volume_curve.type:scroll": { - "terms": { - "quantity": "results.properties.mechanical.energy_volume_curve.type", + "results.properties.geometry_optimization.final_displacement_maximum:default_histogram": { + "histogram": { + "quantity": "results.properties.geometry_optimization.final_displacement_maximum", "exclude_from_search": true, "metrics": [], - "size": 5, + "buckets": 30, "data": [] } } @@ -2415,8 +2986,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "2101", + "content-length": "1197", "content-type": "application/json", "server": "uvicorn" } @@ -2430,144 +3002,69 @@ "owner": "visible", "query": {}, "aggregations": { - "results.properties.optoelectronic.solar_cell.efficiency:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "buckets": 30, - "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.efficiency" - } - }, - "results.properties.optoelectronic.solar_cell.fill_factor:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "buckets": 30, - "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.fill_factor" - } - }, - "results.properties.optoelectronic.solar_cell.open_circuit_voltage:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "buckets": 30, - "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.open_circuit_voltage" - } - }, - "results.properties.optoelectronic.solar_cell.short_circuit_current_density:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "buckets": 30, - "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.short_circuit_current_density" - } - }, - "results.properties.optoelectronic.solar_cell.illumination_intensity:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "buckets": 30, - "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.illumination_intensity" - } - }, - "results.properties.optoelectronic.solar_cell.device_area:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "buckets": 30, - "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.device_area" - } - }, - "results.properties.optoelectronic.solar_cell.device_architecture:scroll": { - "terms": { - "exclude_from_search": true, - "update": true, - "size": 5, - "type": "terms", - "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.device_architecture" - } - }, - "results.properties.optoelectronic.solar_cell.device_stack:scroll": { + "electronic_properties:scroll": { "terms": { "exclude_from_search": false, + "quantity": "results.properties.available_properties", + "include": [ + "electronic.band_structure_electronic.band_gap", + "band_structure_electronic", + "dos_electronic", + "greens_functions_electronic", + "eels" + ], "update": true, - "size": 5, "type": "terms", - "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.device_stack" - } - }, - "results.properties.optoelectronic.solar_cell.absorber:scroll": { - "terms": { - "exclude_from_search": false, - "update": true, "size": 5, - "type": "terms", - "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.absorber" + "changed": true } }, - "results.properties.optoelectronic.solar_cell.absorber_fabrication:scroll": { + "results.properties.electronic.band_structure_electronic.band_gap.type:scroll": { "terms": { "exclude_from_search": true, "update": true, "size": 5, "type": "terms", "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.absorber_fabrication" - } - }, - "results.properties.optoelectronic.solar_cell.electron_transport_layer:scroll": { - "terms": { - "exclude_from_search": false, - "update": true, - "size": 5, - "type": "terms", - "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.electron_transport_layer" + "quantity": "results.properties.electronic.band_structure_electronic.band_gap.type" } }, - "results.properties.optoelectronic.solar_cell.hole_transport_layer:scroll": { - "terms": { - "exclude_from_search": false, + "results.properties.electronic.band_structure_electronic.band_gap.value:default_histogram": { + "histogram": { + "exclude_from_search": true, "update": true, - "size": 5, - "type": "terms", + "type": "histogram", + "buckets": 30, "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.hole_transport_layer" + "quantity": "results.properties.electronic.band_structure_electronic.band_gap.value" } }, - "results.properties.optoelectronic.solar_cell.substrate:scroll": { + "results.properties.electronic.band_structure_electronic.spin_polarized:scroll": { "terms": { - "exclude_from_search": false, + "exclude_from_search": true, "update": true, - "size": 5, + "size": 2, + "include": [ + "false", + "true" + ], "type": "terms", "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.substrate" + "quantity": "results.properties.electronic.band_structure_electronic.spin_polarized" } }, - "results.properties.optoelectronic.solar_cell.back_contact:scroll": { + "results.properties.electronic.dos_electronic.spin_polarized:scroll": { "terms": { - "exclude_from_search": false, + "exclude_from_search": true, "update": true, - "size": 5, + "size": 2, + "include": [ + "false", + "true" + ], "type": "terms", "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.back_contact" + "quantity": "results.properties.electronic.dos_electronic.spin_polarized" } } }, @@ -2593,7 +3090,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 5 + "total": 15 }, "required": { "include": [ @@ -2601,258 +3098,91 @@ ] }, "aggregations": { - "results.properties.optoelectronic.solar_cell.efficiency:default_histogram": { - "histogram": { - "quantity": "results.properties.optoelectronic.solar_cell.efficiency", - "exclude_from_search": true, + "electronic_properties:scroll": { + "terms": { + "quantity": "results.properties.available_properties", + "exclude_from_search": false, "metrics": [], - "buckets": 30, - "offset": 15.9, + "size": 5, + "include": [ + "electronic.band_structure_electronic.band_gap", + "band_structure_electronic", + "dos_electronic", + "greens_functions_electronic", + "eels" + ], "data": [ { - "count": 1, - "nested_count": 1, - "value": 15.9 + "count": 3, + "nested_count": 3, + "value": "band_structure_electronic" + }, + { + "count": 3, + "nested_count": 3, + "value": "electronic.band_structure_electronic.band_gap" } ] } }, - "results.properties.optoelectronic.solar_cell.fill_factor:default_histogram": { - "histogram": { - "quantity": "results.properties.optoelectronic.solar_cell.fill_factor", + "results.properties.electronic.band_structure_electronic.band_gap.type:scroll": { + "terms": { + "quantity": "results.properties.electronic.band_structure_electronic.band_gap.type", "exclude_from_search": true, "metrics": [], - "buckets": 30, - "offset": 0.78, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": 0.78 - } - ] - } - }, - "results.properties.optoelectronic.solar_cell.open_circuit_voltage:default_histogram": { - "histogram": { - "quantity": "results.properties.optoelectronic.solar_cell.open_circuit_voltage", - "exclude_from_search": true, - "metrics": [], - "buckets": 30, - "offset": 1, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": 1 - } - ] - } - }, - "results.properties.optoelectronic.solar_cell.short_circuit_current_density:default_histogram": { - "histogram": { - "quantity": "results.properties.optoelectronic.solar_cell.short_circuit_current_density", - "exclude_from_search": true, - "metrics": [], - "buckets": 30, - "offset": 203, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": 203 - } - ] - } - }, - "results.properties.optoelectronic.solar_cell.illumination_intensity:default_histogram": { - "histogram": { - "quantity": "results.properties.optoelectronic.solar_cell.illumination_intensity", - "exclude_from_search": true, - "metrics": [], - "buckets": 30, - "offset": 1000, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": 1000 - } - ] + "size": 5, + "data": [] } }, - "results.properties.optoelectronic.solar_cell.device_area:default_histogram": { + "results.properties.electronic.band_structure_electronic.band_gap.value:default_histogram": { "histogram": { - "quantity": "results.properties.optoelectronic.solar_cell.device_area", + "quantity": "results.properties.electronic.band_structure_electronic.band_gap.value", "exclude_from_search": true, "metrics": [], "buckets": 30, - "offset": 0.0000125, + "offset": 2.5634826144e-19, "data": [ { - "count": 1, - "nested_count": 1, - "value": 0.0000125 + "count": 3, + "nested_count": 3, + "value": 2.5634826144e-19 } ] } }, - "results.properties.optoelectronic.solar_cell.device_architecture:scroll": { + "results.properties.electronic.band_structure_electronic.spin_polarized:scroll": { "terms": { - "quantity": "results.properties.optoelectronic.solar_cell.device_architecture", + "quantity": "results.properties.electronic.band_structure_electronic.spin_polarized", "exclude_from_search": true, "metrics": [], - "size": 5, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": "pin" - } - ] - } - }, - "results.properties.optoelectronic.solar_cell.device_stack:scroll": { - "terms": { - "quantity": "results.properties.optoelectronic.solar_cell.device_stack", - "exclude_from_search": false, - "metrics": [], - "size": 5, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": "Ag" - }, - { - "count": 1, - "nested_count": 1, - "value": "BCP" - }, - { - "count": 1, - "nested_count": 1, - "value": "ITO" - }, - { - "count": 1, - "nested_count": 1, - "value": "PCBM-60" - }, - { - "count": 1, - "nested_count": 1, - "value": "PEDOT:PSS" - } - ] - } - }, - "results.properties.optoelectronic.solar_cell.absorber:scroll": { - "terms": { - "quantity": "results.properties.optoelectronic.solar_cell.absorber", - "exclude_from_search": false, - "metrics": [], - "size": 5, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": "MAPbI" - } - ] + "size": 2, + "include": [ + "false", + "true" + ], + "data": [] } }, - "results.properties.optoelectronic.solar_cell.absorber_fabrication:scroll": { + "results.properties.electronic.dos_electronic.spin_polarized:scroll": { "terms": { - "quantity": "results.properties.optoelectronic.solar_cell.absorber_fabrication", + "quantity": "results.properties.electronic.dos_electronic.spin_polarized", "exclude_from_search": true, "metrics": [], - "size": 5, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": "Spin-coating" - } - ] - } - }, - "results.properties.optoelectronic.solar_cell.electron_transport_layer:scroll": { - "terms": { - "quantity": "results.properties.optoelectronic.solar_cell.electron_transport_layer", - "exclude_from_search": false, - "metrics": [], - "size": 5, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": "BCP" - }, - { - "count": 1, - "nested_count": 1, - "value": "PCBM-60" - } - ] - } - }, - "results.properties.optoelectronic.solar_cell.hole_transport_layer:scroll": { - "terms": { - "quantity": "results.properties.optoelectronic.solar_cell.hole_transport_layer", - "exclude_from_search": false, - "metrics": [], - "size": 5, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": "PEDOT:PSS" - } - ] - } - }, - "results.properties.optoelectronic.solar_cell.substrate:scroll": { - "terms": { - "quantity": "results.properties.optoelectronic.solar_cell.substrate", - "exclude_from_search": false, - "metrics": [], - "size": 5, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": "ITO" - }, - { - "count": 1, - "nested_count": 1, - "value": "SLG" - } - ] - } - }, - "results.properties.optoelectronic.solar_cell.back_contact:scroll": { - "terms": { - "quantity": "results.properties.optoelectronic.solar_cell.back_contact", - "exclude_from_search": false, - "metrics": [], - "size": 5, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": "Ag" - } - ] + "size": 2, + "include": [ + "false", + "true" + ], + "data": [] } } }, "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "6905", + "content-length": "2516", "content-type": "application/json", "server": "uvicorn" } @@ -2866,42 +3196,20 @@ "owner": "visible", "query": {}, "aggregations": { - "upload_create_time:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "buckets": 30, - "changed": true, - "quantity": "upload_create_time" - } - }, - "external_db:scroll": { + "vibrational_properties:scroll": { "terms": { - "exclude_from_search": true, - "update": true, - "size": 6, - "type": "terms", + "exclude_from_search": false, + "quantity": "results.properties.available_properties", "include": [ - "The Perovskite Database Project", - "EELS Data Base", - "Materials Project", - "AFLOW", - "OQMD", - "Kyoto Phonopy Database" + "dos_phonon", + "band_structure_phonon", + "energy_free_helmholtz", + "heat_capacity_constant_volume" ], - "changed": true, - "quantity": "external_db" - } - }, - "datasets.dataset_name:scroll": { - "terms": { - "exclude_from_search": true, "update": true, - "size": 10, "type": "terms", - "changed": true, - "quantity": "datasets.dataset_name" + "size": 4, + "changed": true } } }, @@ -2927,7 +3235,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 5 + "total": 15 }, "required": { "include": [ @@ -2935,54 +3243,28 @@ ] }, "aggregations": { - "upload_create_time:default_histogram": { - "histogram": { - "quantity": "upload_create_time", - "exclude_from_search": true, - "metrics": [], - "buckets": 30, - "offset": 1674546352706, - "data": [ - { - "count": 5, - "nested_count": 5, - "value": 1674546352706 - } - ] - } - }, - "external_db:scroll": { + "vibrational_properties:scroll": { "terms": { - "quantity": "external_db", - "exclude_from_search": true, + "quantity": "results.properties.available_properties", + "exclude_from_search": false, "metrics": [], - "size": 6, + "size": 4, "include": [ - "The Perovskite Database Project", - "EELS Data Base", - "Materials Project", - "AFLOW", - "OQMD", - "Kyoto Phonopy Database" + "dos_phonon", + "band_structure_phonon", + "energy_free_helmholtz", + "heat_capacity_constant_volume" ], "data": [] } - }, - "datasets.dataset_name:scroll": { - "terms": { - "quantity": "datasets.dataset_name", - "exclude_from_search": true, - "metrics": [], - "size": 10, - "data": [] - } } }, "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "1245", + "content-length": "646", "content-type": "application/json", "server": "uvicorn" } @@ -2994,28 +3276,79 @@ "method": "POST", "body": { "owner": "visible", - "query": { - "and": [ - {}, - { - "sections:all": [ - "nomad.datamodel.results.Simulation" - ] + "query": {}, + "aggregations": { + "mechanical_properties:scroll": { + "terms": { + "exclude_from_search": false, + "quantity": "results.properties.available_properties", + "include": [ + "bulk_modulus", + "shear_modulus", + "energy_volume_curve" + ], + "update": true, + "type": "terms", + "size": 3, + "changed": true } - ] + }, + "results.properties.mechanical.bulk_modulus.type:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.properties.mechanical.bulk_modulus.type" + } + }, + "results.properties.mechanical.bulk_modulus.value:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.properties.mechanical.bulk_modulus.value" + } + }, + "results.properties.mechanical.shear_modulus.type:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.properties.mechanical.shear_modulus.type" + } + }, + "results.properties.mechanical.shear_modulus.value:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.properties.mechanical.shear_modulus.value" + } + }, + "results.properties.mechanical.energy_volume_curve.type:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.properties.mechanical.energy_volume_curve.type" + } + } }, - "aggregations": {}, "pagination": { - "order_by": "upload_create_time", - "order": "desc", - "page_size": 20 + "page_size": 0 }, "required": { - "exclude": [ - "quantities", - "sections", - "files" - ] + "include": [] } }, "headers": { @@ -3028,256 +3361,85 @@ "status": 200, "body": { "owner": "visible", - "query": { - "and": [ - {}, - { - "name": "sections", - "value": { - "all": [ - "nomad.datamodel.results.Simulation" - ] - } - } - ] - }, + "query": {}, "pagination": { - "page_size": 20, - "order_by": "upload_create_time", - "order": "desc", - "total": 3 + "page_size": 0, + "order_by": "entry_id", + "order": "asc", + "total": 15 }, "required": { - "exclude": [ - "quantities", - "sections", - "files" + "include": [ + "entry_id" ] }, - "data": [ - { - "upload_id": "A-1gerweRKOSzhzOnLn60w", - "parser_name": "parsers/vasp", - "origin": "Markus Scheidgen", - "calc_id": "ZxkuBlp6Rx65w8W8Inr-AA", - "published": true, - "writers": [ - { - "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", - "name": "Markus Scheidgen" - } - ], - "datasets": [], - "n_quantities": 0, - "upload_create_time": "2023-01-24T07:45:52.706229+00:00", - "processed": true, - "mainfile": "upload/archive.json", - "main_author": { - "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", - "name": "Markus Scheidgen" - }, - "viewers": [ - { - "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", - "name": "Markus Scheidgen" - } - ], - "entry_create_time": "2023-01-24T07:45:52.711229+00:00", - "publish_time": "2023-01-24T07:45:52.709229+00:00", - "with_embargo": false, - "domain": "dft", - "results": { - "material": { - "elements": [ - "C" - ], - "elements_exclusive": "C", - "chemical_formula_anonymous": "A", - "material_id": "jPcWsq-Rb0gtgx2krJDmLvQUxpcL", - "structural_type": "2D", - "chemical_formula_reduced": "C", - "n_elements": 1, - "chemical_formula_descriptive": "C", - "chemical_formula_hill": "C" - }, - "method": { - "simulation": { - "program_version": "not processed", - "dft": { - "basis_set_type": "unavailable", - "core_electron_treatment": "unavailable", - "xc_functional_type": "not processed", - "xc_functional_names": [ - "LDA_X_PZ", - "LDA_C_PZ" - ] - }, - "program_name": "exciting" - } - }, - "properties": {} - }, - "entry_id": "ZxkuBlp6Rx65w8W8Inr-AA", - "authors": [ - { - "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", - "name": "Markus Scheidgen" - } - ], - "license": "CC BY 4.0" + "aggregations": { + "mechanical_properties:scroll": { + "terms": { + "quantity": "results.properties.available_properties", + "exclude_from_search": false, + "metrics": [], + "size": 3, + "include": [ + "bulk_modulus", + "shear_modulus", + "energy_volume_curve" + ], + "data": [] + } }, - { - "upload_id": "A-1gerweRKOSzhzOnLn60w", - "parser_name": "parsers/vasp", - "origin": "Markus Scheidgen", - "calc_id": "OGB9z0aGTACQopmv9rE0-w", - "published": true, - "writers": [ - { - "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", - "name": "Markus Scheidgen" - } - ], - "datasets": [], - "n_quantities": 0, - "upload_create_time": "2023-01-24T07:45:52.706229+00:00", - "processed": true, - "mainfile": "upload/archive.json", - "main_author": { - "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", - "name": "Markus Scheidgen" - }, - "viewers": [ - { - "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", - "name": "Markus Scheidgen" - } - ], - "entry_create_time": "2023-01-24T07:45:52.712229+00:00", - "publish_time": "2023-01-24T07:45:52.709229+00:00", - "with_embargo": false, - "domain": "dft", - "results": { - "material": { - "elements": [ - "Hf", - "Nb", - "Ta", - "Ti", - "Zr" - ], - "elements_exclusive": "Hf Nb Ta Ti Zr", - "chemical_formula_anonymous": "ABCDE", - "material_id": "aLzu5XmhATsTfEA4sGIiL45caCMq", - "structural_type": "bulk", - "chemical_formula_reduced": "HfNbTaTiZr", - "n_elements": 5, - "chemical_formula_descriptive": "HfNbTaTiZr", - "chemical_formula_hill": "HfNbTaTiZr" - }, - "method": { - "simulation": { - "program_version": "not processed", - "dft": { - "basis_set_type": "unavailable", - "core_electron_treatment": "unavailable", - "xc_functional_type": "not processed", - "xc_functional_names": [ - "GGA_X_PBE_SOL", - "GGA_C_PBE_SOL" - ] - }, - "program_name": "VASP" - } - }, - "properties": {} - }, - "entry_id": "OGB9z0aGTACQopmv9rE0-w", - "authors": [ - { - "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", - "name": "Markus Scheidgen" - } - ], - "license": "CC BY 4.0" + "results.properties.mechanical.bulk_modulus.type:scroll": { + "terms": { + "quantity": "results.properties.mechanical.bulk_modulus.type", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } }, - { - "upload_id": "A-1gerweRKOSzhzOnLn60w", - "parser_name": "parsers/vasp", - "origin": "Markus Scheidgen", - "calc_id": "OANUVbE6Q6m-cDZsUowxwQ", - "published": true, - "writers": [ - { - "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", - "name": "Markus Scheidgen" - } - ], - "datasets": [], - "n_quantities": 0, - "upload_create_time": "2023-01-24T07:45:52.706229+00:00", - "processed": true, - "mainfile": "upload/archive.json", - "main_author": { - "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", - "name": "Markus Scheidgen" - }, - "viewers": [ - { - "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", - "name": "Markus Scheidgen" - } - ], - "entry_create_time": "2023-01-24T07:45:52.710229+00:00", - "publish_time": "2023-01-24T07:45:52.709229+00:00", - "with_embargo": false, - "domain": "dft", - "results": { - "material": { - "elements": [ - "C", - "H" - ], - "elements_exclusive": "C H", - "chemical_formula_anonymous": "AB2", - "material_id": "test_material_id", - "structural_type": "molecule / cluster", - "chemical_formula_reduced": "CH3", - "n_elements": 2, - "chemical_formula_descriptive": "CH3", - "chemical_formula_hill": "CH3" - }, - "method": { - "simulation": { - "program_version": "not processed", - "dft": { - "basis_set_type": "unavailable", - "core_electron_treatment": "unavailable", - "xc_functional_type": "not processed", - "xc_functional_names": [ - "GGA_X_PBE_SOL", - "GGA_C_PBE_SOL" - ] - }, - "program_name": "VASP" - } - }, - "properties": {} - }, - "entry_id": "OANUVbE6Q6m-cDZsUowxwQ", - "authors": [ - { - "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", - "name": "Markus Scheidgen" - } - ], - "license": "CC BY 4.0" + "results.properties.mechanical.bulk_modulus.value:default_histogram": { + "histogram": { + "quantity": "results.properties.mechanical.bulk_modulus.value", + "exclude_from_search": true, + "metrics": [], + "buckets": 30, + "data": [] + } + }, + "results.properties.mechanical.shear_modulus.type:scroll": { + "terms": { + "quantity": "results.properties.mechanical.shear_modulus.type", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + }, + "results.properties.mechanical.shear_modulus.value:default_histogram": { + "histogram": { + "quantity": "results.properties.mechanical.shear_modulus.value", + "exclude_from_search": true, + "metrics": [], + "buckets": 30, + "data": [] + } + }, + "results.properties.mechanical.energy_volume_curve.type:scroll": { + "terms": { + "quantity": "results.properties.mechanical.energy_volume_curve.type", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } } - ] + }, + "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "6955", + "content-length": "1979", "content-type": "application/json", "server": "uvicorn" } @@ -3289,269 +3451,146 @@ "method": "POST", "body": { "owner": "visible", - "query": { - "and": [ - {}, - { - "sections:all": [ - "nomad.datamodel.results.Simulation" - ] - } - ] - }, + "query": {}, "aggregations": { - "results.material.elements:default": { - "terms": { - "exclude_from_search": false, + "results.properties.optoelectronic.solar_cell.efficiency:default_histogram": { + "histogram": { + "exclude_from_search": true, "update": true, - "size": 119, - "type": "terms", + "type": "histogram", + "buckets": 30, "changed": true, - "quantity": "results.material.elements" + "quantity": "results.properties.optoelectronic.solar_cell.efficiency" } }, - "results.material.n_elements:default_histogram": { + "results.properties.optoelectronic.solar_cell.fill_factor:default_histogram": { "histogram": { "exclude_from_search": true, "update": true, "type": "histogram", - "interval": 1, + "buckets": 30, "changed": true, - "quantity": "results.material.n_elements" + "quantity": "results.properties.optoelectronic.solar_cell.fill_factor" } - } - }, - "pagination": { - "page_size": 0 - }, - "required": { - "include": [] - } - }, - "headers": { - "accept": "application/json, text/plain, */*", - "content-type": "application/json", - "cookie": null - } - }, - "response": { - "status": 200, - "body": { - "owner": "visible", - "query": { - "and": [ - {}, - { - "name": "sections", - "value": { - "all": [ - "nomad.datamodel.results.Simulation" - ] - } + }, + "results.properties.optoelectronic.solar_cell.open_circuit_voltage:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.properties.optoelectronic.solar_cell.open_circuit_voltage" } - ] - }, - "pagination": { - "page_size": 0, - "order_by": "entry_id", - "order": "asc", - "total": 3 - }, - "required": { - "include": [ - "entry_id" - ] - }, - "aggregations": { - "results.material.elements:default": { - "terms": { - "quantity": "results.material.elements", - "exclude_from_search": false, - "metrics": [], - "size": 119, - "data": [ - { - "count": 2, - "nested_count": 2, - "value": "C" - }, - { - "count": 1, - "nested_count": 1, - "value": "H" - }, - { - "count": 1, - "nested_count": 1, - "value": "Hf" - }, - { - "count": 1, - "nested_count": 1, - "value": "Nb" - }, - { - "count": 1, - "nested_count": 1, - "value": "Ta" - }, - { - "count": 1, - "nested_count": 1, - "value": "Ti" - }, - { - "count": 1, - "nested_count": 1, - "value": "Zr" - } - ] + }, + "results.properties.optoelectronic.solar_cell.short_circuit_current_density:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.properties.optoelectronic.solar_cell.short_circuit_current_density" } }, - "results.material.n_elements:default_histogram": { + "results.properties.optoelectronic.solar_cell.illumination_intensity:default_histogram": { "histogram": { - "quantity": "results.material.n_elements", "exclude_from_search": true, - "metrics": [], - "interval": 1, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": 1 - }, - { - "count": 1, - "nested_count": 1, - "value": 2 - }, - { - "count": 0, - "nested_count": 0, - "value": 3 - }, - { - "count": 0, - "nested_count": 0, - "value": 4 - }, - { - "count": 1, - "nested_count": 1, - "value": 5 - } - ] + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.properties.optoelectronic.solar_cell.illumination_intensity" } - } - }, - "data": [] - }, - "headers": { - "connection": "close", - "content-length": "2181", - "content-type": "application/json", - "server": "uvicorn" - } - } - }, - { - "request": { - "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/query", - "method": "POST", - "body": { - "owner": "visible", - "query": { - "and": [ - {}, - { - "sections:all": [ - "nomad.datamodel.results.Simulation" - ] + }, + "results.properties.optoelectronic.solar_cell.device_area:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.properties.optoelectronic.solar_cell.device_area" } - ] - }, - "aggregations": { - "results.material.structural_type:scroll": { + }, + "results.properties.optoelectronic.solar_cell.device_architecture:scroll": { "terms": { "exclude_from_search": true, "update": true, - "size": 6, + "size": 5, "type": "terms", - "include": [ - "bulk", - "surface", - "2D", - "1D", - "molecule / cluster", - "atom" - ], "changed": true, - "quantity": "results.material.structural_type" + "quantity": "results.properties.optoelectronic.solar_cell.device_architecture" } }, - "results.material.symmetry.bravais_lattice:scroll": { + "results.properties.optoelectronic.solar_cell.device_stack:scroll": { "terms": { - "exclude_from_search": true, + "exclude_from_search": false, "update": true, - "size": 14, + "size": 5, "type": "terms", - "include": [ - "aP", - "mP", - "mS", - "oP", - "oS", - "oF", - "oI", - "tP", - "tI", - "hP", - "hR", - "cP", - "cF", - "cI" - ], "changed": true, - "quantity": "results.material.symmetry.bravais_lattice" + "quantity": "results.properties.optoelectronic.solar_cell.device_stack" } }, - "results.material.symmetry.crystal_system:scroll": { + "results.properties.optoelectronic.solar_cell.absorber:scroll": { "terms": { - "exclude_from_search": true, + "exclude_from_search": false, "update": true, - "size": 7, + "size": 5, "type": "terms", - "include": [ - "triclinic", - "monoclinic", - "orthorhombic", - "tetragonal", - "trigonal", - "hexagonal", - "cubic" - ], "changed": true, - "quantity": "results.material.symmetry.crystal_system" + "quantity": "results.properties.optoelectronic.solar_cell.absorber" } }, - "results.material.symmetry.structure_name:scroll": { + "results.properties.optoelectronic.solar_cell.absorber_fabrication:scroll": { "terms": { "exclude_from_search": true, "update": true, "size": 5, "type": "terms", "changed": true, - "quantity": "results.material.symmetry.structure_name" + "quantity": "results.properties.optoelectronic.solar_cell.absorber_fabrication" } }, - "results.material.symmetry.strukturbericht_designation:scroll": { + "results.properties.optoelectronic.solar_cell.electron_transport_layer:scroll": { "terms": { - "exclude_from_search": true, + "exclude_from_search": false, "update": true, "size": 5, "type": "terms", "changed": true, - "quantity": "results.material.symmetry.strukturbericht_designation" + "quantity": "results.properties.optoelectronic.solar_cell.electron_transport_layer" + } + }, + "results.properties.optoelectronic.solar_cell.hole_transport_layer:scroll": { + "terms": { + "exclude_from_search": false, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.properties.optoelectronic.solar_cell.hole_transport_layer" + } + }, + "results.properties.optoelectronic.solar_cell.substrate:scroll": { + "terms": { + "exclude_from_search": false, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.properties.optoelectronic.solar_cell.substrate" + } + }, + "results.properties.optoelectronic.solar_cell.back_contact:scroll": { + "terms": { + "exclude_from_search": false, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.properties.optoelectronic.solar_cell.back_contact" } } }, @@ -3572,24 +3611,12 @@ "status": 200, "body": { "owner": "visible", - "query": { - "and": [ - {}, - { - "name": "sections", - "value": { - "all": [ - "nomad.datamodel.results.Simulation" - ] - } - } - ] - }, + "query": {}, "pagination": { "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 3 + "total": 15 }, "required": { "include": [ @@ -3597,106 +3624,259 @@ ] }, "aggregations": { - "results.material.structural_type:scroll": { - "terms": { - "quantity": "results.material.structural_type", + "results.properties.optoelectronic.solar_cell.efficiency:default_histogram": { + "histogram": { + "quantity": "results.properties.optoelectronic.solar_cell.efficiency", "exclude_from_search": true, "metrics": [], - "size": 6, - "include": [ - "bulk", - "surface", - "2D", - "1D", - "molecule / cluster", - "atom" - ], + "buckets": 30, + "offset": 15.9, "data": [ { - "count": 1, - "nested_count": 1, - "value": "2D" - }, - { - "count": 1, - "nested_count": 1, - "value": "bulk" - }, - { - "count": 1, - "nested_count": 1, - "value": "molecule / cluster" + "count": 3, + "nested_count": 3, + "value": 15.9 } ] } }, - "results.material.symmetry.bravais_lattice:scroll": { - "terms": { - "quantity": "results.material.symmetry.bravais_lattice", + "results.properties.optoelectronic.solar_cell.fill_factor:default_histogram": { + "histogram": { + "quantity": "results.properties.optoelectronic.solar_cell.fill_factor", "exclude_from_search": true, "metrics": [], - "size": 14, - "include": [ - "aP", - "mP", - "mS", - "oP", - "oS", - "oF", - "oI", - "tP", - "tI", - "hP", - "hR", - "cP", - "cF", - "cI" - ], - "data": [] + "buckets": 30, + "offset": 0.78, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": 0.78 + } + ] } }, - "results.material.symmetry.crystal_system:scroll": { - "terms": { - "quantity": "results.material.symmetry.crystal_system", + "results.properties.optoelectronic.solar_cell.open_circuit_voltage:default_histogram": { + "histogram": { + "quantity": "results.properties.optoelectronic.solar_cell.open_circuit_voltage", "exclude_from_search": true, "metrics": [], - "size": 7, - "include": [ - "triclinic", - "monoclinic", - "orthorhombic", - "tetragonal", - "trigonal", - "hexagonal", - "cubic" - ], - "data": [] + "buckets": 30, + "offset": 1, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": 1 + } + ] } }, - "results.material.symmetry.structure_name:scroll": { + "results.properties.optoelectronic.solar_cell.short_circuit_current_density:default_histogram": { + "histogram": { + "quantity": "results.properties.optoelectronic.solar_cell.short_circuit_current_density", + "exclude_from_search": true, + "metrics": [], + "buckets": 30, + "offset": 203, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": 203 + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.illumination_intensity:default_histogram": { + "histogram": { + "quantity": "results.properties.optoelectronic.solar_cell.illumination_intensity", + "exclude_from_search": true, + "metrics": [], + "buckets": 30, + "offset": 1000, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": 1000 + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.device_area:default_histogram": { + "histogram": { + "quantity": "results.properties.optoelectronic.solar_cell.device_area", + "exclude_from_search": true, + "metrics": [], + "buckets": 30, + "offset": 0.0000125, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": 0.0000125 + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.device_architecture:scroll": { "terms": { - "quantity": "results.material.symmetry.structure_name", + "quantity": "results.properties.optoelectronic.solar_cell.device_architecture", "exclude_from_search": true, "metrics": [], "size": 5, - "data": [] + "data": [ + { + "count": 3, + "nested_count": 3, + "value": "pin" + } + ] } }, - "results.material.symmetry.strukturbericht_designation:scroll": { + "results.properties.optoelectronic.solar_cell.device_stack:scroll": { "terms": { - "quantity": "results.material.symmetry.strukturbericht_designation", + "quantity": "results.properties.optoelectronic.solar_cell.device_stack", + "exclude_from_search": false, + "metrics": [], + "size": 5, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": "Ag" + }, + { + "count": 3, + "nested_count": 3, + "value": "BCP" + }, + { + "count": 3, + "nested_count": 3, + "value": "ITO" + }, + { + "count": 3, + "nested_count": 3, + "value": "PCBM-60" + }, + { + "count": 3, + "nested_count": 3, + "value": "PEDOT:PSS" + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.absorber:scroll": { + "terms": { + "quantity": "results.properties.optoelectronic.solar_cell.absorber", + "exclude_from_search": false, + "metrics": [], + "size": 5, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": "MAPbI" + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.absorber_fabrication:scroll": { + "terms": { + "quantity": "results.properties.optoelectronic.solar_cell.absorber_fabrication", "exclude_from_search": true, "metrics": [], "size": 5, - "data": [] + "data": [ + { + "count": 3, + "nested_count": 3, + "value": "Spin-coating" + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.electron_transport_layer:scroll": { + "terms": { + "quantity": "results.properties.optoelectronic.solar_cell.electron_transport_layer", + "exclude_from_search": false, + "metrics": [], + "size": 5, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": "BCP" + }, + { + "count": 3, + "nested_count": 3, + "value": "PCBM-60" + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.hole_transport_layer:scroll": { + "terms": { + "quantity": "results.properties.optoelectronic.solar_cell.hole_transport_layer", + "exclude_from_search": false, + "metrics": [], + "size": 5, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": "PEDOT:PSS" + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.substrate:scroll": { + "terms": { + "quantity": "results.properties.optoelectronic.solar_cell.substrate", + "exclude_from_search": false, + "metrics": [], + "size": 5, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": "ITO" + }, + { + "count": 3, + "nested_count": 3, + "value": "SLG" + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.back_contact:scroll": { + "terms": { + "quantity": "results.properties.optoelectronic.solar_cell.back_contact", + "exclude_from_search": false, + "metrics": [], + "size": 5, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": "Ag" + } + ] } } }, "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "2640", + "content-length": "6906", "content-type": "application/json", "server": "uvicorn" } @@ -3708,115 +3888,36 @@ "method": "POST", "body": { "owner": "visible", - "query": { - "and": [ - {}, - { - "sections:all": [ - "nomad.datamodel.results.Simulation" - ] - } - ] - }, + "query": {}, "aggregations": { - "results.method.simulation.dft.xc_functional_type:scroll": { - "terms": { - "exclude_from_search": true, - "update": true, - "size": 8, - "type": "terms", - "include": [ - "GGA", - "HF", - "OEP", - "hybrid", - "meta-GGA", - "vdW", - "LDA", - "unavailable" - ], - "changed": true, - "quantity": "results.method.simulation.dft.xc_functional_type" - } - }, - "results.method.simulation.dft.xc_functional_names:scroll": { - "terms": { - "exclude_from_search": false, - "update": true, - "size": 5, - "type": "terms", - "changed": true, - "quantity": "results.method.simulation.dft.xc_functional_names" - } - }, - "results.method.simulation.dft.exact_exchange_mixing_factor:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "buckets": 30, - "changed": true, - "quantity": "results.method.simulation.dft.exact_exchange_mixing_factor" - } - }, - "results.method.simulation.dft.hubbard_kanamori_model.u_effective:default_histogram": { + "upload_create_time:default_histogram": { "histogram": { "exclude_from_search": true, "update": true, "type": "histogram", "buckets": 30, "changed": true, - "quantity": "results.method.simulation.dft.hubbard_kanamori_model.u_effective" + "quantity": "upload_create_time" } }, - "results.method.simulation.dft.basis_set_type:scroll": { + "external_db:scroll": { "terms": { "exclude_from_search": true, "update": true, - "size": 7, + "size": 5, "type": "terms", - "include": [ - "(L)APW+lo", - "gaussians", - "numeric AOs", - "plane waves", - "psinc functions", - "real-space grid", - "unavailable" - ], "changed": true, - "quantity": "results.method.simulation.dft.basis_set_type" + "quantity": "external_db" } }, - "results.method.simulation.dft.core_electron_treatment:scroll": { + "datasets.dataset_name:scroll": { "terms": { "exclude_from_search": true, "update": true, - "size": 4, + "size": 10, "type": "terms", - "include": [ - "full all electron", - "all electron frozen core", - "pseudopotential", - "unavailable" - ], "changed": true, - "quantity": "results.method.simulation.dft.core_electron_treatment" - } - }, - "results.method.simulation.dft.relativity_method:scroll": { - "terms": { - "exclude_from_search": true, - "update": true, - "size": 3, - "type": "terms", - "include": [ - "scalar_relativistic", - "pseudo_scalar_relativistic", - "scalar_relativistic_atomic_ZORA" - ], - "changed": true, - "quantity": "results.method.simulation.dft.relativity_method" + "quantity": "datasets.dataset_name" } } }, @@ -3837,24 +3938,12 @@ "status": 200, "body": { "owner": "visible", - "query": { - "and": [ - {}, - { - "name": "sections", - "value": { - "all": [ - "nomad.datamodel.results.Simulation" - ] - } - } - ] - }, + "query": {}, "pagination": { "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 3 + "total": 15 }, "required": { "include": [ @@ -3862,129 +3951,183 @@ ] }, "aggregations": { - "results.method.simulation.dft.xc_functional_type:scroll": { - "terms": { - "quantity": "results.method.simulation.dft.xc_functional_type", + "upload_create_time:default_histogram": { + "histogram": { + "quantity": "upload_create_time", "exclude_from_search": true, "metrics": [], - "size": 8, - "include": [ - "GGA", - "HF", - "OEP", - "hybrid", - "meta-GGA", - "vdW", - "LDA", - "unavailable" - ], - "data": [] - } - }, - "results.method.simulation.dft.xc_functional_names:scroll": { - "terms": { - "quantity": "results.method.simulation.dft.xc_functional_names", - "exclude_from_search": false, - "metrics": [], - "size": 5, + "interval": 49463, + "buckets": 30, + "offset": 1697463085648, "data": [ { - "count": 2, - "nested_count": 2, - "value": "GGA_C_PBE_SOL" + "count": 5, + "nested_count": 5, + "value": 1697463085648 }, { - "count": 2, - "nested_count": 2, - "value": "GGA_X_PBE_SOL" + "count": 0, + "nested_count": 0, + "value": 1697463135111 }, { - "count": 1, - "nested_count": 1, - "value": "LDA_C_PZ" + "count": 0, + "nested_count": 0, + "value": 1697463184574 }, { - "count": 1, - "nested_count": 1, - "value": "LDA_X_PZ" - } - ] - } - }, - "results.method.simulation.dft.exact_exchange_mixing_factor:default_histogram": { - "histogram": { - "quantity": "results.method.simulation.dft.exact_exchange_mixing_factor", - "exclude_from_search": true, - "metrics": [], - "buckets": 30, - "data": [] - } - }, - "results.method.simulation.dft.hubbard_kanamori_model.u_effective:default_histogram": { - "histogram": { - "quantity": "results.method.simulation.dft.hubbard_kanamori_model.u_effective", - "exclude_from_search": true, - "metrics": [], - "buckets": 30, - "data": [] - } - }, - "results.method.simulation.dft.basis_set_type:scroll": { - "terms": { - "quantity": "results.method.simulation.dft.basis_set_type", - "exclude_from_search": true, - "metrics": [], - "size": 7, - "include": [ - "(L)APW+lo", - "gaussians", - "numeric AOs", - "plane waves", - "psinc functions", - "real-space grid", - "unavailable" - ], - "data": [ + "count": 0, + "nested_count": 0, + "value": 1697463234037 + }, { - "count": 3, - "nested_count": 3, - "value": "unavailable" + "count": 0, + "nested_count": 0, + "value": 1697463283500 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463332963 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463382426 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463431889 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463481352 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463530815 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463580278 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463629741 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463679204 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463728667 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463778130 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463827593 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463877056 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463926519 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463975982 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464025445 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464074908 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464124371 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464173834 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464223297 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464272760 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464322223 + }, + { + "count": 5, + "nested_count": 5, + "value": 1697464371686 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464421149 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464470612 + }, + { + "count": 5, + "nested_count": 5, + "value": 1697464520075 } ] } }, - "results.method.simulation.dft.core_electron_treatment:scroll": { + "external_db:scroll": { "terms": { - "quantity": "results.method.simulation.dft.core_electron_treatment", + "quantity": "external_db", "exclude_from_search": true, "metrics": [], - "size": 4, - "include": [ - "full all electron", - "all electron frozen core", - "pseudopotential", - "unavailable" - ], - "data": [ - { - "count": 3, - "nested_count": 3, - "value": "unavailable" - } - ] + "size": 5, + "data": [] } }, - "results.method.simulation.dft.relativity_method:scroll": { + "datasets.dataset_name:scroll": { "terms": { - "quantity": "results.method.simulation.dft.relativity_method", + "quantity": "datasets.dataset_name", "exclude_from_search": true, "metrics": [], - "size": 3, - "include": [ - "scalar_relativistic", - "pseudo_scalar_relativistic", - "scalar_relativistic_atomic_ZORA" - ], + "size": 10, "data": [] } } @@ -3992,8 +4135,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "3798", + "content-length": "4460", "content-type": "application/json", "server": "uvicorn" } @@ -4009,230 +4153,24 @@ "and": [ {}, { - "sections:all": [ - "nomad.datamodel.results.Simulation" + "quantities:all": [ + "results.method.simulation.program_name" ] } ] }, - "aggregations": { - "results.method.simulation.gw.type:scroll": { - "terms": { - "exclude_from_search": true, - "update": true, - "size": 6, - "type": "terms", - "include": [ - "G0W0", - "scGW", - "scGW0", - "scG0W", - "ev-scGW", - "qp-scGW" - ], - "changed": true, - "quantity": "results.method.simulation.gw.type" - } - }, - "results.method.simulation.gw.starting_point_type:scroll": { - "terms": { - "exclude_from_search": true, - "update": true, - "size": 8, - "type": "terms", - "include": [ - "GGA", - "HF", - "OEP", - "hybrid", - "meta-GGA", - "vdW", - "LDA", - "unavailable" - ], - "changed": true, - "quantity": "results.method.simulation.gw.starting_point_type" - } - }, - "results.method.simulation.gw.basis_set_type:scroll": { - "terms": { - "exclude_from_search": true, - "update": true, - "size": 7, - "type": "terms", - "include": [ - "(L)APW+lo", - "gaussians", - "numeric AOs", - "plane waves", - "psinc functions", - "real-space grid", - "unavailable" - ], - "changed": true, - "quantity": "results.method.simulation.gw.basis_set_type" - } - } - }, - "pagination": { - "page_size": 0 - }, - "required": { - "include": [] - } - }, - "headers": { - "accept": "application/json, text/plain, */*", - "content-type": "application/json", - "cookie": null - } - }, - "response": { - "status": 200, - "body": { - "owner": "visible", - "query": { - "and": [ - {}, - { - "name": "sections", - "value": { - "all": [ - "nomad.datamodel.results.Simulation" - ] - } - } - ] - }, + "aggregations": {}, "pagination": { - "page_size": 0, - "order_by": "entry_id", - "order": "asc", - "total": 3 + "order_by": "upload_create_time", + "order": "desc", + "page_size": 20 }, "required": { - "include": [ - "entry_id" - ] - }, - "aggregations": { - "results.method.simulation.gw.type:scroll": { - "terms": { - "quantity": "results.method.simulation.gw.type", - "exclude_from_search": true, - "metrics": [], - "size": 6, - "include": [ - "G0W0", - "scGW", - "scGW0", - "scG0W", - "ev-scGW", - "qp-scGW" - ], - "data": [] - } - }, - "results.method.simulation.gw.starting_point_type:scroll": { - "terms": { - "quantity": "results.method.simulation.gw.starting_point_type", - "exclude_from_search": true, - "metrics": [], - "size": 8, - "include": [ - "GGA", - "HF", - "OEP", - "hybrid", - "meta-GGA", - "vdW", - "LDA", - "unavailable" - ], - "data": [] - } - }, - "results.method.simulation.gw.basis_set_type:scroll": { - "terms": { - "quantity": "results.method.simulation.gw.basis_set_type", - "exclude_from_search": true, - "metrics": [], - "size": 7, - "include": [ - "(L)APW+lo", - "gaussians", - "numeric AOs", - "plane waves", - "psinc functions", - "real-space grid", - "unavailable" - ], - "data": [] - } - } - }, - "data": [] - }, - "headers": { - "connection": "close", - "content-length": "1729", - "content-type": "application/json", - "server": "uvicorn" - } - } - }, - { - "request": { - "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/query", - "method": "POST", - "body": { - "owner": "visible", - "query": { - "and": [ - {}, - { - "sections:all": [ - "nomad.datamodel.results.Simulation" - ] - } + "exclude": [ + "quantities", + "sections", + "files" ] - }, - "aggregations": { - "results.method.simulation.projection.type:scroll": { - "terms": { - "exclude_from_search": true, - "update": true, - "size": 3, - "type": "terms", - "include": [ - "wannier", - "slater_koster", - "custom" - ], - "changed": true, - "quantity": "results.method.simulation.projection.type" - } - }, - "results.method.simulation.projection.localization_type:scroll": { - "terms": { - "exclude_from_search": true, - "update": true, - "size": 2, - "type": "terms", - "include": [ - "single_shot", - "maximally_localized" - ], - "changed": true, - "quantity": "results.method.simulation.projection.localization_type" - } - } - }, - "pagination": { - "page_size": 0 - }, - "required": { - "include": [] } }, "headers": { @@ -4249,281 +4187,489 @@ "and": [ {}, { - "name": "sections", + "name": "quantities", "value": { "all": [ - "nomad.datamodel.results.Simulation" + "results.method.simulation.program_name" ] } } ] }, "pagination": { - "page_size": 0, - "order_by": "entry_id", - "order": "asc", - "total": 3 + "page_size": 20, + "order_by": "upload_create_time", + "order": "desc", + "total": 6 }, "required": { - "include": [ - "entry_id" + "exclude": [ + "quantities", + "sections", + "files" ] }, - "aggregations": { - "results.method.simulation.projection.type:scroll": { - "terms": { - "quantity": "results.method.simulation.projection.type", - "exclude_from_search": true, - "metrics": [], - "size": 3, - "include": [ - "wannier", - "slater_koster", - "custom" - ], - "data": [] - } + "data": [ + { + "upload_id": "l1h8M0AWQp2sxCZoavf7Vg", + "parser_name": "parsers/vasp", + "origin": "Markus Scheidgen", + "calc_id": "eWQ35GCSR7itWrH9oYkWIg", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "n_quantities": 0, + "upload_create_time": "2023-10-16T13:56:09.514868+00:00", + "processed": true, + "mainfile": "upload/archive.json", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:56:09.518868+00:00", + "publish_time": "2023-10-16T13:56:09.517868+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": { + "elements": [ + "C", + "H" + ], + "elements_exclusive": "C H", + "chemical_formula_anonymous": "AB2", + "material_id": "test_material_id", + "structural_type": "molecule / cluster", + "chemical_formula_reduced": "CH3", + "n_elements": 2, + "chemical_formula_descriptive": "CH3", + "chemical_formula_hill": "CH3" + }, + "method": { + "simulation": { + "program_version": "not processed", + "dft": { + "basis_set_type": "unavailable", + "core_electron_treatment": "unavailable", + "xc_functional_type": "not processed", + "xc_functional_names": [ + "GGA_X_PBE_SOL", + "GGA_C_PBE_SOL" + ], + "jacobs_ladder": "not processed" + }, + "program_name": "VASP" + } + }, + "properties": { + "available_properties": [] + } + }, + "entry_id": "eWQ35GCSR7itWrH9oYkWIg", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "license": "CC BY 4.0" }, - "results.method.simulation.projection.localization_type:scroll": { - "terms": { - "quantity": "results.method.simulation.projection.localization_type", - "exclude_from_search": true, - "metrics": [], - "size": 2, - "include": [ - "single_shot", - "maximally_localized" - ], - "data": [] - } - } - }, - "data": [] - }, - "headers": { - "connection": "close", - "content-length": "1149", - "content-type": "application/json", - "server": "uvicorn" - } - } - }, - { - "request": { - "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/query", - "method": "POST", - "body": { - "owner": "visible", - "query": { - "and": [ - {}, - { - "sections:all": [ - "nomad.datamodel.results.Simulation" - ] - } - ] - }, - "aggregations": { - "results.method.simulation.dmft.impurity_solver_type:scroll": { - "terms": { - "exclude_from_search": true, - "update": true, - "size": 11, - "type": "terms", - "include": [ - "CT-INT", - "CT-HYB", - "CT-AUX", - "ED", - "NRG", - "MPS", - "IPT", - "NCA", - "OCA", - "slave_bosons", - "hubbard_I" - ], - "changed": true, - "quantity": "results.method.simulation.dmft.impurity_solver_type" - } - }, - "results.method.simulation.dmft.total_filling:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "buckets": 30, - "changed": true, - "quantity": "results.method.simulation.dmft.total_filling" - } - }, - "results.method.simulation.dmft.inverse_temperature:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "buckets": 30, - "changed": true, - "quantity": "results.method.simulation.dmft.inverse_temperature" - } - }, - "results.method.simulation.dmft.magnetic_state:scroll": { - "terms": { - "exclude_from_search": true, - "update": true, - "size": 3, - "type": "terms", - "include": [ - "paramagnetic", - "ferromagnetic", - "antiferromagnetic" - ], - "changed": true, - "quantity": "results.method.simulation.dmft.magnetic_state" - } + { + "upload_id": "l1h8M0AWQp2sxCZoavf7Vg", + "parser_name": "parsers/vasp", + "origin": "Markus Scheidgen", + "calc_id": "Z70j6Ab4QW6wq3x45nGsGQ", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "n_quantities": 0, + "upload_create_time": "2023-10-16T13:56:09.514868+00:00", + "processed": true, + "mainfile": "upload/archive.json", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:56:09.519868+00:00", + "publish_time": "2023-10-16T13:56:09.517868+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": { + "elements": [ + "C" + ], + "elements_exclusive": "C", + "chemical_formula_anonymous": "A", + "material_id": "jPcWsq-Rb0gtgx2krJDmLvQUxpcL", + "structural_type": "2D", + "chemical_formula_reduced": "C", + "n_elements": 1, + "chemical_formula_descriptive": "C", + "chemical_formula_hill": "C" + }, + "method": { + "simulation": { + "program_version": "not processed", + "dft": { + "basis_set_type": "unavailable", + "core_electron_treatment": "unavailable", + "xc_functional_type": "not processed", + "xc_functional_names": [ + "LDA_X_PZ", + "LDA_C_PZ" + ], + "jacobs_ladder": "not processed" + }, + "program_name": "exciting" + } + }, + "properties": { + "available_properties": [] + } + }, + "entry_id": "Z70j6Ab4QW6wq3x45nGsGQ", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "license": "CC BY 4.0" }, - "results.method.simulation.dmft.u:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "buckets": 30, - "changed": true, - "quantity": "results.method.simulation.dmft.u" - } + { + "upload_id": "l1h8M0AWQp2sxCZoavf7Vg", + "parser_name": "parsers/vasp", + "origin": "Markus Scheidgen", + "calc_id": "YCXRUIbWSvuJlfEhY8tAwA", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "n_quantities": 0, + "upload_create_time": "2023-10-16T13:56:09.514868+00:00", + "processed": true, + "mainfile": "upload/archive.json", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:56:09.520868+00:00", + "publish_time": "2023-10-16T13:56:09.517868+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": { + "elements": [ + "Hf", + "Nb", + "Ta", + "Ti", + "Zr" + ], + "elements_exclusive": "Hf Nb Ta Ti Zr", + "chemical_formula_anonymous": "ABCDE", + "material_id": "aLzu5XmhATsTfEA4sGIiL45caCMq", + "structural_type": "bulk", + "chemical_formula_reduced": "HfNbTaTiZr", + "n_elements": 5, + "chemical_formula_descriptive": "HfNbTaTiZr", + "chemical_formula_hill": "HfNbTaTiZr" + }, + "method": { + "simulation": { + "program_version": "not processed", + "dft": { + "basis_set_type": "unavailable", + "core_electron_treatment": "unavailable", + "xc_functional_type": "not processed", + "xc_functional_names": [ + "GGA_X_PBE_SOL", + "GGA_C_PBE_SOL" + ], + "jacobs_ladder": "not processed" + }, + "program_name": "VASP" + } + }, + "properties": { + "available_properties": [] + } + }, + "entry_id": "YCXRUIbWSvuJlfEhY8tAwA", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "license": "CC BY 4.0" }, - "results.method.simulation.dmft.hunds_hubbard_ratio:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "buckets": 30, - "changed": true, - "quantity": "results.method.simulation.dmft.hunds_hubbard_ratio" - } - } - }, - "pagination": { - "page_size": 0 - }, - "required": { - "include": [] - } - }, - "headers": { - "accept": "application/json, text/plain, */*", - "content-type": "application/json", - "cookie": null - } - }, - "response": { - "status": 200, - "body": { - "owner": "visible", - "query": { - "and": [ - {}, - { - "name": "sections", - "value": { - "all": [ - "nomad.datamodel.results.Simulation" - ] + { + "upload_id": "iG8xjpHjS8GKltt3vLssdg", + "parser_name": "parsers/vasp", + "origin": "Markus Scheidgen", + "calc_id": "fFgUgBWZRseVNU5xSssHIQ", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" } - } - ] - }, - "pagination": { - "page_size": 0, - "order_by": "entry_id", - "order": "asc", - "total": 3 - }, - "required": { - "include": [ - "entry_id" - ] - }, - "aggregations": { - "results.method.simulation.dmft.impurity_solver_type:scroll": { - "terms": { - "quantity": "results.method.simulation.dmft.impurity_solver_type", - "exclude_from_search": true, - "metrics": [], - "size": 11, - "include": [ - "CT-INT", - "CT-HYB", - "CT-AUX", - "ED", - "NRG", - "MPS", - "IPT", - "NCA", - "OCA", - "slave_bosons", - "hubbard_I" - ], - "data": [] - } - }, - "results.method.simulation.dmft.total_filling:default_histogram": { - "histogram": { - "quantity": "results.method.simulation.dmft.total_filling", - "exclude_from_search": true, - "metrics": [], - "buckets": 30, - "data": [] - } - }, - "results.method.simulation.dmft.inverse_temperature:default_histogram": { - "histogram": { - "quantity": "results.method.simulation.dmft.inverse_temperature", - "exclude_from_search": true, - "metrics": [], - "buckets": 30, - "data": [] - } - }, - "results.method.simulation.dmft.magnetic_state:scroll": { - "terms": { - "quantity": "results.method.simulation.dmft.magnetic_state", - "exclude_from_search": true, - "metrics": [], - "size": 3, - "include": [ - "paramagnetic", - "ferromagnetic", - "antiferromagnetic" - ], - "data": [] - } + ], + "datasets": [], + "n_quantities": 0, + "upload_create_time": "2023-10-16T13:53:06.120628+00:00", + "processed": true, + "mainfile": "upload/archive.json", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:53:06.126628+00:00", + "publish_time": "2023-10-16T13:53:06.123628+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": { + "elements": [ + "Hf", + "Nb", + "Ta", + "Ti", + "Zr" + ], + "elements_exclusive": "Hf Nb Ta Ti Zr", + "chemical_formula_anonymous": "ABCDE", + "material_id": "aLzu5XmhATsTfEA4sGIiL45caCMq", + "structural_type": "bulk", + "chemical_formula_reduced": "HfNbTaTiZr", + "n_elements": 5, + "chemical_formula_descriptive": "HfNbTaTiZr", + "chemical_formula_hill": "HfNbTaTiZr" + }, + "method": { + "simulation": { + "program_version": "not processed", + "dft": { + "basis_set_type": "unavailable", + "core_electron_treatment": "unavailable", + "xc_functional_type": "not processed", + "xc_functional_names": [ + "GGA_X_PBE_SOL", + "GGA_C_PBE_SOL" + ], + "jacobs_ladder": "not processed" + }, + "program_name": "VASP" + } + }, + "properties": { + "available_properties": [] + } + }, + "entry_id": "fFgUgBWZRseVNU5xSssHIQ", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "license": "CC BY 4.0" }, - "results.method.simulation.dmft.u:default_histogram": { - "histogram": { - "quantity": "results.method.simulation.dmft.u", - "exclude_from_search": true, - "metrics": [], - "buckets": 30, - "data": [] - } + { + "upload_id": "iG8xjpHjS8GKltt3vLssdg", + "parser_name": "parsers/vasp", + "origin": "Markus Scheidgen", + "calc_id": "cwZ4FT1aTWKUrgasGR-8MQ", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "n_quantities": 0, + "upload_create_time": "2023-10-16T13:53:06.120628+00:00", + "processed": true, + "mainfile": "upload/archive.json", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:53:06.125628+00:00", + "publish_time": "2023-10-16T13:53:06.123628+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": { + "elements": [ + "C" + ], + "elements_exclusive": "C", + "chemical_formula_anonymous": "A", + "material_id": "jPcWsq-Rb0gtgx2krJDmLvQUxpcL", + "structural_type": "2D", + "chemical_formula_reduced": "C", + "n_elements": 1, + "chemical_formula_descriptive": "C", + "chemical_formula_hill": "C" + }, + "method": { + "simulation": { + "program_version": "not processed", + "dft": { + "basis_set_type": "unavailable", + "core_electron_treatment": "unavailable", + "xc_functional_type": "not processed", + "xc_functional_names": [ + "LDA_X_PZ", + "LDA_C_PZ" + ], + "jacobs_ladder": "not processed" + }, + "program_name": "exciting" + } + }, + "properties": { + "available_properties": [] + } + }, + "entry_id": "cwZ4FT1aTWKUrgasGR-8MQ", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "license": "CC BY 4.0" }, - "results.method.simulation.dmft.hunds_hubbard_ratio:default_histogram": { - "histogram": { - "quantity": "results.method.simulation.dmft.hunds_hubbard_ratio", - "exclude_from_search": true, - "metrics": [], - "buckets": 30, - "data": [] - } + { + "upload_id": "iG8xjpHjS8GKltt3vLssdg", + "parser_name": "parsers/vasp", + "origin": "Markus Scheidgen", + "calc_id": "DEwHOiivSXWnvf1kvFP97Q", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "n_quantities": 0, + "upload_create_time": "2023-10-16T13:53:06.120628+00:00", + "processed": true, + "mainfile": "upload/archive.json", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:53:06.124628+00:00", + "publish_time": "2023-10-16T13:53:06.123628+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": { + "elements": [ + "C", + "H" + ], + "elements_exclusive": "C H", + "chemical_formula_anonymous": "AB2", + "material_id": "test_material_id", + "structural_type": "molecule / cluster", + "chemical_formula_reduced": "CH3", + "n_elements": 2, + "chemical_formula_descriptive": "CH3", + "chemical_formula_hill": "CH3" + }, + "method": { + "simulation": { + "program_version": "not processed", + "dft": { + "basis_set_type": "unavailable", + "core_electron_treatment": "unavailable", + "xc_functional_type": "not processed", + "xc_functional_names": [ + "GGA_X_PBE_SOL", + "GGA_C_PBE_SOL" + ], + "jacobs_ladder": "not processed" + }, + "program_name": "VASP" + } + }, + "properties": { + "available_properties": [] + } + }, + "entry_id": "DEwHOiivSXWnvf1kvFP97Q", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "license": "CC BY 4.0" } - }, - "data": [] + ] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "2432", + "content-length": "14026", "content-type": "application/json", "server": "uvicorn" } @@ -4539,53 +4685,31 @@ "and": [ {}, { - "sections:all": [ - "nomad.datamodel.results.Simulation" + "quantities:all": [ + "results.method.simulation.program_name" ] } ] }, "aggregations": { - "results.properties.thermodynamic.trajectory.available_properties:scroll": { + "results.material.elements:default": { "terms": { "exclude_from_search": false, "update": true, - "size": 4, - "type": "terms", - "include": [ - "temperature", - "pressure", - "volume", - "energy_potential" - ], - "changed": true, - "quantity": "results.properties.thermodynamic.trajectory.available_properties" - } - }, - "results.properties.thermodynamic.trajectory.methodology.molecular_dynamics.ensemble_type:scroll": { - "terms": { - "exclude_from_search": true, - "update": true, - "size": 4, + "size": 119, "type": "terms", - "include": [ - "NVE", - "NVT", - "NPT", - "NPH" - ], "changed": true, - "quantity": "results.properties.thermodynamic.trajectory.methodology.molecular_dynamics.ensemble_type" + "quantity": "results.material.elements" } }, - "results.properties.thermodynamic.trajectory.methodology.molecular_dynamics.time_step:default_histogram": { + "results.material.n_elements:default_histogram": { "histogram": { "exclude_from_search": true, "update": true, "type": "histogram", - "buckets": 30, + "interval": 1, "changed": true, - "quantity": "results.properties.thermodynamic.trajectory.methodology.molecular_dynamics.time_step" + "quantity": "results.material.n_elements" } } }, @@ -4610,10 +4734,10 @@ "and": [ {}, { - "name": "sections", + "name": "quantities", "value": { "all": [ - "nomad.datamodel.results.Simulation" + "results.method.simulation.program_name" ] } } @@ -4623,7 +4747,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 3 + "total": 6 }, "required": { "include": [ @@ -4631,51 +4755,93 @@ ] }, "aggregations": { - "results.properties.thermodynamic.trajectory.available_properties:scroll": { + "results.material.elements:default": { "terms": { - "quantity": "results.properties.thermodynamic.trajectory.available_properties", + "quantity": "results.material.elements", "exclude_from_search": false, "metrics": [], - "size": 4, - "include": [ - "temperature", - "pressure", - "volume", - "energy_potential" - ], - "data": [] - } - }, - "results.properties.thermodynamic.trajectory.methodology.molecular_dynamics.ensemble_type:scroll": { - "terms": { - "quantity": "results.properties.thermodynamic.trajectory.methodology.molecular_dynamics.ensemble_type", - "exclude_from_search": true, - "metrics": [], - "size": 4, - "include": [ - "NVE", - "NVT", - "NPT", - "NPH" - ], - "data": [] + "size": 119, + "data": [ + { + "count": 4, + "nested_count": 4, + "value": "C" + }, + { + "count": 2, + "nested_count": 2, + "value": "H" + }, + { + "count": 2, + "nested_count": 2, + "value": "Hf" + }, + { + "count": 2, + "nested_count": 2, + "value": "Nb" + }, + { + "count": 2, + "nested_count": 2, + "value": "Ta" + }, + { + "count": 2, + "nested_count": 2, + "value": "Ti" + }, + { + "count": 2, + "nested_count": 2, + "value": "Zr" + } + ] } }, - "results.properties.thermodynamic.trajectory.methodology.molecular_dynamics.time_step:default_histogram": { + "results.material.n_elements:default_histogram": { "histogram": { - "quantity": "results.properties.thermodynamic.trajectory.methodology.molecular_dynamics.time_step", + "quantity": "results.material.n_elements", "exclude_from_search": true, "metrics": [], - "buckets": 30, - "data": [] + "interval": 1, + "data": [ + { + "count": 2, + "nested_count": 2, + "value": 1 + }, + { + "count": 2, + "nested_count": 2, + "value": 2 + }, + { + "count": 0, + "nested_count": 0, + "value": 3 + }, + { + "count": 0, + "nested_count": 0, + "value": 4 + }, + { + "count": 2, + "nested_count": 2, + "value": 5 + } + ] } } }, "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "1661", + "content-length": "2187", "content-type": "application/json", "server": "uvicorn" } @@ -4691,41 +4857,88 @@ "and": [ {}, { - "sections:all": [ - "nomad.datamodel.results.Simulation" + "quantities:all": [ + "results.method.simulation.program_name" ] } ] }, "aggregations": { - "results.properties.geometry_optimization.final_energy_difference:default_histogram": { - "histogram": { + "results.material.structural_type:scroll": { + "terms": { "exclude_from_search": true, "update": true, - "type": "histogram", - "buckets": 30, + "size": 6, + "type": "terms", + "include": [ + "bulk", + "surface", + "2D", + "1D", + "molecule / cluster", + "atom" + ], "changed": true, - "quantity": "results.properties.geometry_optimization.final_energy_difference" + "quantity": "results.material.structural_type" } }, - "results.properties.geometry_optimization.final_force_maximum:default_histogram": { - "histogram": { + "results.material.symmetry.bravais_lattice:scroll": { + "terms": { "exclude_from_search": true, "update": true, - "type": "histogram", - "buckets": 30, + "size": 5, + "type": "terms", "changed": true, - "quantity": "results.properties.geometry_optimization.final_force_maximum" + "quantity": "results.material.symmetry.bravais_lattice" } }, - "results.properties.geometry_optimization.final_displacement_maximum:default_histogram": { - "histogram": { + "results.material.symmetry.crystal_system:scroll": { + "terms": { "exclude_from_search": true, "update": true, - "type": "histogram", - "buckets": 30, + "size": 5, + "type": "terms", "changed": true, - "quantity": "results.properties.geometry_optimization.final_displacement_maximum" + "quantity": "results.material.symmetry.crystal_system" + } + }, + "results.material.symmetry.structure_name:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "include": [ + "4-member ring", + "Heusler", + "bcc", + "bct", + "bct5", + "clathrate", + "cuprite", + "diamond", + "fcc", + "fct", + "half-Heusler", + "hcp", + "perovskite", + "rock salt", + "simple cubic", + "wurtzite", + "zincblende" + ], + "changed": true, + "quantity": "results.material.symmetry.structure_name" + } + }, + "results.material.symmetry.strukturbericht_designation:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.material.symmetry.strukturbericht_designation" } } }, @@ -4750,10 +4963,10 @@ "and": [ {}, { - "name": "sections", + "name": "quantities", "value": { "all": [ - "nomad.datamodel.results.Simulation" + "results.method.simulation.program_name" ] } } @@ -4763,7 +4976,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 3 + "total": 6 }, "required": { "include": [ @@ -4771,30 +4984,91 @@ ] }, "aggregations": { - "results.properties.geometry_optimization.final_energy_difference:default_histogram": { - "histogram": { - "quantity": "results.properties.geometry_optimization.final_energy_difference", + "results.material.structural_type:scroll": { + "terms": { + "quantity": "results.material.structural_type", "exclude_from_search": true, "metrics": [], - "buckets": 30, + "size": 6, + "include": [ + "bulk", + "surface", + "2D", + "1D", + "molecule / cluster", + "atom" + ], + "data": [ + { + "count": 2, + "nested_count": 2, + "value": "2D" + }, + { + "count": 2, + "nested_count": 2, + "value": "bulk" + }, + { + "count": 2, + "nested_count": 2, + "value": "molecule / cluster" + } + ] + } + }, + "results.material.symmetry.bravais_lattice:scroll": { + "terms": { + "quantity": "results.material.symmetry.bravais_lattice", + "exclude_from_search": true, + "metrics": [], + "size": 5, "data": [] } }, - "results.properties.geometry_optimization.final_force_maximum:default_histogram": { - "histogram": { - "quantity": "results.properties.geometry_optimization.final_force_maximum", + "results.material.symmetry.crystal_system:scroll": { + "terms": { + "quantity": "results.material.symmetry.crystal_system", "exclude_from_search": true, "metrics": [], - "buckets": 30, + "size": 5, "data": [] } }, - "results.properties.geometry_optimization.final_displacement_maximum:default_histogram": { - "histogram": { - "quantity": "results.properties.geometry_optimization.final_displacement_maximum", + "results.material.symmetry.structure_name:scroll": { + "terms": { + "quantity": "results.material.symmetry.structure_name", "exclude_from_search": true, "metrics": [], - "buckets": 30, + "size": 5, + "include": [ + "4-member ring", + "Heusler", + "bcc", + "bct", + "bct5", + "clathrate", + "cuprite", + "diamond", + "fcc", + "fct", + "half-Heusler", + "hcp", + "perovskite", + "rock salt", + "simple cubic", + "wurtzite", + "zincblende" + ], + "data": [] + } + }, + "results.material.symmetry.strukturbericht_designation:scroll": { + "terms": { + "quantity": "results.material.symmetry.strukturbericht_designation", + "exclude_from_search": true, + "metrics": [], + "size": 5, "data": [] } } @@ -4802,8 +5076,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "1381", + "content-length": "2590", "content-type": "application/json", "server": "uvicorn" } @@ -4819,80 +5094,21 @@ "and": [ {}, { - "sections:all": [ - "nomad.datamodel.results.Simulation" + "quantities:all": [ + "results.method.simulation.program_name" ] } ] }, "aggregations": { - "electronic_properties:scroll": { - "terms": { - "exclude_from_search": false, - "quantity": "results.properties.available_properties", - "include": [ - "electronic.band_structure_electronic.band_gap", - "band_structure_electronic", - "dos_electronic", - "greens_functions_electronic", - "eels" - ], - "update": true, - "type": "terms", - "size": 5, - "changed": true - } - }, - "results.properties.electronic.band_structure_electronic.band_gap.type:scroll": { - "terms": { - "exclude_from_search": true, - "update": true, - "size": 2, - "type": "terms", - "include": [ - "direct", - "indirect" - ], - "changed": true, - "quantity": "results.properties.electronic.band_structure_electronic.band_gap.type" - } - }, - "results.properties.electronic.band_structure_electronic.band_gap.value:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "buckets": 30, - "changed": true, - "quantity": "results.properties.electronic.band_structure_electronic.band_gap.value" - } - }, - "results.properties.electronic.band_structure_electronic.spin_polarized:scroll": { - "terms": { - "exclude_from_search": true, - "update": true, - "size": 2, - "include": [ - "false", - "true" - ], - "type": "terms", - "changed": true, - "quantity": "results.properties.electronic.band_structure_electronic.spin_polarized" - } - }, - "results.properties.electronic.dos_electronic.spin_polarized:scroll": { + "results.method.simulation.program_name:scroll": { "terms": { "exclude_from_search": true, "update": true, - "size": 2, - "include": [ - "false", - "true" - ], + "size": 5, "type": "terms", "changed": true, - "quantity": "results.properties.electronic.dos_electronic.spin_polarized" + "quantity": "results.method.simulation.program_name" } } }, @@ -4917,10 +5133,10 @@ "and": [ {}, { - "name": "sections", + "name": "quantities", "value": { "all": [ - "nomad.datamodel.results.Simulation" + "results.method.simulation.program_name" ] } } @@ -4930,7 +5146,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 3 + "total": 6 }, "required": { "include": [ @@ -4938,76 +5154,37 @@ ] }, "aggregations": { - "electronic_properties:scroll": { - "terms": { - "quantity": "results.properties.available_properties", - "exclude_from_search": false, - "metrics": [], - "size": 5, - "include": [ - "electronic.band_structure_electronic.band_gap", - "band_structure_electronic", - "dos_electronic", - "greens_functions_electronic", - "eels" - ], - "data": [] - } - }, - "results.properties.electronic.band_structure_electronic.band_gap.type:scroll": { - "terms": { - "quantity": "results.properties.electronic.band_structure_electronic.band_gap.type", - "exclude_from_search": true, - "metrics": [], - "size": 2, - "include": [ - "direct", - "indirect" - ], - "data": [] - } - }, - "results.properties.electronic.band_structure_electronic.band_gap.value:default_histogram": { - "histogram": { - "quantity": "results.properties.electronic.band_structure_electronic.band_gap.value", - "exclude_from_search": true, - "metrics": [], - "buckets": 30, - "data": [] - } - }, - "results.properties.electronic.band_structure_electronic.spin_polarized:scroll": { - "terms": { - "quantity": "results.properties.electronic.band_structure_electronic.spin_polarized", - "exclude_from_search": true, - "metrics": [], - "size": 2, - "include": [ - "false", - "true" - ], - "data": [] - } - }, - "results.properties.electronic.dos_electronic.spin_polarized:scroll": { + "results.method.simulation.program_name:scroll": { "terms": { - "quantity": "results.properties.electronic.dos_electronic.spin_polarized", + "quantity": "results.method.simulation.program_name", "exclude_from_search": true, "metrics": [], - "size": 2, - "include": [ - "false", - "true" - ], - "data": [] + "size": 5, + "data": [ + { + "count": 4, + "nested_count": 4, + "value": "VASP" + }, + { + "count": 2, + "nested_count": 2, + "value": "exciting" + }, + { + "count": 0, + "value": "unavailable" + } + ] } } }, "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "2325", + "content-length": "994", "content-type": "application/json", "server": "uvicorn" } @@ -5023,27 +5200,51 @@ "and": [ {}, { - "sections:all": [ - "nomad.datamodel.results.Simulation" + "quantities:all": [ + "results.method.simulation.program_name" ] } ] }, "aggregations": { - "vibrational_properties:scroll": { + "results.method.simulation.precision.k_line_density:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.method.simulation.precision.k_line_density" + } + }, + "results.method.simulation.precision.basis_set:scroll": { "terms": { - "exclude_from_search": false, - "quantity": "results.properties.available_properties", - "include": [ - "dos_phonon", - "band_structure_phonon", - "energy_free_helmholtz", - "heat_capacity_constant_volume" - ], + "exclude_from_search": true, "update": true, + "size": 5, "type": "terms", - "size": 4, - "changed": true + "changed": true, + "quantity": "results.method.simulation.precision.basis_set" + } + }, + "results.method.simulation.precision.planewave_cutoff:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.method.simulation.precision.planewave_cutoff" + } + }, + "results.method.simulation.precision.apw_cutoff:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.method.simulation.precision.apw_cutoff" } } }, @@ -5068,10 +5269,10 @@ "and": [ {}, { - "name": "sections", + "name": "quantities", "value": { "all": [ - "nomad.datamodel.results.Simulation" + "results.method.simulation.program_name" ] } } @@ -5081,7 +5282,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 3 + "total": 6 }, "required": { "include": [ @@ -5089,18 +5290,39 @@ ] }, "aggregations": { - "vibrational_properties:scroll": { + "results.method.simulation.precision.k_line_density:default_histogram": { + "histogram": { + "quantity": "results.method.simulation.precision.k_line_density", + "exclude_from_search": true, + "metrics": [], + "buckets": 30, + "data": [] + } + }, + "results.method.simulation.precision.basis_set:scroll": { "terms": { - "quantity": "results.properties.available_properties", - "exclude_from_search": false, + "quantity": "results.method.simulation.precision.basis_set", + "exclude_from_search": true, "metrics": [], - "size": 4, - "include": [ - "dos_phonon", - "band_structure_phonon", - "energy_free_helmholtz", - "heat_capacity_constant_volume" - ], + "size": 5, + "data": [] + } + }, + "results.method.simulation.precision.planewave_cutoff:default_histogram": { + "histogram": { + "quantity": "results.method.simulation.precision.planewave_cutoff", + "exclude_from_search": true, + "metrics": [], + "buckets": 30, + "data": [] + } + }, + "results.method.simulation.precision.apw_cutoff:default_histogram": { + "histogram": { + "quantity": "results.method.simulation.precision.apw_cutoff", + "exclude_from_search": true, + "metrics": [], + "buckets": 30, "data": [] } } @@ -5108,8 +5330,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "830", + "content-length": "1562", "content-type": "application/json", "server": "uvicorn" } @@ -5125,81 +5348,78 @@ "and": [ {}, { - "sections:all": [ - "nomad.datamodel.results.Simulation" + "quantities:all": [ + "results.method.simulation.program_name" ] } ] }, "aggregations": { - "mechanical_properties:scroll": { + "results.method.simulation.dft.xc_functional_type:scroll": { "terms": { - "exclude_from_search": false, - "quantity": "results.properties.available_properties", - "include": [ - "bulk_modulus", - "shear_modulus", - "energy_volume_curve" - ], + "exclude_from_search": true, "update": true, + "size": 5, "type": "terms", - "size": 3, - "changed": true + "include": [ + "LDA", + "GGA", + "meta-GGA", + "hyper-GGA", + "hybrid" + ], + "changed": true, + "quantity": "results.method.simulation.dft.xc_functional_type" } }, - "results.properties.mechanical.bulk_modulus.type:scroll": { + "results.method.simulation.dft.xc_functional_names:scroll": { "terms": { - "exclude_from_search": true, + "exclude_from_search": false, "update": true, "size": 5, "type": "terms", "changed": true, - "quantity": "results.properties.mechanical.bulk_modulus.type" + "quantity": "results.method.simulation.dft.xc_functional_names" } }, - "results.properties.mechanical.bulk_modulus.value:default_histogram": { + "results.method.simulation.dft.exact_exchange_mixing_factor:default_histogram": { "histogram": { "exclude_from_search": true, "update": true, "type": "histogram", "buckets": 30, "changed": true, - "quantity": "results.properties.mechanical.bulk_modulus.value" - } - }, - "results.properties.mechanical.shear_modulus.type:scroll": { - "terms": { - "exclude_from_search": true, - "update": true, - "size": 3, - "type": "terms", - "include": [ - "voigt_average", - "reuss_average", - "voigt_reuss_hill_average" - ], - "changed": true, - "quantity": "results.properties.mechanical.shear_modulus.type" + "quantity": "results.method.simulation.dft.exact_exchange_mixing_factor" } }, - "results.properties.mechanical.shear_modulus.value:default_histogram": { + "results.method.simulation.dft.hubbard_kanamori_model.u_effective:default_histogram": { "histogram": { "exclude_from_search": true, "update": true, "type": "histogram", "buckets": 30, "changed": true, - "quantity": "results.properties.mechanical.shear_modulus.value" + "quantity": "results.method.simulation.dft.hubbard_kanamori_model.u_effective" } }, - "results.properties.mechanical.energy_volume_curve.type:scroll": { + "results.method.simulation.dft.core_electron_treatment:scroll": { "terms": { "exclude_from_search": true, "update": true, "size": 5, "type": "terms", "changed": true, - "quantity": "results.properties.mechanical.energy_volume_curve.type" + "quantity": "results.method.simulation.dft.core_electron_treatment" + } + }, + "results.method.simulation.dft.relativity_method:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.method.simulation.dft.relativity_method" } } }, @@ -5224,10 +5444,10 @@ "and": [ {}, { - "name": "sections", + "name": "quantities", "value": { "all": [ - "nomad.datamodel.results.Simulation" + "results.method.simulation.program_name" ] } } @@ -5237,7 +5457,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 3 + "total": 6 }, "required": { "include": [ @@ -5245,64 +5465,88 @@ ] }, "aggregations": { - "mechanical_properties:scroll": { + "results.method.simulation.dft.xc_functional_type:scroll": { "terms": { - "quantity": "results.properties.available_properties", - "exclude_from_search": false, + "quantity": "results.method.simulation.dft.xc_functional_type", + "exclude_from_search": true, "metrics": [], - "size": 3, + "size": 5, "include": [ - "bulk_modulus", - "shear_modulus", - "energy_volume_curve" + "LDA", + "GGA", + "meta-GGA", + "hyper-GGA", + "hybrid" ], "data": [] } }, - "results.properties.mechanical.bulk_modulus.type:scroll": { + "results.method.simulation.dft.xc_functional_names:scroll": { "terms": { - "quantity": "results.properties.mechanical.bulk_modulus.type", - "exclude_from_search": true, + "quantity": "results.method.simulation.dft.xc_functional_names", + "exclude_from_search": false, "metrics": [], "size": 5, - "data": [] + "data": [ + { + "count": 4, + "nested_count": 4, + "value": "GGA_C_PBE_SOL" + }, + { + "count": 4, + "nested_count": 4, + "value": "GGA_X_PBE_SOL" + }, + { + "count": 2, + "nested_count": 2, + "value": "LDA_C_PZ" + }, + { + "count": 2, + "nested_count": 2, + "value": "LDA_X_PZ" + } + ] } }, - "results.properties.mechanical.bulk_modulus.value:default_histogram": { + "results.method.simulation.dft.exact_exchange_mixing_factor:default_histogram": { "histogram": { - "quantity": "results.properties.mechanical.bulk_modulus.value", + "quantity": "results.method.simulation.dft.exact_exchange_mixing_factor", "exclude_from_search": true, "metrics": [], "buckets": 30, "data": [] } }, - "results.properties.mechanical.shear_modulus.type:scroll": { - "terms": { - "quantity": "results.properties.mechanical.shear_modulus.type", + "results.method.simulation.dft.hubbard_kanamori_model.u_effective:default_histogram": { + "histogram": { + "quantity": "results.method.simulation.dft.hubbard_kanamori_model.u_effective", "exclude_from_search": true, "metrics": [], - "size": 3, - "include": [ - "voigt_average", - "reuss_average", - "voigt_reuss_hill_average" - ], + "buckets": 30, "data": [] } }, - "results.properties.mechanical.shear_modulus.value:default_histogram": { - "histogram": { - "quantity": "results.properties.mechanical.shear_modulus.value", + "results.method.simulation.dft.core_electron_treatment:scroll": { + "terms": { + "quantity": "results.method.simulation.dft.core_electron_treatment", "exclude_from_search": true, "metrics": [], - "buckets": 30, - "data": [] + "size": 5, + "data": [ + { + "count": 6, + "nested_count": 6, + "value": "unavailable" + } + ] } }, - "results.properties.mechanical.energy_volume_curve.type:scroll": { + "results.method.simulation.dft.relativity_method:scroll": { "terms": { - "quantity": "results.properties.mechanical.energy_volume_curve.type", + "quantity": "results.method.simulation.dft.relativity_method", "exclude_from_search": true, "metrics": [], "size": 5, @@ -5313,8 +5557,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "2286", + "content-length": "2857", "content-type": "application/json", "server": "uvicorn" } @@ -5330,49 +5575,49 @@ "and": [ {}, { - "sections:all": [ - "nomad.datamodel.results.Simulation" + "quantities:all": [ + "results.method.simulation.program_name" ] } ] }, "aggregations": { - "upload_create_time:default_histogram": { - "histogram": { + "results.method.simulation.gw.type:scroll": { + "terms": { "exclude_from_search": true, "update": true, - "type": "histogram", - "buckets": 30, + "size": 5, + "type": "terms", "changed": true, - "quantity": "upload_create_time" + "quantity": "results.method.simulation.gw.type" } }, - "external_db:scroll": { + "results.method.simulation.gw.starting_point_type:scroll": { "terms": { "exclude_from_search": true, "update": true, "size": 6, "type": "terms", "include": [ - "The Perovskite Database Project", - "EELS Data Base", - "Materials Project", - "AFLOW", - "OQMD", - "Kyoto Phonopy Database" + "LDA", + "GGA", + "meta-GGA", + "hyper-GGA", + "hybrid", + "HF" ], "changed": true, - "quantity": "external_db" + "quantity": "results.method.simulation.gw.starting_point_type" } }, - "datasets.dataset_name:scroll": { + "results.method.simulation.gw.basis_set_type:scroll": { "terms": { "exclude_from_search": true, "update": true, - "size": 10, + "size": 5, "type": "terms", "changed": true, - "quantity": "datasets.dataset_name" + "quantity": "results.method.simulation.gw.basis_set_type" } } }, @@ -5397,10 +5642,10 @@ "and": [ {}, { - "name": "sections", + "name": "quantities", "value": { "all": [ - "nomad.datamodel.results.Simulation" + "results.method.simulation.program_name" ] } } @@ -5410,7 +5655,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 3 + "total": 6 }, "required": { "include": [ @@ -5418,45 +5663,38 @@ ] }, "aggregations": { - "upload_create_time:default_histogram": { - "histogram": { - "quantity": "upload_create_time", + "results.method.simulation.gw.type:scroll": { + "terms": { + "quantity": "results.method.simulation.gw.type", "exclude_from_search": true, "metrics": [], - "buckets": 30, - "offset": 1674546352706, - "data": [ - { - "count": 3, - "nested_count": 3, - "value": 1674546352706 - } - ] + "size": 5, + "data": [] } }, - "external_db:scroll": { + "results.method.simulation.gw.starting_point_type:scroll": { "terms": { - "quantity": "external_db", + "quantity": "results.method.simulation.gw.starting_point_type", "exclude_from_search": true, "metrics": [], "size": 6, "include": [ - "The Perovskite Database Project", - "EELS Data Base", - "Materials Project", - "AFLOW", - "OQMD", - "Kyoto Phonopy Database" + "LDA", + "GGA", + "meta-GGA", + "hyper-GGA", + "hybrid", + "HF" ], "data": [] } }, - "datasets.dataset_name:scroll": { + "results.method.simulation.gw.basis_set_type:scroll": { "terms": { - "quantity": "datasets.dataset_name", + "quantity": "results.method.simulation.gw.basis_set_type", "exclude_from_search": true, "metrics": [], - "size": 10, + "size": 5, "data": [] } } @@ -5464,8 +5702,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "1430", + "content-length": "1342", "content-type": "application/json", "server": "uvicorn" } @@ -5482,23 +5721,76 @@ {}, { "quantities:all": [ - "data" + "results.method.simulation.program_name" ] } ] }, - "aggregations": {}, + "aggregations": { + "results.method.simulation.bse.type:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.method.simulation.bse.type" + } + }, + "results.method.simulation.bse.solver:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.method.simulation.bse.solver" + } + }, + "results.method.simulation.bse.starting_point_type:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 6, + "type": "terms", + "include": [ + "LDA", + "GGA", + "meta-GGA", + "hyper-GGA", + "hybrid", + "HF" + ], + "changed": true, + "quantity": "results.method.simulation.bse.starting_point_type" + } + }, + "results.method.simulation.bse.basis_set_type:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.method.simulation.bse.basis_set_type" + } + }, + "results.method.simulation.bse.gw_type:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.method.simulation.bse.gw_type" + } + } + }, "pagination": { - "order_by": "upload_create_time", - "order": "desc", - "page_size": 20 + "page_size": 0 }, "required": { - "exclude": [ - "quantities", - "sections", - "files" - ] + "include": [] } }, "headers": { @@ -5518,152 +5810,84 @@ "name": "quantities", "value": { "all": [ - "data" + "results.method.simulation.program_name" ] } } ] }, "pagination": { - "page_size": 20, - "order_by": "upload_create_time", - "order": "desc", - "total": 1 + "page_size": 0, + "order_by": "entry_id", + "order": "asc", + "total": 6 }, "required": { - "exclude": [ - "quantities", - "sections", - "files" + "include": [ + "entry_id" ] }, - "data": [ - { - "upload_id": "A-1gerweRKOSzhzOnLn60w", - "parser_name": "parsers/vasp", - "origin": "Markus Scheidgen", - "calc_id": "HEO8zWoEQaihNcJpFa7Htw", - "published": true, - "writers": [ - { - "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", - "name": "Markus Scheidgen" - } - ], - "datasets": [], - "n_quantities": 0, - "upload_create_time": "2023-01-24T07:45:52.706229+00:00", - "processed": true, - "mainfile": "upload/archive.json", - "main_author": { - "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", - "name": "Markus Scheidgen" - }, - "viewers": [ - { - "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", - "name": "Markus Scheidgen" - } - ], - "entry_create_time": "2023-01-24T07:45:52.713229+00:00", - "publish_time": "2023-01-24T07:45:52.709229+00:00", - "with_embargo": false, - "domain": "dft", - "results": { - "material": { - "functional_type": [ - "semiconductor", - "solar cell" - ], - "elements": [ - "C", - "H", - "I", - "N", - "Pb" - ], - "elements_exclusive": "C H I N Pb", - "material_id": "test_material_id", - "structural_type": "bulk", - "chemical_formula_reduced": "H6Pb1C1I3N1", - "n_elements": 5, - "chemical_formula_descriptive": "MAPbI3", - "material_name": "perovskite", - "chemical_formula_hill": "CH6I3NPb" - }, - "method": {}, - "properties": { - "optoelectronic": { - "solar_cell": { - "absorber_fabrication": [ - "Spin-coating" - ], - "efficiency": 15.9, - "device_stack": [ - "SLG", - "ITO", - "PEDOT:PSS", - "Perovskite", - "PCBM-60", - "BCP", - "Ag" - ], - "short_circuit_current_density": 203, - "hole_transport_layer": [ - "PEDOT:PSS" - ], - "fill_factor": 0.78, - "illumination_intensity": 1000, - "electron_transport_layer": [ - "PCBM-60", - "BCP" - ], - "device_area": 0.0000125, - "back_contact": [ - "Ag" - ], - "absorber": [ - "MAPbI" - ], - "open_circuit_voltage": 1, - "substrate": [ - "SLG", - "ITO" - ], - "device_architecture": "pin" - } - }, - "available_properties": [ - "solar_cell", - "electronic.band_structure_electronic.band_gap" - ], - "electronic": { - "band_structure_electronic": [ - { - "band_gap": [ - { - "value": 2.5634826144e-19 - } - ] - } - ] - } - } - }, - "entry_id": "HEO8zWoEQaihNcJpFa7Htw", - "authors": [ - { - "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", - "name": "Markus Scheidgen" - } - ], - "license": "CC BY 4.0" + "aggregations": { + "results.method.simulation.bse.type:scroll": { + "terms": { + "quantity": "results.method.simulation.bse.type", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + }, + "results.method.simulation.bse.solver:scroll": { + "terms": { + "quantity": "results.method.simulation.bse.solver", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + }, + "results.method.simulation.bse.starting_point_type:scroll": { + "terms": { + "quantity": "results.method.simulation.bse.starting_point_type", + "exclude_from_search": true, + "metrics": [], + "size": 6, + "include": [ + "LDA", + "GGA", + "meta-GGA", + "hyper-GGA", + "hybrid", + "HF" + ], + "data": [] + } + }, + "results.method.simulation.bse.basis_set_type:scroll": { + "terms": { + "quantity": "results.method.simulation.bse.basis_set_type", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + }, + "results.method.simulation.bse.gw_type:scroll": { + "terms": { + "quantity": "results.method.simulation.bse.gw_type", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } } - ] + }, + "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "3812", + "content-length": "1836", "content-type": "application/json", "server": "uvicorn" } @@ -5680,30 +5904,30 @@ {}, { "quantities:all": [ - "data" + "results.method.simulation.program_name" ] } ] }, "aggregations": { - "results.material.elements:default": { + "results.method.simulation.projection.type:scroll": { "terms": { - "exclude_from_search": false, + "exclude_from_search": true, "update": true, - "size": 119, + "size": 5, "type": "terms", "changed": true, - "quantity": "results.material.elements" + "quantity": "results.method.simulation.projection.type" } }, - "results.material.n_elements:default_histogram": { - "histogram": { + "results.method.simulation.projection.localization_type:scroll": { + "terms": { "exclude_from_search": true, "update": true, - "type": "histogram", - "interval": 1, + "size": 5, + "type": "terms", "changed": true, - "quantity": "results.material.n_elements" + "quantity": "results.method.simulation.projection.localization_type" } } }, @@ -5731,7 +5955,7 @@ "name": "quantities", "value": { "all": [ - "data" + "results.method.simulation.program_name" ] } } @@ -5741,7 +5965,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 1 + "total": 6 }, "required": { "include": [ @@ -5749,62 +5973,31 @@ ] }, "aggregations": { - "results.material.elements:default": { + "results.method.simulation.projection.type:scroll": { "terms": { - "quantity": "results.material.elements", - "exclude_from_search": false, + "quantity": "results.method.simulation.projection.type", + "exclude_from_search": true, "metrics": [], - "size": 119, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": "C" - }, - { - "count": 1, - "nested_count": 1, - "value": "H" - }, - { - "count": 1, - "nested_count": 1, - "value": "I" - }, - { - "count": 1, - "nested_count": 1, - "value": "N" - }, - { - "count": 1, - "nested_count": 1, - "value": "Pb" - } - ] + "size": 5, + "data": [] } }, - "results.material.n_elements:default_histogram": { - "histogram": { - "quantity": "results.material.n_elements", + "results.method.simulation.projection.localization_type:scroll": { + "terms": { + "quantity": "results.method.simulation.projection.localization_type", "exclude_from_search": true, "metrics": [], - "interval": 1, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": 5 - } - ] + "size": 5, + "data": [] } } }, "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "1519", + "content-length": "967", "content-type": "application/json", "server": "uvicorn" } @@ -5821,50 +6014,70 @@ {}, { "quantities:all": [ - "data" + "results.method.simulation.program_name" ] } ] }, "aggregations": { - "results.eln.sections:scroll": { + "results.method.simulation.dmft.impurity_solver_type:scroll": { "terms": { "exclude_from_search": true, "update": true, "size": 5, "type": "terms", "changed": true, - "quantity": "results.eln.sections" + "quantity": "results.method.simulation.dmft.impurity_solver_type" } }, - "results.eln.tags:scroll": { - "terms": { + "results.method.simulation.dmft.inverse_temperature:default_histogram": { + "histogram": { "exclude_from_search": true, "update": true, - "size": 5, - "type": "terms", + "type": "histogram", + "buckets": 30, "changed": true, - "quantity": "results.eln.tags" + "quantity": "results.method.simulation.dmft.inverse_temperature" } }, - "results.eln.methods:scroll": { + "results.method.simulation.dmft.magnetic_state:scroll": { "terms": { "exclude_from_search": true, "update": true, "size": 5, "type": "terms", "changed": true, - "quantity": "results.eln.methods" + "quantity": "results.method.simulation.dmft.magnetic_state" } }, - "results.eln.instruments:scroll": { + "results.method.simulation.dmft.u:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.method.simulation.dmft.u" + } + }, + "results.method.simulation.dmft.jh:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.method.simulation.dmft.jh" + } + }, + "results.method.simulation.dmft.analytical_continuation:scroll": { "terms": { "exclude_from_search": true, "update": true, "size": 5, "type": "terms", "changed": true, - "quantity": "results.eln.instruments" + "quantity": "results.method.simulation.dmft.analytical_continuation" } } }, @@ -5892,7 +6105,7 @@ "name": "quantities", "value": { "all": [ - "data" + "results.method.simulation.program_name" ] } } @@ -5902,7 +6115,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 1 + "total": 6 }, "required": { "include": [ @@ -5910,38 +6123,56 @@ ] }, "aggregations": { - "results.eln.sections:scroll": { + "results.method.simulation.dmft.impurity_solver_type:scroll": { "terms": { - "quantity": "results.eln.sections", + "quantity": "results.method.simulation.dmft.impurity_solver_type", "exclude_from_search": true, "metrics": [], "size": 5, "data": [] } }, - "results.eln.tags:scroll": { - "terms": { - "quantity": "results.eln.tags", + "results.method.simulation.dmft.inverse_temperature:default_histogram": { + "histogram": { + "quantity": "results.method.simulation.dmft.inverse_temperature", "exclude_from_search": true, "metrics": [], - "size": 5, + "buckets": 30, "data": [] } }, - "results.eln.methods:scroll": { + "results.method.simulation.dmft.magnetic_state:scroll": { "terms": { - "quantity": "results.eln.methods", + "quantity": "results.method.simulation.dmft.magnetic_state", "exclude_from_search": true, "metrics": [], "size": 5, "data": [] } }, - "results.eln.instruments:scroll": { - "terms": { - "quantity": "results.eln.instruments", - "exclude_from_search": true, - "metrics": [], + "results.method.simulation.dmft.u:default_histogram": { + "histogram": { + "quantity": "results.method.simulation.dmft.u", + "exclude_from_search": true, + "metrics": [], + "buckets": 30, + "data": [] + } + }, + "results.method.simulation.dmft.jh:default_histogram": { + "histogram": { + "quantity": "results.method.simulation.dmft.jh", + "exclude_from_search": true, + "metrics": [], + "buckets": 30, + "data": [] + } + }, + "results.method.simulation.dmft.analytical_continuation:scroll": { + "terms": { + "quantity": "results.method.simulation.dmft.analytical_continuation", + "exclude_from_search": true, + "metrics": [], "size": 5, "data": [] } @@ -5950,8 +6181,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "1241", + "content-length": "2048", "content-type": "application/json", "server": "uvicorn" } @@ -5964,32 +6196,56 @@ "body": { "owner": "visible", "query": { - "quantities": "data" - }, - "pagination": { - "page_size": 0 + "and": [ + {}, + { + "quantities:all": [ + "results.method.simulation.program_name" + ] + } + ] }, "aggregations": { - "paths": { + "results.properties.thermodynamic.trajectory.available_properties:scroll": { "terms": { - "quantity": "searchable_quantities.path", - "size": 1000, - "entries": { - "size": 1, - "required": { - "include": [ - "searchable_quantities.path", - "searchable_quantities.quantity_name", - "searchable_quantities.section_definition" - ] - } - } + "exclude_from_search": false, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.properties.thermodynamic.trajectory.available_properties" + } + }, + "results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.ensemble_type:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.ensemble_type" + } + }, + "results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.time_step:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.time_step" } } + }, + "pagination": { + "page_size": 0 + }, + "required": { + "include": [] } }, "headers": { - "accept": "application/json", + "accept": "application/json, text/plain, */*", "content-type": "application/json", "cookie": null } @@ -5999,32 +6255,54 @@ "body": { "owner": "visible", "query": { - "name": "quantities", - "value": "data" + "and": [ + {}, + { + "name": "quantities", + "value": { + "all": [ + "results.method.simulation.program_name" + ] + } + } + ] }, "pagination": { "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 1 + "total": 6 + }, + "required": { + "include": [ + "entry_id" + ] }, "aggregations": { - "paths": { + "results.properties.thermodynamic.trajectory.available_properties:scroll": { "terms": { - "quantity": "searchable_quantities.path", + "quantity": "results.properties.thermodynamic.trajectory.available_properties", "exclude_from_search": false, "metrics": [], - "size": 1000, - "entries": { - "size": 1, - "required": { - "include": [ - "searchable_quantities.path", - "searchable_quantities.quantity_name", - "searchable_quantities.section_definition" - ] - } - }, + "size": 5, + "data": [] + } + }, + "results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.ensemble_type:scroll": { + "terms": { + "quantity": "results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.ensemble_type", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + }, + "results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.time_step:default_histogram": { + "histogram": { + "quantity": "results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.time_step", + "exclude_from_search": true, + "metrics": [], + "buckets": 30, "data": [] } } @@ -6032,8 +6310,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "713", + "content-length": "1436", "content-type": "application/json", "server": "uvicorn" } @@ -6050,48 +6329,40 @@ {}, { "quantities:all": [ - "data" + "results.method.simulation.program_name" ] } ] }, "aggregations": { - "upload_create_time:default_histogram": { + "results.properties.geometry_optimization.final_energy_difference:default_histogram": { "histogram": { "exclude_from_search": true, "update": true, "type": "histogram", "buckets": 30, "changed": true, - "quantity": "upload_create_time" + "quantity": "results.properties.geometry_optimization.final_energy_difference" } }, - "external_db:scroll": { - "terms": { + "results.properties.geometry_optimization.final_force_maximum:default_histogram": { + "histogram": { "exclude_from_search": true, "update": true, - "size": 6, - "type": "terms", - "include": [ - "The Perovskite Database Project", - "EELS Data Base", - "Materials Project", - "AFLOW", - "OQMD", - "Kyoto Phonopy Database" - ], + "type": "histogram", + "buckets": 30, "changed": true, - "quantity": "external_db" + "quantity": "results.properties.geometry_optimization.final_force_maximum" } }, - "datasets.dataset_name:scroll": { - "terms": { + "results.properties.geometry_optimization.final_displacement_maximum:default_histogram": { + "histogram": { "exclude_from_search": true, "update": true, - "size": 10, - "type": "terms", + "type": "histogram", + "buckets": 30, "changed": true, - "quantity": "datasets.dataset_name" + "quantity": "results.properties.geometry_optimization.final_displacement_maximum" } } }, @@ -6119,7 +6390,7 @@ "name": "quantities", "value": { "all": [ - "data" + "results.method.simulation.program_name" ] } } @@ -6129,7 +6400,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 1 + "total": 6 }, "required": { "include": [ @@ -6137,45 +6408,30 @@ ] }, "aggregations": { - "upload_create_time:default_histogram": { + "results.properties.geometry_optimization.final_energy_difference:default_histogram": { "histogram": { - "quantity": "upload_create_time", + "quantity": "results.properties.geometry_optimization.final_energy_difference", "exclude_from_search": true, "metrics": [], "buckets": 30, - "offset": 1674546352706, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": 1674546352706 - } - ] + "data": [] } }, - "external_db:scroll": { - "terms": { - "quantity": "external_db", + "results.properties.geometry_optimization.final_force_maximum:default_histogram": { + "histogram": { + "quantity": "results.properties.geometry_optimization.final_force_maximum", "exclude_from_search": true, "metrics": [], - "size": 6, - "include": [ - "The Perovskite Database Project", - "EELS Data Base", - "Materials Project", - "AFLOW", - "OQMD", - "Kyoto Phonopy Database" - ], + "buckets": 30, "data": [] } }, - "datasets.dataset_name:scroll": { - "terms": { - "quantity": "datasets.dataset_name", + "results.properties.geometry_optimization.final_displacement_maximum:default_histogram": { + "histogram": { + "quantity": "results.properties.geometry_optimization.final_displacement_maximum", "exclude_from_search": true, "metrics": [], - "size": 10, + "buckets": 30, "data": [] } } @@ -6183,8 +6439,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "1402", + "content-length": "1387", "content-type": "application/json", "server": "uvicorn" } @@ -6200,24 +6457,84 @@ "and": [ {}, { - "results.method.method_name:any": [ - "EELS" + "quantities:all": [ + "results.method.simulation.program_name" ] } ] }, - "aggregations": {}, + "aggregations": { + "electronic_properties:scroll": { + "terms": { + "exclude_from_search": false, + "quantity": "results.properties.available_properties", + "include": [ + "electronic.band_structure_electronic.band_gap", + "band_structure_electronic", + "dos_electronic", + "greens_functions_electronic", + "eels" + ], + "update": true, + "type": "terms", + "size": 5, + "changed": true + } + }, + "results.properties.electronic.band_structure_electronic.band_gap.type:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.properties.electronic.band_structure_electronic.band_gap.type" + } + }, + "results.properties.electronic.band_structure_electronic.band_gap.value:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.properties.electronic.band_structure_electronic.band_gap.value" + } + }, + "results.properties.electronic.band_structure_electronic.spin_polarized:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 2, + "include": [ + "false", + "true" + ], + "type": "terms", + "changed": true, + "quantity": "results.properties.electronic.band_structure_electronic.spin_polarized" + } + }, + "results.properties.electronic.dos_electronic.spin_polarized:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 2, + "include": [ + "false", + "true" + ], + "type": "terms", + "changed": true, + "quantity": "results.properties.electronic.dos_electronic.spin_polarized" + } + } + }, "pagination": { - "order_by": "upload_create_time", - "order": "desc", - "page_size": 20 + "page_size": 0 }, "required": { - "exclude": [ - "quantities", - "sections", - "files" - ] + "include": [] } }, "headers": { @@ -6234,101 +6551,94 @@ "and": [ {}, { - "name": "results.method.method_name", + "name": "quantities", "value": { - "any": [ - "EELS" + "all": [ + "results.method.simulation.program_name" ] } } ] }, "pagination": { - "page_size": 20, - "order_by": "upload_create_time", - "order": "desc", - "total": 1 + "page_size": 0, + "order_by": "entry_id", + "order": "asc", + "total": 6 }, "required": { - "exclude": [ - "quantities", - "sections", - "files" + "include": [ + "entry_id" ] }, - "data": [ - { - "upload_id": "A-1gerweRKOSzhzOnLn60w", - "parser_name": "parsers/vasp", - "origin": "Markus Scheidgen", - "calc_id": "qgKHLISrSPqW2sIHLSqOhg", - "published": true, - "writers": [ - { - "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", - "name": "Markus Scheidgen" - } - ], - "datasets": [], - "n_quantities": 0, - "upload_create_time": "2023-01-24T07:45:52.706229+00:00", - "processed": true, - "mainfile": "upload/archive.json", - "main_author": { - "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", - "name": "Markus Scheidgen" - }, - "viewers": [ - { - "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", - "name": "Markus Scheidgen" - } - ], - "entry_create_time": "2023-01-24T07:45:52.714229+00:00", - "publish_time": "2023-01-24T07:45:52.709229+00:00", - "with_embargo": false, - "domain": "dft", - "results": { - "material": { - "functional_type": [ - "semiconductor", - "solar cell" - ], - "elements": [ - "C", - "H", - "I", - "N", - "Pb" - ], - "elements_exclusive": "C H I N Pb", - "material_id": "test_material_id", - "structural_type": "bulk", - "chemical_formula_reduced": "H6Pb1C1I3N1", - "n_elements": 5, - "chemical_formula_descriptive": "MAPbI3", - "material_name": "perovskite", - "chemical_formula_hill": "CH6I3NPb" - }, - "method": { - "method_name": "EELS" - }, - "properties": {} - }, - "entry_id": "qgKHLISrSPqW2sIHLSqOhg", - "authors": [ - { - "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", - "name": "Markus Scheidgen" - } - ], - "license": "CC BY 4.0" + "aggregations": { + "electronic_properties:scroll": { + "terms": { + "quantity": "results.properties.available_properties", + "exclude_from_search": false, + "metrics": [], + "size": 5, + "include": [ + "electronic.band_structure_electronic.band_gap", + "band_structure_electronic", + "dos_electronic", + "greens_functions_electronic", + "eels" + ], + "data": [] + } + }, + "results.properties.electronic.band_structure_electronic.band_gap.type:scroll": { + "terms": { + "quantity": "results.properties.electronic.band_structure_electronic.band_gap.type", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + }, + "results.properties.electronic.band_structure_electronic.band_gap.value:default_histogram": { + "histogram": { + "quantity": "results.properties.electronic.band_structure_electronic.band_gap.value", + "exclude_from_search": true, + "metrics": [], + "buckets": 30, + "data": [] + } + }, + "results.properties.electronic.band_structure_electronic.spin_polarized:scroll": { + "terms": { + "quantity": "results.properties.electronic.band_structure_electronic.spin_polarized", + "exclude_from_search": true, + "metrics": [], + "size": 2, + "include": [ + "false", + "true" + ], + "data": [] + } + }, + "results.properties.electronic.dos_electronic.spin_polarized:scroll": { + "terms": { + "quantity": "results.properties.electronic.dos_electronic.spin_polarized", + "exclude_from_search": true, + "metrics": [], + "size": 2, + "include": [ + "false", + "true" + ], + "data": [] + } } - ] + }, + "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "2344", + "content-length": "2258", "content-type": "application/json", "server": "uvicorn" } @@ -6344,31 +6654,27 @@ "and": [ {}, { - "results.method.method_name:any": [ - "EELS" + "quantities:all": [ + "results.method.simulation.program_name" ] } ] }, "aggregations": { - "results.material.elements:default": { + "vibrational_properties:scroll": { "terms": { "exclude_from_search": false, + "quantity": "results.properties.available_properties", + "include": [ + "dos_phonon", + "band_structure_phonon", + "energy_free_helmholtz", + "heat_capacity_constant_volume" + ], "update": true, - "size": 119, "type": "terms", - "changed": true, - "quantity": "results.material.elements" - } - }, - "results.material.n_elements:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "interval": 1, - "changed": true, - "quantity": "results.material.n_elements" + "size": 4, + "changed": true } } }, @@ -6393,10 +6699,10 @@ "and": [ {}, { - "name": "results.method.method_name", + "name": "quantities", "value": { - "any": [ - "EELS" + "all": [ + "results.method.simulation.program_name" ] } } @@ -6406,7 +6712,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 1 + "total": 6 }, "required": { "include": [ @@ -6414,62 +6720,28 @@ ] }, "aggregations": { - "results.material.elements:default": { + "vibrational_properties:scroll": { "terms": { - "quantity": "results.material.elements", + "quantity": "results.properties.available_properties", "exclude_from_search": false, "metrics": [], - "size": 119, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": "C" - }, - { - "count": 1, - "nested_count": 1, - "value": "H" - }, - { - "count": 1, - "nested_count": 1, - "value": "I" - }, - { - "count": 1, - "nested_count": 1, - "value": "N" - }, - { - "count": 1, - "nested_count": 1, - "value": "Pb" - } - ] - } - }, - "results.material.n_elements:default_histogram": { - "histogram": { - "quantity": "results.material.n_elements", - "exclude_from_search": true, - "metrics": [], - "interval": 1, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": 5 - } - ] + "size": 4, + "include": [ + "dos_phonon", + "band_structure_phonon", + "energy_free_helmholtz", + "heat_capacity_constant_volume" + ], + "data": [] } } }, "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "1535", + "content-length": "836", "content-type": "application/json", "server": "uvicorn" } @@ -6485,51 +6757,76 @@ "and": [ {}, { - "results.method.method_name:any": [ - "EELS" + "quantities:all": [ + "results.method.simulation.program_name" ] } ] }, "aggregations": { - "results.properties.spectroscopy.eels.resolution:default_histogram": { - "histogram": { - "exclude_from_search": true, + "mechanical_properties:scroll": { + "terms": { + "exclude_from_search": false, + "quantity": "results.properties.available_properties", + "include": [ + "bulk_modulus", + "shear_modulus", + "energy_volume_curve" + ], "update": true, - "type": "histogram", - "buckets": 30, - "changed": true, - "quantity": "results.properties.spectroscopy.eels.resolution" + "type": "terms", + "size": 3, + "changed": true } }, - "results.properties.spectroscopy.eels.min_energy:default_histogram": { - "histogram": { + "results.properties.mechanical.bulk_modulus.type:scroll": { + "terms": { "exclude_from_search": true, "update": true, - "type": "histogram", - "buckets": 30, + "size": 5, + "type": "terms", "changed": true, - "quantity": "results.properties.spectroscopy.eels.min_energy" + "quantity": "results.properties.mechanical.bulk_modulus.type" } }, - "results.properties.spectroscopy.eels.max_energy:default_histogram": { + "results.properties.mechanical.bulk_modulus.value:default_histogram": { "histogram": { "exclude_from_search": true, "update": true, "type": "histogram", "buckets": 30, "changed": true, - "quantity": "results.properties.spectroscopy.eels.max_energy" + "quantity": "results.properties.mechanical.bulk_modulus.value" } }, - "results.properties.spectroscopy.eels.detector_type:scroll": { + "results.properties.mechanical.shear_modulus.type:scroll": { "terms": { "exclude_from_search": true, "update": true, "size": 5, "type": "terms", "changed": true, - "quantity": "results.properties.spectroscopy.eels.detector_type" + "quantity": "results.properties.mechanical.shear_modulus.type" + } + }, + "results.properties.mechanical.shear_modulus.value:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.properties.mechanical.shear_modulus.value" + } + }, + "results.properties.mechanical.energy_volume_curve.type:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.properties.mechanical.energy_volume_curve.type" } } }, @@ -6554,10 +6851,10 @@ "and": [ {}, { - "name": "results.method.method_name", + "name": "quantities", "value": { - "any": [ - "EELS" + "all": [ + "results.method.simulation.program_name" ] } } @@ -6567,7 +6864,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 1 + "total": 6 }, "required": { "include": [ @@ -6575,36 +6872,59 @@ ] }, "aggregations": { - "results.properties.spectroscopy.eels.resolution:default_histogram": { - "histogram": { - "quantity": "results.properties.spectroscopy.eels.resolution", + "mechanical_properties:scroll": { + "terms": { + "quantity": "results.properties.available_properties", + "exclude_from_search": false, + "metrics": [], + "size": 3, + "include": [ + "bulk_modulus", + "shear_modulus", + "energy_volume_curve" + ], + "data": [] + } + }, + "results.properties.mechanical.bulk_modulus.type:scroll": { + "terms": { + "quantity": "results.properties.mechanical.bulk_modulus.type", "exclude_from_search": true, "metrics": [], - "buckets": 30, + "size": 5, "data": [] } }, - "results.properties.spectroscopy.eels.min_energy:default_histogram": { + "results.properties.mechanical.bulk_modulus.value:default_histogram": { "histogram": { - "quantity": "results.properties.spectroscopy.eels.min_energy", + "quantity": "results.properties.mechanical.bulk_modulus.value", "exclude_from_search": true, "metrics": [], "buckets": 30, "data": [] } }, - "results.properties.spectroscopy.eels.max_energy:default_histogram": { + "results.properties.mechanical.shear_modulus.type:scroll": { + "terms": { + "quantity": "results.properties.mechanical.shear_modulus.type", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + }, + "results.properties.mechanical.shear_modulus.value:default_histogram": { "histogram": { - "quantity": "results.properties.spectroscopy.eels.max_energy", + "quantity": "results.properties.mechanical.shear_modulus.value", "exclude_from_search": true, "metrics": [], "buckets": 30, "data": [] } }, - "results.properties.spectroscopy.eels.detector_type:scroll": { + "results.properties.mechanical.energy_volume_curve.type:scroll": { "terms": { - "quantity": "results.properties.spectroscopy.eels.detector_type", + "quantity": "results.properties.mechanical.energy_volume_curve.type", "exclude_from_search": true, "metrics": [], "size": 5, @@ -6615,8 +6935,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "1540", + "content-length": "2169", "content-type": "application/json", "server": "uvicorn" } @@ -6632,8 +6953,8 @@ "and": [ {}, { - "results.method.method_name:any": [ - "EELS" + "quantities:all": [ + "results.method.simulation.program_name" ] } ] @@ -6653,16 +6974,8 @@ "terms": { "exclude_from_search": true, "update": true, - "size": 6, + "size": 5, "type": "terms", - "include": [ - "The Perovskite Database Project", - "EELS Data Base", - "Materials Project", - "AFLOW", - "OQMD", - "Kyoto Phonopy Database" - ], "changed": true, "quantity": "external_db" } @@ -6699,10 +7012,10 @@ "and": [ {}, { - "name": "results.method.method_name", + "name": "quantities", "value": { - "any": [ - "EELS" + "all": [ + "results.method.simulation.program_name" ] } } @@ -6712,7 +7025,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 1 + "total": 6 }, "required": { "include": [ @@ -6725,13 +7038,159 @@ "quantity": "upload_create_time", "exclude_from_search": true, "metrics": [], + "interval": 6114, "buckets": 30, - "offset": 1674546352706, + "offset": 1697464386120, "data": [ { - "count": 1, - "nested_count": 1, - "value": 1674546352706 + "count": 3, + "nested_count": 3, + "value": 1697464386120 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464392234 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464398348 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464404462 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464410576 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464416690 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464422804 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464428918 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464435032 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464441146 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464447260 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464453374 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464459488 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464465602 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464471716 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464477830 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464483944 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464490058 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464496172 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464502286 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464508400 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464514514 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464520628 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464526742 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464532856 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464538970 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464545084 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464551198 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464557312 + }, + { + "count": 3, + "nested_count": 3, + "value": 1697464563426 } ] } @@ -6741,15 +7200,7 @@ "quantity": "external_db", "exclude_from_search": true, "metrics": [], - "size": 6, - "include": [ - "The Perovskite Database Project", - "EELS Data Base", - "Materials Project", - "AFLOW", - "OQMD", - "Kyoto Phonopy Database" - ], + "size": 5, "data": [] } }, @@ -6766,8 +7217,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "1418", + "content-length": "4649", "content-type": "application/json", "server": "uvicorn" } @@ -6783,15 +7235,15 @@ "and": [ {}, { - "sections:all": [ - "nomad.datamodel.results.SolarCell" + "quantities:all": [ + "data" ] } ] }, "aggregations": {}, "pagination": { - "order_by": "results.properties.optoelectronic.solar_cell.efficiency", + "order_by": "upload_create_time", "order": "desc", "page_size": 20 }, @@ -6817,10 +7269,10 @@ "and": [ {}, { - "name": "sections", + "name": "quantities", "value": { "all": [ - "nomad.datamodel.results.SolarCell" + "data" ] } } @@ -6828,9 +7280,9 @@ }, "pagination": { "page_size": 20, - "order_by": "results.properties.optoelectronic.solar_cell.efficiency", + "order_by": "upload_create_time", "order": "desc", - "total": 1 + "total": 3 }, "required": { "exclude": [ @@ -6841,10 +7293,10 @@ }, "data": [ { - "upload_id": "A-1gerweRKOSzhzOnLn60w", + "upload_id": "l1h8M0AWQp2sxCZoavf7Vg", "parser_name": "parsers/vasp", "origin": "Markus Scheidgen", - "calc_id": "HEO8zWoEQaihNcJpFa7Htw", + "calc_id": "n467IWj4QFWGr7S8EBneGg", "published": true, "writers": [ { @@ -6854,7 +7306,7 @@ ], "datasets": [], "n_quantities": 0, - "upload_create_time": "2023-01-24T07:45:52.706229+00:00", + "upload_create_time": "2023-10-16T13:56:09.514868+00:00", "processed": true, "mainfile": "upload/archive.json", "main_author": { @@ -6867,8 +7319,8 @@ "name": "Markus Scheidgen" } ], - "entry_create_time": "2023-01-24T07:45:52.713229+00:00", - "publish_time": "2023-01-24T07:45:52.709229+00:00", + "entry_create_time": "2023-10-16T13:56:09.521868+00:00", + "publish_time": "2023-10-16T13:56:09.517868+00:00", "with_embargo": false, "domain": "dft", "results": { @@ -6936,8 +7388,9 @@ } }, "available_properties": [ - "solar_cell", - "electronic.band_structure_electronic.band_gap" + "band_structure_electronic", + "electronic.band_structure_electronic.band_gap", + "solar_cell" ], "electronic": { "band_structure_electronic": [ @@ -6952,7 +7405,7 @@ } } }, - "entry_id": "HEO8zWoEQaihNcJpFa7Htw", + "entry_id": "n467IWj4QFWGr7S8EBneGg", "authors": [ { "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", @@ -6960,105 +7413,257 @@ } ], "license": "CC BY 4.0" - } - ] - }, - "headers": { - "connection": "close", - "content-length": "3876", - "content-type": "application/json", - "server": "uvicorn" - } - } - }, - { - "request": { - "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/query", - "method": "POST", - "body": { - "owner": "visible", - "query": { - "and": [ - {}, - { - "sections:all": [ - "nomad.datamodel.results.SolarCell" - ] - } - ] - }, - "aggregations": {}, - "pagination": { - "page_size": 1000, - "order": "asc", - "order_by": "entry_id" - }, - "required": { - "include": [ - "entry_id", - "results.properties.optoelectronic.solar_cell.open_circuit_voltage", - "results.properties.optoelectronic.solar_cell.efficiency", - "results.properties.optoelectronic.solar_cell.device_architecture" - ] - } - }, - "headers": { - "accept": "application/json, text/plain, */*", - "content-type": "application/json", - "cookie": null - } - }, - "response": { - "status": 200, - "body": { - "owner": "visible", - "query": { - "and": [ - {}, - { - "name": "sections", - "value": { - "all": [ - "nomad.datamodel.results.SolarCell" - ] + }, + { + "upload_id": "iG8xjpHjS8GKltt3vLssdg", + "parser_name": "parsers/vasp", + "origin": "Markus Scheidgen", + "calc_id": "3EKfNwf_SUm81tmFz4I6gA", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" } - } - ] - }, - "pagination": { - "page_size": 1000, - "order_by": "entry_id", - "order": "asc", - "total": 1 - }, - "required": { - "include": [ - "entry_id", - "results.properties.optoelectronic.solar_cell.open_circuit_voltage", - "results.properties.optoelectronic.solar_cell.efficiency", - "results.properties.optoelectronic.solar_cell.device_architecture" - ] - }, - "data": [ + ], + "datasets": [], + "n_quantities": 0, + "upload_create_time": "2023-10-16T13:53:06.120628+00:00", + "processed": true, + "mainfile": "upload/archive.json", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:53:06.127628+00:00", + "publish_time": "2023-10-16T13:53:06.123628+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": { + "functional_type": [ + "semiconductor", + "solar cell" + ], + "elements": [ + "C", + "H", + "I", + "N", + "Pb" + ], + "elements_exclusive": "C H I N Pb", + "material_id": "test_material_id", + "structural_type": "bulk", + "chemical_formula_reduced": "H6Pb1C1I3N1", + "n_elements": 5, + "chemical_formula_descriptive": "MAPbI3", + "material_name": "perovskite", + "chemical_formula_hill": "CH6I3NPb" + }, + "method": {}, + "properties": { + "optoelectronic": { + "solar_cell": { + "absorber_fabrication": [ + "Spin-coating" + ], + "efficiency": 15.9, + "device_stack": [ + "SLG", + "ITO", + "PEDOT:PSS", + "Perovskite", + "PCBM-60", + "BCP", + "Ag" + ], + "short_circuit_current_density": 203, + "hole_transport_layer": [ + "PEDOT:PSS" + ], + "fill_factor": 0.78, + "illumination_intensity": 1000, + "electron_transport_layer": [ + "PCBM-60", + "BCP" + ], + "device_area": 0.0000125, + "back_contact": [ + "Ag" + ], + "absorber": [ + "MAPbI" + ], + "open_circuit_voltage": 1, + "substrate": [ + "SLG", + "ITO" + ], + "device_architecture": "pin" + } + }, + "available_properties": [ + "band_structure_electronic", + "electronic.band_structure_electronic.band_gap", + "solar_cell" + ], + "electronic": { + "band_structure_electronic": [ + { + "band_gap": [ + { + "value": 2.5634826144e-19 + } + ] + } + ] + } + } + }, + "entry_id": "3EKfNwf_SUm81tmFz4I6gA", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "license": "CC BY 4.0" + }, { + "upload_id": "OtdaNHWXQKClDFSvTjQFFA", + "parser_name": "parsers/vasp", + "origin": "Markus Scheidgen", + "calc_id": "OsROhDnxTuShX95957NWmQ", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "n_quantities": 0, + "upload_create_time": "2023-10-16T13:31:25.648139+00:00", + "processed": true, + "mainfile": "upload/archive.json", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:31:25.655139+00:00", + "publish_time": "2023-10-16T13:31:25.651139+00:00", + "with_embargo": false, + "domain": "dft", "results": { + "material": { + "functional_type": [ + "semiconductor", + "solar cell" + ], + "elements": [ + "C", + "H", + "I", + "N", + "Pb" + ], + "elements_exclusive": "C H I N Pb", + "material_id": "test_material_id", + "structural_type": "bulk", + "chemical_formula_reduced": "H6Pb1C1I3N1", + "n_elements": 5, + "chemical_formula_descriptive": "MAPbI3", + "material_name": "perovskite", + "chemical_formula_hill": "CH6I3NPb" + }, + "method": {}, "properties": { "optoelectronic": { "solar_cell": { + "absorber_fabrication": [ + "Spin-coating" + ], "efficiency": 15.9, + "device_stack": [ + "SLG", + "ITO", + "PEDOT:PSS", + "Perovskite", + "PCBM-60", + "BCP", + "Ag" + ], + "short_circuit_current_density": 203, + "hole_transport_layer": [ + "PEDOT:PSS" + ], + "fill_factor": 0.78, + "illumination_intensity": 1000, + "electron_transport_layer": [ + "PCBM-60", + "BCP" + ], + "device_area": 0.0000125, + "back_contact": [ + "Ag" + ], + "absorber": [ + "MAPbI" + ], "open_circuit_voltage": 1, + "substrate": [ + "SLG", + "ITO" + ], "device_architecture": "pin" } + }, + "available_properties": [ + "band_structure_electronic", + "electronic.band_structure_electronic.band_gap", + "solar_cell" + ], + "electronic": { + "band_structure_electronic": [ + { + "band_gap": [ + { + "value": 2.5634826144e-19 + } + ] + } + ] } } }, - "entry_id": "HEO8zWoEQaihNcJpFa7Htw" + "entry_id": "OsROhDnxTuShX95957NWmQ", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "license": "CC BY 4.0" } ] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "945", + "content-length": "10707", "content-type": "application/json", "server": "uvicorn" } @@ -7074,25 +7679,39 @@ "and": [ {}, { - "sections:all": [ - "nomad.datamodel.results.SolarCell" + "quantities:all": [ + "data" ] } ] }, - "aggregations": {}, - "pagination": { - "page_size": 1000, - "order": "asc", - "order_by": "entry_id" - }, - "required": { - "include": [ - "entry_id", - "results.properties.optoelectronic.solar_cell.open_circuit_voltage", - "results.properties.optoelectronic.solar_cell.efficiency", - "results.properties.optoelectronic.solar_cell.short_circuit_current_density" - ] + "aggregations": { + "results.material.elements:default": { + "terms": { + "exclude_from_search": false, + "update": true, + "size": 119, + "type": "terms", + "changed": true, + "quantity": "results.material.elements" + } + }, + "results.material.n_elements:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "interval": 1, + "changed": true, + "quantity": "results.material.n_elements" + } + } + }, + "pagination": { + "page_size": 0 + }, + "required": { + "include": [] } }, "headers": { @@ -7109,49 +7728,84 @@ "and": [ {}, { - "name": "sections", + "name": "quantities", "value": { "all": [ - "nomad.datamodel.results.SolarCell" + "data" ] } } ] }, "pagination": { - "page_size": 1000, + "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 1 + "total": 3 }, "required": { "include": [ - "entry_id", - "results.properties.optoelectronic.solar_cell.open_circuit_voltage", - "results.properties.optoelectronic.solar_cell.efficiency", - "results.properties.optoelectronic.solar_cell.short_circuit_current_density" + "entry_id" ] }, - "data": [ - { - "results": { - "properties": { - "optoelectronic": { - "solar_cell": { - "efficiency": 15.9, - "short_circuit_current_density": 203, - "open_circuit_voltage": 1 - } + "aggregations": { + "results.material.elements:default": { + "terms": { + "quantity": "results.material.elements", + "exclude_from_search": false, + "metrics": [], + "size": 119, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": "C" + }, + { + "count": 3, + "nested_count": 3, + "value": "H" + }, + { + "count": 3, + "nested_count": 3, + "value": "I" + }, + { + "count": 3, + "nested_count": 3, + "value": "N" + }, + { + "count": 3, + "nested_count": 3, + "value": "Pb" } - } - }, - "entry_id": "HEO8zWoEQaihNcJpFa7Htw" + ] + } + }, + "results.material.n_elements:default_histogram": { + "histogram": { + "quantity": "results.material.n_elements", + "exclude_from_search": true, + "metrics": [], + "interval": 1, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": 5 + } + ] + } } - ] + }, + "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "965", + "content-length": "1519", "content-type": "application/json", "server": "uvicorn" } @@ -7167,81 +7821,51 @@ "and": [ {}, { - "sections:all": [ - "nomad.datamodel.results.SolarCell" + "quantities:all": [ + "data" ] } ] }, "aggregations": { - "results.material.elements:default": { - "terms": { - "exclude_from_search": false, - "update": true, - "size": 119, - "type": "terms", - "changed": true, - "quantity": "results.material.elements" - } - }, - "results.properties.optoelectronic.solar_cell.device_stack:3": { + "results.eln.sections:scroll": { "terms": { - "exclude_from_search": false, - "update": true, - "size": 14, - "type": "terms", - "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.device_stack" - } - }, - "results.properties.optoelectronic.solar_cell.illumination_intensity:4_histogram": { - "histogram": { "exclude_from_search": true, "update": true, - "type": "histogram", - "buckets": 30, + "size": 5, + "type": "terms", "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.illumination_intensity" + "quantity": "results.eln.sections" } }, - "results.properties.optoelectronic.solar_cell.absorber_fabrication:5": { + "results.eln.tags:scroll": { "terms": { "exclude_from_search": true, "update": true, - "size": 14, + "size": 5, "type": "terms", "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.absorber_fabrication" - } - }, - "results.properties.electronic.band_structure_electronic.band_gap.value:6_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "buckets": 30, - "changed": true, - "quantity": "results.properties.electronic.band_structure_electronic.band_gap.value" + "quantity": "results.eln.tags" } }, - "results.properties.optoelectronic.solar_cell.electron_transport_layer:7": { + "results.eln.methods:scroll": { "terms": { - "exclude_from_search": false, + "exclude_from_search": true, "update": true, - "size": 14, + "size": 5, "type": "terms", "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.electron_transport_layer" + "quantity": "results.eln.methods" } }, - "results.properties.optoelectronic.solar_cell.hole_transport_layer:8": { + "results.eln.instruments:scroll": { "terms": { - "exclude_from_search": false, + "exclude_from_search": true, "update": true, - "size": 14, + "size": 5, "type": "terms", "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.hole_transport_layer" + "quantity": "results.eln.instruments" } } }, @@ -7266,10 +7890,10 @@ "and": [ {}, { - "name": "sections", + "name": "quantities", "value": { "all": [ - "nomad.datamodel.results.SolarCell" + "data" ] } } @@ -7279,7 +7903,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 1 + "total": 3 }, "required": { "include": [ @@ -7287,174 +7911,49 @@ ] }, "aggregations": { - "results.material.elements:default": { + "results.eln.sections:scroll": { "terms": { - "quantity": "results.material.elements", - "exclude_from_search": false, + "quantity": "results.eln.sections", + "exclude_from_search": true, "metrics": [], - "size": 119, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": "C" - }, - { - "count": 1, - "nested_count": 1, - "value": "H" - }, - { - "count": 1, - "nested_count": 1, - "value": "I" - }, - { - "count": 1, - "nested_count": 1, - "value": "N" - }, - { - "count": 1, - "nested_count": 1, - "value": "Pb" - } - ] + "size": 5, + "data": [] } }, - "results.properties.optoelectronic.solar_cell.device_stack:3": { + "results.eln.tags:scroll": { "terms": { - "quantity": "results.properties.optoelectronic.solar_cell.device_stack", - "exclude_from_search": false, + "quantity": "results.eln.tags", + "exclude_from_search": true, "metrics": [], - "size": 14, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": "Ag" - }, - { - "count": 1, - "nested_count": 1, - "value": "BCP" - }, - { - "count": 1, - "nested_count": 1, - "value": "ITO" - }, - { - "count": 1, - "nested_count": 1, - "value": "PCBM-60" - }, - { - "count": 1, - "nested_count": 1, - "value": "PEDOT:PSS" - }, - { - "count": 1, - "nested_count": 1, - "value": "Perovskite" - }, - { - "count": 1, - "nested_count": 1, - "value": "SLG" - } - ] - } - }, - "results.properties.optoelectronic.solar_cell.illumination_intensity:4_histogram": { - "histogram": { - "quantity": "results.properties.optoelectronic.solar_cell.illumination_intensity", - "exclude_from_search": true, - "metrics": [], - "buckets": 30, - "offset": 1000, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": 1000 - } - ] + "size": 5, + "data": [] } }, - "results.properties.optoelectronic.solar_cell.absorber_fabrication:5": { + "results.eln.methods:scroll": { "terms": { - "quantity": "results.properties.optoelectronic.solar_cell.absorber_fabrication", - "exclude_from_search": true, - "metrics": [], - "size": 14, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": "Spin-coating" - } - ] - } - }, - "results.properties.electronic.band_structure_electronic.band_gap.value:6_histogram": { - "histogram": { - "quantity": "results.properties.electronic.band_structure_electronic.band_gap.value", + "quantity": "results.eln.methods", "exclude_from_search": true, "metrics": [], - "buckets": 30, - "offset": 2.5634826144e-19, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": 2.5634826144e-19 - } - ] - } - }, - "results.properties.optoelectronic.solar_cell.electron_transport_layer:7": { - "terms": { - "quantity": "results.properties.optoelectronic.solar_cell.electron_transport_layer", - "exclude_from_search": false, - "metrics": [], - "size": 14, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": "BCP" - }, - { - "count": 1, - "nested_count": 1, - "value": "PCBM-60" - } - ] + "size": 5, + "data": [] } }, - "results.properties.optoelectronic.solar_cell.hole_transport_layer:8": { + "results.eln.instruments:scroll": { "terms": { - "quantity": "results.properties.optoelectronic.solar_cell.hole_transport_layer", - "exclude_from_search": false, + "quantity": "results.eln.instruments", + "exclude_from_search": true, "metrics": [], - "size": 14, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": "PEDOT:PSS" - } - ] + "size": 5, + "data": [] } } }, "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "4560", + "content-length": "1241", "content-type": "application/json", "server": "uvicorn" } @@ -7467,36 +7966,31 @@ "body": { "owner": "visible", "query": { - "and": [ - {}, - { - "sections:all": [ - "nomad.datamodel.results.SolarCell" - ] - } - ] - }, - "aggregations": { - "results.material.n_elements:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "interval": 1, - "changed": true, - "quantity": "results.material.n_elements" - } - } + "quantities": "data" }, "pagination": { "page_size": 0 }, - "required": { - "include": [] + "aggregations": { + "paths": { + "terms": { + "quantity": "search_quantities.path", + "size": 1000, + "entries": { + "size": 1, + "required": { + "include": [ + "search_quantities.path", + "search_quantities.definition" + ] + } + } + } + } } }, "headers": { - "accept": "application/json, text/plain, */*", + "accept": "application/json", "content-type": "application/json", "cookie": null } @@ -7506,51 +8000,41 @@ "body": { "owner": "visible", "query": { - "and": [ - {}, - { - "name": "sections", - "value": { - "all": [ - "nomad.datamodel.results.SolarCell" - ] - } - } - ] + "name": "quantities", + "value": "data" }, "pagination": { "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 1 - }, - "required": { - "include": [ - "entry_id" - ] + "total": 3 }, "aggregations": { - "results.material.n_elements:default_histogram": { - "histogram": { - "quantity": "results.material.n_elements", - "exclude_from_search": true, + "paths": { + "terms": { + "quantity": "search_quantities.path", + "exclude_from_search": false, "metrics": [], - "interval": 1, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": 5 + "size": 1000, + "entries": { + "size": 1, + "required": { + "include": [ + "search_quantities.path", + "search_quantities.definition" + ] } - ] + }, + "data": [] } } }, "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "787", + "content-length": "640", "content-type": "application/json", "server": "uvicorn" } @@ -7566,94 +8050,41 @@ "and": [ {}, { - "sections:all": [ - "nomad.datamodel.results.SolarCell" + "quantities:all": [ + "data" ] } ] }, "aggregations": { - "results.material.structural_type:scroll": { - "terms": { - "exclude_from_search": true, - "update": true, - "size": 6, - "type": "terms", - "include": [ - "bulk", - "surface", - "2D", - "1D", - "molecule / cluster", - "atom" - ], - "changed": true, - "quantity": "results.material.structural_type" - } - }, - "results.material.symmetry.bravais_lattice:scroll": { - "terms": { - "exclude_from_search": true, - "update": true, - "size": 14, - "type": "terms", - "include": [ - "aP", - "mP", - "mS", - "oP", - "oS", - "oF", - "oI", - "tP", - "tI", - "hP", - "hR", - "cP", - "cF", - "cI" - ], - "changed": true, - "quantity": "results.material.symmetry.bravais_lattice" - } - }, - "results.material.symmetry.crystal_system:scroll": { - "terms": { + "upload_create_time:default_histogram": { + "histogram": { "exclude_from_search": true, "update": true, - "size": 7, - "type": "terms", - "include": [ - "triclinic", - "monoclinic", - "orthorhombic", - "tetragonal", - "trigonal", - "hexagonal", - "cubic" - ], + "type": "histogram", + "buckets": 30, "changed": true, - "quantity": "results.material.symmetry.crystal_system" + "quantity": "upload_create_time" } }, - "results.material.symmetry.structure_name:scroll": { + "external_db:scroll": { "terms": { "exclude_from_search": true, "update": true, "size": 5, "type": "terms", "changed": true, - "quantity": "results.material.symmetry.structure_name" + "quantity": "external_db" } }, - "results.material.symmetry.strukturbericht_designation:scroll": { + "datasets.dataset_name:scroll": { "terms": { "exclude_from_search": true, "update": true, - "size": 5, + "size": 10, "type": "terms", "changed": true, - "quantity": "results.material.symmetry.strukturbericht_designation" + "quantity": "datasets.dataset_name" } } }, @@ -7678,10 +8109,10 @@ "and": [ {}, { - "name": "sections", + "name": "quantities", "value": { "all": [ - "nomad.datamodel.results.SolarCell" + "data" ] } } @@ -7691,7 +8122,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 1 + "total": 3 }, "required": { "include": [ @@ -7699,87 +8130,183 @@ ] }, "aggregations": { - "results.material.structural_type:scroll": { - "terms": { - "quantity": "results.material.structural_type", + "upload_create_time:default_histogram": { + "histogram": { + "quantity": "upload_create_time", "exclude_from_search": true, "metrics": [], - "size": 6, - "include": [ - "bulk", - "surface", - "2D", - "1D", - "molecule / cluster", - "atom" - ], + "interval": 49463, + "buckets": 30, + "offset": 1697463085648, "data": [ { "count": 1, "nested_count": 1, - "value": "bulk" - } - ] - } - }, - "results.material.symmetry.bravais_lattice:scroll": { - "terms": { - "quantity": "results.material.symmetry.bravais_lattice", - "exclude_from_search": true, - "metrics": [], - "size": 14, - "include": [ - "aP", - "mP", - "mS", - "oP", - "oS", - "oF", - "oI", - "tP", - "tI", - "hP", - "hR", - "cP", - "cF", - "cI" - ], - "data": [] - } - }, - "results.material.symmetry.crystal_system:scroll": { - "terms": { - "quantity": "results.material.symmetry.crystal_system", - "exclude_from_search": true, - "metrics": [], - "size": 7, - "include": [ - "triclinic", - "monoclinic", - "orthorhombic", - "tetragonal", - "trigonal", - "hexagonal", - "cubic" - ], - "data": [] + "value": 1697463085648 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463135111 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463184574 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463234037 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463283500 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463332963 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463382426 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463431889 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463481352 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463530815 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463580278 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463629741 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463679204 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463728667 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463778130 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463827593 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463877056 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463926519 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463975982 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464025445 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464074908 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464124371 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464173834 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464223297 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464272760 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464322223 + }, + { + "count": 1, + "nested_count": 1, + "value": 1697464371686 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464421149 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464470612 + }, + { + "count": 1, + "nested_count": 1, + "value": 1697464520075 + } + ] } }, - "results.material.symmetry.structure_name:scroll": { + "external_db:scroll": { "terms": { - "quantity": "results.material.symmetry.structure_name", + "quantity": "external_db", "exclude_from_search": true, "metrics": [], "size": 5, "data": [] } }, - "results.material.symmetry.strukturbericht_designation:scroll": { + "datasets.dataset_name:scroll": { "terms": { - "quantity": "results.material.symmetry.strukturbericht_designation", + "quantity": "datasets.dataset_name", "exclude_from_search": true, "metrics": [], - "size": 5, + "size": 10, "data": [] } } @@ -7787,8 +8314,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "2411", + "content-length": "4616", "content-type": "application/json", "server": "uvicorn" } @@ -7804,88 +8332,24 @@ "and": [ {}, { - "sections:all": [ - "nomad.datamodel.results.SolarCell" + "results.method.method_name:any": [ + "EELS" ] } ] }, - "aggregations": { - "electronic_properties:scroll": { - "terms": { - "exclude_from_search": false, - "quantity": "results.properties.available_properties", - "include": [ - "electronic.band_structure_electronic.band_gap", - "band_structure_electronic", - "dos_electronic", - "greens_functions_electronic", - "eels" - ], - "update": true, - "type": "terms", - "size": 5, - "changed": true - } - }, - "results.properties.electronic.band_structure_electronic.band_gap.type:scroll": { - "terms": { - "exclude_from_search": true, - "update": true, - "size": 2, - "type": "terms", - "include": [ - "direct", - "indirect" - ], - "changed": true, - "quantity": "results.properties.electronic.band_structure_electronic.band_gap.type" - } - }, - "results.properties.electronic.band_structure_electronic.band_gap.value:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "buckets": 30, - "changed": true, - "quantity": "results.properties.electronic.band_structure_electronic.band_gap.value" - } - }, - "results.properties.electronic.band_structure_electronic.spin_polarized:scroll": { - "terms": { - "exclude_from_search": true, - "update": true, - "size": 2, - "include": [ - "false", - "true" - ], - "type": "terms", - "changed": true, - "quantity": "results.properties.electronic.band_structure_electronic.spin_polarized" - } - }, - "results.properties.electronic.dos_electronic.spin_polarized:scroll": { - "terms": { - "exclude_from_search": true, - "update": true, - "size": 2, - "include": [ - "false", - "true" - ], - "type": "terms", - "changed": true, - "quantity": "results.properties.electronic.dos_electronic.spin_polarized" - } - } - }, + "aggregations": {}, "pagination": { - "page_size": 0 + "order_by": "upload_create_time", + "order": "desc", + "page_size": 20 }, "required": { - "include": [] + "exclude": [ + "quantities", + "sections", + "files" + ] } }, "headers": { @@ -7902,110 +8366,242 @@ "and": [ {}, { - "name": "sections", + "name": "results.method.method_name", "value": { - "all": [ - "nomad.datamodel.results.SolarCell" + "any": [ + "EELS" ] } } ] }, "pagination": { - "page_size": 0, - "order_by": "entry_id", - "order": "asc", - "total": 1 + "page_size": 20, + "order_by": "upload_create_time", + "order": "desc", + "total": 3 }, "required": { - "include": [ - "entry_id" + "exclude": [ + "quantities", + "sections", + "files" ] }, - "aggregations": { - "electronic_properties:scroll": { - "terms": { - "quantity": "results.properties.available_properties", - "exclude_from_search": false, - "metrics": [], - "size": 5, - "include": [ - "electronic.band_structure_electronic.band_gap", - "band_structure_electronic", - "dos_electronic", - "greens_functions_electronic", - "eels" - ], - "data": [ - { - "count": 1, - "nested_count": 1, - "value": "electronic.band_structure_electronic.band_gap" - } - ] - } - }, - "results.properties.electronic.band_structure_electronic.band_gap.type:scroll": { - "terms": { - "quantity": "results.properties.electronic.band_structure_electronic.band_gap.type", - "exclude_from_search": true, - "metrics": [], - "size": 2, - "include": [ - "direct", - "indirect" - ], - "data": [] - } - }, - "results.properties.electronic.band_structure_electronic.band_gap.value:default_histogram": { - "histogram": { - "quantity": "results.properties.electronic.band_structure_electronic.band_gap.value", - "exclude_from_search": true, - "metrics": [], - "buckets": 30, - "offset": 2.5634826144e-19, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": 2.5634826144e-19 - } - ] - } + "data": [ + { + "upload_id": "l1h8M0AWQp2sxCZoavf7Vg", + "parser_name": "parsers/vasp", + "origin": "Markus Scheidgen", + "calc_id": "23_DfDutQF2OvB64Y361bg", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "n_quantities": 0, + "upload_create_time": "2023-10-16T13:56:09.514868+00:00", + "processed": true, + "mainfile": "upload/archive.json", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:56:09.522868+00:00", + "publish_time": "2023-10-16T13:56:09.517868+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": { + "functional_type": [ + "semiconductor", + "solar cell" + ], + "elements": [ + "C", + "H", + "I", + "N", + "Pb" + ], + "elements_exclusive": "C H I N Pb", + "material_id": "test_material_id", + "structural_type": "bulk", + "chemical_formula_reduced": "H6Pb1C1I3N1", + "n_elements": 5, + "chemical_formula_descriptive": "MAPbI3", + "material_name": "perovskite", + "chemical_formula_hill": "CH6I3NPb" + }, + "method": { + "method_name": "EELS" + }, + "properties": { + "available_properties": [] + } + }, + "entry_id": "23_DfDutQF2OvB64Y361bg", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "license": "CC BY 4.0" }, - "results.properties.electronic.band_structure_electronic.spin_polarized:scroll": { - "terms": { - "quantity": "results.properties.electronic.band_structure_electronic.spin_polarized", - "exclude_from_search": true, - "metrics": [], - "size": 2, - "include": [ - "false", - "true" - ], - "data": [] - } + { + "upload_id": "iG8xjpHjS8GKltt3vLssdg", + "parser_name": "parsers/vasp", + "origin": "Markus Scheidgen", + "calc_id": "WbIJYsArR4e02KlSsvfS8A", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "n_quantities": 0, + "upload_create_time": "2023-10-16T13:53:06.120628+00:00", + "processed": true, + "mainfile": "upload/archive.json", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:53:06.128628+00:00", + "publish_time": "2023-10-16T13:53:06.123628+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": { + "functional_type": [ + "semiconductor", + "solar cell" + ], + "elements": [ + "C", + "H", + "I", + "N", + "Pb" + ], + "elements_exclusive": "C H I N Pb", + "material_id": "test_material_id", + "structural_type": "bulk", + "chemical_formula_reduced": "H6Pb1C1I3N1", + "n_elements": 5, + "chemical_formula_descriptive": "MAPbI3", + "material_name": "perovskite", + "chemical_formula_hill": "CH6I3NPb" + }, + "method": { + "method_name": "EELS" + }, + "properties": { + "available_properties": [] + } + }, + "entry_id": "WbIJYsArR4e02KlSsvfS8A", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "license": "CC BY 4.0" }, - "results.properties.electronic.dos_electronic.spin_polarized:scroll": { - "terms": { - "quantity": "results.properties.electronic.dos_electronic.spin_polarized", - "exclude_from_search": true, - "metrics": [], - "size": 2, - "include": [ - "false", - "true" - ], - "data": [] - } + { + "upload_id": "OtdaNHWXQKClDFSvTjQFFA", + "parser_name": "parsers/vasp", + "origin": "Markus Scheidgen", + "calc_id": "AHTw3P8HQp2f-AqBhMwsfg", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "n_quantities": 0, + "upload_create_time": "2023-10-16T13:31:25.648139+00:00", + "processed": true, + "mainfile": "upload/archive.json", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:31:25.656139+00:00", + "publish_time": "2023-10-16T13:31:25.651139+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": { + "functional_type": [ + "semiconductor", + "solar cell" + ], + "elements": [ + "C", + "H", + "I", + "N", + "Pb" + ], + "elements_exclusive": "C H I N Pb", + "material_id": "test_material_id", + "structural_type": "bulk", + "chemical_formula_reduced": "H6Pb1C1I3N1", + "n_elements": 5, + "chemical_formula_descriptive": "MAPbI3", + "material_name": "perovskite", + "chemical_formula_hill": "CH6I3NPb" + }, + "method": { + "method_name": "EELS" + }, + "properties": { + "available_properties": [] + } + }, + "entry_id": "AHTw3P8HQp2f-AqBhMwsfg", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "license": "CC BY 4.0" } - }, - "data": [] + ] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "2643", + "content-length": "6286", "content-type": "application/json", "server": "uvicorn" } @@ -8021,151 +8617,163 @@ "and": [ {}, { - "sections:all": [ - "nomad.datamodel.results.SolarCell" + "results.method.method_name:any": [ + "EELS" ] } ] }, "aggregations": { - "results.properties.optoelectronic.solar_cell.efficiency:default_histogram": { - "histogram": { - "exclude_from_search": true, + "results.material.elements:default": { + "terms": { + "exclude_from_search": false, "update": true, - "type": "histogram", - "buckets": 30, - "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.efficiency" - } - }, - "results.properties.optoelectronic.solar_cell.fill_factor:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "buckets": 30, - "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.fill_factor" - } - }, - "results.properties.optoelectronic.solar_cell.open_circuit_voltage:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "buckets": 30, - "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.open_circuit_voltage" - } - }, - "results.properties.optoelectronic.solar_cell.short_circuit_current_density:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "buckets": 30, - "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.short_circuit_current_density" - } - }, - "results.properties.optoelectronic.solar_cell.illumination_intensity:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "buckets": 30, + "size": 119, + "type": "terms", "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.illumination_intensity" + "quantity": "results.material.elements" } }, - "results.properties.optoelectronic.solar_cell.device_area:default_histogram": { + "results.material.n_elements:default_histogram": { "histogram": { "exclude_from_search": true, "update": true, "type": "histogram", - "buckets": 30, - "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.device_area" - } - }, - "results.properties.optoelectronic.solar_cell.device_architecture:scroll": { - "terms": { - "exclude_from_search": true, - "update": true, - "size": 5, - "type": "terms", + "interval": 1, "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.device_architecture" + "quantity": "results.material.n_elements" } - }, - "results.properties.optoelectronic.solar_cell.device_stack:scroll": { - "terms": { - "exclude_from_search": false, - "update": true, - "size": 5, - "type": "terms", - "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.device_stack" + } + }, + "pagination": { + "page_size": 0 + }, + "required": { + "include": [] + } + }, + "headers": { + "accept": "application/json, text/plain, */*", + "content-type": "application/json", + "cookie": null + } + }, + "response": { + "status": 200, + "body": { + "owner": "visible", + "query": { + "and": [ + {}, + { + "name": "results.method.method_name", + "value": { + "any": [ + "EELS" + ] + } } - }, - "results.properties.optoelectronic.solar_cell.absorber:scroll": { + ] + }, + "pagination": { + "page_size": 0, + "order_by": "entry_id", + "order": "asc", + "total": 3 + }, + "required": { + "include": [ + "entry_id" + ] + }, + "aggregations": { + "results.material.elements:default": { "terms": { + "quantity": "results.material.elements", "exclude_from_search": false, - "update": true, - "size": 5, - "type": "terms", - "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.absorber" + "metrics": [], + "size": 119, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": "C" + }, + { + "count": 3, + "nested_count": 3, + "value": "H" + }, + { + "count": 3, + "nested_count": 3, + "value": "I" + }, + { + "count": 3, + "nested_count": 3, + "value": "N" + }, + { + "count": 3, + "nested_count": 3, + "value": "Pb" + } + ] } }, - "results.properties.optoelectronic.solar_cell.absorber_fabrication:scroll": { - "terms": { + "results.material.n_elements:default_histogram": { + "histogram": { + "quantity": "results.material.n_elements", "exclude_from_search": true, - "update": true, - "size": 5, - "type": "terms", - "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.absorber_fabrication" - } - }, - "results.properties.optoelectronic.solar_cell.electron_transport_layer:scroll": { - "terms": { - "exclude_from_search": false, - "update": true, - "size": 5, - "type": "terms", - "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.electron_transport_layer" - } - }, - "results.properties.optoelectronic.solar_cell.hole_transport_layer:scroll": { - "terms": { - "exclude_from_search": false, - "update": true, - "size": 5, - "type": "terms", - "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.hole_transport_layer" + "metrics": [], + "interval": 1, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": 5 + } + ] } - }, - "results.properties.optoelectronic.solar_cell.substrate:scroll": { - "terms": { - "exclude_from_search": false, - "update": true, - "size": 5, - "type": "terms", - "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.substrate" + } + }, + "data": [] + }, + "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", + "connection": "close", + "content-length": "1535", + "content-type": "application/json", + "server": "uvicorn" + } + } + }, + { + "request": { + "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/query", + "method": "POST", + "body": { + "owner": "visible", + "query": { + "and": [ + {}, + { + "results.method.method_name:any": [ + "EELS" + ] } - }, - "results.properties.optoelectronic.solar_cell.back_contact:scroll": { + ] + }, + "aggregations": { + "results.method.simulation.program_name:scroll": { "terms": { - "exclude_from_search": false, + "exclude_from_search": true, "update": true, "size": 5, "type": "terms", "changed": true, - "quantity": "results.properties.optoelectronic.solar_cell.back_contact" + "quantity": "results.method.simulation.program_name" } } }, @@ -8190,10 +8798,10 @@ "and": [ {}, { - "name": "sections", + "name": "results.method.method_name", "value": { - "all": [ - "nomad.datamodel.results.SolarCell" + "any": [ + "EELS" ] } } @@ -8203,7 +8811,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 1 + "total": 3 }, "required": { "include": [ @@ -8211,248 +8819,20 @@ ] }, "aggregations": { - "results.properties.optoelectronic.solar_cell.efficiency:default_histogram": { - "histogram": { - "quantity": "results.properties.optoelectronic.solar_cell.efficiency", + "results.method.simulation.program_name:scroll": { + "terms": { + "quantity": "results.method.simulation.program_name", "exclude_from_search": true, "metrics": [], - "buckets": 30, - "offset": 15.9, + "size": 5, "data": [ { - "count": 1, - "nested_count": 1, - "value": 15.9 - } - ] - } - }, - "results.properties.optoelectronic.solar_cell.fill_factor:default_histogram": { - "histogram": { - "quantity": "results.properties.optoelectronic.solar_cell.fill_factor", - "exclude_from_search": true, - "metrics": [], - "buckets": 30, - "offset": 0.78, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": 0.78 - } - ] - } - }, - "results.properties.optoelectronic.solar_cell.open_circuit_voltage:default_histogram": { - "histogram": { - "quantity": "results.properties.optoelectronic.solar_cell.open_circuit_voltage", - "exclude_from_search": true, - "metrics": [], - "buckets": 30, - "offset": 1, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": 1 - } - ] - } - }, - "results.properties.optoelectronic.solar_cell.short_circuit_current_density:default_histogram": { - "histogram": { - "quantity": "results.properties.optoelectronic.solar_cell.short_circuit_current_density", - "exclude_from_search": true, - "metrics": [], - "buckets": 30, - "offset": 203, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": 203 - } - ] - } - }, - "results.properties.optoelectronic.solar_cell.illumination_intensity:default_histogram": { - "histogram": { - "quantity": "results.properties.optoelectronic.solar_cell.illumination_intensity", - "exclude_from_search": true, - "metrics": [], - "buckets": 30, - "offset": 1000, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": 1000 - } - ] - } - }, - "results.properties.optoelectronic.solar_cell.device_area:default_histogram": { - "histogram": { - "quantity": "results.properties.optoelectronic.solar_cell.device_area", - "exclude_from_search": true, - "metrics": [], - "buckets": 30, - "offset": 0.0000125, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": 0.0000125 - } - ] - } - }, - "results.properties.optoelectronic.solar_cell.device_architecture:scroll": { - "terms": { - "quantity": "results.properties.optoelectronic.solar_cell.device_architecture", - "exclude_from_search": true, - "metrics": [], - "size": 5, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": "pin" - } - ] - } - }, - "results.properties.optoelectronic.solar_cell.device_stack:scroll": { - "terms": { - "quantity": "results.properties.optoelectronic.solar_cell.device_stack", - "exclude_from_search": false, - "metrics": [], - "size": 5, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": "Ag" - }, - { - "count": 1, - "nested_count": 1, - "value": "BCP" - }, - { - "count": 1, - "nested_count": 1, - "value": "ITO" - }, - { - "count": 1, - "nested_count": 1, - "value": "PCBM-60" - }, - { - "count": 1, - "nested_count": 1, - "value": "PEDOT:PSS" - } - ] - } - }, - "results.properties.optoelectronic.solar_cell.absorber:scroll": { - "terms": { - "quantity": "results.properties.optoelectronic.solar_cell.absorber", - "exclude_from_search": false, - "metrics": [], - "size": 5, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": "MAPbI" - } - ] - } - }, - "results.properties.optoelectronic.solar_cell.absorber_fabrication:scroll": { - "terms": { - "quantity": "results.properties.optoelectronic.solar_cell.absorber_fabrication", - "exclude_from_search": true, - "metrics": [], - "size": 5, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": "Spin-coating" - } - ] - } - }, - "results.properties.optoelectronic.solar_cell.electron_transport_layer:scroll": { - "terms": { - "quantity": "results.properties.optoelectronic.solar_cell.electron_transport_layer", - "exclude_from_search": false, - "metrics": [], - "size": 5, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": "BCP" - }, - { - "count": 1, - "nested_count": 1, - "value": "PCBM-60" - } - ] - } - }, - "results.properties.optoelectronic.solar_cell.hole_transport_layer:scroll": { - "terms": { - "quantity": "results.properties.optoelectronic.solar_cell.hole_transport_layer", - "exclude_from_search": false, - "metrics": [], - "size": 5, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": "PEDOT:PSS" - } - ] - } - }, - "results.properties.optoelectronic.solar_cell.substrate:scroll": { - "terms": { - "quantity": "results.properties.optoelectronic.solar_cell.substrate", - "exclude_from_search": false, - "metrics": [], - "size": 5, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": "ITO" - }, - { - "count": 1, - "nested_count": 1, - "value": "SLG" - } - ] - } - }, - "results.properties.optoelectronic.solar_cell.back_contact:scroll": { - "terms": { - "quantity": "results.properties.optoelectronic.solar_cell.back_contact", - "exclude_from_search": false, - "metrics": [], - "size": 5, - "data": [ - { - "count": 1, - "nested_count": 1, - "value": "Ag" + "count": 0, + "value": "VASP" + }, + { + "count": 0, + "value": "unavailable" } ] } @@ -8461,8 +8841,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "7089", + "content-length": "833", "content-type": "application/json", "server": "uvicorn" } @@ -8478,51 +8859,51 @@ "and": [ {}, { - "sections:all": [ - "nomad.datamodel.results.SolarCell" + "results.method.method_name:any": [ + "EELS" ] } ] }, "aggregations": { - "results.eln.sections:scroll": { + "results.properties.spectroscopic.spectra.provenance.eels.detector_type:scroll": { "terms": { "exclude_from_search": true, "update": true, "size": 5, "type": "terms", "changed": true, - "quantity": "results.eln.sections" + "quantity": "results.properties.spectroscopic.spectra.provenance.eels.detector_type" } }, - "results.eln.tags:scroll": { - "terms": { + "results.properties.spectroscopic.spectra.provenance.eels.resolution:default_histogram": { + "histogram": { "exclude_from_search": true, "update": true, - "size": 5, - "type": "terms", + "type": "histogram", + "buckets": 30, "changed": true, - "quantity": "results.eln.tags" + "quantity": "results.properties.spectroscopic.spectra.provenance.eels.resolution" } }, - "results.eln.methods:scroll": { - "terms": { + "results.properties.spectroscopic.spectra.provenance.eels.min_energy:default_histogram": { + "histogram": { "exclude_from_search": true, "update": true, - "size": 5, - "type": "terms", + "type": "histogram", + "buckets": 30, "changed": true, - "quantity": "results.eln.methods" + "quantity": "results.properties.spectroscopic.spectra.provenance.eels.min_energy" } }, - "results.eln.instruments:scroll": { - "terms": { + "results.properties.spectroscopic.spectra.provenance.eels.max_energy:default_histogram": { + "histogram": { "exclude_from_search": true, "update": true, - "size": 5, - "type": "terms", - "changed": true, - "quantity": "results.eln.instruments" + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.properties.spectroscopic.spectra.provenance.eels.max_energy" } } }, @@ -8547,10 +8928,10 @@ "and": [ {}, { - "name": "sections", + "name": "results.method.method_name", "value": { - "all": [ - "nomad.datamodel.results.SolarCell" + "any": [ + "EELS" ] } } @@ -8560,7 +8941,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 1 + "total": 3 }, "required": { "include": [ @@ -8568,121 +8949,39 @@ ] }, "aggregations": { - "results.eln.sections:scroll": { + "results.properties.spectroscopic.spectra.provenance.eels.detector_type:scroll": { "terms": { - "quantity": "results.eln.sections", + "quantity": "results.properties.spectroscopic.spectra.provenance.eels.detector_type", "exclude_from_search": true, "metrics": [], "size": 5, "data": [] } }, - "results.eln.tags:scroll": { - "terms": { - "quantity": "results.eln.tags", + "results.properties.spectroscopic.spectra.provenance.eels.resolution:default_histogram": { + "histogram": { + "quantity": "results.properties.spectroscopic.spectra.provenance.eels.resolution", "exclude_from_search": true, "metrics": [], - "size": 5, + "buckets": 30, "data": [] } }, - "results.eln.methods:scroll": { - "terms": { - "quantity": "results.eln.methods", + "results.properties.spectroscopic.spectra.provenance.eels.min_energy:default_histogram": { + "histogram": { + "quantity": "results.properties.spectroscopic.spectra.provenance.eels.min_energy", "exclude_from_search": true, "metrics": [], - "size": 5, + "buckets": 30, "data": [] } }, - "results.eln.instruments:scroll": { - "terms": { - "quantity": "results.eln.instruments", + "results.properties.spectroscopic.spectra.provenance.eels.max_energy:default_histogram": { + "histogram": { + "quantity": "results.properties.spectroscopic.spectra.provenance.eels.max_energy", "exclude_from_search": true, "metrics": [], - "size": 5, - "data": [] - } - } - }, - "data": [] - }, - "headers": { - "connection": "close", - "content-length": "1268", - "content-type": "application/json", - "server": "uvicorn" - } - } - }, - { - "request": { - "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/query", - "method": "POST", - "body": { - "owner": "visible", - "query": { - "quantities": "data" - }, - "pagination": { - "page_size": 0 - }, - "aggregations": { - "paths": { - "terms": { - "quantity": "searchable_quantities.path", - "size": 1000, - "entries": { - "size": 1, - "required": { - "include": [ - "searchable_quantities.path", - "searchable_quantities.quantity_name", - "searchable_quantities.section_definition" - ] - } - } - } - } - } - }, - "headers": { - "accept": "application/json", - "content-type": "application/json", - "cookie": null - } - }, - "response": { - "status": 200, - "body": { - "owner": "visible", - "query": { - "name": "quantities", - "value": "data" - }, - "pagination": { - "page_size": 0, - "order_by": "entry_id", - "order": "asc", - "total": 1 - }, - "aggregations": { - "paths": { - "terms": { - "quantity": "searchable_quantities.path", - "exclude_from_search": false, - "metrics": [], - "size": 1000, - "entries": { - "size": 1, - "required": { - "include": [ - "searchable_quantities.path", - "searchable_quantities.quantity_name", - "searchable_quantities.section_definition" - ] - } - }, + "buckets": 30, "data": [] } } @@ -8690,8 +8989,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "713", + "content-length": "1700", "content-type": "application/json", "server": "uvicorn" } @@ -8707,8 +9007,8 @@ "and": [ {}, { - "sections:all": [ - "nomad.datamodel.results.SolarCell" + "results.method.method_name:any": [ + "EELS" ] } ] @@ -8728,16 +9028,8 @@ "terms": { "exclude_from_search": true, "update": true, - "size": 6, + "size": 5, "type": "terms", - "include": [ - "The Perovskite Database Project", - "EELS Data Base", - "Materials Project", - "AFLOW", - "OQMD", - "Kyoto Phonopy Database" - ], "changed": true, "quantity": "external_db" } @@ -8774,10 +9066,10 @@ "and": [ {}, { - "name": "sections", + "name": "results.method.method_name", "value": { - "all": [ - "nomad.datamodel.results.SolarCell" + "any": [ + "EELS" ] } } @@ -8787,7 +9079,7 @@ "page_size": 0, "order_by": "entry_id", "order": "asc", - "total": 1 + "total": 3 }, "required": { "include": [ @@ -8800,13 +9092,159 @@ "quantity": "upload_create_time", "exclude_from_search": true, "metrics": [], + "interval": 49463, "buckets": 30, - "offset": 1674546352706, + "offset": 1697463085648, "data": [ { "count": 1, "nested_count": 1, - "value": 1674546352706 + "value": 1697463085648 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463135111 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463184574 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463234037 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463283500 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463332963 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463382426 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463431889 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463481352 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463530815 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463580278 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463629741 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463679204 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463728667 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463778130 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463827593 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463877056 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463926519 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463975982 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464025445 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464074908 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464124371 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464173834 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464223297 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464272760 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464322223 + }, + { + "count": 1, + "nested_count": 1, + "value": 1697464371686 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464421149 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464470612 + }, + { + "count": 1, + "nested_count": 1, + "value": 1697464520075 } ] } @@ -8816,15 +9254,7 @@ "quantity": "external_db", "exclude_from_search": true, "metrics": [], - "size": 6, - "include": [ - "The Perovskite Database Project", - "EELS Data Base", - "Materials Project", - "AFLOW", - "OQMD", - "Kyoto Phonopy Database" - ], + "size": 5, "data": [] } }, @@ -8841,151 +9271,46 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "1429", + "content-length": "4632", "content-type": "application/json", "server": "uvicorn" } } - } - ], - "cd2b263727fb2d6704d7b6a1e68a2c83": [ + }, { "request": { - "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/archive/query", + "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/query", "method": "POST", "body": { "owner": "visible", "query": { - "quantities": "definitions.section_definitions", - "processed": true - }, - "required": { - "metadata": { - "entry_id": "*" - } - } - }, - "headers": { - "accept": "application/json", - "content-type": "application/json", - "cookie": null - } - }, - "response": { - "status": 200, - "body": { - "owner": "visible", - "query": { - "and": [ - { - "name": "quantities", - "value": "definitions.section_definitions" - }, - { - "name": "processed", - "value": true - } - ] + "and": [ + {}, + { + "sections:all": [ + "nomad.datamodel.results.SolarCell" + ] + } + ] }, + "aggregations": {}, "pagination": { - "page_size": 10, - "order_by": "entry_id", - "order": "asc", - "total": 0 - }, - "required": { - "metadata": { - "entry_id": "*" - } - }, - "data": [] - }, - "headers": { - "connection": "close", - "content-length": "414", - "content-type": "application/json", - "server": "uvicorn" - } - } - }, - { - "request": { - "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/archive/query", - "method": "POST", - "body": { - "owner": "visible", - "query": { - "quantities": "definitions.section_definitions", - "processed": true + "order_by": "results.properties.optoelectronic.solar_cell.efficiency", + "order": "desc", + "page_size": 20 }, "required": { - "metadata": { - "entry_id": "*" - } - } - }, - "headers": { - "accept": "application/json", - "content-type": "application/json", - "cookie": null - } - }, - "response": { - "status": 200, - "body": { - "owner": "visible", - "query": { - "and": [ - { - "name": "quantities", - "value": "definitions.section_definitions" - }, - { - "name": "processed", - "value": true - } + "exclude": [ + "quantities", + "sections", + "files" ] - }, - "pagination": { - "page_size": 10, - "order_by": "entry_id", - "order": "asc", - "total": 0 - }, - "required": { - "metadata": { - "entry_id": "*" - } - }, - "data": [] - }, - "headers": { - "connection": "close", - "content-length": "414", - "content-type": "application/json", - "server": "uvicorn" - } - } - }, - { - "request": { - "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/archive/query", - "method": "POST", - "body": { - "owner": "visible", - "query": { - "quantities": "definitions.section_definitions", - "processed": true - }, - "required": { - "metadata": { - "entry_id": "*" - } } }, "headers": { - "accept": "application/json", + "accept": "application/json, text/plain, */*", "content-type": "application/json", "cookie": null } @@ -8996,209 +9321,2504 @@ "owner": "visible", "query": { "and": [ + {}, { - "name": "quantities", - "value": "definitions.section_definitions" - }, - { - "name": "processed", - "value": true + "name": "sections", + "value": { + "all": [ + "nomad.datamodel.results.SolarCell" + ] + } } ] }, "pagination": { - "page_size": 10, - "order_by": "entry_id", - "order": "asc", - "total": 0 - }, - "required": { - "metadata": { - "entry_id": "*" - } - }, - "data": [] - }, - "headers": { - "connection": "close", - "content-length": "414", - "content-type": "application/json", - "server": "uvicorn" - } - } - }, - { - "request": { - "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/archive/query", - "method": "POST", - "body": { - "owner": "visible", - "query": { - "quantities": "definitions.section_definitions", - "processed": true + "page_size": 20, + "order_by": "results.properties.optoelectronic.solar_cell.efficiency", + "order": "desc", + "total": 3 }, "required": { - "metadata": { - "entry_id": "*" - } - } - }, - "headers": { - "accept": "application/json", - "content-type": "application/json", - "cookie": null - } - }, - "response": { - "status": 200, - "body": { - "owner": "visible", - "query": { - "and": [ - { - "name": "quantities", - "value": "definitions.section_definitions" - }, - { - "name": "processed", - "value": true - } + "exclude": [ + "quantities", + "sections", + "files" ] }, - "pagination": { - "page_size": 10, - "order_by": "entry_id", - "order": "asc", - "total": 0 - }, - "required": { - "metadata": { - "entry_id": "*" - } - }, - "data": [] - }, - "headers": { - "connection": "close", - "content-length": "414", - "content-type": "application/json", - "server": "uvicorn" - } - } - }, - { - "request": { - "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/archive/query", - "method": "POST", - "body": { - "owner": "visible", - "query": { - "quantities": "definitions.section_definitions", - "processed": true - }, - "required": { - "metadata": { - "entry_id": "*" - } - } - }, - "headers": { - "accept": "application/json", - "content-type": "application/json", - "cookie": null - } - }, - "response": { - "status": 200, - "body": { - "owner": "visible", - "query": { - "and": [ - { - "name": "quantities", - "value": "definitions.section_definitions" + "data": [ + { + "upload_id": "l1h8M0AWQp2sxCZoavf7Vg", + "parser_name": "parsers/vasp", + "origin": "Markus Scheidgen", + "calc_id": "n467IWj4QFWGr7S8EBneGg", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "n_quantities": 0, + "upload_create_time": "2023-10-16T13:56:09.514868+00:00", + "processed": true, + "mainfile": "upload/archive.json", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:56:09.521868+00:00", + "publish_time": "2023-10-16T13:56:09.517868+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": { + "functional_type": [ + "semiconductor", + "solar cell" + ], + "elements": [ + "C", + "H", + "I", + "N", + "Pb" + ], + "elements_exclusive": "C H I N Pb", + "material_id": "test_material_id", + "structural_type": "bulk", + "chemical_formula_reduced": "H6Pb1C1I3N1", + "n_elements": 5, + "chemical_formula_descriptive": "MAPbI3", + "material_name": "perovskite", + "chemical_formula_hill": "CH6I3NPb" + }, + "method": {}, + "properties": { + "optoelectronic": { + "solar_cell": { + "absorber_fabrication": [ + "Spin-coating" + ], + "efficiency": 15.9, + "device_stack": [ + "SLG", + "ITO", + "PEDOT:PSS", + "Perovskite", + "PCBM-60", + "BCP", + "Ag" + ], + "short_circuit_current_density": 203, + "hole_transport_layer": [ + "PEDOT:PSS" + ], + "fill_factor": 0.78, + "illumination_intensity": 1000, + "electron_transport_layer": [ + "PCBM-60", + "BCP" + ], + "device_area": 0.0000125, + "back_contact": [ + "Ag" + ], + "absorber": [ + "MAPbI" + ], + "open_circuit_voltage": 1, + "substrate": [ + "SLG", + "ITO" + ], + "device_architecture": "pin" + } + }, + "available_properties": [ + "band_structure_electronic", + "electronic.band_structure_electronic.band_gap", + "solar_cell" + ], + "electronic": { + "band_structure_electronic": [ + { + "band_gap": [ + { + "value": 2.5634826144e-19 + } + ] + } + ] + } + } + }, + "entry_id": "n467IWj4QFWGr7S8EBneGg", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "license": "CC BY 4.0" + }, + { + "upload_id": "OtdaNHWXQKClDFSvTjQFFA", + "parser_name": "parsers/vasp", + "origin": "Markus Scheidgen", + "calc_id": "OsROhDnxTuShX95957NWmQ", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "n_quantities": 0, + "upload_create_time": "2023-10-16T13:31:25.648139+00:00", + "processed": true, + "mainfile": "upload/archive.json", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:31:25.655139+00:00", + "publish_time": "2023-10-16T13:31:25.651139+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": { + "functional_type": [ + "semiconductor", + "solar cell" + ], + "elements": [ + "C", + "H", + "I", + "N", + "Pb" + ], + "elements_exclusive": "C H I N Pb", + "material_id": "test_material_id", + "structural_type": "bulk", + "chemical_formula_reduced": "H6Pb1C1I3N1", + "n_elements": 5, + "chemical_formula_descriptive": "MAPbI3", + "material_name": "perovskite", + "chemical_formula_hill": "CH6I3NPb" + }, + "method": {}, + "properties": { + "optoelectronic": { + "solar_cell": { + "absorber_fabrication": [ + "Spin-coating" + ], + "efficiency": 15.9, + "device_stack": [ + "SLG", + "ITO", + "PEDOT:PSS", + "Perovskite", + "PCBM-60", + "BCP", + "Ag" + ], + "short_circuit_current_density": 203, + "hole_transport_layer": [ + "PEDOT:PSS" + ], + "fill_factor": 0.78, + "illumination_intensity": 1000, + "electron_transport_layer": [ + "PCBM-60", + "BCP" + ], + "device_area": 0.0000125, + "back_contact": [ + "Ag" + ], + "absorber": [ + "MAPbI" + ], + "open_circuit_voltage": 1, + "substrate": [ + "SLG", + "ITO" + ], + "device_architecture": "pin" + } + }, + "available_properties": [ + "band_structure_electronic", + "electronic.band_structure_electronic.band_gap", + "solar_cell" + ], + "electronic": { + "band_structure_electronic": [ + { + "band_gap": [ + { + "value": 2.5634826144e-19 + } + ] + } + ] + } + } + }, + "entry_id": "OsROhDnxTuShX95957NWmQ", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "license": "CC BY 4.0" + }, + { + "upload_id": "iG8xjpHjS8GKltt3vLssdg", + "parser_name": "parsers/vasp", + "origin": "Markus Scheidgen", + "calc_id": "3EKfNwf_SUm81tmFz4I6gA", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "n_quantities": 0, + "upload_create_time": "2023-10-16T13:53:06.120628+00:00", + "processed": true, + "mainfile": "upload/archive.json", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:53:06.127628+00:00", + "publish_time": "2023-10-16T13:53:06.123628+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": { + "functional_type": [ + "semiconductor", + "solar cell" + ], + "elements": [ + "C", + "H", + "I", + "N", + "Pb" + ], + "elements_exclusive": "C H I N Pb", + "material_id": "test_material_id", + "structural_type": "bulk", + "chemical_formula_reduced": "H6Pb1C1I3N1", + "n_elements": 5, + "chemical_formula_descriptive": "MAPbI3", + "material_name": "perovskite", + "chemical_formula_hill": "CH6I3NPb" + }, + "method": {}, + "properties": { + "optoelectronic": { + "solar_cell": { + "absorber_fabrication": [ + "Spin-coating" + ], + "efficiency": 15.9, + "device_stack": [ + "SLG", + "ITO", + "PEDOT:PSS", + "Perovskite", + "PCBM-60", + "BCP", + "Ag" + ], + "short_circuit_current_density": 203, + "hole_transport_layer": [ + "PEDOT:PSS" + ], + "fill_factor": 0.78, + "illumination_intensity": 1000, + "electron_transport_layer": [ + "PCBM-60", + "BCP" + ], + "device_area": 0.0000125, + "back_contact": [ + "Ag" + ], + "absorber": [ + "MAPbI" + ], + "open_circuit_voltage": 1, + "substrate": [ + "SLG", + "ITO" + ], + "device_architecture": "pin" + } + }, + "available_properties": [ + "band_structure_electronic", + "electronic.band_structure_electronic.band_gap", + "solar_cell" + ], + "electronic": { + "band_structure_electronic": [ + { + "band_gap": [ + { + "value": 2.5634826144e-19 + } + ] + } + ] + } + } + }, + "entry_id": "3EKfNwf_SUm81tmFz4I6gA", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "license": "CC BY 4.0" + } + ] + }, + "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", + "connection": "close", + "content-length": "10771", + "content-type": "application/json", + "server": "uvicorn" + } + } + }, + { + "request": { + "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/query", + "method": "POST", + "body": { + "owner": "visible", + "query": { + "and": [ + {}, + { + "sections:all": [ + "nomad.datamodel.results.SolarCell" + ] + } + ] + }, + "aggregations": { + "results.material.elements:widget": { + "terms": { + "exclude_from_search": false, + "update": true, + "size": 119, + "type": "terms", + "changed": true, + "quantity": "results.material.elements" + } + }, + "results.properties.optoelectronic.solar_cell.device_stack:3": { + "terms": { + "exclude_from_search": false, + "update": true, + "size": 14, + "type": "terms", + "changed": true, + "quantity": "results.properties.optoelectronic.solar_cell.device_stack" + } + }, + "results.properties.optoelectronic.solar_cell.illumination_intensity:4_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.properties.optoelectronic.solar_cell.illumination_intensity" + } + }, + "results.properties.optoelectronic.solar_cell.absorber_fabrication:5": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 14, + "type": "terms", + "changed": true, + "quantity": "results.properties.optoelectronic.solar_cell.absorber_fabrication" + } + }, + "results.properties.electronic.band_structure_electronic.band_gap.value:6_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.properties.electronic.band_structure_electronic.band_gap.value" + } + }, + "results.properties.optoelectronic.solar_cell.electron_transport_layer:7": { + "terms": { + "exclude_from_search": false, + "update": true, + "size": 14, + "type": "terms", + "changed": true, + "quantity": "results.properties.optoelectronic.solar_cell.electron_transport_layer" + } + }, + "results.properties.optoelectronic.solar_cell.hole_transport_layer:8": { + "terms": { + "exclude_from_search": false, + "update": true, + "size": 14, + "type": "terms", + "changed": true, + "quantity": "results.properties.optoelectronic.solar_cell.hole_transport_layer" + } + } + }, + "pagination": { + "page_size": 0 + }, + "required": { + "include": [] + } + }, + "headers": { + "accept": "application/json, text/plain, */*", + "content-type": "application/json", + "cookie": null + } + }, + "response": { + "status": 200, + "body": { + "owner": "visible", + "query": { + "and": [ + {}, + { + "name": "sections", + "value": { + "all": [ + "nomad.datamodel.results.SolarCell" + ] + } + } + ] + }, + "pagination": { + "page_size": 0, + "order_by": "entry_id", + "order": "asc", + "total": 3 + }, + "required": { + "include": [ + "entry_id" + ] + }, + "aggregations": { + "results.material.elements:widget": { + "terms": { + "quantity": "results.material.elements", + "exclude_from_search": false, + "metrics": [], + "size": 119, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": "C" + }, + { + "count": 3, + "nested_count": 3, + "value": "H" + }, + { + "count": 3, + "nested_count": 3, + "value": "I" + }, + { + "count": 3, + "nested_count": 3, + "value": "N" + }, + { + "count": 3, + "nested_count": 3, + "value": "Pb" + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.device_stack:3": { + "terms": { + "quantity": "results.properties.optoelectronic.solar_cell.device_stack", + "exclude_from_search": false, + "metrics": [], + "size": 14, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": "Ag" + }, + { + "count": 3, + "nested_count": 3, + "value": "BCP" + }, + { + "count": 3, + "nested_count": 3, + "value": "ITO" + }, + { + "count": 3, + "nested_count": 3, + "value": "PCBM-60" + }, + { + "count": 3, + "nested_count": 3, + "value": "PEDOT:PSS" + }, + { + "count": 3, + "nested_count": 3, + "value": "Perovskite" + }, + { + "count": 3, + "nested_count": 3, + "value": "SLG" + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.illumination_intensity:4_histogram": { + "histogram": { + "quantity": "results.properties.optoelectronic.solar_cell.illumination_intensity", + "exclude_from_search": true, + "metrics": [], + "buckets": 30, + "offset": 1000, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": 1000 + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.absorber_fabrication:5": { + "terms": { + "quantity": "results.properties.optoelectronic.solar_cell.absorber_fabrication", + "exclude_from_search": true, + "metrics": [], + "size": 14, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": "Spin-coating" + } + ] + } + }, + "results.properties.electronic.band_structure_electronic.band_gap.value:6_histogram": { + "histogram": { + "quantity": "results.properties.electronic.band_structure_electronic.band_gap.value", + "exclude_from_search": true, + "metrics": [], + "buckets": 30, + "offset": 2.5634826144e-19, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": 2.5634826144e-19 + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.electron_transport_layer:7": { + "terms": { + "quantity": "results.properties.optoelectronic.solar_cell.electron_transport_layer", + "exclude_from_search": false, + "metrics": [], + "size": 14, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": "BCP" + }, + { + "count": 3, + "nested_count": 3, + "value": "PCBM-60" + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.hole_transport_layer:8": { + "terms": { + "quantity": "results.properties.optoelectronic.solar_cell.hole_transport_layer", + "exclude_from_search": false, + "metrics": [], + "size": 14, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": "PEDOT:PSS" + } + ] + } + } + }, + "data": [] + }, + "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", + "connection": "close", + "content-length": "4559", + "content-type": "application/json", + "server": "uvicorn" + } + } + }, + { + "request": { + "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/query", + "method": "POST", + "body": { + "owner": "visible", + "query": { + "and": [ + {}, + { + "sections:all": [ + "nomad.datamodel.results.SolarCell" + ] + } + ] + }, + "aggregations": {}, + "pagination": { + "page_size": 1000, + "order": "asc", + "order_by": "entry_id" + }, + "required": { + "include": [ + "entry_id", + "results.properties.optoelectronic.solar_cell.open_circuit_voltage", + "results.properties.optoelectronic.solar_cell.efficiency", + "results.properties.optoelectronic.solar_cell.short_circuit_current_density" + ] + } + }, + "headers": { + "accept": "application/json, text/plain, */*", + "content-type": "application/json", + "cookie": null + } + }, + "response": { + "status": 200, + "body": { + "owner": "visible", + "query": { + "and": [ + {}, + { + "name": "sections", + "value": { + "all": [ + "nomad.datamodel.results.SolarCell" + ] + } + } + ] + }, + "pagination": { + "page_size": 1000, + "order_by": "entry_id", + "order": "asc", + "total": 3 + }, + "required": { + "include": [ + "entry_id", + "results.properties.optoelectronic.solar_cell.open_circuit_voltage", + "results.properties.optoelectronic.solar_cell.efficiency", + "results.properties.optoelectronic.solar_cell.short_circuit_current_density" + ] + }, + "data": [ + { + "results": { + "properties": { + "optoelectronic": { + "solar_cell": { + "efficiency": 15.9, + "short_circuit_current_density": 203, + "open_circuit_voltage": 1 + } + } + } + }, + "entry_id": "3EKfNwf_SUm81tmFz4I6gA" + }, + { + "results": { + "properties": { + "optoelectronic": { + "solar_cell": { + "efficiency": 15.9, + "short_circuit_current_density": 203, + "open_circuit_voltage": 1 + } + } + } + }, + "entry_id": "OsROhDnxTuShX95957NWmQ" + }, + { + "results": { + "properties": { + "optoelectronic": { + "solar_cell": { + "efficiency": 15.9, + "short_circuit_current_density": 203, + "open_circuit_voltage": 1 + } + } + } + }, + "entry_id": "n467IWj4QFWGr7S8EBneGg" + } + ] + }, + "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", + "connection": "close", + "content-length": "1629", + "content-type": "application/json", + "server": "uvicorn" + } + } + }, + { + "request": { + "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/query", + "method": "POST", + "body": { + "owner": "visible", + "query": { + "and": [ + {}, + { + "sections:all": [ + "nomad.datamodel.results.SolarCell" + ] + } + ] + }, + "aggregations": {}, + "pagination": { + "page_size": 1000, + "order": "asc", + "order_by": "entry_id" + }, + "required": { + "include": [ + "entry_id", + "results.properties.optoelectronic.solar_cell.open_circuit_voltage", + "results.properties.optoelectronic.solar_cell.efficiency", + "results.properties.optoelectronic.solar_cell.device_architecture" + ] + } + }, + "headers": { + "accept": "application/json, text/plain, */*", + "content-type": "application/json", + "cookie": null + } + }, + "response": { + "status": 200, + "body": { + "owner": "visible", + "query": { + "and": [ + {}, + { + "name": "sections", + "value": { + "all": [ + "nomad.datamodel.results.SolarCell" + ] + } + } + ] + }, + "pagination": { + "page_size": 1000, + "order_by": "entry_id", + "order": "asc", + "total": 3 + }, + "required": { + "include": [ + "entry_id", + "results.properties.optoelectronic.solar_cell.open_circuit_voltage", + "results.properties.optoelectronic.solar_cell.efficiency", + "results.properties.optoelectronic.solar_cell.device_architecture" + ] + }, + "data": [ + { + "results": { + "properties": { + "optoelectronic": { + "solar_cell": { + "efficiency": 15.9, + "open_circuit_voltage": 1, + "device_architecture": "pin" + } + } + } + }, + "entry_id": "3EKfNwf_SUm81tmFz4I6gA" + }, + { + "results": { + "properties": { + "optoelectronic": { + "solar_cell": { + "efficiency": 15.9, + "open_circuit_voltage": 1, + "device_architecture": "pin" + } + } + } + }, + "entry_id": "OsROhDnxTuShX95957NWmQ" + }, + { + "results": { + "properties": { + "optoelectronic": { + "solar_cell": { + "efficiency": 15.9, + "open_circuit_voltage": 1, + "device_architecture": "pin" + } + } + } + }, + "entry_id": "n467IWj4QFWGr7S8EBneGg" + } + ] + }, + "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", + "connection": "close", + "content-length": "1589", + "content-type": "application/json", + "server": "uvicorn" + } + } + }, + { + "request": { + "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/query", + "method": "POST", + "body": { + "owner": "visible", + "query": { + "and": [ + {}, + { + "sections:all": [ + "nomad.datamodel.results.SolarCell" + ] + } + ] + }, + "aggregations": { + "results.material.elements:default": { + "terms": { + "exclude_from_search": false, + "update": true, + "size": 119, + "type": "terms", + "changed": true, + "quantity": "results.material.elements" + } + }, + "results.material.n_elements:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "interval": 1, + "changed": true, + "quantity": "results.material.n_elements" + } + } + }, + "pagination": { + "page_size": 0 + }, + "required": { + "include": [] + } + }, + "headers": { + "accept": "application/json, text/plain, */*", + "content-type": "application/json", + "cookie": null + } + }, + "response": { + "status": 200, + "body": { + "owner": "visible", + "query": { + "and": [ + {}, + { + "name": "sections", + "value": { + "all": [ + "nomad.datamodel.results.SolarCell" + ] + } + } + ] + }, + "pagination": { + "page_size": 0, + "order_by": "entry_id", + "order": "asc", + "total": 3 + }, + "required": { + "include": [ + "entry_id" + ] + }, + "aggregations": { + "results.material.elements:default": { + "terms": { + "quantity": "results.material.elements", + "exclude_from_search": false, + "metrics": [], + "size": 119, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": "C" + }, + { + "count": 3, + "nested_count": 3, + "value": "H" + }, + { + "count": 3, + "nested_count": 3, + "value": "I" + }, + { + "count": 3, + "nested_count": 3, + "value": "N" + }, + { + "count": 3, + "nested_count": 3, + "value": "Pb" + } + ] + } + }, + "results.material.n_elements:default_histogram": { + "histogram": { + "quantity": "results.material.n_elements", + "exclude_from_search": true, + "metrics": [], + "interval": 1, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": 5 + } + ] + } + } + }, + "data": [] + }, + "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", + "connection": "close", + "content-length": "1546", + "content-type": "application/json", + "server": "uvicorn" + } + } + }, + { + "request": { + "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/query", + "method": "POST", + "body": { + "owner": "visible", + "query": { + "and": [ + {}, + { + "sections:all": [ + "nomad.datamodel.results.SolarCell" + ] + } + ] + }, + "aggregations": { + "results.material.structural_type:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 6, + "type": "terms", + "include": [ + "bulk", + "surface", + "2D", + "1D", + "molecule / cluster", + "atom" + ], + "changed": true, + "quantity": "results.material.structural_type" + } + }, + "results.material.symmetry.bravais_lattice:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.material.symmetry.bravais_lattice" + } + }, + "results.material.symmetry.crystal_system:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.material.symmetry.crystal_system" + } + }, + "results.material.symmetry.structure_name:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "include": [ + "4-member ring", + "Heusler", + "bcc", + "bct", + "bct5", + "clathrate", + "cuprite", + "diamond", + "fcc", + "fct", + "half-Heusler", + "hcp", + "perovskite", + "rock salt", + "simple cubic", + "wurtzite", + "zincblende" + ], + "changed": true, + "quantity": "results.material.symmetry.structure_name" + } + }, + "results.material.symmetry.strukturbericht_designation:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.material.symmetry.strukturbericht_designation" + } + } + }, + "pagination": { + "page_size": 0 + }, + "required": { + "include": [] + } + }, + "headers": { + "accept": "application/json, text/plain, */*", + "content-type": "application/json", + "cookie": null + } + }, + "response": { + "status": 200, + "body": { + "owner": "visible", + "query": { + "and": [ + {}, + { + "name": "sections", + "value": { + "all": [ + "nomad.datamodel.results.SolarCell" + ] + } + } + ] + }, + "pagination": { + "page_size": 0, + "order_by": "entry_id", + "order": "asc", + "total": 3 + }, + "required": { + "include": [ + "entry_id" + ] + }, + "aggregations": { + "results.material.structural_type:scroll": { + "terms": { + "quantity": "results.material.structural_type", + "exclude_from_search": true, + "metrics": [], + "size": 6, + "include": [ + "bulk", + "surface", + "2D", + "1D", + "molecule / cluster", + "atom" + ], + "data": [ + { + "count": 3, + "nested_count": 3, + "value": "bulk" + } + ] + } + }, + "results.material.symmetry.bravais_lattice:scroll": { + "terms": { + "quantity": "results.material.symmetry.bravais_lattice", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + }, + "results.material.symmetry.crystal_system:scroll": { + "terms": { + "quantity": "results.material.symmetry.crystal_system", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + }, + "results.material.symmetry.structure_name:scroll": { + "terms": { + "quantity": "results.material.symmetry.structure_name", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "include": [ + "4-member ring", + "Heusler", + "bcc", + "bct", + "bct5", + "clathrate", + "cuprite", + "diamond", + "fcc", + "fct", + "half-Heusler", + "hcp", + "perovskite", + "rock salt", + "simple cubic", + "wurtzite", + "zincblende" + ], + "data": [] + } + }, + "results.material.symmetry.strukturbericht_designation:scroll": { + "terms": { + "quantity": "results.material.symmetry.strukturbericht_designation", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + } + }, + "data": [] + }, + "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", + "connection": "close", + "content-length": "2355", + "content-type": "application/json", + "server": "uvicorn" + } + } + }, + { + "request": { + "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/query", + "method": "POST", + "body": { + "owner": "visible", + "query": { + "and": [ + {}, + { + "sections:all": [ + "nomad.datamodel.results.SolarCell" + ] + } + ] + }, + "aggregations": { + "electronic_properties:scroll": { + "terms": { + "exclude_from_search": false, + "quantity": "results.properties.available_properties", + "include": [ + "electronic.band_structure_electronic.band_gap", + "band_structure_electronic", + "dos_electronic", + "greens_functions_electronic", + "eels" + ], + "update": true, + "type": "terms", + "size": 5, + "changed": true + } + }, + "results.properties.electronic.band_structure_electronic.band_gap.type:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.properties.electronic.band_structure_electronic.band_gap.type" + } + }, + "results.properties.electronic.band_structure_electronic.band_gap.value:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.properties.electronic.band_structure_electronic.band_gap.value" + } + }, + "results.properties.electronic.band_structure_electronic.spin_polarized:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 2, + "include": [ + "false", + "true" + ], + "type": "terms", + "changed": true, + "quantity": "results.properties.electronic.band_structure_electronic.spin_polarized" + } + }, + "results.properties.electronic.dos_electronic.spin_polarized:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 2, + "include": [ + "false", + "true" + ], + "type": "terms", + "changed": true, + "quantity": "results.properties.electronic.dos_electronic.spin_polarized" + } + } + }, + "pagination": { + "page_size": 0 + }, + "required": { + "include": [] + } + }, + "headers": { + "accept": "application/json, text/plain, */*", + "content-type": "application/json", + "cookie": null + } + }, + "response": { + "status": 200, + "body": { + "owner": "visible", + "query": { + "and": [ + {}, + { + "name": "sections", + "value": { + "all": [ + "nomad.datamodel.results.SolarCell" + ] + } + } + ] + }, + "pagination": { + "page_size": 0, + "order_by": "entry_id", + "order": "asc", + "total": 3 + }, + "required": { + "include": [ + "entry_id" + ] + }, + "aggregations": { + "electronic_properties:scroll": { + "terms": { + "quantity": "results.properties.available_properties", + "exclude_from_search": false, + "metrics": [], + "size": 5, + "include": [ + "electronic.band_structure_electronic.band_gap", + "band_structure_electronic", + "dos_electronic", + "greens_functions_electronic", + "eels" + ], + "data": [ + { + "count": 3, + "nested_count": 3, + "value": "band_structure_electronic" + }, + { + "count": 3, + "nested_count": 3, + "value": "electronic.band_structure_electronic.band_gap" + } + ] + } + }, + "results.properties.electronic.band_structure_electronic.band_gap.type:scroll": { + "terms": { + "quantity": "results.properties.electronic.band_structure_electronic.band_gap.type", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + }, + "results.properties.electronic.band_structure_electronic.band_gap.value:default_histogram": { + "histogram": { + "quantity": "results.properties.electronic.band_structure_electronic.band_gap.value", + "exclude_from_search": true, + "metrics": [], + "buckets": 30, + "offset": 2.5634826144e-19, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": 2.5634826144e-19 + } + ] + } + }, + "results.properties.electronic.band_structure_electronic.spin_polarized:scroll": { + "terms": { + "quantity": "results.properties.electronic.band_structure_electronic.spin_polarized", + "exclude_from_search": true, + "metrics": [], + "size": 2, + "include": [ + "false", + "true" + ], + "data": [] + } + }, + "results.properties.electronic.dos_electronic.spin_polarized:scroll": { + "terms": { + "quantity": "results.properties.electronic.dos_electronic.spin_polarized", + "exclude_from_search": true, + "metrics": [], + "size": 2, + "include": [ + "false", + "true" + ], + "data": [] + } + } + }, + "data": [] + }, + "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", + "connection": "close", + "content-length": "2699", + "content-type": "application/json", + "server": "uvicorn" + } + } + }, + { + "request": { + "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/query", + "method": "POST", + "body": { + "owner": "visible", + "query": { + "and": [ + {}, + { + "sections:all": [ + "nomad.datamodel.results.SolarCell" + ] + } + ] + }, + "aggregations": { + "results.properties.optoelectronic.solar_cell.efficiency:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.properties.optoelectronic.solar_cell.efficiency" + } + }, + "results.properties.optoelectronic.solar_cell.fill_factor:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.properties.optoelectronic.solar_cell.fill_factor" + } + }, + "results.properties.optoelectronic.solar_cell.open_circuit_voltage:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.properties.optoelectronic.solar_cell.open_circuit_voltage" + } + }, + "results.properties.optoelectronic.solar_cell.short_circuit_current_density:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.properties.optoelectronic.solar_cell.short_circuit_current_density" + } + }, + "results.properties.optoelectronic.solar_cell.illumination_intensity:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.properties.optoelectronic.solar_cell.illumination_intensity" + } + }, + "results.properties.optoelectronic.solar_cell.device_area:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "results.properties.optoelectronic.solar_cell.device_area" + } + }, + "results.properties.optoelectronic.solar_cell.device_architecture:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.properties.optoelectronic.solar_cell.device_architecture" + } + }, + "results.properties.optoelectronic.solar_cell.device_stack:scroll": { + "terms": { + "exclude_from_search": false, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.properties.optoelectronic.solar_cell.device_stack" + } + }, + "results.properties.optoelectronic.solar_cell.absorber:scroll": { + "terms": { + "exclude_from_search": false, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.properties.optoelectronic.solar_cell.absorber" + } + }, + "results.properties.optoelectronic.solar_cell.absorber_fabrication:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.properties.optoelectronic.solar_cell.absorber_fabrication" + } + }, + "results.properties.optoelectronic.solar_cell.electron_transport_layer:scroll": { + "terms": { + "exclude_from_search": false, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.properties.optoelectronic.solar_cell.electron_transport_layer" + } + }, + "results.properties.optoelectronic.solar_cell.hole_transport_layer:scroll": { + "terms": { + "exclude_from_search": false, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.properties.optoelectronic.solar_cell.hole_transport_layer" + } + }, + "results.properties.optoelectronic.solar_cell.substrate:scroll": { + "terms": { + "exclude_from_search": false, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.properties.optoelectronic.solar_cell.substrate" + } + }, + "results.properties.optoelectronic.solar_cell.back_contact:scroll": { + "terms": { + "exclude_from_search": false, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.properties.optoelectronic.solar_cell.back_contact" + } + } + }, + "pagination": { + "page_size": 0 + }, + "required": { + "include": [] + } + }, + "headers": { + "accept": "application/json, text/plain, */*", + "content-type": "application/json", + "cookie": null + } + }, + "response": { + "status": 200, + "body": { + "owner": "visible", + "query": { + "and": [ + {}, + { + "name": "sections", + "value": { + "all": [ + "nomad.datamodel.results.SolarCell" + ] + } + } + ] + }, + "pagination": { + "page_size": 0, + "order_by": "entry_id", + "order": "asc", + "total": 3 + }, + "required": { + "include": [ + "entry_id" + ] + }, + "aggregations": { + "results.properties.optoelectronic.solar_cell.efficiency:default_histogram": { + "histogram": { + "quantity": "results.properties.optoelectronic.solar_cell.efficiency", + "exclude_from_search": true, + "metrics": [], + "buckets": 30, + "offset": 15.9, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": 15.9 + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.fill_factor:default_histogram": { + "histogram": { + "quantity": "results.properties.optoelectronic.solar_cell.fill_factor", + "exclude_from_search": true, + "metrics": [], + "buckets": 30, + "offset": 0.78, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": 0.78 + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.open_circuit_voltage:default_histogram": { + "histogram": { + "quantity": "results.properties.optoelectronic.solar_cell.open_circuit_voltage", + "exclude_from_search": true, + "metrics": [], + "buckets": 30, + "offset": 1, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": 1 + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.short_circuit_current_density:default_histogram": { + "histogram": { + "quantity": "results.properties.optoelectronic.solar_cell.short_circuit_current_density", + "exclude_from_search": true, + "metrics": [], + "buckets": 30, + "offset": 203, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": 203 + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.illumination_intensity:default_histogram": { + "histogram": { + "quantity": "results.properties.optoelectronic.solar_cell.illumination_intensity", + "exclude_from_search": true, + "metrics": [], + "buckets": 30, + "offset": 1000, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": 1000 + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.device_area:default_histogram": { + "histogram": { + "quantity": "results.properties.optoelectronic.solar_cell.device_area", + "exclude_from_search": true, + "metrics": [], + "buckets": 30, + "offset": 0.0000125, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": 0.0000125 + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.device_architecture:scroll": { + "terms": { + "quantity": "results.properties.optoelectronic.solar_cell.device_architecture", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": "pin" + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.device_stack:scroll": { + "terms": { + "quantity": "results.properties.optoelectronic.solar_cell.device_stack", + "exclude_from_search": false, + "metrics": [], + "size": 5, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": "Ag" + }, + { + "count": 3, + "nested_count": 3, + "value": "BCP" + }, + { + "count": 3, + "nested_count": 3, + "value": "ITO" + }, + { + "count": 3, + "nested_count": 3, + "value": "PCBM-60" + }, + { + "count": 3, + "nested_count": 3, + "value": "PEDOT:PSS" + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.absorber:scroll": { + "terms": { + "quantity": "results.properties.optoelectronic.solar_cell.absorber", + "exclude_from_search": false, + "metrics": [], + "size": 5, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": "MAPbI" + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.absorber_fabrication:scroll": { + "terms": { + "quantity": "results.properties.optoelectronic.solar_cell.absorber_fabrication", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": "Spin-coating" + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.electron_transport_layer:scroll": { + "terms": { + "quantity": "results.properties.optoelectronic.solar_cell.electron_transport_layer", + "exclude_from_search": false, + "metrics": [], + "size": 5, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": "BCP" + }, + { + "count": 3, + "nested_count": 3, + "value": "PCBM-60" + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.hole_transport_layer:scroll": { + "terms": { + "quantity": "results.properties.optoelectronic.solar_cell.hole_transport_layer", + "exclude_from_search": false, + "metrics": [], + "size": 5, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": "PEDOT:PSS" + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.substrate:scroll": { + "terms": { + "quantity": "results.properties.optoelectronic.solar_cell.substrate", + "exclude_from_search": false, + "metrics": [], + "size": 5, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": "ITO" + }, + { + "count": 3, + "nested_count": 3, + "value": "SLG" + } + ] + } + }, + "results.properties.optoelectronic.solar_cell.back_contact:scroll": { + "terms": { + "quantity": "results.properties.optoelectronic.solar_cell.back_contact", + "exclude_from_search": false, + "metrics": [], + "size": 5, + "data": [ + { + "count": 3, + "nested_count": 3, + "value": "Ag" + } + ] + } + } + }, + "data": [] + }, + "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", + "connection": "close", + "content-length": "7089", + "content-type": "application/json", + "server": "uvicorn" + } + } + }, + { + "request": { + "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/query", + "method": "POST", + "body": { + "owner": "visible", + "query": { + "and": [ + {}, + { + "sections:all": [ + "nomad.datamodel.results.SolarCell" + ] + } + ] + }, + "aggregations": { + "results.eln.sections:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.eln.sections" + } + }, + "results.eln.tags:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.eln.tags" + } + }, + "results.eln.methods:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.eln.methods" + } + }, + "results.eln.instruments:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "results.eln.instruments" + } + } + }, + "pagination": { + "page_size": 0 + }, + "required": { + "include": [] + } + }, + "headers": { + "accept": "application/json, text/plain, */*", + "content-type": "application/json", + "cookie": null + } + }, + "response": { + "status": 200, + "body": { + "owner": "visible", + "query": { + "and": [ + {}, + { + "name": "sections", + "value": { + "all": [ + "nomad.datamodel.results.SolarCell" + ] + } + } + ] + }, + "pagination": { + "page_size": 0, + "order_by": "entry_id", + "order": "asc", + "total": 3 + }, + "required": { + "include": [ + "entry_id" + ] + }, + "aggregations": { + "results.eln.sections:scroll": { + "terms": { + "quantity": "results.eln.sections", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + }, + "results.eln.tags:scroll": { + "terms": { + "quantity": "results.eln.tags", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + }, + "results.eln.methods:scroll": { + "terms": { + "quantity": "results.eln.methods", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + }, + "results.eln.instruments:scroll": { + "terms": { + "quantity": "results.eln.instruments", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + } + }, + "data": [] + }, + "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", + "connection": "close", + "content-length": "1268", + "content-type": "application/json", + "server": "uvicorn" + } + } + }, + { + "request": { + "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/query", + "method": "POST", + "body": { + "owner": "visible", + "query": { + "quantities": "data" + }, + "pagination": { + "page_size": 0 + }, + "aggregations": { + "paths": { + "terms": { + "quantity": "search_quantities.path", + "size": 1000, + "entries": { + "size": 1, + "required": { + "include": [ + "search_quantities.path", + "search_quantities.definition" + ] + } + } + } + } + } + }, + "headers": { + "accept": "application/json", + "content-type": "application/json", + "cookie": null + } + }, + "response": { + "status": 200, + "body": { + "owner": "visible", + "query": { + "name": "quantities", + "value": "data" + }, + "pagination": { + "page_size": 0, + "order_by": "entry_id", + "order": "asc", + "total": 3 + }, + "aggregations": { + "paths": { + "terms": { + "quantity": "search_quantities.path", + "exclude_from_search": false, + "metrics": [], + "size": 1000, + "entries": { + "size": 1, + "required": { + "include": [ + "search_quantities.path", + "search_quantities.definition" + ] + } + }, + "data": [] + } + } + }, + "data": [] + }, + "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", + "connection": "close", + "content-length": "640", + "content-type": "application/json", + "server": "uvicorn" + } + } + }, + { + "request": { + "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/query", + "method": "POST", + "body": { + "owner": "visible", + "query": { + "and": [ + {}, { - "name": "processed", - "value": true - } - ] - }, - "pagination": { - "page_size": 10, - "order_by": "entry_id", - "order": "asc", - "total": 0 - }, - "required": { - "metadata": { - "entry_id": "*" - } - }, - "data": [] - }, - "headers": { - "connection": "close", - "content-length": "414", - "content-type": "application/json", - "server": "uvicorn" - } - } - }, - { - "request": { - "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/entries/archive/query", - "method": "POST", - "body": { - "owner": "visible", - "query": { - "quantities": "definitions.section_definitions", - "processed": true - }, - "required": { - "metadata": { - "entry_id": "*" - } - } - }, - "headers": { - "accept": "application/json", - "content-type": "application/json", - "cookie": null - } - }, - "response": { - "status": 200, - "body": { - "owner": "visible", - "query": { - "and": [ - { - "name": "quantities", - "value": "definitions.section_definitions" - }, + "sections:all": [ + "nomad.datamodel.results.SolarCell" + ] + } + ] + }, + "aggregations": { + "upload_create_time:default_histogram": { + "histogram": { + "exclude_from_search": true, + "update": true, + "type": "histogram", + "buckets": 30, + "changed": true, + "quantity": "upload_create_time" + } + }, + "external_db:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "external_db" + } + }, + "datasets.dataset_name:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 10, + "type": "terms", + "changed": true, + "quantity": "datasets.dataset_name" + } + } + }, + "pagination": { + "page_size": 0 + }, + "required": { + "include": [] + } + }, + "headers": { + "accept": "application/json, text/plain, */*", + "content-type": "application/json", + "cookie": null + } + }, + "response": { + "status": 200, + "body": { + "owner": "visible", + "query": { + "and": [ + {}, { - "name": "processed", - "value": true + "name": "sections", + "value": { + "all": [ + "nomad.datamodel.results.SolarCell" + ] + } + } + ] + }, + "pagination": { + "page_size": 0, + "order_by": "entry_id", + "order": "asc", + "total": 3 + }, + "required": { + "include": [ + "entry_id" + ] + }, + "aggregations": { + "upload_create_time:default_histogram": { + "histogram": { + "quantity": "upload_create_time", + "exclude_from_search": true, + "metrics": [], + "interval": 49463, + "buckets": 30, + "offset": 1697463085648, + "data": [ + { + "count": 1, + "nested_count": 1, + "value": 1697463085648 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463135111 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463184574 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463234037 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463283500 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463332963 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463382426 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463431889 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463481352 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463530815 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463580278 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463629741 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463679204 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463728667 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463778130 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463827593 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463877056 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463926519 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463975982 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464025445 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464074908 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464124371 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464173834 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464223297 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464272760 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464322223 + }, + { + "count": 1, + "nested_count": 1, + "value": 1697464371686 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464421149 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464470612 + }, + { + "count": 1, + "nested_count": 1, + "value": 1697464520075 + } + ] + } + }, + "external_db:scroll": { + "terms": { + "quantity": "external_db", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + }, + "datasets.dataset_name:scroll": { + "terms": { + "quantity": "datasets.dataset_name", + "exclude_from_search": true, + "metrics": [], + "size": 10, + "data": [] } - ] - }, - "pagination": { - "page_size": 10, - "order_by": "entry_id", - "order": "asc", - "total": 0 - }, - "required": { - "metadata": { - "entry_id": "*" } }, "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "414", + "content-length": "4643", "content-type": "application/json", "server": "uvicorn" } @@ -9216,7 +11836,8 @@ "aggregations": {}, "pagination": { "order_by": "chemical_formula_hill", - "order": "asc" + "order": "asc", + "page_size": 20 }, "required": {} }, @@ -9232,19 +11853,470 @@ "owner": "visible", "query": {}, "pagination": { - "page_size": 10, + "page_size": 20, "order_by": "chemical_formula_hill", "order": "asc", - "total": 3 + "total": 4 }, "required": {}, "data": [ { "entries": [ { - "upload_id": "A-1gerweRKOSzhzOnLn60w", + "upload_id": "OtdaNHWXQKClDFSvTjQFFA", + "origin": "Markus Scheidgen", + "calc_id": "594a3xUuQf6I0kTXQ_nIuQ", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "sections": [ + "nomad.datamodel.results.Simulation" + ], + "upload_create_time": "2023-10-16T13:31:25.648139+00:00", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:31:25.653139+00:00", + "publish_time": "2023-10-16T13:31:25.651139+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": {}, + "method": { + "simulation": { + "program_version": "not processed", + "dft": { + "basis_set_type": "unavailable", + "core_electron_treatment": "unavailable", + "xc_functional_type": "not processed", + "xc_functional_names": [ + "LDA_X_PZ", + "LDA_C_PZ" + ], + "jacobs_ladder": "not processed" + }, + "program_name": "exciting" + } + }, + "properties": { + "available_properties": [] + } + }, + "entry_id": "594a3xUuQf6I0kTXQ_nIuQ", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ] + }, + { + "upload_id": "iG8xjpHjS8GKltt3vLssdg", + "origin": "Markus Scheidgen", + "quantities": [ + "results.method.simulation.program_name" + ], + "calc_id": "cwZ4FT1aTWKUrgasGR-8MQ", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "upload_create_time": "2023-10-16T13:53:06.120628+00:00", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:53:06.125628+00:00", + "publish_time": "2023-10-16T13:53:06.123628+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": {}, + "method": { + "simulation": { + "program_version": "not processed", + "dft": { + "basis_set_type": "unavailable", + "core_electron_treatment": "unavailable", + "xc_functional_type": "not processed", + "xc_functional_names": [ + "LDA_X_PZ", + "LDA_C_PZ" + ], + "jacobs_ladder": "not processed" + }, + "program_name": "exciting" + } + }, + "properties": { + "available_properties": [] + } + }, + "entry_id": "cwZ4FT1aTWKUrgasGR-8MQ", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ] + }, + { + "upload_id": "l1h8M0AWQp2sxCZoavf7Vg", + "origin": "Markus Scheidgen", + "quantities": [ + "results.method.simulation.program_name" + ], + "calc_id": "Z70j6Ab4QW6wq3x45nGsGQ", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "upload_create_time": "2023-10-16T13:56:09.514868+00:00", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:56:09.519868+00:00", + "publish_time": "2023-10-16T13:56:09.517868+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": {}, + "method": { + "simulation": { + "program_version": "not processed", + "dft": { + "basis_set_type": "unavailable", + "core_electron_treatment": "unavailable", + "xc_functional_type": "not processed", + "xc_functional_names": [ + "LDA_X_PZ", + "LDA_C_PZ" + ], + "jacobs_ladder": "not processed" + }, + "program_name": "exciting" + } + }, + "properties": { + "available_properties": [] + } + }, + "entry_id": "Z70j6Ab4QW6wq3x45nGsGQ", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ] + } + ], + "n_entries": 3, + "elements": [ + "C" + ], + "elements_exclusive": "C", + "chemical_formula_anonymous": "A", + "material_id": "jPcWsq-Rb0gtgx2krJDmLvQUxpcL", + "structural_type": "2D", + "chemical_formula_reduced": "C", + "n_elements": 1, + "chemical_formula_descriptive": "C", + "chemical_formula_hill": "C", + "license": "CC BY 4.0" + }, + { + "entries": [ + { + "upload_id": "OtdaNHWXQKClDFSvTjQFFA", + "origin": "Markus Scheidgen", + "quantities": [ + "data" + ], + "calc_id": "OsROhDnxTuShX95957NWmQ", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "sections": [ + "nomad.datamodel.results.SolarCell" + ], + "upload_create_time": "2023-10-16T13:31:25.648139+00:00", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:31:25.655139+00:00", + "publish_time": "2023-10-16T13:31:25.651139+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": {}, + "method": {}, + "properties": { + "optoelectronic": { + "solar_cell": { + "absorber_fabrication": [ + "Spin-coating" + ], + "efficiency": 15.9, + "device_stack": [ + "SLG", + "ITO", + "PEDOT:PSS", + "Perovskite", + "PCBM-60", + "BCP", + "Ag" + ], + "short_circuit_current_density": 203, + "hole_transport_layer": [ + "PEDOT:PSS" + ], + "fill_factor": 0.78, + "illumination_intensity": 1000, + "electron_transport_layer": [ + "PCBM-60", + "BCP" + ], + "device_area": 0.0000125, + "back_contact": [ + "Ag" + ], + "absorber": [ + "MAPbI" + ], + "open_circuit_voltage": 1, + "substrate": [ + "SLG", + "ITO" + ], + "device_architecture": "pin" + } + }, + "available_properties": [ + "band_structure_electronic", + "electronic.band_structure_electronic.band_gap", + "solar_cell" + ], + "electronic": { + "band_structure_electronic": [ + { + "band_gap": [ + { + "value": 2.5634826144e-19 + } + ] + } + ] + } + } + }, + "entry_id": "OsROhDnxTuShX95957NWmQ", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ] + }, + { + "upload_id": "OtdaNHWXQKClDFSvTjQFFA", + "origin": "Markus Scheidgen", + "calc_id": "AHTw3P8HQp2f-AqBhMwsfg", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "upload_create_time": "2023-10-16T13:31:25.648139+00:00", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:31:25.656139+00:00", + "publish_time": "2023-10-16T13:31:25.651139+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": {}, + "method": { + "method_name": "EELS" + }, + "properties": { + "available_properties": [] + } + }, + "entry_id": "AHTw3P8HQp2f-AqBhMwsfg", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ] + }, + { + "upload_id": "OtdaNHWXQKClDFSvTjQFFA", + "origin": "Markus Scheidgen", + "calc_id": "zjAqfFjvS8izr4M55hNbVA", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "sections": [ + "nomad.datamodel.results.Simulation" + ], + "upload_create_time": "2023-10-16T13:31:25.648139+00:00", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:31:25.652139+00:00", + "publish_time": "2023-10-16T13:31:25.651139+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": {}, + "method": { + "simulation": { + "program_version": "not processed", + "dft": { + "basis_set_type": "unavailable", + "core_electron_treatment": "unavailable", + "xc_functional_type": "not processed", + "xc_functional_names": [ + "GGA_X_PBE_SOL", + "GGA_C_PBE_SOL" + ], + "jacobs_ladder": "not processed" + }, + "program_name": "VASP" + } + }, + "properties": { + "available_properties": [] + } + }, + "entry_id": "zjAqfFjvS8izr4M55hNbVA", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ] + }, + { + "upload_id": "iG8xjpHjS8GKltt3vLssdg", + "origin": "Markus Scheidgen", + "calc_id": "WbIJYsArR4e02KlSsvfS8A", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "upload_create_time": "2023-10-16T13:53:06.120628+00:00", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:53:06.128628+00:00", + "publish_time": "2023-10-16T13:53:06.123628+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": {}, + "method": { + "method_name": "EELS" + }, + "properties": { + "available_properties": [] + } + }, + "entry_id": "WbIJYsArR4e02KlSsvfS8A", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ] + }, + { + "upload_id": "iG8xjpHjS8GKltt3vLssdg", "origin": "Markus Scheidgen", - "calc_id": "ZxkuBlp6Rx65w8W8Inr-AA", + "quantities": [ + "data" + ], + "calc_id": "3EKfNwf_SUm81tmFz4I6gA", "published": true, "writers": [ { @@ -9254,9 +12326,9 @@ ], "datasets": [], "sections": [ - "nomad.datamodel.results.Simulation" + "nomad.datamodel.results.SolarCell" ], - "upload_create_time": "2023-01-24T07:45:52.706229+00:00", + "upload_create_time": "2023-10-16T13:53:06.120628+00:00", "main_author": { "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", "name": "Markus Scheidgen" @@ -9267,58 +12339,87 @@ "name": "Markus Scheidgen" } ], - "entry_create_time": "2023-01-24T07:45:52.711229+00:00", - "publish_time": "2023-01-24T07:45:52.709229+00:00", + "entry_create_time": "2023-10-16T13:53:06.127628+00:00", + "publish_time": "2023-10-16T13:53:06.123628+00:00", "with_embargo": false, "domain": "dft", "results": { "material": {}, - "method": { - "simulation": { - "program_version": "not processed", - "dft": { - "basis_set_type": "unavailable", - "core_electron_treatment": "unavailable", - "xc_functional_type": "not processed", - "xc_functional_names": [ - "LDA_X_PZ", - "LDA_C_PZ" - ] - }, - "program_name": "exciting" + "method": {}, + "properties": { + "optoelectronic": { + "solar_cell": { + "absorber_fabrication": [ + "Spin-coating" + ], + "efficiency": 15.9, + "device_stack": [ + "SLG", + "ITO", + "PEDOT:PSS", + "Perovskite", + "PCBM-60", + "BCP", + "Ag" + ], + "short_circuit_current_density": 203, + "hole_transport_layer": [ + "PEDOT:PSS" + ], + "fill_factor": 0.78, + "illumination_intensity": 1000, + "electron_transport_layer": [ + "PCBM-60", + "BCP" + ], + "device_area": 0.0000125, + "back_contact": [ + "Ag" + ], + "absorber": [ + "MAPbI" + ], + "open_circuit_voltage": 1, + "substrate": [ + "SLG", + "ITO" + ], + "device_architecture": "pin" + } + }, + "available_properties": [ + "band_structure_electronic", + "electronic.band_structure_electronic.band_gap", + "solar_cell" + ], + "electronic": { + "band_structure_electronic": [ + { + "band_gap": [ + { + "value": 2.5634826144e-19 + } + ] + } + ] } - }, - "properties": {} + } }, - "entry_id": "ZxkuBlp6Rx65w8W8Inr-AA", + "entry_id": "3EKfNwf_SUm81tmFz4I6gA", "authors": [ { "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", "name": "Markus Scheidgen" } ] - } - ], - "n_entries": 1, - "elements": [ - "C" - ], - "elements_exclusive": "C", - "chemical_formula_anonymous": "A", - "material_id": "jPcWsq-Rb0gtgx2krJDmLvQUxpcL", - "structural_type": "2D", - "chemical_formula_reduced": "C", - "n_elements": 1, - "chemical_formula_descriptive": "C", - "chemical_formula_hill": "C", - "license": "CC BY 4.0" - }, - { - "entries": [ + }, { - "upload_id": "A-1gerweRKOSzhzOnLn60w", + "upload_id": "iG8xjpHjS8GKltt3vLssdg", "origin": "Markus Scheidgen", - "calc_id": "OANUVbE6Q6m-cDZsUowxwQ", + "quantities": [ + "results.method.simulation.program_name" + ], + "calc_id": "DEwHOiivSXWnvf1kvFP97Q", "published": true, "writers": [ { @@ -9327,10 +12428,7 @@ } ], "datasets": [], - "sections": [ - "nomad.datamodel.results.Simulation" - ], - "upload_create_time": "2023-01-24T07:45:52.706229+00:00", + "upload_create_time": "2023-10-16T13:53:06.120628+00:00", "main_author": { "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", "name": "Markus Scheidgen" @@ -9341,8 +12439,8 @@ "name": "Markus Scheidgen" } ], - "entry_create_time": "2023-01-24T07:45:52.710229+00:00", - "publish_time": "2023-01-24T07:45:52.709229+00:00", + "entry_create_time": "2023-10-16T13:53:06.124628+00:00", + "publish_time": "2023-10-16T13:53:06.123628+00:00", "with_embargo": false, "domain": "dft", "results": { @@ -9357,14 +12455,17 @@ "xc_functional_names": [ "GGA_X_PBE_SOL", "GGA_C_PBE_SOL" - ] + ], + "jacobs_ladder": "not processed" }, "program_name": "VASP" } }, - "properties": {} + "properties": { + "available_properties": [] + } }, - "entry_id": "OANUVbE6Q6m-cDZsUowxwQ", + "entry_id": "DEwHOiivSXWnvf1kvFP97Q", "authors": [ { "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", @@ -9373,9 +12474,12 @@ ] }, { - "upload_id": "A-1gerweRKOSzhzOnLn60w", + "upload_id": "l1h8M0AWQp2sxCZoavf7Vg", "origin": "Markus Scheidgen", - "calc_id": "qgKHLISrSPqW2sIHLSqOhg", + "quantities": [ + "results.method.simulation.program_name" + ], + "calc_id": "eWQ35GCSR7itWrH9oYkWIg", "published": true, "writers": [ { @@ -9384,7 +12488,7 @@ } ], "datasets": [], - "upload_create_time": "2023-01-24T07:45:52.706229+00:00", + "upload_create_time": "2023-10-16T13:56:09.514868+00:00", "main_author": { "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", "name": "Markus Scheidgen" @@ -9395,18 +12499,33 @@ "name": "Markus Scheidgen" } ], - "entry_create_time": "2023-01-24T07:45:52.714229+00:00", - "publish_time": "2023-01-24T07:45:52.709229+00:00", + "entry_create_time": "2023-10-16T13:56:09.518868+00:00", + "publish_time": "2023-10-16T13:56:09.517868+00:00", "with_embargo": false, "domain": "dft", "results": { "material": {}, "method": { - "method_name": "EELS" + "simulation": { + "program_version": "not processed", + "dft": { + "basis_set_type": "unavailable", + "core_electron_treatment": "unavailable", + "xc_functional_type": "not processed", + "xc_functional_names": [ + "GGA_X_PBE_SOL", + "GGA_C_PBE_SOL" + ], + "jacobs_ladder": "not processed" + }, + "program_name": "VASP" + } }, - "properties": {} + "properties": { + "available_properties": [] + } }, - "entry_id": "qgKHLISrSPqW2sIHLSqOhg", + "entry_id": "eWQ35GCSR7itWrH9oYkWIg", "authors": [ { "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", @@ -9415,12 +12534,12 @@ ] }, { - "upload_id": "A-1gerweRKOSzhzOnLn60w", + "upload_id": "l1h8M0AWQp2sxCZoavf7Vg", "origin": "Markus Scheidgen", "quantities": [ "data" ], - "calc_id": "HEO8zWoEQaihNcJpFa7Htw", + "calc_id": "n467IWj4QFWGr7S8EBneGg", "published": true, "writers": [ { @@ -9432,7 +12551,7 @@ "sections": [ "nomad.datamodel.results.SolarCell" ], - "upload_create_time": "2023-01-24T07:45:52.706229+00:00", + "upload_create_time": "2023-10-16T13:56:09.514868+00:00", "main_author": { "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", "name": "Markus Scheidgen" @@ -9443,8 +12562,8 @@ "name": "Markus Scheidgen" } ], - "entry_create_time": "2023-01-24T07:45:52.713229+00:00", - "publish_time": "2023-01-24T07:45:52.709229+00:00", + "entry_create_time": "2023-10-16T13:56:09.521868+00:00", + "publish_time": "2023-10-16T13:56:09.517868+00:00", "with_embargo": false, "domain": "dft", "results": { @@ -9492,8 +12611,9 @@ } }, "available_properties": [ - "solar_cell", - "electronic.band_structure_electronic.band_gap" + "band_structure_electronic", + "electronic.band_structure_electronic.band_gap", + "solar_cell" ], "electronic": { "band_structure_electronic": [ @@ -9508,7 +12628,51 @@ } } }, - "entry_id": "HEO8zWoEQaihNcJpFa7Htw", + "entry_id": "n467IWj4QFWGr7S8EBneGg", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ] + }, + { + "upload_id": "l1h8M0AWQp2sxCZoavf7Vg", + "origin": "Markus Scheidgen", + "calc_id": "23_DfDutQF2OvB64Y361bg", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "upload_create_time": "2023-10-16T13:56:09.514868+00:00", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:56:09.522868+00:00", + "publish_time": "2023-10-16T13:56:09.517868+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": {}, + "method": { + "method_name": "EELS" + }, + "properties": { + "available_properties": [] + } + }, + "entry_id": "23_DfDutQF2OvB64Y361bg", "authors": [ { "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", @@ -9517,27 +12681,157 @@ ] } ], - "n_entries": 3, + "functional_type": [ + "semiconductor", + "solar cell" + ], + "n_entries": 9, "elements": [ "C", - "H" + "H", + "I", + "N", + "Pb" ], - "elements_exclusive": "C H", - "chemical_formula_anonymous": "AB2", + "elements_exclusive": "C H I N Pb", "material_id": "test_material_id", - "structural_type": "molecule / cluster", - "chemical_formula_reduced": "CH3", - "n_elements": 2, - "chemical_formula_descriptive": "CH3", - "chemical_formula_hill": "CH3", + "structural_type": "bulk", + "chemical_formula_reduced": "H6Pb1C1I3N1", + "n_elements": 5, + "material_name": "perovskite", + "chemical_formula_descriptive": "MAPbI3", + "chemical_formula_hill": "CH6I3NPb", "license": "CC BY 4.0" }, { "entries": [ { - "upload_id": "A-1gerweRKOSzhzOnLn60w", + "upload_id": "OtdaNHWXQKClDFSvTjQFFA", + "origin": "Markus Scheidgen", + "calc_id": "2EYt_ri_Tpmsf-QLVtfRIg", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "sections": [ + "nomad.datamodel.results.Simulation" + ], + "upload_create_time": "2023-10-16T13:31:25.648139+00:00", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:31:25.654139+00:00", + "publish_time": "2023-10-16T13:31:25.651139+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": {}, + "method": { + "simulation": { + "program_version": "not processed", + "dft": { + "basis_set_type": "unavailable", + "core_electron_treatment": "unavailable", + "xc_functional_type": "not processed", + "xc_functional_names": [ + "GGA_X_PBE_SOL", + "GGA_C_PBE_SOL" + ], + "jacobs_ladder": "not processed" + }, + "program_name": "VASP" + } + }, + "properties": { + "available_properties": [] + } + }, + "entry_id": "2EYt_ri_Tpmsf-QLVtfRIg", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ] + }, + { + "upload_id": "iG8xjpHjS8GKltt3vLssdg", + "origin": "Markus Scheidgen", + "quantities": [ + "results.method.simulation.program_name" + ], + "calc_id": "fFgUgBWZRseVNU5xSssHIQ", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "upload_create_time": "2023-10-16T13:53:06.120628+00:00", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-10-16T13:53:06.126628+00:00", + "publish_time": "2023-10-16T13:53:06.123628+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": {}, + "method": { + "simulation": { + "program_version": "not processed", + "dft": { + "basis_set_type": "unavailable", + "core_electron_treatment": "unavailable", + "xc_functional_type": "not processed", + "xc_functional_names": [ + "GGA_X_PBE_SOL", + "GGA_C_PBE_SOL" + ], + "jacobs_ladder": "not processed" + }, + "program_name": "VASP" + } + }, + "properties": { + "available_properties": [] + } + }, + "entry_id": "fFgUgBWZRseVNU5xSssHIQ", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ] + }, + { + "upload_id": "l1h8M0AWQp2sxCZoavf7Vg", "origin": "Markus Scheidgen", - "calc_id": "OGB9z0aGTACQopmv9rE0-w", + "quantities": [ + "results.method.simulation.program_name" + ], + "calc_id": "YCXRUIbWSvuJlfEhY8tAwA", "published": true, "writers": [ { @@ -9546,10 +12840,7 @@ } ], "datasets": [], - "sections": [ - "nomad.datamodel.results.Simulation" - ], - "upload_create_time": "2023-01-24T07:45:52.706229+00:00", + "upload_create_time": "2023-10-16T13:56:09.514868+00:00", "main_author": { "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", "name": "Markus Scheidgen" @@ -9560,8 +12851,8 @@ "name": "Markus Scheidgen" } ], - "entry_create_time": "2023-01-24T07:45:52.712229+00:00", - "publish_time": "2023-01-24T07:45:52.709229+00:00", + "entry_create_time": "2023-10-16T13:56:09.520868+00:00", + "publish_time": "2023-10-16T13:56:09.517868+00:00", "with_embargo": false, "domain": "dft", "results": { @@ -9576,14 +12867,17 @@ "xc_functional_names": [ "GGA_X_PBE_SOL", "GGA_C_PBE_SOL" - ] + ], + "jacobs_ladder": "not processed" }, "program_name": "VASP" } }, - "properties": {} + "properties": { + "available_properties": [] + } }, - "entry_id": "OGB9z0aGTACQopmv9rE0-w", + "entry_id": "YCXRUIbWSvuJlfEhY8tAwA", "authors": [ { "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", @@ -9592,7 +12886,7 @@ ] } ], - "n_entries": 1, + "n_entries": 3, "elements": [ "Hf", "Nb", @@ -9609,12 +12903,152 @@ "chemical_formula_descriptive": "HfNbTaTiZr", "chemical_formula_hill": "HfNbTaTiZr", "license": "CC BY 4.0" + }, + { + "entries": [ + { + "upload_id": "qLPFN3WlRJaLlB7nn8iqqw", + "origin": "Markus Scheidgen", + "quantities": [ + "results.properties.catalytic" + ], + "calc_id": "8eTu65csTO6wWEWTztuQ_A", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "upload_create_time": "2023-08-09T11:05:02.531033+00:00", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-08-09T11:05:02.539033+00:00", + "publish_time": "2023-08-09T11:05:02.534033+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": {}, + "eln": { + "names": [ + "MoVOx sample" + ], + "sections": [ + "CatalystSample" + ] + }, + "properties": { + "available_properties": [], + "catalytic": { + "catalyst_characterization": { + "preparation_method": "hydrothermal", + "surface_area": 65.56, + "catalyst_type": "bulk catalyst", + "method_surface_area": "BET" + } + } + } + }, + "entry_id": "8eTu65csTO6wWEWTztuQ_A", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ] + }, + { + "upload_id": "FLwjYCVmRauvXcnJ1Rfzcg", + "origin": "Markus Scheidgen", + "quantities": [ + "results.properties.catalytic" + ], + "calc_id": "GyoLrvcWSHWfeyi0gUFkjA", + "published": true, + "writers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "datasets": [], + "upload_create_time": "2023-08-09T11:12:22.777233+00:00", + "main_author": { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + }, + "viewers": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ], + "entry_create_time": "2023-08-09T11:12:22.785233+00:00", + "publish_time": "2023-08-09T11:12:22.780233+00:00", + "with_embargo": false, + "domain": "dft", + "results": { + "material": {}, + "eln": { + "names": [ + "MoVOx sample" + ], + "sections": [ + "CatalystSample" + ] + }, + "properties": { + "available_properties": [], + "catalytic": { + "catalyst_characterization": { + "preparation_method": "hydrothermal", + "surface_area": 65.56, + "catalyst_type": "bulk catalyst", + "method_surface_area": "BET" + } + } + } + }, + "entry_id": "GyoLrvcWSHWfeyi0gUFkjA", + "authors": [ + { + "user_id": "68878af7-6845-46c0-b2c1-250d4d8eb470", + "name": "Markus Scheidgen" + } + ] + } + ], + "n_entries": 2, + "elements": [ + "V", + "Mo", + "O" + ], + "elements_exclusive": "Mo O V", + "material_id": "mock-material-id", + "structural_type": "not processed", + "chemical_formula_reduced": "MoVO", + "n_elements": 3, + "material_name": "movo", + "chemical_formula_descriptive": "MoVO", + "chemical_formula_hill": "MoVO", + "license": "CC BY 4.0" } ] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "11738", + "content-length": "33394", "content-type": "application/json", "server": "uvicorn" } @@ -9671,7 +13105,7 @@ "page_size": 0, "order_by": "material_id", "order": "asc", - "total": 3 + "total": 4 }, "required": { "include": [ @@ -9701,11 +13135,26 @@ "nested_count": 1, "value": "Hf" }, + { + "count": 1, + "nested_count": 1, + "value": "I" + }, + { + "count": 1, + "nested_count": 1, + "value": "N" + }, { "count": 1, "nested_count": 1, "value": "Nb" }, + { + "count": 1, + "nested_count": 1, + "value": "Pb" + }, { "count": 1, "nested_count": 1, @@ -9716,6 +13165,11 @@ "nested_count": 1, "value": "Ti" }, + { + "count": 1, + "nested_count": 1, + "value": "V" + }, { "count": 1, "nested_count": 1, @@ -9737,13 +13191,13 @@ "value": 1 }, { - "count": 1, - "nested_count": 1, + "count": 0, + "nested_count": 0, "value": 2 }, { - "count": 0, - "nested_count": 0, + "count": 1, + "nested_count": 1, "value": 3 }, { @@ -9752,8 +13206,8 @@ "value": 4 }, { - "count": 1, - "nested_count": 1, + "count": 2, + "nested_count": 2, "value": 5 } ] @@ -9763,8 +13217,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "1968", + "content-length": "2284", "content-type": "application/json", "server": "uvicorn" } @@ -9800,24 +13255,8 @@ "terms": { "exclude_from_search": true, "update": true, - "size": 14, + "size": 5, "type": "terms", - "include": [ - "aP", - "mP", - "mS", - "oP", - "oS", - "oF", - "oI", - "tP", - "tI", - "hP", - "hR", - "cP", - "cF", - "cI" - ], "changed": true, "quantity": "symmetry.bravais_lattice" } @@ -9826,17 +13265,8 @@ "terms": { "exclude_from_search": true, "update": true, - "size": 7, + "size": 5, "type": "terms", - "include": [ - "triclinic", - "monoclinic", - "orthorhombic", - "tetragonal", - "trigonal", - "hexagonal", - "cubic" - ], "changed": true, "quantity": "symmetry.crystal_system" } @@ -9847,6 +13277,25 @@ "update": true, "size": 5, "type": "terms", + "include": [ + "4-member ring", + "Heusler", + "bcc", + "bct", + "bct5", + "clathrate", + "cuprite", + "diamond", + "fcc", + "fct", + "half-Heusler", + "hcp", + "perovskite", + "rock salt", + "simple cubic", + "wurtzite", + "zincblende" + ], "changed": true, "quantity": "symmetry.structure_name" } @@ -9884,7 +13333,7 @@ "page_size": 0, "order_by": "material_id", "order": "asc", - "total": 3 + "total": 4 }, "required": { "include": [ @@ -9907,91 +13356,166 @@ "atom" ], "data": [ + { + "count": 2, + "nested_count": 2, + "value": "bulk" + }, { "count": 1, "nested_count": 1, "value": "2D" + } + ] + } + }, + "results.material.symmetry.bravais_lattice:scroll": { + "terms": { + "quantity": "symmetry.bravais_lattice", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + }, + "results.material.symmetry.crystal_system:scroll": { + "terms": { + "quantity": "symmetry.crystal_system", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + }, + "results.material.symmetry.structure_name:scroll": { + "terms": { + "quantity": "symmetry.structure_name", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "include": [ + "4-member ring", + "Heusler", + "bcc", + "bct", + "bct5", + "clathrate", + "cuprite", + "diamond", + "fcc", + "fct", + "half-Heusler", + "hcp", + "perovskite", + "rock salt", + "simple cubic", + "wurtzite", + "zincblende" + ], + "data": [] + } + }, + "results.material.symmetry.strukturbericht_designation:scroll": { + "terms": { + "quantity": "symmetry.strukturbericht_designation", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + } + }, + "data": [] + }, + "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", + "connection": "close", + "content-length": "2198", + "content-type": "application/json", + "server": "uvicorn" + } + } + }, + { + "request": { + "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/materials/query", + "method": "POST", + "body": { + "owner": "visible", + "query": {}, + "aggregations": { + "results.method.simulation.program_name:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "entries.results.method.simulation.program_name" + } + } + }, + "pagination": { + "page_size": 0 + }, + "required": { + "include": [] + } + }, + "headers": { + "accept": "application/json, text/plain, */*", + "content-type": "application/json", + "cookie": null + } + }, + "response": { + "status": 200, + "body": { + "owner": "visible", + "query": {}, + "pagination": { + "page_size": 0, + "order_by": "material_id", + "order": "asc", + "total": 3 + }, + "required": { + "include": [ + "material_id" + ] + }, + "aggregations": { + "results.method.simulation.program_name:scroll": { + "terms": { + "quantity": "entries.results.method.simulation.program_name", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [ + { + "count": 2, + "nested_count": 6, + "value": "VASP" }, { "count": 1, - "nested_count": 1, - "value": "bulk" + "nested_count": 3, + "value": "exciting" }, { - "count": 1, - "nested_count": 1, - "value": "molecule / cluster" + "count": 0, + "value": "unavailable" } ] } - }, - "results.material.symmetry.bravais_lattice:scroll": { - "terms": { - "quantity": "symmetry.bravais_lattice", - "exclude_from_search": true, - "metrics": [], - "size": 14, - "include": [ - "aP", - "mP", - "mS", - "oP", - "oS", - "oF", - "oI", - "tP", - "tI", - "hP", - "hR", - "cP", - "cF", - "cI" - ], - "data": [] - } - }, - "results.material.symmetry.crystal_system:scroll": { - "terms": { - "quantity": "symmetry.crystal_system", - "exclude_from_search": true, - "metrics": [], - "size": 7, - "include": [ - "triclinic", - "monoclinic", - "orthorhombic", - "tetragonal", - "trigonal", - "hexagonal", - "cubic" - ], - "data": [] - } - }, - "results.material.symmetry.structure_name:scroll": { - "terms": { - "quantity": "symmetry.structure_name", - "exclude_from_search": true, - "metrics": [], - "size": 5, - "data": [] - } - }, - "results.material.symmetry.strukturbericht_designation:scroll": { - "terms": { - "quantity": "symmetry.strukturbericht_designation", - "exclude_from_search": true, - "metrics": [], - "size": 5, - "data": [] - } } }, "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "2376", + "content-length": "817", "content-type": "application/json", "server": "uvicorn" } @@ -10009,17 +13533,14 @@ "terms": { "exclude_from_search": true, "update": true, - "size": 8, + "size": 5, "type": "terms", "include": [ + "LDA", "GGA", - "HF", - "OEP", - "hybrid", "meta-GGA", - "vdW", - "LDA", - "unavailable" + "hyper-GGA", + "hybrid" ], "changed": true, "quantity": "entries.results.method.simulation.dft.xc_functional_type" @@ -10055,37 +13576,12 @@ "quantity": "entries.results.method.simulation.dft.hubbard_kanamori_model.u_effective" } }, - "results.method.simulation.dft.basis_set_type:scroll": { - "terms": { - "exclude_from_search": true, - "update": true, - "size": 7, - "type": "terms", - "include": [ - "(L)APW+lo", - "gaussians", - "numeric AOs", - "plane waves", - "psinc functions", - "real-space grid", - "unavailable" - ], - "changed": true, - "quantity": "entries.results.method.simulation.dft.basis_set_type" - } - }, "results.method.simulation.dft.core_electron_treatment:scroll": { "terms": { "exclude_from_search": true, "update": true, - "size": 4, + "size": 5, "type": "terms", - "include": [ - "full all electron", - "all electron frozen core", - "pseudopotential", - "unavailable" - ], "changed": true, "quantity": "entries.results.method.simulation.dft.core_electron_treatment" } @@ -10094,13 +13590,8 @@ "terms": { "exclude_from_search": true, "update": true, - "size": 3, + "size": 5, "type": "terms", - "include": [ - "scalar_relativistic", - "pseudo_scalar_relativistic", - "scalar_relativistic_atomic_ZORA" - ], "changed": true, "quantity": "entries.results.method.simulation.dft.relativity_method" } @@ -10128,7 +13619,7 @@ "page_size": 0, "order_by": "material_id", "order": "asc", - "total": 3 + "total": 4 }, "required": { "include": [ @@ -10141,16 +13632,13 @@ "quantity": "entries.results.method.simulation.dft.xc_functional_type", "exclude_from_search": true, "metrics": [], - "size": 8, + "size": 5, "include": [ + "LDA", "GGA", - "HF", - "OEP", - "hybrid", "meta-GGA", - "vdW", - "LDA", - "unavailable" + "hyper-GGA", + "hybrid" ], "data": [] } @@ -10164,22 +13652,22 @@ "data": [ { "count": 2, - "nested_count": 2, + "nested_count": 6, "value": "GGA_C_PBE_SOL" }, { "count": 2, - "nested_count": 2, + "nested_count": 6, "value": "GGA_X_PBE_SOL" }, { "count": 1, - "nested_count": 1, + "nested_count": 3, "value": "LDA_C_PZ" }, { "count": 1, - "nested_count": 1, + "nested_count": 3, "value": "LDA_X_PZ" } ] @@ -10203,46 +13691,16 @@ "data": [] } }, - "results.method.simulation.dft.basis_set_type:scroll": { - "terms": { - "quantity": "entries.results.method.simulation.dft.basis_set_type", - "exclude_from_search": true, - "metrics": [], - "size": 7, - "include": [ - "(L)APW+lo", - "gaussians", - "numeric AOs", - "plane waves", - "psinc functions", - "real-space grid", - "unavailable" - ], - "data": [ - { - "count": 3, - "nested_count": 3, - "value": "unavailable" - } - ] - } - }, "results.method.simulation.dft.core_electron_treatment:scroll": { "terms": { "quantity": "entries.results.method.simulation.dft.core_electron_treatment", "exclude_from_search": true, "metrics": [], - "size": 4, - "include": [ - "full all electron", - "all electron frozen core", - "pseudopotential", - "unavailable" - ], + "size": 5, "data": [ { "count": 3, - "nested_count": 3, + "nested_count": 9, "value": "unavailable" } ] @@ -10253,12 +13711,7 @@ "quantity": "entries.results.method.simulation.dft.relativity_method", "exclude_from_search": true, "metrics": [], - "size": 3, - "include": [ - "scalar_relativistic", - "pseudo_scalar_relativistic", - "scalar_relativistic_atomic_ZORA" - ], + "size": 5, "data": [] } } @@ -10266,8 +13719,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "3675", + "content-length": "2720", "content-type": "application/json", "server": "uvicorn" } @@ -10285,16 +13739,8 @@ "terms": { "exclude_from_search": true, "update": true, - "size": 6, + "size": 5, "type": "terms", - "include": [ - "G0W0", - "scGW", - "scGW0", - "scG0W", - "ev-scGW", - "qp-scGW" - ], "changed": true, "quantity": "entries.results.method.simulation.gw.type" } @@ -10303,17 +13749,15 @@ "terms": { "exclude_from_search": true, "update": true, - "size": 8, + "size": 6, "type": "terms", "include": [ + "LDA", "GGA", - "HF", - "OEP", - "hybrid", "meta-GGA", - "vdW", - "LDA", - "unavailable" + "hyper-GGA", + "hybrid", + "HF" ], "changed": true, "quantity": "entries.results.method.simulation.gw.starting_point_type" @@ -10323,19 +13767,154 @@ "terms": { "exclude_from_search": true, "update": true, - "size": 7, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "entries.results.method.simulation.gw.basis_set_type" + } + } + }, + "pagination": { + "page_size": 0 + }, + "required": { + "include": [] + } + }, + "headers": { + "accept": "application/json, text/plain, */*", + "content-type": "application/json", + "cookie": null + } + }, + "response": { + "status": 200, + "body": { + "owner": "visible", + "query": {}, + "pagination": { + "page_size": 0, + "order_by": "material_id", + "order": "asc", + "total": 4 + }, + "required": { + "include": [ + "material_id" + ] + }, + "aggregations": { + "results.method.simulation.gw.type:scroll": { + "terms": { + "quantity": "entries.results.method.simulation.gw.type", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + }, + "results.method.simulation.gw.starting_point_type:scroll": { + "terms": { + "quantity": "entries.results.method.simulation.gw.starting_point_type", + "exclude_from_search": true, + "metrics": [], + "size": 6, + "include": [ + "LDA", + "GGA", + "meta-GGA", + "hyper-GGA", + "hybrid", + "HF" + ], + "data": [] + } + }, + "results.method.simulation.gw.basis_set_type:scroll": { + "terms": { + "quantity": "entries.results.method.simulation.gw.basis_set_type", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + } + }, + "data": [] + }, + "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", + "connection": "close", + "content-length": "1181", + "content-type": "application/json", + "server": "uvicorn" + } + } + }, + { + "request": { + "url": "http://localhost:8000/fairdi/nomad/latest/api/v1/materials/query", + "method": "POST", + "body": { + "owner": "visible", + "query": {}, + "aggregations": { + "results.method.simulation.bse.type:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "entries.results.method.simulation.bse.type" + } + }, + "results.method.simulation.bse.solver:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "entries.results.method.simulation.bse.solver" + } + }, + "results.method.simulation.bse.starting_point_type:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 6, "type": "terms", "include": [ - "(L)APW+lo", - "gaussians", - "numeric AOs", - "plane waves", - "psinc functions", - "real-space grid", - "unavailable" + "LDA", + "GGA", + "meta-GGA", + "hyper-GGA", + "hybrid", + "HF" ], "changed": true, - "quantity": "entries.results.method.simulation.gw.basis_set_type" + "quantity": "entries.results.method.simulation.bse.starting_point_type" + } + }, + "results.method.simulation.bse.basis_set_type:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "entries.results.method.simulation.bse.basis_set_type" + } + }, + "results.method.simulation.bse.gw_type:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "entries.results.method.simulation.bse.gw_type" } } }, @@ -10369,57 +13948,56 @@ ] }, "aggregations": { - "results.method.simulation.gw.type:scroll": { + "results.method.simulation.bse.type:scroll": { + "terms": { + "quantity": "entries.results.method.simulation.bse.type", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + }, + "results.method.simulation.bse.solver:scroll": { + "terms": { + "quantity": "entries.results.method.simulation.bse.solver", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } + }, + "results.method.simulation.bse.starting_point_type:scroll": { "terms": { - "quantity": "entries.results.method.simulation.gw.type", + "quantity": "entries.results.method.simulation.bse.starting_point_type", "exclude_from_search": true, "metrics": [], "size": 6, "include": [ - "G0W0", - "scGW", - "scGW0", - "scG0W", - "ev-scGW", - "qp-scGW" + "LDA", + "GGA", + "meta-GGA", + "hyper-GGA", + "hybrid", + "HF" ], "data": [] } }, - "results.method.simulation.gw.starting_point_type:scroll": { + "results.method.simulation.bse.basis_set_type:scroll": { "terms": { - "quantity": "entries.results.method.simulation.gw.starting_point_type", + "quantity": "entries.results.method.simulation.bse.basis_set_type", "exclude_from_search": true, "metrics": [], - "size": 8, - "include": [ - "GGA", - "HF", - "OEP", - "hybrid", - "meta-GGA", - "vdW", - "LDA", - "unavailable" - ], + "size": 5, "data": [] } }, - "results.method.simulation.gw.basis_set_type:scroll": { + "results.method.simulation.bse.gw_type:scroll": { "terms": { - "quantity": "entries.results.method.simulation.gw.basis_set_type", + "quantity": "entries.results.method.simulation.bse.gw_type", "exclude_from_search": true, "metrics": [], - "size": 7, - "include": [ - "(L)APW+lo", - "gaussians", - "numeric AOs", - "plane waves", - "psinc functions", - "real-space grid", - "unavailable" - ], + "size": 5, "data": [] } } @@ -10427,8 +14005,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "1574", + "content-length": "1691", "content-type": "application/json", "server": "uvicorn" } @@ -10446,13 +14025,8 @@ "terms": { "exclude_from_search": true, "update": true, - "size": 3, + "size": 5, "type": "terms", - "include": [ - "wannier", - "slater_koster", - "custom" - ], "changed": true, "quantity": "entries.results.method.simulation.projection.type" } @@ -10461,12 +14035,8 @@ "terms": { "exclude_from_search": true, "update": true, - "size": 2, + "size": 5, "type": "terms", - "include": [ - "single_shot", - "maximally_localized" - ], "changed": true, "quantity": "entries.results.method.simulation.projection.localization_type" } @@ -10494,7 +14064,7 @@ "page_size": 0, "order_by": "material_id", "order": "asc", - "total": 3 + "total": 4 }, "required": { "include": [ @@ -10507,12 +14077,7 @@ "quantity": "entries.results.method.simulation.projection.type", "exclude_from_search": true, "metrics": [], - "size": 3, - "include": [ - "wannier", - "slater_koster", - "custom" - ], + "size": 5, "data": [] } }, @@ -10521,11 +14086,7 @@ "quantity": "entries.results.method.simulation.projection.localization_type", "exclude_from_search": true, "metrics": [], - "size": 2, - "include": [ - "single_shot", - "maximally_localized" - ], + "size": 5, "data": [] } } @@ -10533,8 +14094,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "986", + "content-length": "798", "content-type": "application/json", "server": "uvicorn" } @@ -10552,35 +14114,12 @@ "terms": { "exclude_from_search": true, "update": true, - "size": 11, + "size": 5, "type": "terms", - "include": [ - "CT-INT", - "CT-HYB", - "CT-AUX", - "ED", - "NRG", - "MPS", - "IPT", - "NCA", - "OCA", - "slave_bosons", - "hubbard_I" - ], "changed": true, "quantity": "entries.results.method.simulation.dmft.impurity_solver_type" } }, - "results.method.simulation.dmft.total_filling:default_histogram": { - "histogram": { - "exclude_from_search": true, - "update": true, - "type": "histogram", - "buckets": 30, - "changed": true, - "quantity": "entries.results.method.simulation.dmft.total_filling" - } - }, "results.method.simulation.dmft.inverse_temperature:default_histogram": { "histogram": { "exclude_from_search": true, @@ -10595,13 +14134,8 @@ "terms": { "exclude_from_search": true, "update": true, - "size": 3, + "size": 5, "type": "terms", - "include": [ - "paramagnetic", - "ferromagnetic", - "antiferromagnetic" - ], "changed": true, "quantity": "entries.results.method.simulation.dmft.magnetic_state" } @@ -10616,14 +14150,24 @@ "quantity": "entries.results.method.simulation.dmft.u" } }, - "results.method.simulation.dmft.hunds_hubbard_ratio:default_histogram": { + "results.method.simulation.dmft.jh:default_histogram": { "histogram": { "exclude_from_search": true, "update": true, "type": "histogram", "buckets": 30, "changed": true, - "quantity": "entries.results.method.simulation.dmft.hunds_hubbard_ratio" + "quantity": "entries.results.method.simulation.dmft.jh" + } + }, + "results.method.simulation.dmft.analytical_continuation:scroll": { + "terms": { + "exclude_from_search": true, + "update": true, + "size": 5, + "type": "terms", + "changed": true, + "quantity": "entries.results.method.simulation.dmft.analytical_continuation" } } }, @@ -10649,7 +14193,7 @@ "page_size": 0, "order_by": "material_id", "order": "asc", - "total": 3 + "total": 4 }, "required": { "include": [ @@ -10662,29 +14206,7 @@ "quantity": "entries.results.method.simulation.dmft.impurity_solver_type", "exclude_from_search": true, "metrics": [], - "size": 11, - "include": [ - "CT-INT", - "CT-HYB", - "CT-AUX", - "ED", - "NRG", - "MPS", - "IPT", - "NCA", - "OCA", - "slave_bosons", - "hubbard_I" - ], - "data": [] - } - }, - "results.method.simulation.dmft.total_filling:default_histogram": { - "histogram": { - "quantity": "entries.results.method.simulation.dmft.total_filling", - "exclude_from_search": true, - "metrics": [], - "buckets": 30, + "size": 5, "data": [] } }, @@ -10702,12 +14224,7 @@ "quantity": "entries.results.method.simulation.dmft.magnetic_state", "exclude_from_search": true, "metrics": [], - "size": 3, - "include": [ - "paramagnetic", - "ferromagnetic", - "antiferromagnetic" - ], + "size": 5, "data": [] } }, @@ -10720,21 +14237,31 @@ "data": [] } }, - "results.method.simulation.dmft.hunds_hubbard_ratio:default_histogram": { + "results.method.simulation.dmft.jh:default_histogram": { "histogram": { - "quantity": "entries.results.method.simulation.dmft.hunds_hubbard_ratio", + "quantity": "entries.results.method.simulation.dmft.jh", "exclude_from_search": true, "metrics": [], "buckets": 30, "data": [] } + }, + "results.method.simulation.dmft.analytical_continuation:scroll": { + "terms": { + "quantity": "entries.results.method.simulation.dmft.analytical_continuation", + "exclude_from_search": true, + "metrics": [], + "size": 5, + "data": [] + } } }, "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "2301", + "content-length": "1911", "content-type": "application/json", "server": "uvicorn" } @@ -10752,42 +14279,30 @@ "terms": { "exclude_from_search": false, "update": true, - "size": 4, + "size": 5, "type": "terms", - "include": [ - "temperature", - "pressure", - "volume", - "energy_potential" - ], "changed": true, "quantity": "entries.results.properties.thermodynamic.trajectory.available_properties" } }, - "results.properties.thermodynamic.trajectory.methodology.molecular_dynamics.ensemble_type:scroll": { + "results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.ensemble_type:scroll": { "terms": { "exclude_from_search": true, "update": true, - "size": 4, + "size": 5, "type": "terms", - "include": [ - "NVE", - "NVT", - "NPT", - "NPH" - ], "changed": true, - "quantity": "entries.results.properties.thermodynamic.trajectory.methodology.molecular_dynamics.ensemble_type" + "quantity": "entries.results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.ensemble_type" } }, - "results.properties.thermodynamic.trajectory.methodology.molecular_dynamics.time_step:default_histogram": { + "results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.time_step:default_histogram": { "histogram": { "exclude_from_search": true, "update": true, "type": "histogram", "buckets": 30, "changed": true, - "quantity": "entries.results.properties.thermodynamic.trajectory.methodology.molecular_dynamics.time_step" + "quantity": "entries.results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.time_step" } } }, @@ -10813,7 +14328,7 @@ "page_size": 0, "order_by": "material_id", "order": "asc", - "total": 3 + "total": 4 }, "required": { "include": [ @@ -10826,34 +14341,22 @@ "quantity": "entries.results.properties.thermodynamic.trajectory.available_properties", "exclude_from_search": false, "metrics": [], - "size": 4, - "include": [ - "temperature", - "pressure", - "volume", - "energy_potential" - ], + "size": 5, "data": [] } }, - "results.properties.thermodynamic.trajectory.methodology.molecular_dynamics.ensemble_type:scroll": { + "results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.ensemble_type:scroll": { "terms": { - "quantity": "entries.results.properties.thermodynamic.trajectory.methodology.molecular_dynamics.ensemble_type", + "quantity": "entries.results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.ensemble_type", "exclude_from_search": true, "metrics": [], - "size": 4, - "include": [ - "NVE", - "NVT", - "NPT", - "NPH" - ], + "size": 5, "data": [] } }, - "results.properties.thermodynamic.trajectory.methodology.molecular_dynamics.time_step:default_histogram": { + "results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.time_step:default_histogram": { "histogram": { - "quantity": "entries.results.properties.thermodynamic.trajectory.methodology.molecular_dynamics.time_step", + "quantity": "entries.results.properties.thermodynamic.trajectory.provenance.molecular_dynamics.time_step", "exclude_from_search": true, "metrics": [], "buckets": 30, @@ -10864,8 +14367,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "1506", + "content-length": "1275", "content-type": "application/json", "server": "uvicorn" } @@ -10932,7 +14436,7 @@ "page_size": 0, "order_by": "material_id", "order": "asc", - "total": 3 + "total": 4 }, "required": { "include": [ @@ -10971,6 +14475,7 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", "content-length": "1226", "content-type": "application/json", @@ -11007,12 +14512,8 @@ "terms": { "exclude_from_search": true, "update": true, - "size": 2, + "size": 5, "type": "terms", - "include": [ - "direct", - "indirect" - ], "changed": true, "quantity": "entries.results.properties.electronic.band_structure_electronic.band_gap.type" } @@ -11078,7 +14579,7 @@ "page_size": 0, "order_by": "material_id", "order": "asc", - "total": 3 + "total": 4 }, "required": { "include": [ @@ -11102,7 +14603,12 @@ "data": [ { "count": 1, - "nested_count": 1, + "nested_count": 3, + "value": "band_structure_electronic" + }, + { + "count": 1, + "nested_count": 3, "value": "electronic.band_structure_electronic.band_gap" } ] @@ -11113,11 +14619,7 @@ "quantity": "entries.results.properties.electronic.band_structure_electronic.band_gap.type", "exclude_from_search": true, "metrics": [], - "size": 2, - "include": [ - "direct", - "indirect" - ], + "size": 5, "data": [] } }, @@ -11130,8 +14632,8 @@ "offset": 2.5634826144e-19, "data": [ { - "count": 1, - "nested_count": 1, + "count": 3, + "nested_count": 3, "value": 2.5634826144e-19 } ] @@ -11167,8 +14669,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "2505", + "content-length": "2561", "content-type": "application/json", "server": "uvicorn" } @@ -11221,7 +14724,7 @@ "page_size": 0, "order_by": "material_id", "order": "asc", - "total": 3 + "total": 4 }, "required": { "include": [ @@ -11248,6 +14751,7 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", "content-length": "659", "content-type": "application/json", @@ -11302,13 +14806,8 @@ "terms": { "exclude_from_search": true, "update": true, - "size": 3, + "size": 5, "type": "terms", - "include": [ - "voigt_average", - "reuss_average", - "voigt_reuss_hill_average" - ], "changed": true, "quantity": "entries.results.properties.mechanical.shear_modulus.type" } @@ -11356,7 +14855,7 @@ "page_size": 0, "order_by": "material_id", "order": "asc", - "total": 3 + "total": 4 }, "required": { "include": [ @@ -11401,12 +14900,7 @@ "quantity": "entries.results.properties.mechanical.shear_modulus.type", "exclude_from_search": true, "metrics": [], - "size": 3, - "include": [ - "voigt_average", - "reuss_average", - "voigt_reuss_hill_average" - ], + "size": 5, "data": [] } }, @@ -11432,8 +14926,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "2155", + "content-length": "2032", "content-type": "application/json", "server": "uvicorn" } @@ -11461,16 +14956,8 @@ "terms": { "exclude_from_search": true, "update": true, - "size": 6, + "size": 5, "type": "terms", - "include": [ - "The Perovskite Database Project", - "EELS Data Base", - "Materials Project", - "AFLOW", - "OQMD", - "Kyoto Phonopy Database" - ], "changed": true, "quantity": "entries.external_db" } @@ -11508,7 +14995,7 @@ "page_size": 0, "order_by": "material_id", "order": "asc", - "total": 3 + "total": 4 }, "required": { "include": [ @@ -11521,13 +15008,159 @@ "quantity": "entries.upload_create_time", "exclude_from_search": true, "metrics": [], + "interval": 49463, "buckets": 30, - "offset": 1674546352706, + "offset": 1697463085648, "data": [ { "count": 5, "nested_count": 5, - "value": 1674546352706 + "value": 1697463085648 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463135111 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463184574 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463234037 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463283500 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463332963 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463382426 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463431889 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463481352 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463530815 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463580278 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463629741 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463679204 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463728667 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463778130 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463827593 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463877056 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463926519 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697463975982 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464025445 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464074908 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464124371 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464173834 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464223297 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464272760 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464322223 + }, + { + "count": 5, + "nested_count": 5, + "value": 1697464371686 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464421149 + }, + { + "count": 0, + "nested_count": 0, + "value": 1697464470612 + }, + { + "count": 5, + "nested_count": 5, + "value": 1697464520075 } ] } @@ -11537,15 +15170,7 @@ "quantity": "entries.external_db", "exclude_from_search": true, "metrics": [], - "size": 6, - "include": [ - "The Perovskite Database Project", - "EELS Data Base", - "Materials Project", - "AFLOW", - "OQMD", - "Kyoto Phonopy Database" - ], + "size": 5, "data": [] } }, @@ -11562,8 +15187,9 @@ "data": [] }, "headers": { + "cache-control": "max-age=0, no-cache, no-store, must-revalidate", "connection": "close", - "content-length": "1275", + "content-length": "4489", "content-type": "application/json", "server": "uvicorn" } diff --git a/gui/tests/env.js b/gui/tests/env.js index c9e5167b1c395c52d33e8b8a7c257d09fec5516a..d89b9a7b87af9aa99787fed783da44c79b39927f 100644 --- a/gui/tests/env.js +++ b/gui/tests/env.js @@ -11,6 +11,7 @@ window.nomadEnv = { "version": {}, "globalLoginRequired": false, "servicesUploadLimit": 10, + "appTokenMaxExpiresIn": 2592000, "ui": { "app_base": "http://localhost:8000/fairdi/nomad/latest", "north_base": "http://localhost:9000/fairdi/nomad/latest/north", @@ -41,6 +42,9 @@ window.nomadEnv = { "solarcell": { "error": "Could not render solar cell properties." }, + "heterogeneouscatalyst": { + "error": "Could not render catalyst properties." + }, "electronic": { "error": "Could not render electronic properties." }, @@ -62,8 +66,8 @@ window.nomadEnv = { "geometry_optimization": { "error": "Could not render geometry optimization." }, - "eels": { - "error": "Could not render EELS properties." + "spectroscopic": { + "error": "Could not render spectroscopic properties." }, "workflow": { "error": "Could not render workflow card." @@ -78,18 +82,17 @@ window.nomadEnv = { } }, "apps": { + "exclude": [ + "heterogeneouscatalyst" + ], "options": { "entries": { "label": "Entries", "path": "entries", "resource": "entries", - "breadcrumb": "Entries", "category": "All", "description": "Search entries across all domains", - "help": { - "title": "Entries search", - "content": "This page allows you to search **entries** within NOMAD.\nEntries represent any individual data items that have\nbeen uploaded to NOMAD, no matter whether they come from\ntheoretical calculations, experiments, lab notebooks or\nany other source of data. This allows you to perform\ncross-domain queries, but if you are interested in a\nspecific subfield, you should see if a specific\napplication exists for it in the explore menu to get\nmore details." - }, + "readme": "This page allows you to search **entries** within NOMAD.\nEntries represent any individual data items that have\nbeen uploaded to NOMAD, no matter whether they come from\ntheoretical calculations, experiments, lab notebooks or\nany other source of data. This allows you to perform\ncross-domain queries, but if you are interested in a\nspecific subfield, you should see if a specific\napplication exists for it in the explore menu to get\nmore details.", "pagination": { "order_by": "upload_create_time", "order": "desc", @@ -246,7 +249,7 @@ window.nomadEnv = { "size": "xl" }, "structure": { - "label": "Structure", + "label": "Structure / Symmetry", "level": 1, "size": "s" }, @@ -335,6 +338,11 @@ window.nomadEnv = { "level": 1, "size": "s" }, + "heterogeneouscatalyst": { + "label": "Heterogeneous Catalysis", + "level": 1, + "size": "s" + }, "author": { "label": "Author / Origin / Dataset", "level": 0, @@ -364,13 +372,9 @@ window.nomadEnv = { "label": "Calculations", "path": "calculations", "resource": "entries", - "breadcrumb": "Calculations", "category": "Theory", "description": "Search calculations", - "help": { - "title": "Calculations", - "content": "This page allows you to search **calculations** within\nNOMAD. Calculations typically come from a specific\nsimulation software that uses an approximate model to\ninvestigate and report different physical properties." - }, + "readme": "This page allows you to search **calculations** within\nNOMAD. Calculations typically come from a specific\nsimulation software that uses an approximate model to\ninvestigate and report different physical properties.", "pagination": { "order_by": "upload_create_time", "order": "desc", @@ -390,6 +394,10 @@ window.nomadEnv = { "label": "Method name", "align": "left" }, + "results.method.simulation.dft.xc_functional_type": { + "label": "Jacob's ladder", + "align": "left" + }, "upload_create_time": { "label": "Upload time", "align": "left" @@ -398,10 +406,6 @@ window.nomadEnv = { "label": "Authors", "align": "left" }, - "results.method.simulation.dft.xc_functional_type": { - "label": "XC Functional Type", - "align": "left" - }, "results.method.simulation.precision.apw_cutoff": { "label": "APW Cutoff", "align": "left" @@ -438,34 +442,10 @@ window.nomadEnv = { "label": "Space group number", "align": "left" }, - "results.eln.lab_ids": { - "label": "Lab IDs", - "align": "left" - }, - "results.eln.sections": { - "label": "Sections", - "align": "left" - }, - "results.eln.methods": { - "label": "Methods", - "align": "left" - }, - "results.eln.tags": { - "label": "Tags", - "align": "left" - }, - "results.eln.instruments": { - "label": "Instruments", - "align": "left" - }, "entry_name": { "label": "Name", "align": "left" }, - "entry_type": { - "label": "Entry type", - "align": "left" - }, "mainfile": { "label": "Mainfile", "align": "left" @@ -491,6 +471,7 @@ window.nomadEnv = { "results.material.chemical_formula_hill", "results.method.simulation.program_name", "results.method.method_name", + "results.method.simulation.dft.xc_functional_type", "upload_create_time", "authors" ] @@ -519,7 +500,7 @@ window.nomadEnv = { "size": "xl" }, "structure": { - "label": "Structure", + "label": "Structure / Symmetry", "level": 1, "size": "s" }, @@ -617,64 +598,303 @@ window.nomadEnv = { "combine" ] }, - "filters_locked": { - "quantities": "results.method.simulation.program_name" - } - }, - "materials": { - "label": "Materials", - "path": "materials", - "resource": "materials", - "breadcrumb": "Materials", - "category": "Theory", - "description": "Search materials that are identified from calculations", - "help": { - "title": "Materials", - "content": "This page allows you to search **materials** within\nNOMAD. NOMAD can often automatically detect the material\nfrom individual calculations that contain the full\natomistic structure and can then group the data by using\nthese detected materials. This allows you to search\nindividual materials which have properties that are\naggregated from several entries. Following the link for\na specific material will take you to the corresponding\n[NOMAD Encyclopedia](https://nomad-lab.eu/prod/rae/encyclopedia/#/search)\npage for that material. NOMAD Encyclopedia is a service\nthat is specifically oriented towards materials property\nexploration.\n\nNotice that by default the properties that you search\ncan be combined from several different entries. If\ninstead you wish to search for a material with an\nindividual entry fullfilling your search criteria,\nuncheck the **combine results from several\nentries**-checkbox." - }, - "pagination": { - "order_by": "chemical_formula_hill", - "order": "asc", - "page_size": 20 - }, - "columns": { - "options": { - "chemical_formula_hill": { - "label": "Formula", - "align": "left" - }, - "structural_type": { - "label": "Dimensionality", - "align": "left" - }, - "symmetry.structure_name": { - "label": "Structure name", - "align": "left" + "dashboard": { + "widgets": [ + { + "type": "periodictable", + "layout": { + "xxl": { + "minH": 3, + "minW": 3, + "h": 9, + "w": 13, + "x": 0, + "y": 0 + }, + "xl": { + "minH": 3, + "minW": 3, + "h": 11, + "w": 14, + "x": 0, + "y": 0 + }, + "lg": { + "minH": 3, + "minW": 3, + "h": 11, + "w": 14, + "x": 0, + "y": 0 + }, + "md": { + "minH": 3, + "minW": 3, + "h": 8, + "w": 12, + "x": 0, + "y": 0 + }, + "sm": { + "minH": 3, + "minW": 3, + "h": 8, + "w": 12, + "x": 0, + "y": 0 + } + }, + "quantity": "results.material.elements", + "scale": "linear" }, - "symmetry.space_group_number": { - "label": "Space group number", - "align": "left" + { + "type": "terms", + "layout": { + "xxl": { + "minH": 3, + "minW": 3, + "h": 9, + "w": 6, + "x": 30, + "y": 0 + }, + "xl": { + "minH": 3, + "minW": 3, + "h": 6, + "w": 6, + "x": 24, + "y": 5 + }, + "lg": { + "minH": 3, + "minW": 3, + "h": 5, + "w": 5, + "x": 19, + "y": 6 + }, + "md": { + "minH": 3, + "minW": 3, + "h": 6, + "w": 6, + "x": 12, + "y": 8 + }, + "sm": { + "minH": 3, + "minW": 3, + "h": 5, + "w": 6, + "x": 6, + "y": 13 + } + }, + "quantity": "results.material.symmetry.space_group_symbol", + "scale": "linear", + "showinput": true }, - "symmetry.crystal_system": { - "label": "Crystal system", - "align": "left" + { + "type": "terms", + "layout": { + "xxl": { + "minH": 3, + "minW": 3, + "h": 9, + "w": 6, + "x": 19, + "y": 0 + }, + "xl": { + "minH": 3, + "minW": 3, + "h": 11, + "w": 5, + "x": 19, + "y": 0 + }, + "lg": { + "minH": 3, + "minW": 3, + "h": 6, + "w": 5, + "x": 19, + "y": 0 + }, + "md": { + "minH": 3, + "minW": 3, + "h": 6, + "w": 6, + "x": 0, + "y": 8 + }, + "sm": { + "minH": 3, + "minW": 3, + "h": 5, + "w": 6, + "x": 6, + "y": 8 + } + }, + "quantity": "results.material.structural_type", + "scale": "1/8", + "showinput": false }, - "symmetry.space_group_symbol": { - "label": "Space group symbol", - "align": "left" + { + "type": "terms", + "layout": { + "xxl": { + "minH": 3, + "minW": 3, + "h": 9, + "w": 6, + "x": 13, + "y": 0 + }, + "xl": { + "minH": 3, + "minW": 3, + "h": 11, + "w": 5, + "x": 14, + "y": 0 + }, + "lg": { + "minH": 3, + "minW": 3, + "h": 6, + "w": 5, + "x": 14, + "y": 0 + }, + "md": { + "minH": 3, + "minW": 3, + "h": 8, + "w": 6, + "x": 12, + "y": 0 + }, + "sm": { + "minH": 3, + "minW": 3, + "h": 5, + "w": 6, + "x": 0, + "y": 8 + } + }, + "quantity": "results.method.simulation.program_name", + "scale": "1/4", + "showinput": true }, - "material_id": { - "label": "Material ID", - "align": "left" - } - }, - "selected": [ - "chemical_formula_hill", - "structural_type", - "symmetry.structure_name", - "symmetry.space_group_number", - "symmetry.crystal_system" - ] + { + "type": "terms", + "layout": { + "xxl": { + "minH": 3, + "minW": 3, + "h": 9, + "w": 5, + "x": 25, + "y": 0 + }, + "xl": { + "minH": 3, + "minW": 3, + "h": 5, + "w": 6, + "x": 24, + "y": 0 + }, + "lg": { + "minH": 3, + "minW": 3, + "h": 5, + "w": 5, + "x": 14, + "y": 6 + }, + "md": { + "minH": 3, + "minW": 3, + "h": 6, + "w": 6, + "x": 6, + "y": 8 + }, + "sm": { + "minH": 3, + "minW": 3, + "h": 5, + "w": 6, + "x": 0, + "y": 13 + } + }, + "quantity": "results.material.symmetry.crystal_system", + "scale": "linear", + "showinput": false + } + ] + }, + "filters_locked": { + "quantities": "results.method.simulation.program_name" + } + }, + "materials": { + "label": "Materials", + "path": "materials", + "resource": "materials", + "category": "Theory", + "description": "Search materials that are identified from calculations", + "readme": "This page allows you to search **materials** within\nNOMAD. NOMAD can often automatically detect the material\nfrom individual calculations that contain the full\natomistic structure and can then group the data by using\nthese detected materials. This allows you to search\nindividual materials which have properties that are\naggregated from several entries. Following the link for\na specific material will take you to the corresponding\n[NOMAD Encyclopedia](https://nomad-lab.eu/prod/rae/encyclopedia/#/search)\npage for that material. NOMAD Encyclopedia is a service\nthat is specifically oriented towards materials property\nexploration.\n\nNotice that by default the properties that you search\ncan be combined from several different entries. If\ninstead you wish to search for a material with an\nindividual entry fullfilling your search criteria,\nuncheck the **combine results from several\nentries**-checkbox.", + "pagination": { + "order_by": "chemical_formula_hill", + "order": "asc", + "page_size": 20 + }, + "columns": { + "options": { + "chemical_formula_hill": { + "label": "Formula", + "align": "left" + }, + "structural_type": { + "label": "Dimensionality", + "align": "left" + }, + "symmetry.structure_name": { + "label": "Structure name", + "align": "left" + }, + "symmetry.space_group_number": { + "label": "Space group number", + "align": "left" + }, + "symmetry.crystal_system": { + "label": "Crystal system", + "align": "left" + }, + "symmetry.space_group_symbol": { + "label": "Space group symbol", + "align": "left" + }, + "material_id": { + "label": "Material ID", + "align": "left" + } + }, + "selected": [ + "chemical_formula_hill", + "structural_type", + "symmetry.structure_name", + "symmetry.space_group_number", + "symmetry.crystal_system" + ] }, "rows": { "actions": { @@ -700,7 +920,7 @@ window.nomadEnv = { "size": "xl" }, "structure": { - "label": "Structure", + "label": "Structure / Symmetry", "level": 1, "size": "s" }, @@ -810,13 +1030,9 @@ window.nomadEnv = { "label": "ELN", "path": "eln", "resource": "entries", - "breadcrumb": "ELN", "category": "Experiment", "description": "Search electronic lab notebooks", - "help": { - "title": "ELN search", - "content": "This page allows you to specifically seach **electronic\nlab notebooks (ELNs)** within NOMAD. It is very similar\nto the entries search, but with a reduced filter set and\nspecialized arrangement of default columns." - }, + "readme": "This page allows you to specifically seach **electronic\nlab notebooks (ELNs)** within NOMAD. It is very similar\nto the entries search, but with a reduced filter set and\nspecialized arrangement of default columns.", "pagination": { "order_by": "upload_create_time", "order": "desc", @@ -961,13 +1177,9 @@ window.nomadEnv = { "label": "EELS", "path": "eels", "resource": "entries", - "breadcrumb": "EELS", "category": "Experiment", "description": "Search electron energy loss spectroscopy experiments", - "help": { - "title": "EELS", - "content": "This page allows you to spefically search **Electron\nEnergy Loss Spectroscopy (EELS) experiments** within\nNOMAD. It is similar to the entries search, but with a\nreduced filter set and specialized arrangement of\ndefault columns." - }, + "readme": "This page allows you to spefically search **Electron\nEnergy Loss Spectroscopy (EELS) experiments** within\nNOMAD. It is similar to the entries search, but with a\nreduced filter set and specialized arrangement of\ndefault columns.", "pagination": { "order_by": "upload_create_time", "order": "desc", @@ -979,11 +1191,11 @@ window.nomadEnv = { "label": "Formula", "align": "left" }, - "results.properties.spectroscopy.eels.detector_type": { + "results.properties.spectroscopic.spectra.provenance.eels.detector_type": { "label": "Detector type", "align": "left" }, - "results.properties.spectroscopy.eels.resolution": { + "results.properties.spectroscopic.spectra.provenance.eels.resolution": { "label": "Resolution", "align": "left" }, @@ -995,10 +1207,10 @@ window.nomadEnv = { "label": "Authors", "align": "left" }, - "results.properties.spectroscopy.eels.min_energy": { + "results.properties.spectroscopic.spectra.provenance.eels.min_energy": { "align": "left" }, - "results.properties.spectroscopy.eels.max_energy": { + "results.properties.spectroscopic.spectra.provenance.eels.max_energy": { "align": "left" }, "entry_name": { @@ -1032,8 +1244,8 @@ window.nomadEnv = { }, "selected": [ "results.material.chemical_formula_hill", - "results.properties.spectroscopy.eels.detector_type", - "results.properties.spectroscopy.eels.resolution", + "results.properties.spectroscopic.spectra.provenance.eels.detector_type", + "results.properties.spectroscopic.spectra.provenance.eels.resolution", "upload_create_time", "authors" ] @@ -1103,13 +1315,9 @@ window.nomadEnv = { "label": "Solar Cells", "path": "solarcells", "resource": "entries", - "breadcrumb": "Solar Cells", "category": "Use Cases", "description": "Search solar cells", - "help": { - "title": "Solar cells", - "content": "This page allows you to search **solar cell data**\nwithin NOMAD. The filter menu on the left and the shown\ndefault columns are specifically designed for solar cell\nexploration. The dashboard directly shows useful\ninteractive statistics about the data." - }, + "readme": "This page allows you to search **solar cell data**\nwithin NOMAD. The filter menu on the left and the shown\ndefault columns are specifically designed for solar cell\nexploration. The dashboard directly shows useful\ninteractive statistics about the data.", "pagination": { "order_by": "results.properties.optoelectronic.solar_cell.efficiency", "order": "desc", @@ -1262,7 +1470,7 @@ window.nomadEnv = { "size": "xl" }, "structure": { - "label": "Structure", + "label": "Structure / Symmetry", "level": 1, "size": "s" }, @@ -1756,6 +1964,945 @@ window.nomadEnv = { "filters_locked": { "sections": "nomad.datamodel.results.SolarCell" } + }, + "heterogeneouscatalyst": { + "label": "Heterogeneous Catalysis", + "path": "heterogeneouscatalyst", + "resource": "entries", + "category": "Use Cases", + "description": "Search heterogeneous catalysts", + "readme": "This page allows you to search **catalyst and catalysis data**\nwithin NOMAD. The filter menu on the left and the shown\ndefault columns are specifically designed for Heterogeneous Catalyst\nexploration. The dashboard directly shows useful\ninteractive statistics about the data.", + "pagination": { + "order_by": "upload_create_time", + "order": "asc", + "page_size": 20 + }, + "columns": { + "options": { + "results.material.elements": { + "label": "Elements", + "align": "left" + }, + "results.properties.catalytic.catalyst_synthesis.catalyst_type": { + "label": "Catalyst Type", + "align": "left" + }, + "results.properties.catalytic.catalyst_synthesis.preparation_method": { + "label": "Preparation", + "align": "left" + }, + "results.properties.catalytic.catalyst_characterization.surface_area": { + "label": "Surface Area (m^2/g)", + "align": "left", + "format": { + "decimals": 2, + "mode": "standard" + } + }, + "results.properties.catalytic.reactivity.reaction_name": { + "label": "Reaction Name", + "align": "left" + }, + "results.properties.catalytic.reactivity.reaction_class": { + "label": "Reaction Class", + "align": "left" + }, + "results.properties.catalytic.catalyst_synthesis.catalyst_name": { + "label": "Catalyst Name", + "align": "left" + }, + "results.properties.catalytic.reactivity.reactants.name": { + "label": "Reactants", + "align": "left" + }, + "results.properties.catalytic.reactivity.products.name": { + "label": "Products", + "align": "left" + }, + "references": { + "label": "References", + "align": "left" + }, + "results.material.chemical_formula_hill": { + "label": "Formula", + "align": "left" + }, + "results.material.structural_type": { + "label": "Dimensionality", + "align": "left" + }, + "results.eln.lab_ids": { + "label": "Lab IDs", + "align": "left" + }, + "results.eln.sections": { + "label": "Sections", + "align": "left" + }, + "results.eln.methods": { + "label": "Methods", + "align": "left" + }, + "results.eln.tags": { + "label": "Tags", + "align": "left" + }, + "results.eln.instruments": { + "label": "Instruments", + "align": "left" + }, + "entry_name": { + "label": "Name", + "align": "left" + }, + "entry_type": { + "label": "Entry type", + "align": "left" + }, + "mainfile": { + "label": "Mainfile", + "align": "left" + }, + "upload_create_time": { + "label": "Upload time", + "align": "left" + }, + "authors": { + "label": "Authors", + "align": "left" + }, + "comment": { + "label": "Comment", + "align": "left" + }, + "datasets": { + "label": "Datasets", + "align": "left" + }, + "published": { + "label": "Access", + "align": "left" + } + }, + "selected": [ + "entry_name", + "results.properties.catalytic.reactivity.reaction_name", + "results.properties.catalytic.catalyst_synthesis.catalyst_type", + "results.properties.catalytic.catalyst_synthesis.preparation_method", + "results.properties.catalytic.catalyst_characterization.surface_area" + ] + }, + "rows": { + "actions": { + "enabled": true + }, + "details": { + "enabled": true + }, + "selection": { + "enabled": true + } + }, + "filter_menus": { + "options": { + "material": { + "label": "Catalyst Material", + "level": 0, + "size": "s" + }, + "elements": { + "label": "Elements / Formula", + "level": 1, + "size": "xl" + }, + "structure": { + "label": "Structure / Symmetry", + "level": 1, + "size": "s" + }, + "heterogeneouscatalyst": { + "label": "Catalytic Properties", + "level": 0, + "size": "s" + }, + "eln": { + "label": "Electronic Lab Notebook", + "level": 0, + "size": "s" + }, + "custom_quantities": { + "label": "User Defined Quantities", + "level": 0, + "size": "l" + }, + "author": { + "label": "Author / Origin / Dataset", + "level": 0, + "size": "m" + }, + "metadata": { + "label": "Visibility / IDs / Schema", + "level": 0, + "size": "s" + }, + "optimade": { + "label": "Optimade", + "level": 0, + "size": "m" + } + } + }, + "filters": { + "exclude": [ + "mainfile", + "entry_name", + "combine" + ] + }, + "dashboard": { + "widgets": [ + { + "type": "periodictable", + "layout": { + "xxl": { + "minH": 8, + "minW": 12, + "h": 8, + "w": 12, + "x": 0, + "y": 5 + }, + "xl": { + "minH": 8, + "minW": 12, + "h": 8, + "w": 12, + "x": 0, + "y": 5 + }, + "lg": { + "minH": 8, + "minW": 12, + "h": 8, + "w": 12, + "x": 0, + "y": 6 + }, + "md": { + "minH": 8, + "minW": 12, + "h": 8, + "w": 12, + "x": 0, + "y": 5 + }, + "sm": { + "minH": 8, + "minW": 12, + "h": 8, + "w": 12, + "x": 0, + "y": 5 + } + }, + "quantity": "results.material.elements", + "scale": "linear" + }, + { + "type": "terms", + "layout": { + "xxl": { + "minH": 3, + "minW": 3, + "h": 5, + "w": 6, + "x": 6, + "y": 0 + }, + "xl": { + "minH": 3, + "minW": 3, + "h": 5, + "w": 6, + "x": 0, + "y": 0 + }, + "lg": { + "minH": 3, + "minW": 3, + "h": 6, + "w": 6, + "x": 0, + "y": 0 + }, + "md": { + "minH": 3, + "minW": 3, + "h": 5, + "w": 6, + "x": 0, + "y": 0 + }, + "sm": { + "minH": 3, + "minW": 3, + "h": 5, + "w": 4, + "x": 0, + "y": 0 + } + }, + "quantity": "results.properties.catalytic.reactivity.reactants.name", + "scale": "linear", + "showinput": true + }, + { + "type": "terms", + "layout": { + "xxl": { + "minH": 3, + "minW": 3, + "h": 5, + "w": 6, + "x": 0, + "y": 0 + }, + "xl": { + "minH": 3, + "minW": 3, + "h": 5, + "w": 6, + "x": 12, + "y": 0 + }, + "lg": { + "minH": 3, + "minW": 3, + "h": 6, + "w": 6, + "x": 12, + "y": 0 + }, + "md": { + "minH": 3, + "minW": 3, + "h": 5, + "w": 6, + "x": 12, + "y": 0 + }, + "sm": { + "minH": 3, + "minW": 3, + "h": 5, + "w": 4, + "x": 8, + "y": 0 + } + }, + "quantity": "results.properties.catalytic.reactivity.reaction_name", + "scale": "linear", + "showinput": true + }, + { + "type": "terms", + "layout": { + "xxl": { + "minH": 3, + "minW": 3, + "h": 5, + "w": 6, + "x": 12, + "y": 0 + }, + "xl": { + "minH": 3, + "minW": 3, + "h": 5, + "w": 6, + "x": 6, + "y": 0 + }, + "lg": { + "minH": 3, + "minW": 3, + "h": 6, + "w": 6, + "x": 6, + "y": 0 + }, + "md": { + "minH": 3, + "minW": 3, + "h": 5, + "w": 6, + "x": 6, + "y": 0 + }, + "sm": { + "minH": 3, + "minW": 3, + "h": 5, + "w": 4, + "x": 4, + "y": 0 + } + }, + "quantity": "results.properties.catalytic.reactivity.products.name", + "scale": "linear", + "showinput": true + }, + { + "type": "terms", + "layout": { + "xxl": { + "minH": 3, + "minW": 3, + "h": 4, + "w": 6, + "x": 12, + "y": 5 + }, + "xl": { + "minH": 3, + "minW": 3, + "h": 4, + "w": 6, + "x": 12, + "y": 5 + }, + "lg": { + "minH": 3, + "minW": 3, + "h": 4, + "w": 6, + "x": 12, + "y": 6 + }, + "md": { + "minH": 3, + "minW": 3, + "h": 4, + "w": 6, + "x": 12, + "y": 5 + }, + "sm": { + "minH": 3, + "minW": 3, + "h": 3, + "w": 4, + "x": 8, + "y": 13 + } + }, + "quantity": "results.properties.catalytic.catalyst_synthesis.preparation_method", + "scale": "linear", + "showinput": true + }, + { + "type": "terms", + "layout": { + "xxl": { + "minH": 3, + "minW": 3, + "h": 4, + "w": 6, + "x": 12, + "y": 9 + }, + "xl": { + "minH": 3, + "minW": 3, + "h": 4, + "w": 6, + "x": 12, + "y": 9 + }, + "lg": { + "minH": 3, + "minW": 3, + "h": 4, + "w": 6, + "x": 12, + "y": 10 + }, + "md": { + "minH": 3, + "minW": 3, + "h": 4, + "w": 6, + "x": 12, + "y": 9 + }, + "sm": { + "minH": 3, + "minW": 3, + "h": 3, + "w": 4, + "x": 8, + "y": 16 + } + }, + "quantity": "results.properties.catalytic.catalyst_synthesis.catalyst_type", + "scale": "linear", + "showinput": true + }, + { + "type": "histogram", + "layout": { + "xxl": { + "minH": 3, + "minW": 8, + "h": 3, + "w": 9, + "x": 0, + "y": 13 + }, + "xl": { + "minH": 3, + "minW": 8, + "h": 4, + "w": 9, + "x": 0, + "y": 13 + }, + "lg": { + "minH": 3, + "minW": 8, + "h": 4, + "w": 9, + "x": 0, + "y": 14 + }, + "md": { + "minH": 3, + "minW": 8, + "h": 3, + "w": 9, + "x": 0, + "y": 13 + }, + "sm": { + "minH": 3, + "minW": 8, + "h": 3, + "w": 8, + "x": 0, + "y": 13 + } + }, + "quantity": "results.properties.catalytic.reactivity.test_temperatures", + "scale": "linear", + "autorange": false, + "showinput": false, + "nbins": 30 + }, + { + "type": "histogram", + "layout": { + "xxl": { + "minH": 3, + "minW": 8, + "h": 3, + "w": 9, + "x": 0, + "y": 16 + }, + "xl": { + "minH": 3, + "minW": 8, + "h": 4, + "w": 9, + "x": 0, + "y": 17 + }, + "lg": { + "minH": 3, + "minW": 8, + "h": 4, + "w": 9, + "x": 0, + "y": 18 + }, + "md": { + "minH": 3, + "minW": 8, + "h": 3, + "w": 9, + "x": 9, + "y": 16 + }, + "sm": { + "minH": 3, + "minW": 8, + "h": 3, + "w": 8, + "x": 0, + "y": 22 + } + }, + "quantity": "results.properties.catalytic.reactivity.gas_hourly_space_velocity", + "scale": "linear", + "autorange": false, + "showinput": false, + "nbins": 30 + }, + { + "type": "histogram", + "layout": { + "xxl": { + "minH": 3, + "minW": 8, + "h": 3, + "w": 9, + "x": 9, + "y": 13 + }, + "xl": { + "minH": 3, + "minW": 8, + "h": 4, + "w": 9, + "x": 9, + "y": 13 + }, + "lg": { + "minH": 3, + "minW": 8, + "h": 4, + "w": 9, + "x": 9, + "y": 14 + }, + "md": { + "minH": 3, + "minW": 8, + "h": 3, + "w": 9, + "x": 9, + "y": 13 + }, + "sm": { + "minH": 3, + "minW": 8, + "h": 3, + "w": 8, + "x": 0, + "y": 16 + } + }, + "quantity": "results.properties.catalytic.reactivity.reactants.gas_concentration_in", + "scale": "linear", + "autorange": false, + "showinput": false, + "nbins": 30 + }, + { + "type": "histogram", + "layout": { + "xxl": { + "minH": 3, + "minW": 8, + "h": 3, + "w": 9, + "x": 9, + "y": 16 + }, + "xl": { + "minH": 3, + "minW": 8, + "h": 4, + "w": 9, + "x": 9, + "y": 17 + }, + "lg": { + "minH": 3, + "minW": 8, + "h": 4, + "w": 9, + "x": 9, + "y": 14 + }, + "md": { + "minH": 3, + "minW": 8, + "h": 3, + "w": 9, + "x": 0, + "y": 16 + }, + "sm": { + "minH": 3, + "minW": 8, + "h": 3, + "w": 8, + "x": 0, + "y": 16 + } + }, + "quantity": "results.properties.catalytic.reactivity.pressure", + "scale": "linear", + "autorange": false, + "showinput": false, + "nbins": 30 + }, + { + "type": "histogram", + "layout": { + "xxl": { + "minH": 3, + "minW": 8, + "h": 3, + "w": 8, + "x": 0, + "y": 19 + }, + "xl": { + "minH": 3, + "minW": 8, + "h": 4, + "w": 9, + "x": 0, + "y": 21 + }, + "lg": { + "minH": 3, + "minW": 8, + "h": 4, + "w": 9, + "x": 0, + "y": 26 + }, + "md": { + "minH": 3, + "minW": 8, + "h": 3, + "w": 9, + "x": 0, + "y": 22 + }, + "sm": { + "minH": 3, + "minW": 8, + "h": 3, + "w": 8, + "x": 0, + "y": 33 + } + }, + "quantity": "results.properties.catalytic.reactivity.products.selectivity", + "scale": "linear", + "autorange": false, + "showinput": false, + "nbins": 30 + }, + { + "type": "histogram", + "layout": { + "xxl": { + "minH": 3, + "minW": 8, + "h": 3, + "w": 8, + "x": 0, + "y": 22 + }, + "xl": { + "minH": 3, + "minW": 8, + "h": 4, + "w": 9, + "x": 0, + "y": 25 + }, + "lg": { + "minH": 3, + "minW": 8, + "h": 4, + "w": 9, + "x": 0, + "y": 22 + }, + "md": { + "minH": 3, + "minW": 8, + "h": 3, + "w": 9, + "x": 0, + "y": 19 + }, + "sm": { + "minH": 3, + "minW": 8, + "h": 3, + "w": 8, + "x": 0, + "y": 30 + } + }, + "quantity": "results.properties.catalytic.reactivity.reactants.conversion", + "scale": "linear", + "autorange": false, + "showinput": false, + "nbins": 30 + }, + { + "type": "histogram", + "layout": { + "xxl": { + "minH": 3, + "minW": 8, + "h": 3, + "w": 8, + "x": 8, + "y": 25 + }, + "xl": { + "minH": 3, + "minW": 8, + "h": 4, + "w": 9, + "x": 9, + "y": 29 + }, + "lg": { + "minH": 3, + "minW": 8, + "h": 4, + "w": 12, + "x": 0, + "y": 30 + }, + "md": { + "minH": 3, + "minW": 8, + "h": 3, + "w": 9, + "x": 0, + "y": 25 + }, + "sm": { + "minH": 3, + "minW": 8, + "h": 3, + "w": 8, + "x": 0, + "y": 36 + } + }, + "quantity": "results.properties.catalytic.reactivity.rates.reaction_rate", + "scale": "linear", + "autorange": false, + "showinput": false, + "nbins": 30 + }, + { + "type": "scatterplot", + "layout": { + "xxl": { + "minH": 3, + "minW": 3, + "h": 6, + "w": 10, + "x": 8, + "y": 19 + }, + "xl": { + "minH": 3, + "minW": 3, + "h": 8, + "w": 9, + "x": 9, + "y": 21 + }, + "lg": { + "minH": 3, + "minW": 3, + "h": 8, + "w": 9, + "x": 9, + "y": 22 + }, + "md": { + "minH": 3, + "minW": 3, + "h": 6, + "w": 9, + "x": 9, + "y": 19 + }, + "sm": { + "minH": 3, + "minW": 3, + "h": 5, + "w": 8, + "x": 9, + "y": 25 + } + }, + "x": "results.properties.catalytic.reactivity.reactants.conversion", + "y": "results.properties.catalytic.reactivity.products.selectivity", + "color": "results.properties.catalytic.catalyst_characterization.surface_area", + "size": 1000, + "autorange": true + }, + { + "type": "histogram", + "layout": { + "xxl": { + "minH": 3, + "minW": 8, + "h": 3, + "w": 8, + "x": 0, + "y": 25 + }, + "xl": { + "minH": 3, + "minW": 8, + "h": 4, + "w": 9, + "x": 0, + "y": 29 + }, + "lg": { + "minH": 3, + "minW": 8, + "h": 4, + "w": 12, + "x": 0, + "y": 34 + }, + "md": { + "minH": 3, + "minW": 8, + "h": 3, + "w": 9, + "x": 0, + "y": 28 + }, + "sm": { + "minH": 3, + "minW": 8, + "h": 3, + "w": 8, + "x": 0, + "y": 39 + } + }, + "quantity": "results.properties.catalytic.catalyst_characterization.surface_area", + "scale": "1/4", + "autorange": false, + "showinput": false, + "nbins": 30 + } + ] + }, + "filters_locked": { + "quantities": "results.properties.catalytic" + } } } }, diff --git a/gui/yarn.lock b/gui/yarn.lock index 8939f364bfa670c84d255beb41ead1194752c5a8..b6276a19a1c720303067475f1d331c2010bf1363 100644 --- a/gui/yarn.lock +++ b/gui/yarn.lock @@ -1204,40 +1204,40 @@ resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== -"@h5web/app@6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@h5web/app/-/app-6.2.0.tgz#6bf712f06cee709e30574ec6b558105ba5b40513" - integrity sha512-YyGNY5GWwEYVVyaMmb+gjJ/3G0eIhEau5OZHBkgNfTDYGBZs5IiZKTS9mWgLPUVNau55ZFl6SzfdOMU10tXiIw== +"@h5web/app@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@h5web/app/-/app-8.0.0.tgz#7071224daad6ad9f07cf56cc24aeb32251caaade" + integrity sha512-EelO52llpuBYvPDuH1uhxHocuxYP5ghP7CRetG00XPE+wpurWIrB93WcBqH7IVKmU8zbPtuisjw2KRQUIaaOxQ== dependencies: - "@h5web/lib" "6.2.0" - "@react-hookz/web" "14.2.2" + "@h5web/lib" "8.0.0" + "@react-hookz/web" "23.0.0" "@react-three/fiber" "7.0.26" - axios "0.27.2" + axios "1.3.4" d3-format "3.1.0" lodash "4.17.21" ndarray "1.0.19" ndarray-ops "1.2.2" - react-error-boundary "3.1.4" - react-icons "4.4.0" - react-reflex "4.0.9" - react-slider "2.0.1" + react-error-boundary "4.0.3" + react-icons "4.8.0" + react-reflex "4.0.12" + react-slider "2.0.4" react-suspense-fetch "0.4.1" - react-use "17.4.0" three "0.141.0" - zustand "4.0.0-rc.1" + zustand "4.3.7" -"@h5web/lib@6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@h5web/lib/-/lib-6.2.0.tgz#56814d7649cfc1be916bd551fa94e28fb598c8ec" - integrity sha512-ay1A1nVwGvMB1QziSCXPobKCaAcvFzS1fumrRc7sUmEsXIxsnhbXssHGrrxMm4+p1B+JIj4bcntDfmjvoAzWKQ== - dependencies: - "@react-hookz/web" "14.2.2" - "@visx/axis" "2.10.0" - "@visx/grid" "2.10.0" - "@visx/scale" "2.2.2" - "@visx/shape" "2.10.0" - "@visx/tooltip" "2.10.0" - d3-array "3.1.6" +"@h5web/lib@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@h5web/lib/-/lib-8.0.0.tgz#69609760871e8be95bf84aa8b1a30370460d508f" + integrity sha512-aa5r8M6tc7lNcWaiKOiSzeTwZ1dtFn6GJdGHeOyzUAKSzEXBPoN2C50eFkbVs7nYBqMa2MpjxOztwKaJ37FslQ== + dependencies: + "@react-hookz/web" "23.0.0" + "@visx/axis" "3.1.0" + "@visx/drag" "3.0.1" + "@visx/grid" "3.0.1" + "@visx/scale" "3.0.0" + "@visx/shape" "3.0.0" + "@visx/tooltip" "3.1.2" + d3-array "3.2.3" d3-color "3.1.0" d3-format "3.1.0" d3-interpolate "3.0.1" @@ -1247,12 +1247,12 @@ ndarray "1.0.19" ndarray-ops "1.2.2" react-aria-menubutton "7.0.3" - react-icons "4.4.0" + react-icons "4.8.0" react-keyed-flatten-children "1.3.0" react-measure "2.5.2" - react-slider "2.0.1" - react-use "17.4.0" - react-window "1.8.7" + react-slider "2.0.4" + react-window "1.8.8" + zustand "4.3.7" "@hapi/address@2.x.x": version "2.1.4" @@ -1751,17 +1751,17 @@ schema-utils "^2.6.5" source-map "^0.7.3" -"@react-hookz/deep-equal@^1.0.2": +"@react-hookz/deep-equal@^1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@react-hookz/deep-equal/-/deep-equal-1.0.4.tgz#68a71f36cbc88724b3ce6f4036183778b6e7f282" integrity sha512-N56fTrAPUDz/R423pag+n6TXWbvlBZDtTehaGFjK0InmN+V2OFWLE/WmORhmn6Ce7dlwH5+tQN1LJFw3ngTJVg== -"@react-hookz/web@14.2.2": - version "14.2.2" - resolved "https://registry.yarnpkg.com/@react-hookz/web/-/web-14.2.2.tgz#eee0085f954e5b62d0a6c5b20d8786c28abfb9ad" - integrity sha512-6FeZHKV3FFOYnbSJMkkqXDoMuIX0HEFJlDF4LpHR7RsA3zrH2xzhtF8nSYZ+pG6fDIqYKID9yQuILFmbAWaqCQ== +"@react-hookz/web@23.0.0": + version "23.0.0" + resolved "https://registry.yarnpkg.com/@react-hookz/web/-/web-23.0.0.tgz#d0470de7f9ec4f6eaedd2c13b9fb474d8f3a0d09" + integrity sha512-diBtlo17CJtZJ/Yb8veri7hZL7QPnqNZ+IAMHWWSb//nq+Z3XDHaXcozH7cyvMZj4gYwQeY/L/H4298etHxu1Q== dependencies: - "@react-hookz/deep-equal" "^1.0.2" + "@react-hookz/deep-equal" "^1.0.4" "@react-keycloak/core@^3.2.0": version "3.2.0" @@ -2092,29 +2092,29 @@ resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080" integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== -"@types/d3-color@^1": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@types/d3-color/-/d3-color-1.4.2.tgz#944f281d04a0f06e134ea96adbb68303515b2784" - integrity sha512-fYtiVLBYy7VQX+Kx7wU/uOIkGQn8aAEY8oWMoyja3N4dLd8Yf6XgSIR/4yWvMuveNOH5VShnqCgRqqh/UNanBA== +"@types/d3-color@*": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/d3-color/-/d3-color-3.1.0.tgz#6594da178ded6c7c3842f3cc0ac84b156f12f2d4" + integrity sha512-HKuicPHJuvPgCD+np6Se9MQvS6OCbJmOjGvylzMJRlDwUXjKTTXs6Pwgk79O09Vj/ho3u1ofXnhFOaEWWPrlwA== -"@types/d3-interpolate@^1.3.1": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@types/d3-interpolate/-/d3-interpolate-1.4.2.tgz#88902a205f682773a517612299a44699285eed7b" - integrity sha512-ylycts6llFf8yAEs1tXzx2loxxzDZHseuhPokrqKprTQSTcD3JbJI1omZP1rphsELZO3Q+of3ff0ZS7+O6yVzg== +"@types/d3-interpolate@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/d3-interpolate/-/d3-interpolate-3.0.1.tgz#e7d17fa4a5830ad56fe22ce3b4fac8541a9572dc" + integrity sha512-jx5leotSeac3jr0RePOH1KdR9rISG91QIE4Q2PYTu4OymLTZfA3SrnURSLzKH48HmXVUru50b8nje4E79oQSQw== dependencies: - "@types/d3-color" "^1" + "@types/d3-color" "*" "@types/d3-path@^1", "@types/d3-path@^1.0.8": version "1.0.9" resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-1.0.9.tgz#73526b150d14cd96e701597cbf346cfd1fd4a58c" integrity sha512-NaIeSIBiFgSC6IGUBjZWcscUJEq7vpVu7KthHN8eieTV9d9MqkSOZLH4chq1PmcKy06PNe3axLeKmRIyxJ+PZQ== -"@types/d3-scale@^3.3.0": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@types/d3-scale/-/d3-scale-3.3.2.tgz#18c94e90f4f1c6b1ee14a70f14bfca2bd1c61d06" - integrity sha512-gGqr7x1ost9px3FvIfUMi5XA/F/yAf4UkUDtdQhpH92XCT0Oa7zkkRzY61gPVJq+DxpHn/btouw5ohWkbBsCzQ== +"@types/d3-scale@^4.0.2": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@types/d3-scale/-/d3-scale-4.0.3.tgz#7a5780e934e52b6f63ad9c24b105e33dd58102b5" + integrity sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ== dependencies: - "@types/d3-time" "^2" + "@types/d3-time" "*" "@types/d3-shape@^1.3.1": version "1.3.8" @@ -2123,7 +2123,12 @@ dependencies: "@types/d3-path" "^1" -"@types/d3-time@^2", "@types/d3-time@^2.0.0": +"@types/d3-time@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/d3-time/-/d3-time-3.0.0.tgz#e1ac0f3e9e195135361fa1a1d62f795d87e6e819" + integrity sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg== + +"@types/d3-time@^2.0.0": version "2.1.1" resolved "https://registry.yarnpkg.com/@types/d3-time/-/d3-time-2.1.1.tgz#743fdc821c81f86537cbfece07093ac39b4bc342" integrity sha512-9MVYlmIgmRR31C5b4FVSWtuMmBHh2mOWQYfl7XAYOa8dsnb7iEmUmRSWSFgXFtkjxO65d7hTUHQC+RhR/9IWFg== @@ -2243,11 +2248,6 @@ expect "^28.0.0" pretty-format "^28.0.0" -"@types/js-cookie@^2.2.6": - version "2.2.7" - resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-2.2.7.tgz#226a9e31680835a6188e887f3988e60c04d3f6a3" - integrity sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA== - "@types/js-levenshtein@^1.1.0": version "1.1.1" resolved "https://registry.yarnpkg.com/@types/js-levenshtein/-/js-levenshtein-1.1.1.tgz#ba05426a43f9e4e30b631941e0aa17bf0c890ed5" @@ -2639,99 +2639,117 @@ "@typescript-eslint/types" "5.34.0" eslint-visitor-keys "^3.3.0" -"@visx/axis@2.10.0": - version "2.10.0" - resolved "https://registry.yarnpkg.com/@visx/axis/-/axis-2.10.0.tgz#613fde76653edbefb795cafe2e11fc4c2294db46" - integrity sha512-myEcXPzD7ZmKiXuhue2lpiuTDgl3Glhe1LB+xoUDS8ZAW76Asd6PwurjoxSnq3tHCz0EDBh7YlgApeFy3Bw38A== +"@visx/axis@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@visx/axis/-/axis-3.1.0.tgz#775b221e5abfdec25304c607eeae8cda1a8bade6" + integrity sha512-JDj/1VYx0JO0pHFtwoFtYcnqdoZFh/dpHImEl169S5nTslSFlIoNTXA/ekpBP6ELkEZ59gmF1X5k29x6MFBwCA== dependencies: "@types/react" "*" - "@visx/group" "2.10.0" - "@visx/point" "2.6.0" - "@visx/scale" "2.2.2" - "@visx/shape" "2.10.0" - "@visx/text" "2.10.0" + "@visx/group" "3.0.0" + "@visx/point" "3.0.1" + "@visx/scale" "3.0.0" + "@visx/shape" "3.0.0" + "@visx/text" "3.0.0" classnames "^2.3.1" prop-types "^15.6.0" -"@visx/bounds@2.10.0": - version "2.10.0" - resolved "https://registry.yarnpkg.com/@visx/bounds/-/bounds-2.10.0.tgz#cd0bdd7db924a5a2151174edce09f867aaeaf3af" - integrity sha512-rY7WFTIjQaXA8tFL45O2qbtSRkyF4yF75HiWz06F7BVmJ9UjF2qlomB3Y1z6gk6ZiFhwQ4zxABjOVjAQPLn7nQ== +"@visx/bounds@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@visx/bounds/-/bounds-3.0.0.tgz#cf357cbff90a1fe5f95eb9d9288dd8794b744a7f" + integrity sha512-YQaSSER9erxlhppzRms6cvYdKqcIwk6eksrGdbJkBoHobhPo1JCIUXlmrA4qgrEnXInPJpueGE+PE5F+Dk12DA== dependencies: "@types/react" "*" "@types/react-dom" "*" prop-types "^15.5.10" -"@visx/curve@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@visx/curve/-/curve-2.1.0.tgz#f614bfe3db66df7db7382db7a75ced1506b94602" - integrity sha512-9b6JOnx91gmOQiSPhUOxdsvcnW88fgqfTPKoVgQxidMsD/I3wksixtwo8TR/vtEz2aHzzsEEhlv1qK7Y3yaSDw== +"@visx/curve@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@visx/curve/-/curve-3.0.0.tgz#c54568472e00a38483c58cf52e4a6ddb2887c2d4" + integrity sha512-kvHJDLBeczTQ87ZExSTfRxej06l6o6UiQ0NHf9+xpAin06y6Qk1ThOHHWJTGM6KGzwlu7jEauJGHwZs6nMhDvA== dependencies: "@types/d3-shape" "^1.3.1" d3-shape "^1.0.6" -"@visx/grid@2.10.0": - version "2.10.0" - resolved "https://registry.yarnpkg.com/@visx/grid/-/grid-2.10.0.tgz#fbc06d481921d8089d593f0d0a5cf0b53b191d89" - integrity sha512-2uj8vfwQ0f7EN1MuNne/1a94gyux19MZxBd36BqXmyUpnRxC4DSYQRra05tqoydUupe1mAlJZHUuKl2zDK7tOw== +"@visx/drag@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@visx/drag/-/drag-3.0.1.tgz#753d5f471d4e31679ca4fddcb476cf2d5c7eb6e4" + integrity sha512-yi2AB/unUfNYBRKS4pmUOuz8MjaAAYjsQGYcD/s4LqeQjd+lBZF7CuNcYZ/maGNQAEUfgLr2czIzADanOMtMaw== + dependencies: + "@types/react" "*" + "@visx/event" "3.0.1" + "@visx/point" "3.0.1" + prop-types "^15.5.10" + +"@visx/event@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@visx/event/-/event-3.0.1.tgz#d5358f52ff5ef30036d955bd2b68b96472ff2d6f" + integrity sha512-tK1EUYQLLStBuoCMbm8LJ3VbDyCVI8HjT0pMRQxm+C75FSIVWvrThgrfrC9sWOFnEMEYWspZO7hI5zjsPKjLQA== + dependencies: + "@types/react" "*" + "@visx/point" "3.0.1" + +"@visx/grid@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@visx/grid/-/grid-3.0.1.tgz#d91085ed92e7e1c0c2e58710bc33b2f0f33b8e74" + integrity sha512-cln5CVvFG58C5Uz1Uf0KRBFmGmgD1NALOQdYDu5yPsTuY2yLzVYPvCIlYBMdUtE0uzfNq972SmkZHfZYs03jxQ== dependencies: "@types/react" "*" - "@visx/curve" "2.1.0" - "@visx/group" "2.10.0" - "@visx/point" "2.6.0" - "@visx/scale" "2.2.2" - "@visx/shape" "2.10.0" + "@visx/curve" "3.0.0" + "@visx/group" "3.0.0" + "@visx/point" "3.0.1" + "@visx/scale" "3.0.0" + "@visx/shape" "3.0.0" classnames "^2.3.1" prop-types "^15.6.2" -"@visx/group@2.10.0": - version "2.10.0" - resolved "https://registry.yarnpkg.com/@visx/group/-/group-2.10.0.tgz#95839851832545621eb0d091866a61dafe552ae1" - integrity sha512-DNJDX71f65Et1+UgQvYlZbE66owYUAfcxTkC96Db6TnxV221VKI3T5l23UWbnMzwFBP9dR3PWUjjqhhF12N5pA== +"@visx/group@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@visx/group/-/group-3.0.0.tgz#e7f9752599bcc7e141ff5317a2a9a502577ab8df" + integrity sha512-SFjXhTMcsaVAb1/TVL1KM5vn8gQTIVgSx0ATdDl4BJSFp2ym1lO8LY4jpV4SFweaHnWxVwrrfGLTn5QsYnvmjQ== dependencies: "@types/react" "*" classnames "^2.3.1" prop-types "^15.6.2" -"@visx/point@2.6.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@visx/point/-/point-2.6.0.tgz#c4316ca409b5b829c5455f07118d8c14a92cc633" - integrity sha512-amBi7yMz4S2VSchlPdliznN41TuES64506ySI22DeKQ+mc1s1+BudlpnY90sM1EIw4xnqbKmrghTTGfy6SVqvQ== +"@visx/point@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@visx/point/-/point-3.0.1.tgz#77587ddaabf6f3023f09f8a0ce33a2c27c9d64c8" + integrity sha512-S5WOBMgEP2xHcgs3A2BFB2vwzrk0tMmn3PGZAbQJ+lu4HlnalDP72klUnxLTH8xclNNvpUHtHM5eLIJXyHx6Pw== -"@visx/scale@2.2.2": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@visx/scale/-/scale-2.2.2.tgz#b8eafabdcf92bb45ab196058fe184772ad80fd25" - integrity sha512-3aDySGUTpe6VykDQmF+g2nz5paFu9iSPTcCOEgkcru0/v5tmGzUdvivy8CkYbr87HN73V/Jc53lGm+kJUQcLBw== +"@visx/scale@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@visx/scale/-/scale-3.0.0.tgz#727123f0c930d3346a4473e926831c45997e0312" + integrity sha512-WSf+wrxZEvu5TPGfGTafzzX1MbogbIxfD9ZKM9p7xfw65v23G0dNMy4bqVBUbOJigONoQkIZyqQ+gz5AJ/ioIg== dependencies: - "@types/d3-interpolate" "^1.3.1" - "@types/d3-scale" "^3.3.0" + "@types/d3-interpolate" "^3.0.1" + "@types/d3-scale" "^4.0.2" "@types/d3-time" "^2.0.0" - d3-interpolate "^1.4.0" - d3-scale "^3.3.0" + d3-interpolate "^3.0.1" + d3-scale "^4.0.2" d3-time "^2.1.1" -"@visx/shape@2.10.0": - version "2.10.0" - resolved "https://registry.yarnpkg.com/@visx/shape/-/shape-2.10.0.tgz#126ba8029f30569847f652673dc003821c57d884" - integrity sha512-aRQBfclEWEPDmQmnB+BGN9Issg7u9lLrZ5LUSI3gfR9WAAHoNldxjpHRcYx8Y16A3YlCFVgWIBBL7pH0XUYcCA== +"@visx/shape@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@visx/shape/-/shape-3.0.0.tgz#a1d4bd0e12cc94c164252f175997932a09c24652" + integrity sha512-t6lpP9bIA1vwChDwiOUWl92ro29XF/M8IVNWRA0pm4LGxGGTACvxG3Agfcdi3JprahUVqPpnRCwuR36PDanq3Q== dependencies: "@types/d3-path" "^1.0.8" "@types/d3-shape" "^1.3.1" "@types/lodash" "^4.14.172" "@types/react" "*" - "@visx/curve" "2.1.0" - "@visx/group" "2.10.0" - "@visx/scale" "2.2.2" + "@visx/curve" "3.0.0" + "@visx/group" "3.0.0" + "@visx/scale" "3.0.0" classnames "^2.3.1" d3-path "^1.0.5" d3-shape "^1.2.0" lodash "^4.17.21" prop-types "^15.5.10" -"@visx/text@2.10.0": - version "2.10.0" - resolved "https://registry.yarnpkg.com/@visx/text/-/text-2.10.0.tgz#2ff413f4dd35617e45b24d6082d7b856358afe4c" - integrity sha512-Wbt0Mq130akOahaby2Ziwkr62LuK6td9RcIWI9o4xsLE7GCIkxeUiVci0YUo2yewgwOLwR9F1guPuHPqYd+eYg== +"@visx/text@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@visx/text/-/text-3.0.0.tgz#9099c3605027b9ab4c54bde97518a648136c3629" + integrity sha512-LW6v5T/gpd9RGw83/ScXncYc6IlcfzXTpaN8WbbxLRI65gdvSqrykwAMR0cbpQmzoVFuZXljqOf0QslHGnBg1w== dependencies: "@types/lodash" "^4.14.172" "@types/react" "*" @@ -2740,13 +2758,13 @@ prop-types "^15.7.2" reduce-css-calc "^1.3.0" -"@visx/tooltip@2.10.0": - version "2.10.0" - resolved "https://registry.yarnpkg.com/@visx/tooltip/-/tooltip-2.10.0.tgz#86d6a720af573dc9853d86d99ae35052bb1629f3" - integrity sha512-6Zrd79MIEfyuLBcZ1ypSeAkpQc8oLRNB7FQnegzl3Lje4LK5lJtuf5ST0mwK6G2Uv+GlOW9REJ6VK4gfAGkq9A== +"@visx/tooltip@3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@visx/tooltip/-/tooltip-3.1.2.tgz#6c7bb36a296f4501adb99b59487412e39fe06f44" + integrity sha512-p46qztGRNkEDbxzc3V1virahvz3UQ29TzddUjA0oaTIBCrOd9UJuLvv1Tq9OpeUYPdbrO/ZRwaEeri2pbwv04Q== dependencies: "@types/react" "*" - "@visx/bounds" "2.10.0" + "@visx/bounds" "3.0.0" classnames "^2.3.1" prop-types "^15.5.10" react-use-measure "^2.0.4" @@ -3029,11 +3047,6 @@ resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.7.5.tgz#09fa51e356d07d0be200642b0e4f91d8e6dd408d" integrity sha512-V3BIhmY36fXZ1OtVcI9W+FxQqxVLsPKcNjWigIaa81dLC9IolJl5Mt4Cvhmr0flUnjSpTdrbMTSbXqYqV5dT6A== -"@xobotyi/scrollbar-width@^1.9.5": - version "1.9.5" - resolved "https://registry.yarnpkg.com/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz#80224a6919272f405b87913ca13b92929bdf3c4d" - integrity sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ== - "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -3636,13 +3649,14 @@ axios@0.21.4: dependencies: follow-redirects "^1.14.0" -axios@0.27.2: - version "0.27.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" - integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== +axios@1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.3.4.tgz#f5760cefd9cfb51fd2481acf88c05f67c4523024" + integrity sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ== dependencies: - follow-redirects "^1.14.9" + follow-redirects "^1.15.0" form-data "^4.0.0" + proxy-from-env "^1.1.0" axobject-query@^2.2.0: version "2.2.0" @@ -5306,13 +5320,6 @@ css-has-pseudo@^0.10.0: postcss "^7.0.6" postcss-selector-parser "^5.0.0-rc.4" -css-in-js-utils@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/css-in-js-utils/-/css-in-js-utils-3.1.0.tgz#640ae6a33646d401fc720c54fc61c42cd76ae2bb" - integrity sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A== - dependencies: - hyphenate-style-name "^1.0.3" - css-loader@4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.3.0.tgz#c888af64b2a5b2e85462c72c0f4a85c7e2e0821e" @@ -5530,11 +5537,6 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== -csstype@^3.0.6: - version "3.1.1" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" - integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== - cwise-compiler@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/cwise-compiler/-/cwise-compiler-1.1.3.tgz#f4d667410e850d3a313a7d2db7b1e505bb034cc5" @@ -5552,7 +5554,7 @@ d3-array@1, d3-array@^1.1.1, d3-array@^1.2.0: resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw== -d3-array@2, d3-array@^2.3.0: +d3-array@2: version "2.12.1" resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-2.12.1.tgz#e20b41aafcdffdf5d50928004ececf815a465e81" integrity sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ== @@ -5566,10 +5568,10 @@ d3-array@2, d3-array@^2.3.0: dependencies: internmap "1 - 2" -d3-array@3.1.6: - version "3.1.6" - resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.1.6.tgz#0342c835925826f49b4d16eb7027aec334ffc97d" - integrity sha512-DCbBBNuKOeiR9h04ySRBMW52TFVc91O9wJziuyXw6Ztmy8D3oZbmCkOO3UHKC7ceNJsN2Mavo9+vwV8EAEUXzA== +d3-array@3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.3.tgz#39f1f4954e4a09ff69ac597c2d61906b04e84740" + integrity sha512-JRHwbQQ84XuAESWhvIPaUV4/1UYTBOLiOPGWqgFDHZS1D5QN9c57FbH3QpEnQMYiOXNzKUQyGTZf+EVO7RT5TQ== dependencies: internmap "1 - 2" @@ -5607,11 +5609,6 @@ d3-color@1: resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.4.1.tgz#c52002bf8846ada4424d55d97982fef26eb3bc8a" integrity sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q== -"d3-color@1 - 2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-2.0.0.tgz#8d625cab42ed9b8f601a1760a389f7ea9189d62e" - integrity sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ== - "d3-color@1 - 3", d3-color@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2" @@ -5673,11 +5670,6 @@ d3-format@1: resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.4.5.tgz#374f2ba1320e3717eb74a9356c67daee17a7edb4" integrity sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ== -"d3-format@1 - 2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-2.0.0.tgz#a10bcc0f986c372b729ba447382413aabf5b0767" - integrity sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA== - "d3-format@1 - 3", d3-format@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641" @@ -5695,27 +5687,20 @@ d3-hierarchy@1: resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz#2f6bee24caaea43f8dc37545fa01628559647a83" integrity sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ== -d3-interpolate@1, d3-interpolate@^1.4.0: +d3-interpolate@1: version "1.4.0" resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.4.0.tgz#526e79e2d80daa383f9e0c1c1c7dcc0f0583e987" integrity sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA== dependencies: d3-color "1" -"d3-interpolate@1 - 3", "d3-interpolate@1.2.0 - 3", d3-interpolate@3.0.1: +"d3-interpolate@1 - 3", "d3-interpolate@1.2.0 - 3", d3-interpolate@3.0.1, d3-interpolate@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d" integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g== dependencies: d3-color "1 - 3" -"d3-interpolate@1.2.0 - 2": - version "2.0.1" - resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-2.0.1.tgz#98be499cfb8a3b94d4ff616900501a64abc91163" - integrity sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ== - dependencies: - d3-color "1 - 2" - d3-path@1, d3-path@^1.0.5: version "1.0.9" resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.9.tgz#48c050bb1fe8c262493a8caf5524e3e9591701cf" @@ -5764,7 +5749,7 @@ d3-scale@2: d3-time "1" d3-time-format "2" -d3-scale@4.0.2: +d3-scale@4.0.2, d3-scale@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-4.0.2.tgz#82b38e8e8ff7080764f8dcec77bd4be393689396" integrity sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ== @@ -5775,17 +5760,6 @@ d3-scale@4.0.2: d3-time "2.1.1 - 3" d3-time-format "2 - 4" -d3-scale@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-3.3.0.tgz#28c600b29f47e5b9cd2df9749c206727966203f3" - integrity sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ== - dependencies: - d3-array "^2.3.0" - d3-format "1 - 2" - d3-interpolate "1.2.0 - 2" - d3-time "^2.1.1" - d3-time-format "2 - 3" - d3-selection@1, d3-selection@^1.1.0: version "1.4.2" resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.4.2.tgz#dcaa49522c0dbf32d6c1858afc26b6094555bc5c" @@ -5805,13 +5779,6 @@ d3-time-format@2: dependencies: d3-time "1" -"d3-time-format@2 - 3": - version "3.0.0" - resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-3.0.0.tgz#df8056c83659e01f20ac5da5fdeae7c08d5f1bb6" - integrity sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag== - dependencies: - d3-time "1 - 2" - "d3-time-format@2 - 4": version "4.1.0" resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-4.1.0.tgz#7ab5257a5041d11ecb4fe70a5c7d16a195bb408a" @@ -5824,13 +5791,6 @@ d3-time@1: resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.1.0.tgz#b1e19d307dae9c900b7e5b25ffc5dcc249a8a0f1" integrity sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA== -"d3-time@1 - 2", d3-time@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-2.1.1.tgz#e9d8a8a88691f4548e68ca085e5ff956724a6682" - integrity sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ== - dependencies: - d3-array "2" - "d3-time@1 - 3", "d3-time@2.1.1 - 3": version "3.0.0" resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-3.0.0.tgz#65972cb98ae2d4954ef5c932e8704061335d4975" @@ -5838,6 +5798,13 @@ d3-time@1: dependencies: d3-array "2 - 3" +d3-time@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-2.1.1.tgz#e9d8a8a88691f4548e68ca085e5ff956724a6682" + integrity sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ== + dependencies: + d3-array "2" + d3-timer@1: version "1.0.10" resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.10.tgz#dfe76b8a91748831b13b6d9c793ffbd508dd9de5" @@ -7316,16 +7283,6 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== -fast-loops@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/fast-loops/-/fast-loops-1.1.3.tgz#ce96adb86d07e7bf9b4822ab9c6fac9964981f75" - integrity sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g== - -fast-shallow-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz#d4dcaf6472440dcefa6f88b98e3251e27f25628b" - integrity sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw== - fast-url-parser@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" @@ -7333,11 +7290,6 @@ fast-url-parser@1.1.3: dependencies: punycode "^1.3.2" -fastest-stable-stringify@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/fastest-stable-stringify/-/fastest-stable-stringify-2.0.2.tgz#3757a6774f6ec8de40c4e86ec28ea02417214c76" - integrity sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q== - fastq@^1.6.0: version "1.13.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" @@ -7636,7 +7588,7 @@ follow-redirects@^1.0.0, follow-redirects@^1.14.0: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== -follow-redirects@^1.14.9: +follow-redirects@^1.15.0: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== @@ -8692,14 +8644,6 @@ inline-style-parser@0.1.1: resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== -inline-style-prefixer@^6.0.0: - version "6.0.4" - resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-6.0.4.tgz#4290ed453ab0e4441583284ad86e41ad88384f44" - integrity sha512-FwXmZC2zbeeS7NzGjJ6pAiqRhXR0ugUShSNb6GApMl6da0/XGc4MOJsoWAywia52EEWbXNSy0pzkwz/+Y+swSg== - dependencies: - css-in-js-utils "^3.1.0" - fast-loops "^1.1.3" - inquirer@^8.2.0: version "8.2.4" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.4.tgz#ddbfe86ca2f67649a67daa6f1051c128f684f0b4" @@ -9827,11 +9771,6 @@ jest@26.6.0: import-local "^3.0.2" jest-cli "^26.6.0" -js-cookie@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" - integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== - js-levenshtein@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" @@ -11436,20 +11375,6 @@ nan@^2.12.1: resolved "https://registry.yarnpkg.com/nan/-/nan-2.16.0.tgz#664f43e45460fb98faf00edca0bb0d7b8dce7916" integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA== -nano-css@^5.3.1: - version "5.3.5" - resolved "https://registry.yarnpkg.com/nano-css/-/nano-css-5.3.5.tgz#3075ea29ffdeb0c7cb6d25edb21d8f7fa8e8fe8e" - integrity sha512-vSB9X12bbNu4ALBu7nigJgRViZ6ja3OU7CeuiV1zMIbXOdmkLahgtPmh3GBOlDxbKY0CitqlPdOReGlBLSp+yg== - dependencies: - css-tree "^1.1.2" - csstype "^3.0.6" - fastest-stable-stringify "^2.0.2" - inline-style-prefixer "^6.0.0" - rtl-css-js "^1.14.0" - sourcemap-codec "^1.4.8" - stacktrace-js "^2.0.2" - stylis "^4.0.6" - nanoclone@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/nanoclone/-/nanoclone-0.2.1.tgz#dd4090f8f1a110d26bb32c49ed2f5b9235209ed4" @@ -13260,6 +13185,11 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" @@ -13615,10 +13545,10 @@ react-dropzone@^14.2.3: file-selector "^0.6.0" prop-types "^15.8.1" -react-error-boundary@3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-3.1.4.tgz#255db92b23197108757a888b01e5b729919abde0" - integrity sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA== +react-error-boundary@4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-4.0.3.tgz#f811497c06d53ea1206817ee82c6e5c6a27becd9" + integrity sha512-IzNKP/ViHWp2QRDgsDMirEcf0XLsLueN6Wgzm1TVwgbAH+paX8Z42VyKvZcFFRHgd+rPK2P4TLrOrHC/dommew== dependencies: "@babel/runtime" "^7.12.5" @@ -13674,10 +13604,10 @@ react-highlight@^0.14.0: dependencies: highlight.js "^10.5.0" -react-icons@4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.4.0.tgz#a13a8a20c254854e1ec9aecef28a95cdf24ef703" - integrity sha512-fSbvHeVYo/B5/L4VhB7sBA1i2tS8MkT0Hb9t2H1AVPkwGfVHLJCqyr2Py9dKMxsyM63Eng1GkdZfbWj+Fmv8Rg== +react-icons@4.8.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.8.0.tgz#621e900caa23b912f737e41be57f27f6b2bff445" + integrity sha512-N6+kOLcihDiAnj5Czu637waJqSnwlMNROzVZMhfX68V/9bu9qHaMIJC4UdozWoOk57gahFCNHwVvWzm0MTzRjg== react-infinite-scroller@^1.2.4: version "1.2.6" @@ -13791,10 +13721,10 @@ react-reconciler@^0.26.2: object-assign "^4.1.1" scheduler "^0.20.2" -react-reflex@4.0.9: - version "4.0.9" - resolved "https://registry.yarnpkg.com/react-reflex/-/react-reflex-4.0.9.tgz#3f20d0afacb43f5f37b93e0b56f5042b63b54d06" - integrity sha512-XFTNRekFK4ul8mzVd1lniKT/SI0FvNYhXyLNl5gagS1i3iW9QKlpFYcRfVhZlxxaYHb8UyLOs3+H4Ay5cjtbxQ== +react-reflex@4.0.12: + version "4.0.12" + resolved "https://registry.yarnpkg.com/react-reflex/-/react-reflex-4.0.12.tgz#f479840ed82877fdab10a82443a5b3762af2f82f" + integrity sha512-sYgX0rW7xuGcs99WwXB/fPlPLzr3kiZhlTF+5Oijz+e2Hh64WlxIJdbrXMr4yA+vtn9Zi4vN/jF2CP7drWAAAQ== dependencies: "@babel/runtime" "^7.0.0" lodash.throttle "^4.1.1" @@ -13823,10 +13753,10 @@ react-resize-detector@^6.7.4: lodash "^4.17.21" resize-observer-polyfill "^1.5.1" -react-resize-detector@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-7.1.2.tgz#8ef975dd8c3d56f9a5160ac382ef7136dcd2d86c" - integrity sha512-zXnPJ2m8+6oq9Nn8zsep/orts9vQv3elrpA+R8XTcW7DVVUJ9vwDwMXaBtykAYjMnkCIaOoK9vObyR7ZgFNlOw== +react-resize-detector@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-9.1.0.tgz#45ea7176e57f1a568abd0e3eafcbfd3532fb284e" + integrity sha512-vGFbfkIZp4itJqR4yl+GhjrZHtdlQvou1r10ek0yZUMkizKbPdekKTpPb003IV3b8E5BJFThVG0oocjE3lNsug== dependencies: lodash "^4.17.21" @@ -13938,10 +13868,10 @@ react-side-effect@^2.1.0: resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.2.tgz#dc6345b9e8f9906dc2eeb68700b615e0b4fe752a" integrity sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw== -react-slider@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/react-slider/-/react-slider-2.0.1.tgz#51fb80aaebb98a07d6563b757a49c437a5142fed" - integrity sha512-EnPLeyPGQcgpU9i+OvdD6W1Fk+rHg7LOVGvREXqLnbSngYvnE+d++nus0iHho1kcDw6NzF1OXzqWXAEs2Nbl4Q== +react-slider@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/react-slider/-/react-slider-2.0.4.tgz#21c656ffabc3bb4481cf6b49e6d647baeda83572" + integrity sha512-sWwQD01n6v+MbeLCYthJGZPc0kzOyhQHyd0bSo0edg+IAxTVQmj3Oy4SBK65eX6gNwS9meUn6Z5sIBUVmwAd9g== dependencies: prop-types "^15.8.1" @@ -14012,11 +13942,6 @@ react-transition-group@^4.0.0, react-transition-group@^4.4.0: loose-envify "^1.4.0" prop-types "^15.6.2" -react-universal-interface@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/react-universal-interface/-/react-universal-interface-0.6.2.tgz#5e8d438a01729a4dbbcbeeceb0b86be146fe2b3b" - integrity sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw== - react-use-measure@^2.0.4, react-use-measure@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/react-use-measure/-/react-use-measure-2.1.1.tgz#5824537f4ee01c9469c45d5f7a8446177c6cc4ba" @@ -14024,32 +13949,20 @@ react-use-measure@^2.0.4, react-use-measure@^2.1.1: dependencies: debounce "^1.2.1" -react-use@17.4.0: - version "17.4.0" - resolved "https://registry.yarnpkg.com/react-use/-/react-use-17.4.0.tgz#cefef258b0a6c534a5c8021c2528ac6e1a4cdc6d" - integrity sha512-TgbNTCA33Wl7xzIJegn1HndB4qTS9u03QUwyNycUnXaweZkE4Kq2SB+Yoxx8qbshkZGYBDvUXbXWRUmQDcZZ/Q== - dependencies: - "@types/js-cookie" "^2.2.6" - "@xobotyi/scrollbar-width" "^1.9.5" - copy-to-clipboard "^3.3.1" - fast-deep-equal "^3.1.3" - fast-shallow-equal "^1.0.0" - js-cookie "^2.2.1" - nano-css "^5.3.1" - react-universal-interface "^0.6.2" - resize-observer-polyfill "^1.5.1" - screenfull "^5.1.0" - set-harmonic-interval "^1.0.1" - throttle-debounce "^3.0.1" - ts-easing "^0.2.0" - tslib "^2.1.0" - react-virtualized-auto-sizer@^1.0.2: version "1.0.6" resolved "https://registry.yarnpkg.com/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.6.tgz#66c5b1c9278064c5ef1699ed40a29c11518f97ca" integrity sha512-7tQ0BmZqfVF6YYEWcIGuoR3OdYe8I/ZFbNclFlGOC3pMqunkYF/oL30NCjSGl9sMEb17AnzixDz98Kqc3N76HQ== -react-window@1.8.7, react-window@^1.8.5: +react-window@1.8.8: + version "1.8.8" + resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.8.tgz#1b52919f009ddf91970cbdb2050a6c7be44df243" + integrity sha512-D4IiBeRtGXziZ1n0XklnFGu7h9gU684zepqyKzgPNzrsrk7xOCxni+TCckjg2Nr/DiaEEGVVmnhYSlT2rB47dQ== + dependencies: + "@babel/runtime" "^7.0.0" + memoize-one ">=3.1.1 <6" + +react-window@^1.8.5: version "1.8.7" resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.7.tgz#5e9fd0d23f48f432d7022cdb327219353a15f0d4" integrity sha512-JHEZbPXBpKMmoNO1bNhoXOOLg/ujhL/BU4IqVU9r8eQPcy5KQnGHIHDRkJ0ns9IM5+Aq5LNwt3j8t3tIrePQzA== @@ -14741,13 +14654,6 @@ rsvp@^4.8.4: resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== -rtl-css-js@^1.14.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/rtl-css-js/-/rtl-css-js-1.16.1.tgz#4b48b4354b0ff917a30488d95100fbf7219a3e80" - integrity sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg== - dependencies: - "@babel/runtime" "^7.1.2" - run-async@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" @@ -14905,11 +14811,6 @@ schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: ajv "^6.12.5" ajv-keywords "^3.5.2" -screenfull@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/screenfull/-/screenfull-5.2.0.tgz#6533d524d30621fc1283b9692146f3f13a93d1ba" - integrity sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA== - script-loader@^0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/script-loader/-/script-loader-0.7.2.tgz#2016db6f86f25f5cf56da38915d83378bb166ba7" @@ -15116,11 +15017,6 @@ set-cookie-parser@^2.4.6: resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.5.1.tgz#ddd3e9a566b0e8e0862aca974a6ac0e01349430b" integrity sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ== -set-harmonic-interval@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-harmonic-interval/-/set-harmonic-interval-1.0.1.tgz#e1773705539cdfb80ce1c3d99e7f298bb3995249" - integrity sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g== - set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" @@ -15381,11 +15277,6 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== -source-map@0.5.6: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" - integrity sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA== - source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -15506,13 +15397,6 @@ stable@^0.1.8: resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== -stack-generator@^2.0.5: - version "2.0.10" - resolved "https://registry.yarnpkg.com/stack-generator/-/stack-generator-2.0.10.tgz#8ae171e985ed62287d4f1ed55a1633b3fb53bb4d" - integrity sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ== - dependencies: - stackframe "^1.3.4" - stack-trace@0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" @@ -15530,23 +15414,6 @@ stackframe@^1.3.4: resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== -stacktrace-gps@^3.0.4: - version "3.1.2" - resolved "https://registry.yarnpkg.com/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz#0c40b24a9b119b20da4525c398795338966a2fb0" - integrity sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ== - dependencies: - source-map "0.5.6" - stackframe "^1.3.4" - -stacktrace-js@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stacktrace-js/-/stacktrace-js-2.0.2.tgz#4ca93ea9f494752d55709a081d400fdaebee897b" - integrity sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg== - dependencies: - error-stack-parser "^2.0.6" - stack-generator "^2.0.5" - stacktrace-gps "^3.0.4" - static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -15846,11 +15713,6 @@ stylehacks@^4.0.0: postcss "^7.0.0" postcss-selector-parser "^3.0.0" -stylis@^4.0.6: - version "4.1.3" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.3.tgz#fd2fbe79f5fed17c55269e16ed8da14c84d069f7" - integrity sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA== - supports-color@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" @@ -16132,11 +15994,6 @@ throat@^5.0.0: resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== -throttle-debounce@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb" - integrity sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg== - through2-filter@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" @@ -16338,11 +16195,6 @@ tryer@^1.0.1: resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== -ts-easing@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/ts-easing/-/ts-easing-0.2.0.tgz#c8a8a35025105566588d87dbda05dd7fbfa5a4ec" - integrity sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ== - ts-node@^10.7.0: version "10.9.1" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" @@ -16832,10 +16684,10 @@ use-query-params@^0.6.0: dependencies: serialize-query-params "^0.3.0" -use-sync-external-store@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.1.0.tgz#3343c3fe7f7e404db70f8c687adf5c1652d34e82" - integrity sha512-SEnieB2FPKEVne66NpXPd1Np4R1lTNKfjuy3XdIoPQKYBAFdzbzSZlSn1KJZUiihQLQC5Znot4SBz1EOTBwQAQ== +use-sync-external-store@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== use@^3.1.0: version "3.1.1" @@ -17920,12 +17772,12 @@ yup@^0.32.11: property-expr "^2.0.4" toposort "^2.0.2" -zustand@4.0.0-rc.1: - version "4.0.0-rc.1" - resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.0.0-rc.1.tgz#ec30a3afc03728adec7e1bd7bcc3592176372201" - integrity sha512-qgcs7zLqBdHu0PuT3GW4WCIY5SgXdsv30GQMu9Qpp1BA2aS+sNS8l4x0hWuyEhjXkN+701aGWawhKDv6oWJAcw== +zustand@4.3.7: + version "4.3.7" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.3.7.tgz#501b1f0393a7f1d103332e45ab574be5747fedce" + integrity sha512-dY8ERwB9Nd21ellgkBZFhudER8KVlelZm8388B5nDAXhO/+FZDhYMuRnqDgu5SYyRgz/iaf8RKnbUs/cHfOGlQ== dependencies: - use-sync-external-store "1.1.0" + use-sync-external-store "1.2.0" zustand@^3.5.1: version "3.7.2" diff --git a/mkdocs.yml b/mkdocs.yml index 16dc041e292251ad2f1331534d3a7ebcaedc025f..152aa6b6e5e4f3b5192b06420c77c7ad4772d5e8 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -4,17 +4,25 @@ site_description: | site_author: The NOMAD Authors nav: - Home: index.md - - Tutorial: tutorial.md + - Tutorial: + - Uploading and publishing data: tutorial/upload_publish.md + - Exploring data on: tutorial/explore.md + - Access data via API: tutorial/access_api.md + - Built in schemas: tutorial/builtin.md + - Schemas: tutorial/custom.md + - Plugins: tutorial/plugins.md + - Third-party integration: tutorial/third_party.md - How-to guides: - Data Management: - - How to upload/publish data: data/upload.md + - How to upload/publish data for supported formats: data/upload.md - How to use ELNs: data/eln.md - How to explore data: data/explore.md - How to use NORTH: data/north.md - - Schemas: + - Customize Schemas: - How to write a schema: schemas/basics.md - How to define ELNs: schemas/elns.md - - How to define tabular data: schemas/tabular.md + - How to use base sections: schemas/base_sections.md + - How to use tabular parser: schemas/tabular.md - How to define workflows: schemas/workflows.md - How to reference hdf5: schemas/hdf5.md - Programming interfaces: @@ -37,13 +45,14 @@ nav: - Oasis: - How to install an Oasis: oasis/install.md - How to customize an Oasis: oasis/customize.md + - How to configure custom apps: oasis/apps.md - How to migrate Oasis versions: oasis/migrate.md - Administrative tasks: oasis/admin.md - - Learn: - - From files to data: learn/basics.md - - Structured data: learn/data.md - - Architecture: learn/architecture.md - - Why you need an Oasis: learn/oasis.md + - Explanation: + - From files to data: explanation/basics.md + - Structured data: explanation/data.md + - Architecture: explanation/architecture.md + - Why you need an Oasis: explanation/oasis.md - Reference: - reference/config.md - reference/annotations.md diff --git a/nomad/app/main.py b/nomad/app/main.py index 55f6845e0f1b5f4a40a5e7a7f464833689b4dd28..0d197ce4e5449d816454c67f421c1a21d132d361 100644 --- a/nomad/app/main.py +++ b/nomad/app/main.py @@ -16,20 +16,25 @@ # limitations under the License. # +import re import os +import hashlib +import json from fastapi import FastAPI, Request, Response, status from fastapi.exception_handlers import http_exception_handler as default_http_exception_handler from starlette.exceptions import HTTPException as StarletteHTTPException from fastapi.responses import HTMLResponse, JSONResponse -from fastapi.staticfiles import StaticFiles +from starlette.staticfiles import StaticFiles as StarletteStaticFiles, NotModifiedResponse from starlette.middleware.base import BaseHTTPMiddleware from starlette.responses import PlainTextResponse +from starlette.datastructures import Headers +from pydantic import BaseModel from nomad import config, infrastructure +from .v1.main import app as v1_app from .dcat.main import app as dcat_app from .optimade import optimade_app -from .v1.main import app as v1_app from .h5grove_app import app as h5grove_app @@ -79,27 +84,53 @@ configured_gui_folder = os.path.join(gui_folder, '../.gui_configured') if os.path.exists(configured_gui_folder): gui_folder = configured_gui_folder -app.mount(f'{app_base}/dist', StaticFiles(directory=dist_folder, check_dir=False), name='dist', ) -app.mount(f'{app_base}/docs', StaticFiles(directory=docs_folder, check_dir=False), name='docs') + +class StaticFiles(StarletteStaticFiles): + + etag_re = r'^(W/)?"?([^"]*)"?$' + + def is_not_modified( + self, response_headers: Headers, request_headers: Headers + ) -> bool: + # The starlette etag implementation is not considering the "..." and W/"..." etag + # RFC syntax used by browsers. + try: + if_none_match = request_headers["if-none-match"] + match = re.match(StaticFiles.etag_re, if_none_match) + if_none_match = match.group(2) + etag = response_headers["etag"] + if if_none_match == etag: + return True + except KeyError: + pass + + return super().is_not_modified(response_headers, request_headers) class GuiFiles(StaticFiles): gui_artifacts_data = None gui_env_data = None + gui_data_etag = None async def get_response(self, path: str, scope) -> Response: - if path == 'env.js': - return PlainTextResponse( - GuiFiles.gui_env_data, status_code=200, media_type='application/javascript') - - if path == 'artifacts.js': - return PlainTextResponse( - GuiFiles.gui_artifacts_data, status_code=200, media_type='application/javascript') + if path not in ['env.js', 'artifacts.js']: + response = await super().get_response(path, scope) + else: + assert GuiFiles.gui_data_etag is not None, 'Etag for gui data was not initialized' + response = PlainTextResponse( + GuiFiles.gui_env_data if path == 'env.js' else GuiFiles.gui_artifacts_data, + media_type='application/javascript', + headers=dict(etag=GuiFiles.gui_data_etag)) - return await super().get_response(path, scope) + request_headers = Headers(scope=scope) + if self.is_not_modified(response.headers, request_headers): + return NotModifiedResponse(response.headers) + return response +app.mount(f'{app_base}/dist', StaticFiles(directory=dist_folder, check_dir=False), name='dist', ) +app.mount(f'{app_base}/docs', StaticFiles(directory=docs_folder, check_dir=False), name='docs') app.mount(f'{app_base}/gui', GuiFiles(directory=gui_folder, check_dir=False), name='gui') @@ -123,6 +154,13 @@ async def startup_event(): from nomad.cli.dev import get_gui_config GuiFiles.gui_env_data = get_gui_config() + config_data = [ + item.json() + for item in config.__dict__.values() + if isinstance(item, BaseModel)] + GuiFiles.gui_data_etag = hashlib.md5( + json.dumps(config_data).encode(), usedforsecurity=False).hexdigest() + infrastructure.setup() @@ -147,6 +185,7 @@ async def http_exception_handler(request, exc): {'<br/>'.join(f'{key}: {value}' for key, value in config.meta.dict().items())} <h2>apis</h2> <a href="{app_base}/api/v1/extensions/docs">NOMAD API v1</a><br/> + <a href="{app_base}/api/v1.2/extensions/docs">NOMAD API v1.2</a><br/> <a href="{app_base}/optimade/v1/extensions/docs">Optimade API</a><br/> <a href="{app_base}/dcat/extensions/docs">DCAT API</a><br/> </body> @@ -188,11 +227,32 @@ async def health(): return {'healthcheck': 'ok'} +max_cache_ages = { + r'\.[a-f0-9]+\.chunk\.(js|css)$': 3600 * 24 * 7, + r'\.(html|js|css)$': config.services.html_resource_http_max_age, + r'\.(png|jpg|gif|jpeg|ico)$': config.services.image_resource_http_max_age, +} + + @app.middleware('http') async def add_header(request: Request, call_next): response = await call_next(request) - if str(request.url).endswith('index.html'): - response.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate' - if str(request.url).endswith('.js'): - response.headers['Cache-Control'] = 'no-cache, must-revalidate' + + max_age = None + for key, value in max_cache_ages.items(): + if re.search(key, str(request.url)): + max_age = value + break + + if max_age is not None: + response.headers['Cache-Control'] = f'max-age={max_age}, must-revalidate' + else: + response.headers['Cache-Control'] = f'max-age=0, no-cache, no-store, must-revalidate' + + # The etags that we and starlette produce do not follow the RFC, because they do not + # start with a " as the RFC specifies. Nginx considers them weak etags and will strip + # these if gzip is enabled. + if not response.headers.get('etag', '"').startswith('"'): + response.headers['etag'] = f'"{response.headers.get("etag")}"' + return response diff --git a/nomad/app/optimade/common.py b/nomad/app/optimade/common.py index 76833abe716b5f54719c6ea04434f0f307c26595..b82cf8e9e57d4649e5131122e80fce58df9ad7e0 100644 --- a/nomad/app/optimade/common.py +++ b/nomad/app/optimade/common.py @@ -87,7 +87,7 @@ def provider_specific_fields() -> Dict[str, SearchQuantity]: if len(nmd_name_split) == 1: # plain metadata pass - elif not nmd_name_split[0] in ['results']: + elif nmd_name_split[0] not in ['results']: # other domains fields that do not make sense in the optimade context continue elif len(nmd_name_split) > 2 and nmd_name_split[1] == 'optimade': diff --git a/nomad/app/v1/main.py b/nomad/app/v1/main.py index 06358c13a49c88f3c41ec09e3f96732cd3692649..5d323f8ba3c6e7eb2cd8e33b7aca7dfd27cd636d 100644 --- a/nomad/app/v1/main.py +++ b/nomad/app/v1/main.py @@ -38,7 +38,7 @@ class ORJSONResponse(JSONResponse): media_type = "application/json" def render(self, content: Any) -> bytes: - return orjson.dumps(content, option=orjson.OPT_INDENT_2 | orjson.OPT_NON_STR_KEYS) # type: ignore + return orjson.dumps(content, option=orjson.OPT_INDENT_2 | orjson.OPT_NON_STR_KEYS) # pylint: disable=maybe-no-member app = FastAPI( diff --git a/nomad/app/v1/models/__init__.py b/nomad/app/v1/models/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..200463096a98bddba40c6e9093ffbaf93f20e51e --- /dev/null +++ b/nomad/app/v1/models/__init__.py @@ -0,0 +1,47 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +from .models import ( + Aggregation, + Any_, + Direction, + Files, + files_parameters, + HTTPExceptionModel, + Metadata, + metadata_pagination_parameters, + metadata_required_parameters, + MetadataEditRequest, + MetadataPagination, + MetadataRequired, + MetadataResponse, + Owner, + Pagination, + PaginationResponse, + Query, + QueryParameters, + restrict_query_to_upload, + StatisticsAggregation, + User, + WithQuery, + TermsAggregation, + WithQueryAndPagination, + AggregationPagination, + query_documentation, + owner_documentation, +) diff --git a/nomad/app/v1/models/graph/__init__.py b/nomad/app/v1/models/graph/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..ca5c0a8a443fd095dabbaac6c5399b488c1c5f06 --- /dev/null +++ b/nomad/app/v1/models/graph/__init__.py @@ -0,0 +1,19 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +from .graph_models import GraphRequest, GraphResponse diff --git a/nomad/app/v1/models/graph/__main__.py b/nomad/app/v1/models/graph/__main__.py new file mode 100644 index 0000000000000000000000000000000000000000..af00902a37519f881e8f201004068eb4988cb608 --- /dev/null +++ b/nomad/app/v1/models/graph/__main__.py @@ -0,0 +1,7 @@ +import sys + +module_prefix = "nomad.app.v1.models.graph" + +setattr(sys.modules[f"{module_prefix}.utils"], "ref_prefix", "#/definitions") +model = getattr(sys.modules[f"{module_prefix}.graph_models"], sys.argv[1]) +print(model.schema_json(indent=2)) diff --git a/nomad/app/v1/models/graph/graph_models.py b/nomad/app/v1/models/graph/graph_models.py new file mode 100644 index 0000000000000000000000000000000000000000..c1984f0f44f4cb6039dc15608425a1f0a781d5c7 --- /dev/null +++ b/nomad/app/v1/models/graph/graph_models.py @@ -0,0 +1,247 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +from __future__ import annotations +from typing import Optional, List, Union, Any, Literal +from pydantic import BaseModel, Field, Extra + +from nomad.graph.model import RequestConfig, DatasetQuery +from nomad.metainfo.pydantic_extension import PydanticModel +from nomad.datamodel.data import User as UserModel +from nomad.app.v1.models.models import ( + Metadata, + MetadataResponse +) +from nomad.app.v1.routers.datasets import ( + Dataset as DatasetV1, + DatasetPagination +) +from nomad.app.v1.routers.uploads import ( + UploadProcData, + UploadProcDataPagination, + UploadProcDataQuery, + PaginationResponse, + EntryProcData, + EntryProcDataPagination +) + +from nomad.app.v1.models.graph.utils import ( + generate_request_model, + generate_response_model, + mapped +) + + +class Error(BaseModel): + error_type: str + message: str + + +RecursionOptions = RequestConfig + +DirectoryRequestOptions = RequestConfig + + +class DirectoryResponseOptions(BaseModel): + pagination: PaginationResponse + + +class Directory(BaseModel): + m_errors: List[Error] + m_is: Literal['Directory'] + m_request: DirectoryRequestOptions + m_response: DirectoryResponseOptions + m_children: Union[Directory, File] + + +class File(BaseModel): + m_errors: List[Error] + m_is: Literal['File'] + m_request: DirectoryRequestOptions + path: str + size: int + entry: Optional[Entry] + # The old API also had those, but they can be grabbed from entry: + # parser_name, entry_id, archive + # This is similar to the question for "m_parent" in Directory. At least we need + # to navigate from Entry to mainfile to directory, but we could also but a + # mainfile_directory into Entry? + parent: Directory + + +# class MetainfoObjectRequestOptions(BaseModel): +# # Other options and filters for recursing through sections, sub-sections, etc. +# # RecursionOptions could be further specialized. +# # Do we need pagination in certain cases? +# include_sub_sections: Optional[RecursionOptions] +# include_m_def: Optional[RecursionOptions] +# include_references: Optional[RecursionOptions] + + +class MValue(BaseModel): + m_errors: List[Error] + m_is: Literal['MValue'] + value: Any + ref_value: Union[MSection, MValue] + path_value: Union[Directory, File] + + +class MSection(BaseModel): + m_errors: List[Error] + m_is: Literal['MSection'] + m_request: RecursionOptions + # TODO we do not have special models for definitions yet. + m_def: MSection + m_children: Union[MSection, MValue] + + +class Entry(mapped(EntryProcData, mainfile="mainfile_path", entry_metadata=None)): # type: ignore + m_errors: List[Error] + mainfile: File + upload: Upload + archive: MSection + metadata: EntryMetadata + + +class EntriesRequestOptions(BaseModel): + # The old API does not support any queries + pagination: Optional[EntryProcDataPagination] + + +class EntriesResponseOptions(BaseModel): + pagination: Optional[PaginationResponse] + # The "upload" was only necessary, because in the old API you would not get the upload. + # In the graph API, the upload would be the parent anyways + # upload: Upload + + +class Entries(BaseModel): + m_request: EntriesRequestOptions + m_response: EntriesResponseOptions + m_children: Entry + + +class User( + UserModel.m_def.m_get_annotation(PydanticModel).model, # type: ignore + extra=Extra.forbid +): + # This is more complicated as the user can have different roles in different uploads. + # This would only refer to uploads with the user as main_author. + # For many clients and use-cases uploads.m_request.query will be the + # more generic or only option + uploads: Optional[Uploads] + datasets: Optional[Datasets] + + +class Users(BaseModel): + m_errors: List[Error] + m_children: User + + +class Upload( + mapped( # type: ignore + UploadProcData, + entries="n_entries", + main_author=User, + coauthors=List[User], + reviewers=List[User], + viewers=List[User], + writers=List[User], + ), + extra=Extra.forbid +): + # The old API includes some extra data here: + processing_successful: int = Field( + description='Number of entries that has been processed successfully.') + processing_failed: int = Field( + description='Number of entries that failed to process.') + + entries: Entries = Field(description="The entries contained in this upload.") + files: Directory = Field( + description="This upload's root directory for all files (raw data)." + ) + + +class UploadRequestOptions(BaseModel): + pagination: Optional[UploadProcDataPagination] + query: Optional[UploadProcDataQuery] + + +class UploadResponseOptions(BaseModel): + pagination: Optional[PaginationResponse] + query: Optional[UploadProcDataQuery] + + +class Uploads(BaseModel): + m_request: UploadRequestOptions + m_response: UploadResponseOptions + m_errors: List[Error] + m_children: Upload + + +class EntryMetadata(BaseModel, extra=Extra.allow): + entry: Entry + + +class SearchRequestOptions(BaseModel): + query: Optional[Metadata] + + +class SearchResponseOptions(BaseModel): + query: Optional[MetadataResponse] + + +class Search(BaseModel): + m_request: SearchRequestOptions + m_response: SearchResponseOptions + m_errors: List[Error] + m_children: EntryMetadata + + +class Dataset(mapped(DatasetV1, query=None, entries=None)): # type: ignore + pass + + +class DatasetRequestOptions(BaseModel): + pagination: Optional[DatasetPagination] + query: Optional[DatasetQuery] + + +class DatasetResponseOptions(BaseModel): + pagination: Optional[PaginationResponse] + query: Optional[DatasetQuery] + + +class Datasets(BaseModel): + m_request: DatasetRequestOptions + m_response: DatasetResponseOptions + m_errors: List[Error] + m_children: Dataset + + +class Graph(BaseModel): + users: Users + entries: Entries + uploads: Uploads + datasets: Datasets + search: Search + metainfo: MSection + + +GraphRequest = generate_request_model(Graph) +GraphResponse = generate_response_model(Graph) diff --git a/nomad/app/v1/models/graph/utils.py b/nomad/app/v1/models/graph/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..ded40453e20caa5fdf5a9f378058db3526c2c430 --- /dev/null +++ b/nomad/app/v1/models/graph/utils.py @@ -0,0 +1,348 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +from __future__ import annotations +from typing import ( + Dict, + List, + Optional, + Type, + Literal, + Union, + Any, + Callable, + ForwardRef, + get_type_hints, + get_origin, + get_args, + cast, +) +from datetime import datetime +from pydantic import ( + BaseModel, + BaseConfig, + create_model, + Extra, + Field, + root_validator, + ValidationError, + parse_obj_as, +) +from pydantic.error_wrappers import ErrorWrapper +from pydantic.typing import evaluate_forwardref +from pydantic.config import inherit_config +import sys + + +ref_prefix = "#/components/schemas" +request_suffix = "Request" +response_suffix = "Response" + + +class _DictModel(BaseModel): + @classmethod + def process_extra(cls, values): + m_children = values.setdefault("m_children", {}) + type_ = cls.__fields__["m_children"].type_ + for name in list(values): + if name not in cls.__fields__: + value = values[name] + values.pop(name) + try: + m_children[name] = parse_obj_as(type_, value) + except ValidationError as exc: + # m_children is always a Union and the last possible type is + # Literal['*']. Respectively the last validation errors comes from + # this type. It is usually confusing and not helpful to the user. + # Therefore, we pop it. + if len(exc.raw_errors) > 1: + exc.raw_errors.pop() # pylint: disable=no-member + raise ValidationError([ErrorWrapper(exc, loc=name)], cls) + + return values + + class Config: + extra = Extra.allow + + @staticmethod + def schema_extra(schema: dict[str, Any], model: Type[_DictModel]) -> None: + if "m_children" not in model.__annotations__: + raise TypeError( + f"No m_children field defined for dict model {model.__name__}. " + ) + children_annotation = model.__annotations__["m_children"] + value_type = get_args(get_args(children_annotation)[0])[1] + if value_type is None: + raise TypeError( + f"Could not determine m_children's type. Did you miss to call update_forward_refs()?" + ) + + if get_origin(value_type) == Union: + value_types = get_args(value_type) + else: + value_types = (value_type,) + + types = [] + for value_type in value_types: + if isinstance(value_type, ForwardRef): + value_type = value_type.__forward_value__ + + if value_type == Literal["*"]: + types.append({"enum": ["*"], "type": "string"}) + else: + types.append({"$ref": f"{ref_prefix}/{value_type.__name__}"}) + + if "properties" in schema: + for property in schema["properties"].values(): + if "$ref" in property: + types.append(property) + + schema["properties"].pop("m_children") + + schema["additionalProperties"] = {"anyOf": types} + + +def _get_request_type(type_hint: Any, ns: ModelNamespace) -> Any: + origin, args = get_origin(type_hint), get_args(type_hint) + + if origin is list or type_hint in [str, int, bool, datetime, Any]: + return Literal["*"] + + if origin is None and issubclass(type_hint, BaseModel): + return _generate_model(type_hint, request_suffix, _get_request_type, ns) + + if origin is dict: + key_type, value_type = args + return Dict[key_type, _get_request_type(value_type, ns)] # type: ignore + + # This is about Optional[T], which is translated to Union[None, T] + if origin is Union and len(args) == 2 and isinstance(None, args[1]): + return _get_request_type(args[0], ns) + + if origin is Union: + union_types = tuple(_get_request_type(type_, ns) for type_ in args) + return Union[union_types] # type: ignore + + raise NotImplementedError(type_hint) + + +def _get_response_type(type_hint: Any, ns: ModelNamespace) -> Any: + origin, args = get_origin(type_hint), get_args(type_hint) + if type_hint in [str, int, bool, datetime, Any]: + return type_hint + + if origin is None and issubclass(type_hint, BaseModel): + return _generate_model(type_hint, response_suffix, _get_response_type, ns) + + if origin is list: + value_type = args[0] + return List[_get_response_type(value_type, ns)] # type: ignore + + if origin is dict: + key_type, value_type = args + # TODO is this really necessary? + if value_type == type_hint: + # We have detected direct type recursion, like in + # Path = Dict[str, 'Path'] + return type_hint + return Dict[key_type, _get_response_type(value_type, ns)] # type: ignore + + # This is about Optional[T], which is translated to Union[None, T] + if origin is Union and len(args) == 2 and isinstance(None, args[1]): + return _get_response_type(args[0], ns) + + if origin is Union: + union_types = tuple(_get_response_type(type_, ns) for type_ in args) + return Union[union_types] # type: ignore + + raise NotImplementedError(type_hint) + + +ModelNamespace = Dict[str, Union[Type[BaseModel], ForwardRef]] + + +def _generate_model( + source_model: Type[BaseModel], + suffix: str, + generate_type: Callable[[type, ModelNamespace], type], + ns: ModelNamespace, + **kwargs, +): + # We need to populate a forward ref for the model in the ns use it in recursion cases. + result_model_name = f"{source_model.__name__}{suffix}" + is_ns_origin = len(ns) == 0 + if result_model_name not in ns: + ns[result_model_name] = ForwardRef(result_model_name) + else: + return ns[result_model_name] + + type_hints = get_type_hints(source_model) + fields = dict(**kwargs) + + for field_name, type_hint in type_hints.items(): + + if field_name.startswith("__"): + continue + + if field_name == "m_children": + origin, args = get_origin(type_hint), get_args(type_hint) + if origin is Union: + types = args + else: + types = (type_hint,) + if not all(isinstance(type_, type) and issubclass(type_, BaseModel) for type_ in types): + raise TypeError( + "Only Pydantic model classes (or Unions thereof) are supported as m_children types." + ) + value_types = tuple(_generate_model(type_, suffix, generate_type, ns) for type_ in types) + # TODO we always add Literal['*'] at the end. Maybe it should be configurable + # which models want to support '*' values for their children? + value_type = Union[value_types + (Literal['*'],)] # type: ignore + fields["m_children"] = (Optional[Dict[str, cast(Type, value_type)]], None) # type: ignore + continue + + if field_name == "m_request": + if suffix == request_suffix: + fields[field_name] = (Optional[type_hint], None) + continue + + if field_name == "m_response": + if suffix == response_suffix: + fields[field_name] = (Optional[type_hint], None) + continue + + if field_name == 'm_is': + fields[field_name] = (Optional[type_hint], None) + continue + + if field_name == 'm_errors': + if suffix == response_suffix: + fields[field_name] = (Optional[Union[type_hint]], None) # type: ignore + continue + + if field_name.startswith('m_') and field_name not in ['m_def']: + raise NotImplementedError(f'The internal field {field_name} is not implemented.') + + fields[field_name] = (Optional[generate_type(type_hint, ns)], None) + + config = source_model.__config__ + if config.extra == Extra.ignore and 'm_children' not in fields: + config = inherit_config( + type('Config', (BaseConfig,), dict(extra=Extra.forbid)), config + ) + + validators = {} + if 'm_children' in fields: + config = inherit_config(_DictModel.__config__, config) + if suffix == request_suffix: + validators = { + "process_extra": root_validator( # type: ignore + _DictModel.process_extra.__func__, pre=True, allow_reuse=True # type: ignore + ) + } + + result_model = create_model( + result_model_name, + __module__=source_model.__module__, + __validators__=validators, + __config__=config, + **fields, + ) + + # We need to replace the forward ref in the ns with the finished model. We also + # need to update all forward refs after the whole model has been created. + ns[result_model_name] = result_model + if is_ns_origin: + for model in ns.values(): + if isinstance(model, type): + model.update_forward_refs(**ns) + # There is a bug in pydantics BaseModel.update_forward_refs and it does not + # recognize forward refs in Union types. Therefore we do our own impl. + # https://github.com/pydantic/pydantic/issues/3345 + for field in model.__fields__.values(): + if get_origin(field.type_) is Union: + union_types = tuple( + evaluate_forwardref(type_, {}, ns) if type_.__class__ == ForwardRef else type_ + for type_ in get_args(field.type_) + ) + field.type_ = Union[union_types] # type: ignore + + assert getattr(sys.modules[source_model.__module__], result_model_name, result_model) == result_model, \ + f'Model class with name {result_model_name} already exists.' + setattr(sys.modules[source_model.__module__], result_model_name, result_model) + + return result_model + + +def mapped( + model: Type[BaseModel], **mapping: Union[str, type] +) -> Type[BaseModel]: + """ + Creates a new pydantic model based on the given model. The mapping argument allows + to either change the name of a field in the input model or change the type of a field + in the given input model or remove the field. + + Arguments: + model: the input model. + **kwargs: field names and either the new field name or the new field type or + None to remove the field. + + Returns: + a pydantic model with the mapped field and the same base as the input model + """ + + def create_field(field_info): + return Field( + default=field_info.default, + alias=field_info.alias, + title=field_info.title, + description=field_info.description, + ) + + fields = {} + for name, field in model.__fields__.items(): + if name not in mapping: + fields[name] = (field.type_, create_field(field.field_info)) + continue + + new_name_or_type_ = mapping[name] + old_field = model.__fields__[name] + + if new_name_or_type_ is None: + continue + + if isinstance(new_name_or_type_, str): + new_name = new_name_or_type_ + type_ = old_field.type_ + else: + new_name = name + type_ = new_name_or_type_ + + fields[new_name] = (type_, create_field(old_field.field_info)) + + return create_model( # type: ignore + model.__name__, **fields, __module__=model.__module__, __base__=model.__base__ + ) + + +def generate_request_model(source_model: Type[BaseModel]): + return _generate_model(source_model, request_suffix, _get_request_type, dict()) + + +def generate_response_model(source_model: Type[BaseModel]): + return _generate_model(source_model, response_suffix, _get_response_type, dict()) diff --git a/nomad/app/v1/models.py b/nomad/app/v1/models/models.py similarity index 95% rename from nomad/app/v1/models.py rename to nomad/app/v1/models/models.py index 33b7f06b27a2ef5cc38b27f0439465b9a1544b2b..fbba415895fb405932f00936da7e5b35a3b80d2c 100644 --- a/nomad/app/v1/models.py +++ b/nomad/app/v1/models/models.py @@ -42,7 +42,7 @@ from nomad.utils import strip from nomad.metainfo import Datetime, MEnum from nomad.metainfo.elasticsearch_extension import DocumentType, material_entry_type, material_type -from .utils import parameter_dependency_from_model, update_url_query_arguments +from nomad.app.v1.utils import parameter_dependency_from_model, update_url_query_arguments User: Any = datamodel.User.m_def.a_pydantic.model @@ -54,12 +54,12 @@ ComparableValue = Union[StrictInt, StrictFloat, str, datetime.datetime] owner_documentation = strip(''' The `owner` allows to limit the scope of the searched based on entry ownership. -This is useful, if you only want to search among all publically downloadable +This is useful, if you only want to search among all publicly downloadable entries, or only among your own entries, etc. These are the possible owner values and their meaning: -* `public`: Consider all entries that can be publically downloaded, i.e. only published entries without embargo. +* `public`: Consider all entries that can be publicly downloaded, i.e. only published entries without embargo. * `user`: Only consider entries that belong to you. * `shared`: Only consider entries that belong to you or are shared with you. * `visible`: Consider all entries that are visible to you. This includes @@ -331,15 +331,19 @@ class WithQuery(BaseModel): def validate_query(cls, query): # pylint: disable=no-self-argument return _validate_query(query) + class Config: + use_enum_values = True + def _validate_criteria_value(name: str, value: CriteriaValue): if ':' in name: - quantity, qualifier = name.split(':') + quantity, qualifier = name.rsplit(':', 1) + if qualifier not in ops: + quantity, qualifier = name, None else: quantity, qualifier = name, None if qualifier is not None: - assert qualifier in ops, 'unknown quantity qualifier %s' % qualifier return quantity, ops[qualifier](**{qualifier: value}) # type: ignore elif isinstance(value, list): return quantity, All(all=value) @@ -544,11 +548,14 @@ class Pagination(BaseModel): **NOTE #1**: the option to request pages by submitting the `page_offset` number is limited. There are api calls where this attribute cannot be used for indexing, or where it can only be used partially. **If you want to just iterate through - all the results, aways use the `page_after_value` and `next_page_after_value`!** + all the results, always use the `page_after_value` and `next_page_after_value`!** **NOTE #2**: Only one, `page`, `page_offset` or `page_after_value`, can be used. ''')) + class Config: + use_enum_values = True + @validator('page_size') def validate_page_size(cls, page_size): # pylint: disable=no-self-argument assert page_size >= 0, 'page_size must be >= 0' @@ -622,6 +629,39 @@ class Pagination(BaseModel): return rv return 0 + def order_result(self, result): + ''' + Override this in your Pagination class to implement ordering of the results. + This method has to be implemented! + ''' + raise NotImplementedError('Ordering of results not implemented!') + + def paginate_result(self, result, pick_value): + ''' + Override this in your Pagination class to implement pagination of the results. + This method has to be implemented! + ''' + if self.page is not None: + start = (self.page - 1) * self.page_size + end = start + self.page_size + elif self.page_offset is not None: + start = self.page_offset + end = start + self.page_size + elif self.page_after_value is not None: + start = 0 + for index, item in enumerate(result): + if pick_value(item) == self.page_after_value: + start = index + 1 + break + end = start + self.page_size + else: + start, end = 0, self.page_size + + total_size = result.count() + first, last = min(start, total_size), min(end, total_size) + + return [] if first == last else result[first:last] + class PaginationResponse(Pagination): total: int = Field( @@ -707,7 +747,7 @@ class PaginationResponse(Pagination): if self.page < 1 or ( self.total == 0 and self.page != 1) or ( - self.total > 0 and (self.page - 1) * self.page_size >= self.total): + 0 < self.total <= (self.page - 1) * self.page_size): raise HTTPException(400, detail='Page out of range requested.') if request.method.upper() == 'GET': self.populate_urls(request) @@ -765,10 +805,14 @@ class MetadataPagination(MetadataBasedPagination): def validate_page_offset(cls, page_offset, values): # pylint: disable=no-self-argument if page_offset is not None: assert page_offset >= 0, 'Page offset has to be larger than 0.' - assert page_offset + values.get('page_size', 10) < 10000, 'Page offset plus page size has to be smaller thant 10.0000.' + assert page_offset + values.get( + 'page_size', 10) < 10000, 'Page offset plus page size has to be smaller thant 10.0000.' return page_offset + def order_result(self, result): + return result + metadata_pagination_parameters = parameter_dependency_from_model( 'metadata_pagination_parameters', MetadataPagination) @@ -822,7 +866,7 @@ class AggregationBase(BaseModel): class QuantityAggregation(AggregationBase): quantity: str = Field( ..., description=strip(''' - The manatory name of the quantity for the aggregation. Aggregations + The mandatory name of the quantity for the aggregation. Aggregations can only be computed for those search metadata that have discrete values; an aggregation buckets entries that have the same value for this quantity.''')) exclude_from_search: bool = Field( @@ -863,7 +907,7 @@ class TermsAggregation(BucketAggregation): ''')) size: Optional[pydantic.conint(gt=0)] = Field( # type: ignore None, description=strip(''' - The ammount of aggregation values is limited. This allows you to configure the + The amount of aggregation values is limited. This allows you to configure the maximum number of aggregated values to return. If you need to exaust all possible value, use `pagination`. ''')) @@ -883,11 +927,11 @@ class TermsAggregation(BucketAggregation): class Bounds(BaseModel): - min: float = Field( + min: Optional[float] = Field( description=strip(''' Start value for the histogram. ''')) - max: float = Field( + max: Optional[float] = Field( description=strip(''' Ending value for the histogram. ''')) @@ -896,8 +940,9 @@ class Bounds(BaseModel): def check_order(cls, values): # pylint: disable=no-self-argument min = values.get('min') max = values.get('max') - if min > max: - raise ValueError('The maximum value should be greater than the minimum value.') + if min is not None and max is not None: + if min > max: + raise ValueError('The maximum value should be greater than the minimum value.') return values diff --git a/nomad/app/v1/routers/auth.py b/nomad/app/v1/routers/auth.py index f5c88d6e6a47419e70ae8c7d05a9431ae58b120b..3ac1c9467115cad27a6606c2eb15df979f500077 100644 --- a/nomad/app/v1/routers/auth.py +++ b/nomad/app/v1/routers/auth.py @@ -20,7 +20,7 @@ import hmac import hashlib import uuid import requests -from typing import Callable, cast +from typing import Callable, cast, Union from inspect import Parameter, signature from functools import wraps from fastapi import APIRouter, Depends, Query as FastApiQuery, Request, HTTPException, status @@ -51,6 +51,10 @@ class SignatureToken(BaseModel): signature_token: str +class AppToken(BaseModel): + app_token: str + + oauth2_scheme = OAuth2PasswordBearer(tokenUrl=f'{root_path}/auth/token', auto_error=False) @@ -64,7 +68,6 @@ def create_user_dependency( Creates a dependency for getting the authenticated user. The parameters define if the authentication is required or not, and which authentication methods are allowed. ''' - def user_dependency(**kwargs) -> User: user = None if basic_auth_allowed: @@ -75,6 +78,8 @@ def create_user_dependency( user = _get_user_upload_token_auth(kwargs.get('token')) if not user and signature_token_auth_allowed: user = _get_user_signature_token_auth(kwargs.get('signature_token'), kwargs.get('request')) + if config.tests.assume_auth_for_username: + user = datamodel.User.get(username=config.tests.assume_auth_for_username) if required and not user: raise HTTPException( @@ -180,17 +185,26 @@ def _get_user_basic_auth(form_data: OAuth2PasswordRequestForm) -> User: def _get_user_bearer_token_auth(bearer_token: str) -> User: ''' Verifies bearer_token (throwing exception if illegal value provided) and returns the - corresponding user object, or None, if no bearer_token provided. + corresponding user object, or None if no bearer_token provided. ''' - if bearer_token: - try: - user = cast(datamodel.User, infrastructure.keycloak.tokenauth(bearer_token)) + if not bearer_token: + return None + + try: + unverified_payload = jwt.decode(bearer_token, options={"verify_signature": False}) + if unverified_payload.keys() == set(['user', 'exp']): + user = _get_user_from_simple_token(bearer_token) return user - except infrastructure.KeycloakError as e: - raise HTTPException( - status_code=status.HTTP_401_UNAUTHORIZED, - detail=str(e), headers={'WWW-Authenticate': 'Bearer'}) - return None + except jwt.exceptions.DecodeError: + pass # token could be non-JWT, e.g. for testing + + try: + user = cast(datamodel.User, infrastructure.keycloak.tokenauth(bearer_token)) + return user + except infrastructure.KeycloakError as e: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail=str(e), headers={'WWW-Authenticate': 'Bearer'}) def _get_user_upload_token_auth(upload_token: str) -> User: @@ -227,21 +241,8 @@ def _get_user_signature_token_auth(signature_token: str, request: Request) -> Us corresponding user object, or None, if no upload_token provided. ''' if signature_token: - try: - decoded = jwt.decode(signature_token, config.services.api_secret, algorithms=['HS256']) - return datamodel.User.get(user_id=decoded['user']) - except KeyError: - raise HTTPException( - status_code=status.HTTP_401_UNAUTHORIZED, - detail='Token with invalid/unexpected payload.') - except jwt.ExpiredSignatureError: - raise HTTPException( - status_code=status.HTTP_401_UNAUTHORIZED, - detail='Expired token.') - except jwt.InvalidTokenError: - raise HTTPException( - status_code=status.HTTP_401_UNAUTHORIZED, - detail='Invalid token.') + user = _get_user_from_simple_token(signature_token) + return user elif request: auth_cookie = request.cookies.get('Authorization') if auth_cookie: @@ -261,6 +262,28 @@ def _get_user_signature_token_auth(signature_token: str, request: Request) -> Us return None +def _get_user_from_simple_token(token): + ''' + Verifies a simple token (throwing exception if illegal value provided) and returns the + corresponding user object, or None if no token was provided. + ''' + try: + decoded = jwt.decode(token, config.services.api_secret, algorithms=['HS256']) + return datamodel.User.get(user_id=decoded['user']) + except KeyError: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail='Token with invalid/unexpected payload.') + except jwt.ExpiredSignatureError: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail='Expired token.') + except jwt.InvalidTokenError: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail='Invalid token.') + + _bad_credentials_response = status.HTTP_401_UNAUTHORIZED, { 'model': HTTPExceptionModel, 'description': strip(''' @@ -287,7 +310,6 @@ async def get_token(form_data: OAuth2PasswordRequestForm = Depends()): You only need to provide `username` and `password` values. You can ignore the other parameters. ''' - try: access_token = infrastructure.keycloak.basicauth( form_data.username, form_data.password) @@ -311,7 +333,6 @@ async def get_token_via_query(username: str, password: str): This is an convenience alternative to the **POST** version of this operation. It allows you to retrieve an *access token* by providing username and password. ''' - try: access_token = infrastructure.keycloak.basicauth(username, password) except infrastructure.KeycloakError: @@ -328,21 +349,51 @@ async def get_token_via_query(username: str, password: str): tags=[default_tag], summary='Get a signature token', response_model=SignatureToken) -async def get_signature_token(user: User = Depends(create_user_dependency())): +async def get_signature_token( + user: Union[User, None] = Depends(create_user_dependency(required=True))): ''' Generates and returns a signature token for the authenticated user. Authentication has to be provided with another method, e.g. access token. ''' + signature_token = generate_simple_token(user.user_id, expires_in=10) + return {'signature_token': signature_token} - expires_at = datetime.datetime.utcnow() + datetime.timedelta(seconds=10) - signature_token = jwt.encode( - dict(user=user.user_id, exp=expires_at), - config.services.api_secret, 'HS256') - return {'signature_token': signature_token} +@router.get( + '/app_token', + tags=[default_tag], + summary='Get an app token', + response_model=AppToken) +async def get_app_token( + expires_in: int = FastApiQuery(gt=0, le=config.services.app_token_max_expires_in), + user: User = Depends(create_user_dependency(required=True))): + ''' + Generates and returns an app token with the requested expiration time for the + authenticated user. Authentication has to be provided with another method, + e.g. access token. + + This app token can be used like the access token (see `/auth/token`) on subsequent API + calls to authenticate you using the HTTP header `Authorization: Bearer <app token>`. + It is provided for user convenience as a shorter token with a user-defined (probably + longer) expiration time than the access token. + ''' + app_token = generate_simple_token(user.user_id, expires_in) + return {'app_token': app_token} + + +def generate_simple_token(user_id, expires_in: int): + ''' + Generates and returns JWT encoding just user_id and expiration time, signed with the + API secret. + ''' + expires_at = datetime.datetime.utcnow() + datetime.timedelta(seconds=expires_in) + payload = dict(user=user_id, exp=expires_at) + token = jwt.encode(payload, config.services.api_secret, 'HS256') + return token def generate_upload_token(user): + '''Generates and returns upload token for user.''' payload = uuid.UUID(user.user_id).bytes signature = hmac.new( bytes(config.services.api_secret, 'utf-8'), diff --git a/nomad/app/v1/routers/datasets.py b/nomad/app/v1/routers/datasets.py index 0eff61b250093dc748f6aa4ec04c6f09fce426bf..8765ee488fbe69d43c71261391f09b717a3c391a 100644 --- a/nomad/app/v1/routers/datasets.py +++ b/nomad/app/v1/routers/datasets.py @@ -139,7 +139,8 @@ class DatasetPagination(Pagination): def validate_order_by(cls, order_by): # pylint: disable=no-self-argument if order_by is None: return order_by - assert order_by in ('dataset_create_time', 'dataset_modified_time', 'dataset_name'), 'order_by must be a valid attribute' + assert order_by in ( + 'dataset_create_time', 'dataset_modified_time', 'dataset_name'), 'order_by must be a valid attribute' return order_by @validator('page_after_value') @@ -147,6 +148,19 @@ class DatasetPagination(Pagination): # Validation handled elsewhere return page_after_value + def order_result(self, result): + if self.order_by is None: + return result + + prefix: str = '-' if self.order == Direction.desc else '+' + order_list: list = [f'{prefix}{self.order_by}'] + if self.order_by == 'dataset_create_time': + order_list.append('dataset_id') + else: + order_list.extend(['dataset_create_time', 'dataset_id']) + + return result.order_by(*order_list) + dataset_pagination_parameters = parameter_dependency_from_model( 'dataset_pagination_parameters', DatasetPagination) @@ -199,16 +213,7 @@ async def get_datasets( query_params.update(dataset_name=re.compile('^%s.*' % prefix, re.IGNORECASE)) # type: ignore query_params = {k: v for k, v in query_params.items() if v is not None} - mongodb_query = mongodb_objects(**query_params) - - order_by = pagination.order_by - order_by_with_sign = order_by if pagination.order == Direction.asc else '-' + order_by - if order_by == 'dataset_create_time': - order_by_args = [order_by_with_sign, 'dataset_id'] # Use upload_id as tie breaker - else: - order_by_args = [order_by_with_sign, 'dataset_create_time', 'dataset_id'] - - mongodb_query = mongodb_query.order_by(*order_by_args) + mongodb_query = pagination.order_result(mongodb_objects(**query_params)) start = pagination.get_simple_index() end = start + pagination.page_size diff --git a/nomad/app/v1/routers/entries.py b/nomad/app/v1/routers/entries.py index 0e5f5d1338e1d16b286518ce1e8783d471abcaaa..c8a50a4ae632df770e720d84d7196278a52ffc66 100644 --- a/nomad/app/v1/routers/entries.py +++ b/nomad/app/v1/routers/entries.py @@ -852,8 +852,8 @@ def _answer_entries_archive_download_request( try: archive_data = _read_archive(entry_metadata, uploads, required_reader) - f = io.BytesIO(orjson.dumps( - archive_data, option=orjson.OPT_INDENT_2 | orjson.OPT_NON_STR_KEYS)) + f = io.BytesIO(orjson.dumps( # pylint: disable=maybe-no-member + archive_data, option=orjson.OPT_INDENT_2 | orjson.OPT_NON_STR_KEYS)) # pylint: disable=maybe-no-member yield StreamedFile(path=path, f=f, size=f.getbuffer().nbytes) except KeyError as e: diff --git a/nomad/app/v1/routers/graph.py b/nomad/app/v1/routers/graph.py index e7ddce38c977d70a08b5313b5bac5834ad13ce2e..001ed6a27b81849b10701ceeab810f535cee8dba 100644 --- a/nomad/app/v1/routers/graph.py +++ b/nomad/app/v1/routers/graph.py @@ -18,40 +18,70 @@ from fastapi import Depends, APIRouter, Body, HTTPException -from nomad.archive.query_reader import MongoReader, ConfigError, GeneralReader, UserReader +from nomad.graph.graph_reader import MongoReader, ConfigError, GeneralReader, UserReader, Token from .auth import create_user_dependency from .entries import EntriesArchive from ..models import User +from nomad.app.v1.models.graph import GraphRequest, GraphResponse router = APIRouter() default_tag = 'graph' -def normalise_response(query, response): +def normalise_response(response): if GeneralReader.__CACHE__ in response: del response[GeneralReader.__CACHE__] - if query: - return {'query': query, 'm_response': response} + return reorder_children(response) - return {'m_response': response} + +def relocate_children(request): + if not isinstance(request, dict) or not request: + return + request.update(request.pop('m_children', {})) + for child in request.values(): + relocate_children(child) + + +def reorder_children(query): + if not isinstance(query, dict): + return query + return {k: reorder_children(v) for k, v in sorted(query.items(), key=lambda item: item[0])} + + +@router.post( + '/raw_query', + tags=[default_tag], + summary='Query the database with a graph style without verification.', + description='Query the database with a graph style without verification.', +) +async def raw_query(query=Body(...), user: User = Depends(create_user_dependency(required=True))): + relocate_children(query) + with MongoReader(query, user=user) as reader: + return normalise_response(reader.read()) @router.post( '/query', tags=[default_tag], summary='Query the database with a graph style.', - description='Query the database with a graph style.') -async def basic_query(query: dict = Body(...), user: User = Depends(create_user_dependency(required=True))): + description='Query the database with a graph style.', + response_model=GraphResponse, + response_model_exclude_unset=True, + response_model_exclude_none=True, +) +async def basic_query(query: GraphRequest = Body(...), user: User = Depends(create_user_dependency(required=True))): try: - with MongoReader(query, user=user) as reader: + query_dict = query.dict(exclude_none=True, exclude_unset=True, exclude_defaults=True) + relocate_children(query_dict) + with MongoReader(query_dict, user=user) as reader: response: dict = reader.read() except ConfigError as e: raise HTTPException(400, detail=str(e)) except Exception as e: raise HTTPException(422, detail=str(e)) - return normalise_response(query, response) + return normalise_response(response) @router.post( @@ -63,23 +93,25 @@ async def archive_query( data: EntriesArchive, user: User = Depends(create_user_dependency()) ): - graph_dict: dict = {'m_entries': {'m_request': {}}} - root_request: dict = graph_dict['m_entries']['m_request'] + graph_dict: dict = {Token.SEARCH: {'m_request': {'query': {}}}} + root_request: dict = graph_dict[Token.SEARCH]['m_request']['query'] if data.pagination: root_request['pagination'] = data.pagination if data.query: root_request['query'] = data.query + if data.owner: + root_request['owner'] = data.owner if data.required is None: - root_request['directive'] = 'plain' + graph_dict[Token.SEARCH]['m_request']['directive'] = 'plain' else: - graph_dict['m_entries']['*'] = {'m_archive': data.required} + graph_dict[Token.SEARCH]['*'] = {Token.ENTRIES: {Token.ARCHIVE: data.required}} if not root_request: - del graph_dict['m_entries']['m_request'] + del graph_dict[Token.SEARCH]['m_request']['query'] with UserReader(graph_dict, user=user) as reader: response: dict = reader.read(user.user_id) - return normalise_response(data.query, response) + return normalise_response(response) diff --git a/nomad/app/v1/routers/north.py b/nomad/app/v1/routers/north.py index 86ea446958bd560295b94a5581b0bc5a02b48d0f..4881afa75065f56bde4042351a8fdedf06d4e44a 100644 --- a/nomad/app/v1/routers/north.py +++ b/nomad/app/v1/routers/north.py @@ -197,6 +197,16 @@ async def start_tool( } ) + external_mounts: List[Dict[str, str]] = [] + for ext_mount in tool.external_mounts: + external_mounts.append( + { + 'host_path': ext_mount.host_path, + 'bind': os.path.join(tool.mount_path, ext_mount.bind), + 'mode': ext_mount.mode, + } + ) + # Check if the tool/named server already exists _get_status(tool, user) if tool.state != ToolStateEnum.stopped: @@ -220,7 +230,8 @@ async def start_tool( 'host_path': os.path.join(config.fs.north_home_external, user.user_id), 'mount_path': os.path.join(tool.mount_path, 'work') }, - 'uploads': uploads + 'uploads': uploads, + 'external_mounts': external_mounts, } logger.info('body of the post call', body=body) diff --git a/nomad/app/v1/routers/uploads.py b/nomad/app/v1/routers/uploads.py index 51dede6c967a085d1a4d5abf1060de3694dc65ad..19e28b30a092d8b5fd067638a694b19b85e6b015 100644 --- a/nomad/app/v1/routers/uploads.py +++ b/nomad/app/v1/routers/uploads.py @@ -18,6 +18,7 @@ import os import io import shutil +from enum import Enum from datetime import datetime from typing import Tuple, List, Set, Dict, Any, Optional, Union from pydantic import BaseModel, Field, validator @@ -57,6 +58,12 @@ bundle_tag = 'uploads/bundle' logger = utils.get_logger(__name__) +class UploadRole(str, Enum): + main_author = "main_author" + reviewer = "reviewer" + coauthor = "coauthor" + + class ProcData(BaseModel): process_running: bool = Field( description='If a process is running') @@ -141,7 +148,9 @@ class UploadProcDataPagination(Pagination): def validate_order_by(cls, order_by): # pylint: disable=no-self-argument if order_by is None: return 'upload_create_time' # Default value - assert order_by in ('upload_create_time', 'publish_time', 'upload_name', 'last_status_message'), 'order_by must be a valid attribute' + assert order_by in ( + 'upload_create_time', 'publish_time', 'upload_name', + 'last_status_message'), 'order_by must be a valid attribute' return order_by @validator('page_after_value') @@ -149,6 +158,19 @@ class UploadProcDataPagination(Pagination): # Validation handled elsewhere return page_after_value + def order_result(self, result): + if self.order_by is None: + return result + + prefix: str = '-' if self.order == Direction.desc else '+' + order_list: list = [f'{prefix}{self.order_by}'] + if self.order_by == 'upload_create_time': + order_list.append('upload_id') + else: + order_list.extend(['upload_create_time', 'upload_id']) + + return result.order_by(*order_list) + upload_proc_data_pagination_parameters = parameter_dependency_from_model( 'upload_proc_data_pagination_parameters', UploadProcDataPagination) @@ -159,7 +181,8 @@ class EntryProcDataPagination(Pagination): def validate_order_by(cls, order_by): # pylint: disable=no-self-argument if order_by is None: return 'mainfile' # Default value - assert order_by in ('mainfile', 'parser_name', 'process_status', 'current_process'), 'order_by must be a valid attribute' + assert order_by in ( + 'mainfile', 'parser_name', 'process_status', 'current_process'), 'order_by must be a valid attribute' return order_by @validator('page_after_value') @@ -167,6 +190,15 @@ class EntryProcDataPagination(Pagination): # Validation handled elsewhere return page_after_value + def order_result(self, result): + if self.order_by is None: + return result + + prefix: str = '-' if self.order == Direction.desc else '+' + order_list: list = [f'{prefix}{self.order_by}', 'entry_id'] + + return result.order_by(*order_list) + entry_proc_data_pagination_parameters = parameter_dependency_from_model( 'entry_proc_data_pagination_parameters', EntryProcDataPagination) @@ -195,6 +227,17 @@ class UploadProcDataQuery(BaseModel): If True: only include published uploads. If False: only include unpublished uploads. If unset: include everything.''')) + process_status: Optional[str] = Field( + description=strip('Search by the process status.')) + is_owned: Optional[bool] = Field( + description=strip(''' + If True: only include owned uploads. + If False: only include shared uploads. + If unset: include everything.''')) + + @validator('process_status') + def upper_process_status(cls, process_status: str): # pylint: disable=no-self-argument + return process_status.upper() if process_status else None upload_proc_data_query_parameters = parameter_dependency_from_model( @@ -444,6 +487,9 @@ async def get_command_examples(user: User = Depends(create_user_dependency(requi response_model_exclude_none=True) async def get_uploads( request: Request, + roles: List[UploadRole] = FastApiQuery( + None, + description='Only return uploads where the user has one of the given roles.'), query: UploadProcDataQuery = Depends(upload_proc_data_query_parameters), pagination: UploadProcDataPagination = Depends(upload_proc_data_pagination_parameters), user: User = Depends(create_user_dependency(required=True))): @@ -452,8 +498,19 @@ async def get_uploads( ''' # Build query mongo_query = Q() + user_id = str(user.user_id) - mongo_query &= Q(main_author=user_id) | Q(reviewers=user_id) | Q(coauthors=user_id) + if not roles: + role_query = Q(main_author=user_id) | Q(reviewers=user_id) | Q(coauthors=user_id) + else: + role_query = Q() + if UploadRole.main_author in roles: + role_query |= Q(main_author=user_id) + if UploadRole.coauthor in roles: + role_query |= Q(coauthors=user_id) + if UploadRole.reviewer in roles: + role_query |= Q(reviewers=user_id) + mongo_query &= role_query if query.upload_id: mongo_query &= Q(upload_id__in=query.upload_id) @@ -471,20 +528,12 @@ async def get_uploads( elif query.is_published is False: mongo_query &= Q(publish_time=None) - # Fetch data from DB - mongodb_query = Upload.objects.filter(mongo_query) # Create response start = pagination.get_simple_index() end = start + pagination.page_size - order_by = pagination.order_by - order_by_with_sign = order_by if pagination.order == Direction.asc else '-' + order_by - if order_by == 'upload_create_time': - order_by_args = [order_by_with_sign, 'upload_id'] # Use upload_id as tie breaker - else: - order_by_args = [order_by_with_sign, 'upload_create_time', 'upload_id'] - - mongodb_query = mongodb_query.order_by(*order_by_args) + # Fetch data from DB + mongodb_query = pagination.order_result(Upload.objects.filter(mongo_query)) data = [upload_to_pydantic(upload) for upload in mongodb_query[start:end]] diff --git a/nomad/archive/required.py b/nomad/archive/required.py index 42bb2d6cf26121ed6082856d5ecf9badc4c3d106..9724889fd21b21d4c5b21025db6799efe2fc9332 100644 --- a/nomad/archive/required.py +++ b/nomad/archive/required.py @@ -30,6 +30,7 @@ from nomad.metainfo import Definition, Section, Quantity, SubSection, Reference, Package from .query import ArchiveQueryError, to_json, _query_archive_key_pattern, _extract_key_and_index, _extract_child from .storage import ArchiveReader, ArchiveList, ArchiveError, ArchiveDict +from .storage_v2 import ArchiveDict as NewArchiveDict from ..datamodel.context import parse_path, ServerContext @@ -443,10 +444,13 @@ class RequiredReader: if archive_item is None: return None # type: ignore - archive_item = to_json(archive_item) result: dict = {} - if isinstance(archive_item, dict) and 'm_def' in archive_item: + # avoid the bug in the old reader that primitive key-value is not included in toc + if isinstance(archive_item, ArchiveDict): + archive_item = to_json(archive_item) + + if isinstance(archive_item, (dict, NewArchiveDict)) and 'm_def' in archive_item: dataset = dataset.replace(definition=self._resolve_definition( dataset.upload_id, archive_item['m_def'].split('@')[0], dataset.archive_root)) result['m_def'] = archive_item['m_def'] @@ -459,7 +463,7 @@ class RequiredReader: return self._resolve_refs(dataset.definition, archive_item, dataset) if directive in ['*', 'include']: - return archive_item + return to_json(archive_item) raise ArchiveQueryError(f'unknown directive {required}') diff --git a/nomad/archive/storage.py b/nomad/archive/storage.py index 1bfe497b3665afb15a84a715dd3e0e5ab96e4e63..be55df9db1a8047be9c89dde87937b899e4235ef 100644 --- a/nomad/archive/storage.py +++ b/nomad/archive/storage.py @@ -15,7 +15,6 @@ # See the License for the specific language governing permissions and # limitations under the License. # - from typing import Iterable, Any, Tuple, Dict, BinaryIO, Union, List, cast from io import BytesIO, BufferedReader from collections.abc import Mapping, Sequence @@ -464,7 +463,7 @@ class ArchiveReader(ArchiveDict): self._f.close() def is_closed(self): - return self._f.closed + return self._f.closed if isinstance(self._file_or_path, str) else True def write_archive( diff --git a/nomad/archive/storage_v2.py b/nomad/archive/storage_v2.py index fa2fa501a0dec26e12d295d77052312ba2bbf84d..788faa4bb4ed0182b687ad48392e73079f3eaaf0 100644 --- a/nomad/archive/storage_v2.py +++ b/nomad/archive/storage_v2.py @@ -673,7 +673,9 @@ class ArchiveReader(ArchiveItem): self._f.close() def is_closed(self): - return self._f.closed + # If the input is a BytesIO, it is assumed that the file is always closed + # If the input is a path, need to check if the file is closed + return self._f.closed if isinstance(self._file_or_path, str) else True def to_json(self): if self._full_cache is None: diff --git a/nomad/atomutils.py b/nomad/atomutils.py index fa60d67a52ec7012e931c540763bfa8fc4e1f0ca..fe4c2a629155f737661d6144d74102403369956a 100644 --- a/nomad/atomutils.py +++ b/nomad/atomutils.py @@ -51,6 +51,7 @@ import MDAnalysis.analysis.rdf as MDA_RDF from nomad.aflow_prototypes import aflow_prototypes from nomad.constants import atomic_masses from nomad.units import ureg +# from nomad.parsing.file_parser import Quantity valid_elements = set(ase.data.chemical_symbols[1:]) @@ -986,9 +987,11 @@ class Formula(): return ''.join(symb + (str(n) if n > 1 else '') for symb, n in dct.items()) -def create_empty_universe(n_atoms: int, n_frames: int = 1, n_residues: int = 1, n_segments: int = 1, - atom_resindex: NDArray[Int] = None, residue_segindex: NDArray[Int] = None, - flag_trajectory: bool = False, flag_velocities: bool = False, flag_forces: bool = False): +def create_empty_universe( + n_atoms: int, n_frames: int = 1, n_residues: int = 1, n_segments: int = 1, + atom_resindex: NDArray[Int] = None, residue_segindex: NDArray[Int] = None, + flag_trajectory: bool = False, flag_velocities: bool = False, flag_forces: bool = False, + timestep: float = None): '''Create a blank Universe This function was adapted from the function empty() within the MDA class Universe(). @@ -1075,7 +1078,7 @@ def create_empty_universe(n_atoms: int, n_frames: int = 1, n_residues: int = 1, # grab and attach a MemoryReader universe.trajectory = get_reader_for(coords)( coords, order='fac', n_atoms=n_atoms, - velocities=vels, forces=forces) + velocities=vels, forces=forces, dt=timestep) return universe @@ -1140,6 +1143,7 @@ def archive_to_universe(archive, system_index: int = 0, method_index: int = -1, sec_system_top = sec_run.system[system_index] sec_atoms = sec_system_top.atoms sec_atoms_group = sec_system_top.atoms_group + sec_calculation = sec_run.calculation sec_method = sec_run.method[method_index] if sec_run.get('method') is not None else None sec_force_field = sec_method.force_field if sec_method is not None else None sec_model = sec_force_field.model[model_index] if sec_force_field is not None else None @@ -1220,10 +1224,12 @@ def archive_to_universe(archive, system_index: int = 0, method_index: int = -1, mol_index_counter += n_res # get the atom masses and charges + masses = np.empty(n_atoms) charges = np.empty(n_atoms) atom_parameters = sec_method.get('atom_parameters') if sec_method is not None else [] atom_parameters = atom_parameters if atom_parameters is not None else [] + for atom_ind, atom in enumerate(atom_parameters): if atom.get('mass'): masses[atom_ind] = ureg.convert(atom.mass.magnitude, atom.mass.units, ureg.amu) @@ -1260,11 +1266,35 @@ def archive_to_universe(archive, system_index: int = 0, method_index: int = -1, if contribution.type == 'bond': # and contribution.atom_indices is not None: bonds.append(tuple(contribution.atom_indices)) + # get the system times + system_timestep = 1.0 * ureg.picosecond + + def approx(a, b, rel_tol=1e-09, abs_tol=0.0): + return abs(a - b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol) + + system_times = [calc.time for calc in sec_calculation if calc.system_ref] + if system_times: + try: + method = archive.workflow2.method + system_timestep = method.integration_timestep * method.coordinate_save_frequency + except Exception: + logging.warning('Cannot find the system times. MDA universe will contain non-physical times and timestep.') + else: + time_steps = [system_times[i_time] - system_times[i_time - 1] for i_time in range(1, len(system_times))] + if all(approx(time_steps[0], time_step) for time_step in time_steps): + system_timestep = ureg.convert(time_steps[0].magnitude, ureg.second, ureg.picosecond) + else: + logging.warning( + 'System times are not equally spaced. Cannot set system times in MDA universe.' + ' MDA universe will contain non-physical times and timestep.') + + system_timestep = ureg.convert(system_timestep, system_timestep._units, ureg.picoseconds) + # create the Universe metainfo_universe = create_empty_universe( n_atoms, n_frames=n_frames, n_residues=n_residues, n_segments=n_segments, atom_resindex=atom_resindex, residue_segindex=residue_segindex, flag_trajectory=True, - flag_velocities=True) + flag_velocities=True, timestep=system_timestep.magnitude) # set the positions and velocities for frame_ind, frame in enumerate(metainfo_universe.trajectory): @@ -1424,7 +1454,7 @@ def shifted_correlation_average(function: Callable, times: NDArray, positions: N return correlation_times, result -def __calc_diffusion_constant(times: NDArray, values: NDArray, dim: int = 3): +def _calc_diffusion_constant(times: NDArray, values: NDArray, dim: int = 3): ''' Determines the diffusion constant from a fit of the mean squared displacement vs. time according to the Einstein relation. @@ -1435,7 +1465,7 @@ def __calc_diffusion_constant(times: NDArray, values: NDArray, dim: int = 3): return slope * 1 / (2 * dim), error -def __get_molecular_bead_groups(universe: MDAnalysis.Universe, moltypes: List[str] = None): +def _get_molecular_bead_groups(universe: MDAnalysis.Universe, moltypes: List[str] = None): if moltypes is None: atoms_moltypes = getattr(universe.atoms, 'moltypes', []) @@ -1449,14 +1479,16 @@ def __get_molecular_bead_groups(universe: MDAnalysis.Universe, moltypes: List[st return bead_groups -def calc_molecular_rdf(universe: MDAnalysis.Universe, n_traj_split: int = 10, n_prune: int = 1, interval_indices=None): +def calc_molecular_rdf(universe: MDAnalysis.Universe, n_traj_split: int = 10, n_prune: int = 1, interval_indices=None, max_mols: int = 5000): ''' Calculates the radial distribution functions between for each unique pair of molecule types as a function of their center of mass distance. interval_indices: 2D array specifying the groups of the n_traj_split intervals to be averaged + max_mols: the maximum number of molecules per bead group for calculating the rdf, for efficiency purposes. ''' + # TODO 5k default for max_mols was set after > 50k was giving problems. Should do further testing to see where the appropriate limit should be set. if not universe or not universe.trajectory or universe.trajectory[0].dimensions is None: return @@ -1480,9 +1512,12 @@ def calc_molecular_rdf(universe: MDAnalysis.Universe, n_traj_split: int = 10, n_ if not interval_indices: interval_indices = [[i] for i in range(n_traj_split)] - atoms_moltypes = getattr(universe.atoms, 'moltypes', []) - moltypes = np.unique(atoms_moltypes) - bead_groups = __get_molecular_bead_groups(universe, moltypes=moltypes) + bead_groups = _get_molecular_bead_groups(universe) + if not bead_groups: + return bead_groups + moltypes = [moltype for moltype in bead_groups.keys()] + del_list = [i_moltype for i_moltype, moltype in enumerate(moltypes) if bead_groups[moltype]._nbeads > max_mols] + moltypes = np.delete(moltypes, del_list).tolist() min_box_dimension = np.min(universe.trajectory[0].dimensions[:3]) max_rdf_dist = min_box_dimension / 2 @@ -1563,10 +1598,13 @@ def calc_molecular_rdf(universe: MDAnalysis.Universe, n_traj_split: int = 10, n_ return rdf_results -def calc_molecular_mean_squared_displacements(universe: MDAnalysis.Universe): +def calc_molecular_mean_squared_displacements(universe: MDAnalysis.Universe, max_mols: int = 5000): ''' Calculates the mean squared displacement for the center of mass of each molecule type. + + max_mols: the maximum number of molecules per bead group for calculating the msd, for efficiency purposes. + 50k was tested and is very fast and does not seem to have any memory issues. ''' def mean_squared_displacement(start: NDArray, current: NDArray): @@ -1581,14 +1619,51 @@ def calc_molecular_mean_squared_displacements(universe: MDAnalysis.Universe): n_frames = universe.trajectory.n_frames if n_frames < 50: - warnings.warn('Less than 50 frames in trajectory, not calculating molecular' - 'mean squared displacements.', UserWarning) + warnings.warn('At least 50 frames required to calculate molecular' + ' mean squared displacements, skipping.', UserWarning) + return + + dt = getattr(universe.trajectory, 'dt') + if dt is None: + warnings.warn( + 'Universe is missing time step, cannot calculate molecular' + ' mean squared displacements, skipping.', UserWarning) return + times = np.arange(n_frames) * dt + + bead_groups = _get_molecular_bead_groups(universe) + if bead_groups is {}: + return bead_groups + + moltypes = [moltype for moltype in bead_groups.keys()] + del_list = [] + for i_moltype, moltype in enumerate(moltypes): + if bead_groups[moltype]._nbeads > max_mols: + if max_mols > 50000: + warnings.warn( + 'Calculating mean squared displacements for more than 50k molecules.' + ' Expect long processing times!', UserWarning) + try: + # select max_mols nr. of rnd molecules from this moltype + moltype_indices = np.array([atom._ix for atom in bead_groups[moltype]._atoms]) + molnums = universe.atoms.molnums[moltype_indices] + molnum_types = np.unique(molnums) + molnum_types_rnd = np.sort(np.random.choice(molnum_types, size=max_mols)) + atom_indices_rnd = np.concatenate([np.where(molnums == molnum)[0] for molnum in molnum_types_rnd]) + selection = ' '.join([str(i) for i in atom_indices_rnd]) + selection = f'index {selection}' + ags_moltype_rnd = universe.select_atoms(selection) + bead_groups[moltype] = BeadGroup(ags_moltype_rnd, compound='fragments') + warnings.warn( + 'Maximum number of molecules for calculating the msd has been reached.' + ' Will make a random selection for calculation.') + except Exception: + warnings.warn( + 'Error in selecting random molecules for large group when calculating msd. Skipping this molecule type.') + del_list.append(i_moltype) - atoms_moltypes = getattr(universe.atoms, 'moltypes', []) - moltypes = np.unique(atoms_moltypes) - bead_groups = __get_molecular_bead_groups(universe, moltypes=moltypes) - times = np.arange(n_frames) * universe.trajectory.dt + for index in sorted(del_list, reverse=True): + del moltypes[index] msd_results: Dict[str, Any] = {} msd_results['type'] = 'molecular' @@ -1603,7 +1678,7 @@ def calc_molecular_mean_squared_displacements(universe: MDAnalysis.Universe): if results: msd_results['value'].append(results[1]) msd_results['times'].append(results[0]) - diffusion_constant, error = __calc_diffusion_constant(*results) + diffusion_constant, error = _calc_diffusion_constant(*results) msd_results['diffusion_constant'].append(diffusion_constant) msd_results['error_diffusion_constant'].append(error) @@ -1673,7 +1748,6 @@ def calc_radius_of_gyration(universe: MDAnalysis.Universe, molecule_atom_indices if not universe or not universe.trajectory or universe.trajectory[0].dimensions is None: return - selection = ' '.join([str(i) for i in molecule_atom_indices]) selection = f'index {selection}' molecule = universe.select_atoms(selection) @@ -1681,11 +1755,12 @@ def calc_radius_of_gyration(universe: MDAnalysis.Universe, molecule_atom_indices rg_results['type'] = 'molecular' rg_results['times'] = [] rg_results['value'] = [] + time_unit = hasattr(universe.trajectory.time, 'units') for __ in universe.trajectory: - rg_results['times'].append(universe.trajectory.time) + rg_results['times'].append(universe.trajectory.time.magnitude if time_unit else universe.trajectory.time) rg_results['value'].append(molecule.radius_of_gyration()) rg_results['n_frames'] = len(rg_results['times']) - rg_results['times'] = np.array(rg_results['times']) * ureg.picosecond + rg_results['times'] = np.array(rg_results['times']) * time_unit if time_unit else np.array(rg_results['times']) rg_results['value'] = np.array(rg_results['value']) * ureg.angstrom return rg_results diff --git a/nomad/bundles.py b/nomad/bundles.py index e01619ca4bce3600982033af22d0c95d7a2b43c1..cf5814ee0438b5a458ca7fa22898057be2631382 100644 --- a/nomad/bundles.py +++ b/nomad/bundles.py @@ -381,7 +381,7 @@ class BundleImporter: # Validate embargo settings if self.embargo_length is not None: self.upload.embargo_length = self.embargo_length # Importing with different embargo - assert type(self.upload.embargo_length) == int and 0 <= self.upload.embargo_length <= 36, ( + assert isinstance(self.upload.embargo_length, int) and 0 <= self.upload.embargo_length <= 36, ( 'Invalid embargo_length, must be between 0 and 36 months') def _import_datasets(self) -> Tuple[List[datamodel.Dataset], Dict[str, str]]: diff --git a/nomad/cli/admin/admin.py b/nomad/cli/admin/admin.py index 3e04159e90a77fd39478f99382d9be4d3f024ae7..4f6936a2ef35f61cc0ea4307a440561ecff54745 100644 --- a/nomad/cli/admin/admin.py +++ b/nomad/cli/admin/admin.py @@ -343,10 +343,9 @@ def migrate_mongo( if upload_ids: upload_query = {'_id': {'$in': upload_ids}} print('Querying uploads...') - uploads = db_src.upload.find(upload_query) migrate.migrate_mongo_uploads( - db_src, db_dst, uploads, failed_ids_to_file, upload_update, entry_update, overwrite, + db_src, db_dst, upload_query, failed_ids_to_file, upload_update, entry_update, overwrite, fix_problems, dry) diff --git a/nomad/cli/admin/migrate.py b/nomad/cli/admin/migrate.py index a1d9eb9603539bc1f556dffb3472bb069d62721f..d635910f0828b86f6ebfd1682c7633271758462a 100644 --- a/nomad/cli/admin/migrate.py +++ b/nomad/cli/admin/migrate.py @@ -23,7 +23,6 @@ from pydantic import BaseModel from pymongo import ReplaceOne from pymongo.database import Database, Collection -from pymongo.cursor import Cursor from nomad import utils from nomad.processing import ProcessStatus, Upload, Entry from nomad.datamodel import Dataset @@ -65,24 +64,25 @@ def create_collections_if_needed(db_dst: Database): If the collections haven't yet been created, create them by calling .objects() on the MongoDocument class. ''' - if 'upload' not in db_dst.collection_names(): + if 'upload' not in db_dst.list_collection_names(): Upload.objects() - if 'entry' not in db_dst.collection_names(): + if 'entry' not in db_dst.list_collection_names(): Entry.objects() - if 'dataset' not in db_dst.collection_names(): + if 'dataset' not in db_dst.list_collection_names(): Dataset.m_def.a_mongo.objects() def migrate_mongo_uploads( - db_src: Database, db_dst: Database, uploads: Cursor, failed_ids_to_file: bool, + db_src: Database, db_dst: Database, uploads_query: Any, failed_ids_to_file: bool, upload_update: Dict[str, Any], entry_update: Dict[str, Any], overwrite: str, fix_problems: bool, dry: bool): ''' Converts and/or migrates an upload and all related entries and datasets. ''' logger = utils.get_logger(__name__) - number_of_uploads = uploads.count() + uploads = db_src.upload.find(uploads_query) + number_of_uploads = db_src.upload.count_documents(uploads_query) print(f'Found {number_of_uploads} uploads to import.') - src_entry_collection = db_src.calc if 'calc' in db_src.collection_names() else db_src.entry + src_entry_collection = db_src.calc if 'calc' in db_src.list_collection_names() else db_src.entry dataset_cache: Dict[str, _DatasetCacheItem] = {} stats = _UpgradeStatistics() stats.uploads.total = number_of_uploads @@ -505,6 +505,6 @@ def _wrap_author(author): If the author is a str, it is instead returned as it is. This is used to get an object which is hashable and can be used in sets. ''' - if type(author) == str: + if isinstance(author, str): return author return tuple((k, author[k]) for k in sorted(author.keys())) diff --git a/nomad/cli/admin/run.py b/nomad/cli/admin/run.py index c9747f79b73bd57695df2ab0d68fedbda0513d55..527cceaf6d67de3bdb545ee364c99626dbbbf8ae 100644 --- a/nomad/cli/admin/run.py +++ b/nomad/cli/admin/run.py @@ -43,6 +43,7 @@ def worker(): @click.option('--host', type=str, help='Passed to uvicorn host parameter.') @click.option('--port', type=int, help='Passed to uvicorn host parameter.') @click.option('--log-config', type=str, help='Passed to uvicorn log-config parameter.') +@click.option('--gunicorn', is_flag=True, type=bool, help='Run app with gunicorn.') @click.option('--workers', type=int, help='Passed to uvicorn workers parameter.') def app(with_gui: bool, **kwargs): run_app(with_gui=with_gui, **kwargs) @@ -56,7 +57,7 @@ def logtransfer(): start_logtransfer_service() -def run_app(with_gui: bool = False, **kwargs): +def run_app(with_gui: bool = False, gunicorn: bool = False, host: str = None, log_config: str = None, **kwargs): config.meta.service = 'app' if with_gui: @@ -93,17 +94,48 @@ def run_app(with_gui: bool = False, **kwargs): config.ui.app_base = f'{config.services.api_base_path.rstrip("/")}' config.ui.north_base = f'{config.services.api_base_path.rstrip("/")}/north' - from uvicorn import Server, Config from nomad.utils import get_logger - uv_config = Config( - 'nomad.app.main:app', - log_level='info', - **{k: v for k, v in kwargs.items() if v is not None}) - - server = Server(config=uv_config) - get_logger(__name__).info('created uvicorn server', data=uv_config.__dict__) - server.run() + if gunicorn: + from gunicorn.app.wsgiapp import WSGIApplication + import logging.config + + if log_config: + logging.config.fileConfig(log_config) + + if not kwargs.get('workers', None): + kwargs['workers'] = 4 + + class App(WSGIApplication): + def __init__(self): + self.app_uri = 'nomad.app.main:app' + super().__init__() + + def load_config(self): + self.cfg.set('timeout', config.services.api_timeout) + self.cfg.set('worker_class', 'uvicorn.workers.UvicornWorker') + if host: + self.cfg.set('bind', host) + for key, value in kwargs.items(): + if key in self.cfg.settings and value is not None: + self.cfg.set(key, value) + + gunicorn_app = App() + get_logger(__name__).info('created gunicorn server', data=str(gunicorn_app.cfg)) + gunicorn_app.run() + else: + from uvicorn import Server, Config + kwargs['log_config'] = log_config + + uv_config = Config( + 'nomad.app.main:app', + log_level='info', + host=host, + **{k: v for k, v in kwargs.items() if v is not None}) + + server = Server(config=uv_config) + get_logger(__name__).info('created uvicorn server', data=uv_config.__dict__) + server.run() def run_worker(): diff --git a/nomad/cli/admin/uploads.py b/nomad/cli/admin/uploads.py index 9189a994724ea49f17e7829012d0ce01f88ce961..238c09361014c07d850c757d03dd764f8396690d 100644 --- a/nomad/cli/admin/uploads.py +++ b/nomad/cli/admin/uploads.py @@ -268,6 +268,83 @@ def _query_uploads( return final_query, proc.Upload.objects(final_query) +@uploads.command(help='List selected uploads') +@click.argument('UPLOADS', nargs=-1) +@click.option('--required', type=str, help='The required in JSON format') +@click.option('-o', '--output', type=str, help='The file to write data to') +@click.pass_context +def export(ctx, uploads, required, output: str): + import sys + from nomad.processing import Entry + from nomad.utils import get_logger + from nomad.files import UploadFiles + from nomad.archive import ArchiveQueryError, RequiredReader + import time + import zipfile + + logger = get_logger(__name__) + + if not output: + logger.error('no output given') + sys.exit(1) + + if not output.endswith('.zip'): + logger.error('only zip output is supported') + sys.exit(1) + + output_file = zipfile.ZipFile(output, 'w', allowZip64=True) + + def write(entry_id, archive_data): + archive_json = json.dumps(archive_data) + output_file.writestr(f'{entry_id}.json', archive_json, compress_type=zipfile.ZIP_DEFLATED) + + _, uploads = _query_uploads(uploads, **ctx.obj.uploads_kwargs) + + try: + required_data = json.loads(required) + except Exception as e: + logger.error('could not parse required', exc_info=e) + sys.exit(1) + + try: + required_reader = RequiredReader(required_data) + except Exception as e: + logger.error('could not validate required', exc_info=e) + sys.exit(1) + + def get_rss(): + return time.time() + + start_time = get_rss() + + upload_count = 0 + total_count = 0 + for upload in uploads: + upload_id = upload.upload_id + upload_files = UploadFiles.get(upload_id) + upload_count += 1 + entry_ids = list(entry.entry_id for entry in Entry.objects(upload_id=upload_id)) + entry_count = 0 + for entry_id in entry_ids: + entry_count += 1 + total_count += 1 + try: + archive = upload_files.read_archive(entry_id, use_blocked_toc=False) + archive_data = required_reader.read(archive, entry_id, upload_id) + write(entry_id, archive_data) + except ArchiveQueryError as e: + logger.error('could not read archive', exc_info=e, entry_id=entry_id) + except KeyError as e: + logger.error('missing archive', exc_info=e, entry_id=entry_id) + + if total_count % 100 == 0: + print(f'{upload_count:5}/{len(uploads)} {entry_count:5}/{len(entry_ids)} {total_count:5} {((get_rss() - start_time))} {upload_id}') + + upload_files.close() + + output_file.close() + + @uploads.command(help='List selected uploads') @click.argument('UPLOADS', nargs=-1) @click.option('-e', '--entries', is_flag=True, help='Show details about entries.') diff --git a/nomad/cli/dev.py b/nomad/cli/dev.py index a712b986114daa251dcb5f901c6d3628b816f9ad..4f4423e6339a0eae64e043769d47870461c964e4 100644 --- a/nomad/cli/dev.py +++ b/nomad/cli/dev.py @@ -22,6 +22,7 @@ import os import click from nomad import config +from nomad.metainfo.elasticsearch_extension import schema_separator from .cli import cli @@ -41,7 +42,7 @@ def qa(skip_tests: bool, exitfirst: bool): click.echo('Run tests ...') ret_code += os.system('python -m pytest -sv%s tests' % ('x' if exitfirst else '')) click.echo('Run code style checks ...') - ret_code += os.system('python -m pycodestyle --config=pycodestyle.ini nomad tests') + ret_code += os.system('python -m ruff nomad tests') click.echo('Run linter ...') ret_code += os.system('python -m pylint --rcfile=.pylintrc nomad tests') click.echo('Run static type checks ...') @@ -93,7 +94,10 @@ def gui_artifacts(): def _generate_metainfo(all_metainfo_packages): - return all_metainfo_packages.m_to_dict(with_meta=True, with_def_id=config.process.write_definition_id_to_archive) + return all_metainfo_packages.m_to_dict( + with_meta=True, + with_def_id=config.process.write_definition_id_to_archive + ) @dev.command(help='Generates a JSON with all metainfo.') @@ -109,12 +113,13 @@ def _all_metainfo_packages(): from nomad.metainfo import Package, Environment from nomad.datamodel import EntryArchive - # TODO similar to before, due to lazyloading, we need to explicily access parsers - # to actually import all parsers and indirectly all metainfo packages + # TODO similar to before, due to lazyloading, we need to explicily access + # parsers to actually import all parsers and indirectly all metainfo + # packages from nomad.parsing.parsers import import_all_parsers import_all_parsers() - # Create the ES mapping to populate ES annoations with search keys. + # Create the ES mapping to populate ES annotations with search keys. from nomad.search import entry_type if not entry_type.mapping: entry_type.create_mapping(EntryArchive.m_def) @@ -152,11 +157,17 @@ def _generate_search_quantities(): nested = any(x.nested for x in es_annotations) metadict['nested'] = nested else: - keys = ['name', 'description', 'type', 'unit', 'shape', 'aliases', 'aggregatable'] + keys = ['name', 'description', 'type', 'unit', 'shape', 'aliases', 'aggregatable', 'dynamic'] metadict = search_quantity.definition.m_to_dict(with_meta=True) - # We UI needs to know whether the quantity can be used in + # UI needs to know whether the quantity can be used in # aggregations or not. metadict['aggregatable'] = search_quantity.aggregatable + metadict['dynamic'] = search_quantity.dynamic + if search_quantity.dynamic: + _, schema = search_quantity.qualified_name.split(schema_separator, 1) + metadict['schema'] = schema + keys.append('schema') + result = {} for key in keys: val = metadict.get(key) @@ -204,7 +215,7 @@ def parser_metadata(): def get_gui_config() -> str: - '''Create a simplified and strippped version of the nomad.yaml contents that + '''Create a simplified and stripped version of the nomad.yaml contents that is used by the GUI. Args: @@ -227,6 +238,7 @@ def get_gui_config() -> str: 'version': config.meta.beta if config.meta.beta else {}, 'globalLoginRequired': config.oasis.allowed_users is not None, 'servicesUploadLimit': config.services.upload_limit, + 'appTokenMaxExpiresIn': config.services.app_token_max_expires_in, 'ui': config.ui.dict(exclude_none=True) if config.ui else {} } diff --git a/nomad/cli/parse.py b/nomad/cli/parse.py index 9c3fc605c9be9af5f1860e286681c797820916ce..b33647e70fba8af54b173ae530fc91fb0ce64195 100644 --- a/nomad/cli/parse.py +++ b/nomad/cli/parse.py @@ -28,7 +28,8 @@ from .cli import cli @click.option('--show-metadata', is_flag=True, default=False, help='Print the extracted repo metadata.') @click.option('--skip-normalizers', is_flag=True, default=False, help='Do not run the normalizer.') @click.option('--not-strict', is_flag=True, help='Do also match artificial parsers.') -@click.option('--parser', help='Skip matching and use the provided parser') +@click.option('--parser', help='''Skip matching and use the provided parser (format: `parsers/<name>`). + Additional selection rules still apply for parsers with multiple main files.''') @click.option('--server-context', is_flag=True, default=False, help='Whether to use server context.') @click.option('--username', default=None, help='Username for authentication.') @click.option('--password', default=None, help='Password for authentication.') diff --git a/nomad/config/__init__.py b/nomad/config/__init__.py index 945f2c6286ec50bad1e6f1342a1107e3957e655b..ec4deec45ccf623b1c876d6a325550f1d6cfd0f6 100644 --- a/nomad/config/__init__.py +++ b/nomad/config/__init__.py @@ -403,6 +403,10 @@ plugins = Plugins(options={ python_package='electronicparsers.ocean', mainfile_mime_re=r'(application/.*)|(text/.*)', mainfile_contents_dict={'__has_all_keys': ['bse', 'structure', 'screen', 'calc']}), + 'parsers/edmft': Parser( + python_package='electronicparsers.edmft', + mainfile_name_re=(r'^.*\.(out)$'), + mainfile_contents_re=r'\-\-\-\s*Preparing GF calculation\s*\-\-\-'), 'parsers/nexus': Parser( python_package='nomad.parsing.nexus', mainfile_mime_re=r'(application/.*)|(text/.*)', @@ -410,6 +414,9 @@ plugins = Plugins(options={ supported_compressions=['gz', 'bz2', 'xz']), 'parsers/elabftw/elabftw': Parser( python_package='nomad.parsing.elabftw', + parser_as_interface=True), + 'parsers/chemotion/chemotion': Parser( + python_package='nomad.parsing.chemotion', parser_as_interface=True) }) diff --git a/nomad/config/models.py b/nomad/config/models.py index 30d7e389524d88fe1c1591e19f2e8471ea50896a..5e807824cb226f8200022026b31a2758a1825bee 100644 --- a/nomad/config/models.py +++ b/nomad/config/models.py @@ -22,7 +22,7 @@ import logging import inspect from typing import TypeVar, List, Dict, Tuple, Any, Union, Optional, cast from typing_extensions import Literal, Annotated # type: ignore -from pydantic import BaseModel, Field, validator, Extra # pylint: disable=unused-import +from pydantic import BaseModel, Field, root_validator, Extra # pylint: disable=unused-import from pkg_resources import get_distribution, DistributionNotFound try: @@ -67,8 +67,18 @@ class NomadSettings(BaseModel): return cast(NomadSettingsBound, rv) -class StrictSettings(NomadSettings, extra=Extra.forbid): - '''Extra fields are not allowed in these models''' +class StrictSettings(NomadSettings, extra=Extra.ignore): + '''A warning is printed when extra fields are specified for these models.''' + + @root_validator(pre=True) + def __print_extra_field__(cls, values): # pylint: disable=no-self-argument + extra_fields = values.keys() - cls.__fields__.keys() + + if extra_fields: + logger = logging.getLogger(__name__) + logger.warning(f'The following unknown fields in the config are ignored: {extra_fields}') + + return values class OptionsBase(StrictSettings): @@ -150,6 +160,10 @@ class Services(NomadSettings): api_secret = Field('defaultApiSecret', description=''' A secret that is used to issue download and other tokens. ''') + api_timeout = Field(600, description=''' + If the NOMAD app is run with gunicorn as process manager, this timeout (in s) is passed + and worker processes will be restarted, if they do not respond in time. + ''') https = Field(False, description=''' Set to `True`, if external clients are using *SSL* to connect to this installation. Requires to setup a reverse-proxy (e.g. the one used in the docker-compose @@ -202,6 +216,18 @@ class Services(NomadSettings): Value that is used in `results` section Enum fields (e.g. system type, spacegroup, etc.) to indicate that the value could not be determined. ''') + app_token_max_expires_in = Field(30 * 24 * 60 * 60, description=''' + Maximum expiration time for an app token in seconds. Requests with a higher value + will be declined. + ''') + html_resource_http_max_age = Field(60, description=''' + Used for the max_age cache-control directive on statically served html, js, css + resources. + ''') + image_resource_http_max_age = Field(30 * 24 * 60 * 60, description=''' + Used for the max_age cache-control directive on statically served image + resources. + ''') class Meta(NomadSettings): @@ -318,6 +344,8 @@ class Elastic(NomadSettings): entries_per_material_cap = 1000 entries_index = 'nomad_entries_v1' materials_index = 'nomad_materials_v1' + username: Optional[str] + password: Optional[str] class Keycloak(NomadSettings): @@ -335,6 +363,8 @@ class Mongo(NomadSettings): host: str = Field('localhost', description='The name of the host that runs mongodb.') port: int = Field(27017, description='The port to connect with mongodb.') db_name: str = Field('nomad_v1', description='The used mongodb database name.') + username: Optional[str] + password: Optional[str] class Logstash(NomadSettings): @@ -363,6 +393,10 @@ class Logtransfer(NomadSettings): class Tests(NomadSettings): default_timeout = 60 + assume_auth_for_username: str = Field(None, description=( + 'Will assume that all API calls with no authentication have authentication for ' + 'the user with the given username.' + )) class Mail(NomadSettings): @@ -394,6 +428,7 @@ class Normalize(NomadSettings): OptimadeNormalizer='nomad.normalizing.optimade.OptimadeNormalizer', DosNormalizer='nomad.normalizing.dos.DosNormalizer', BandStructureNormalizer='nomad.normalizing.band_structure.BandStructureNormalizer', + SpectraNormalizer='nomad.normalizing.spectra.SpectraNormalizer', WorkflowNormalizer='nomad.normalizing.workflow.WorkflowNormalizer', ResultsNormalizer='nomad.normalizing.results.ResultsNormalizer', MetainfoNormalizer='nomad.normalizing.metainfo.MetainfoNormalizer', @@ -700,12 +735,6 @@ class Entry(StrictSettings): cards: Cards = Field(description='Controls the cards that are displayed on the entry overview page.') -class Help(StrictSettings): - '''Help dialog contents.''' - title: str = Field(description='Title of the help dialog.') - content: str = Field(description='Text contents of the help dialog. Supports markdown.') - - class Pagination(StrictSettings): order_by: str = Field('upload_create_time', description='Field used for sorting.') order: str = Field('desc', description='Sorting order.') @@ -822,6 +851,10 @@ class FilterMenus(Options): options: Dict[str, FilterMenu] = Field(description='Contains the available filter menu options.') +class Schemas(OptionsBase): + '''Controls the availability of schemas.''' + + class Filters(OptionsBase): '''Controls the availability of filters.''' @@ -933,16 +966,27 @@ class App(StrictSettings): '''Defines the layout and functionality for an App.''' label: str = Field(description='Name of the App.') path: str = Field(description='Path used in the browser address bar.') - resource: ResourceEnum = Field(description='Targeted resource.') - breadcrumb: str = Field(description='Path displayed in the breadcrumb.') + resource: ResourceEnum = Field('entries', description='Targeted resource.') + breadcrumb: Optional[str] = Field(description='Name displayed in the breadcrumb, by default the label will be used.') category: str = Field(description='Category used to organize Apps in the explore menu.') - description: str = Field(description='Short description of the App.') - help: Help = Field(description='Help dialog contents.') + description: Optional[str] = Field(description='Short description of the App.') + readme: Optional[str] = Field(description='Longer description of the App that can also use markdown.') pagination: Pagination = Field(Pagination(), description='Default result pagination.') columns: Columns = Field(description='Controls the columns shown in the results table.') - rows: Rows = Field(description='Controls the display of entry rows in the results table.') + rows: Optional[Rows] = Field( + Rows( + actions=RowActions(enabled=True), + details=RowDetails(enabled=True), + selection=RowSelection(enabled=True) + ), + description='Controls the display of entry rows in the results table.' + ) filter_menus: FilterMenus = Field(description='Filter menus displayed on the left side of the screen.') - filters: Optional[Filters] = Field(description='Controls the filters that are available in this app.') + schemas: Optional[Schemas] = Field(description='Controls the schemas that are available in this app.') + filters: Optional[Filters] = Field( + Filters(exclude=['mainfile', 'entry_name', 'combine']), + description='Controls the filters that are available in this app.' + ) dashboard: Optional[Dashboard] = Field(description='Default dashboard layout.') filters_locked: Optional[dict] = Field( description=''' @@ -986,6 +1030,7 @@ class UI(StrictSettings): 'nexus': {'error': 'Could not render NeXus card.'}, 'material': {'error': 'Could not render material card.'}, 'solarcell': {'error': 'Could not render solar cell properties.'}, + 'heterogeneouscatalyst': {'error': 'Could not render catalyst properties.'}, 'electronic': {'error': 'Could not render electronic properties.'}, 'vibrational': {'error': 'Could not render vibrational properties.'}, 'mechanical': {'error': 'Could not render mechanical properties.'}, @@ -993,7 +1038,7 @@ class UI(StrictSettings): 'structural': {'error': 'Could not render structural properties.'}, 'dynamical': {'error': 'Could not render dynamical properties.'}, 'geometry_optimization': {'error': 'Could not render geometry optimization.'}, - 'eels': {'error': 'Could not render EELS properties.'}, + 'spectroscopic': {'error': 'Could not render spectroscopic properties.'}, 'workflow': {'error': 'Could not render workflow card.'}, 'references': {'error': 'Could not render references card.'}, 'relatedResources': {'error': 'Could not render related resources card.'}, @@ -1004,28 +1049,24 @@ class UI(StrictSettings): ) apps: Apps = Field( Apps(**{ + 'exclude': ['heterogeneouscatalyst'], 'options': { 'entries': { 'label': 'Entries', 'path': 'entries', - 'resource': 'entries', - 'breadcrumb': 'Entries', 'category': 'All', 'description': 'Search entries across all domains', - 'help': { - 'title': 'Entries search', - 'content': inspect.cleandoc(r''' - This page allows you to search **entries** within NOMAD. - Entries represent any individual data items that have - been uploaded to NOMAD, no matter whether they come from - theoretical calculations, experiments, lab notebooks or - any other source of data. This allows you to perform - cross-domain queries, but if you are interested in a - specific subfield, you should see if a specific - application exists for it in the explore menu to get - more details. - '''), - }, + 'readme': inspect.cleandoc(r''' + This page allows you to search **entries** within NOMAD. + Entries represent any individual data items that have + been uploaded to NOMAD, no matter whether they come from + theoretical calculations, experiments, lab notebooks or + any other source of data. This allows you to perform + cross-domain queries, but if you are interested in a + specific subfield, you should see if a specific + application exists for it in the explore menu to get + more details. + '''), 'columns': { 'selected': [ 'entry_name', @@ -1066,16 +1107,11 @@ class UI(StrictSettings): 'published': {'label': 'Access'} } }, - 'rows': { - 'actions': {'enabled': True}, - 'details': {'enabled': True}, - 'selection': {'enabled': True} - }, 'filter_menus': { 'options': { 'material': {'label': 'Material', 'level': 0}, 'elements': {'label': 'Elements / Formula', 'level': 1, 'size': 'xl'}, - 'structure': {'label': 'Structure', 'level': 1}, + 'structure': {'label': 'Structure / Symmetry', 'level': 1}, 'method': {'label': 'Method', 'level': 0}, 'precision': {'label': 'Precision', 'level': 1}, 'dft': {'label': 'DFT', 'level': 1}, @@ -1093,36 +1129,30 @@ class UI(StrictSettings): 'mechanical': {'label': 'Mechanical', 'level': 1}, 'usecases': {'label': 'Use Cases', 'level': 0}, 'solarcell': {'label': 'Solar Cells', 'level': 1}, + 'heterogeneouscatalyst': {'label': 'Heterogeneous Catalysis', 'level': 1}, 'author': {'label': 'Author / Origin / Dataset', 'level': 0, 'size': 'm'}, 'metadata': {'label': 'Visibility / IDs / Schema', 'level': 0}, 'optimade': {'label': 'Optimade', 'level': 0, 'size': 'm'}, } - }, - 'filters': { - 'exclude': ['mainfile', 'entry_name', 'combine'] - }, + } }, 'calculations': { 'label': 'Calculations', 'path': 'calculations', - 'resource': 'entries', - 'breadcrumb': 'Calculations', 'category': 'Theory', 'description': 'Search calculations', - 'help': { - 'title': 'Calculations', - 'content': inspect.cleandoc(r''' - This page allows you to search **calculations** within - NOMAD. Calculations typically come from a specific - simulation software that uses an approximate model to - investigate and report different physical properties. - '''), - }, + 'readme': inspect.cleandoc(r''' + This page allows you to search **calculations** within + NOMAD. Calculations typically come from a specific + simulation software that uses an approximate model to + investigate and report different physical properties. + '''), 'columns': { 'selected': [ 'results.material.chemical_formula_hill', 'results.method.simulation.program_name', 'results.method.method_name', + 'results.method.simulation.dft.xc_functional_type', 'upload_create_time', 'authors' ], @@ -1130,9 +1160,9 @@ class UI(StrictSettings): 'results.material.chemical_formula_hill': {'label': 'Formula', 'align': 'left'}, 'results.method.simulation.program_name': {'label': 'Program name'}, 'results.method.method_name': {'label': 'Method name'}, + 'results.method.simulation.dft.xc_functional_type': {'label': "Jacob's ladder"}, 'upload_create_time': {'label': 'Upload time', 'align': 'left'}, 'authors': {'label': 'Authors', 'align': 'left'}, - 'results.method.simulation.dft.xc_functional_type': {'label': 'XC Functional Type'}, 'results.method.simulation.precision.apw_cutoff': {'label': 'APW Cutoff'}, 'results.method.simulation.precision.basis_set': {'label': 'Basis Set'}, 'results.method.simulation.precision.k_line_density': {'label': 'k-line Density'}, @@ -1142,13 +1172,7 @@ class UI(StrictSettings): 'results.material.symmetry.crystal_system': {'label': 'Crystal system'}, 'results.material.symmetry.space_group_symbol': {'label': 'Space group symbol'}, 'results.material.symmetry.space_group_number': {'label': 'Space group number'}, - 'results.eln.lab_ids': {'label': 'Lab IDs'}, - 'results.eln.sections': {'label': 'Sections'}, - 'results.eln.methods': {'label': 'Methods'}, - 'results.eln.tags': {'label': 'Tags'}, - 'results.eln.instruments': {'label': 'Instruments'}, 'entry_name': {'label': 'Name', 'align': 'left'}, - 'entry_type': {'label': 'Entry type', 'align': 'left'}, 'mainfile': {'label': 'Mainfile', 'align': 'left'}, 'comment': {'label': 'Comment', 'align': 'left'}, 'references': {'label': 'References', 'align': 'left'}, @@ -1156,16 +1180,11 @@ class UI(StrictSettings): 'published': {'label': 'Access'} } }, - 'rows': { - 'actions': {'enabled': True}, - 'details': {'enabled': True}, - 'selection': {'enabled': True} - }, 'filter_menus': { 'options': { 'material': {'label': 'Material', 'level': 0}, 'elements': {'label': 'Elements / Formula', 'level': 1, 'size': 'xl'}, - 'structure': {'label': 'Structure', 'level': 1}, + 'structure': {'label': 'Structure / Symmetry', 'level': 1}, 'method': {'label': 'Method', 'level': 0}, 'precision': {'label': 'Precision', 'level': 1}, 'dft': {'label': 'DFT', 'level': 1}, @@ -1185,44 +1204,105 @@ class UI(StrictSettings): 'optimade': {'label': 'Optimade', 'level': 0, 'size': 'm'}, } }, - 'filters': { - 'exclude': ['mainfile', 'entry_name', 'combine'] + 'dashboard': { + 'widgets': [ + { + 'type': 'periodictable', + 'scale': 'linear', + 'quantity': 'results.material.elements', + 'layout': { + 'xxl': {'minH': 3, 'minW': 3, 'h': 9, 'w': 13, 'y': 0, 'x': 0}, + 'xl': {'minH': 3, 'minW': 3, 'h': 11, 'w': 14, 'y': 0, 'x': 0}, + 'lg': {'minH': 3, 'minW': 3, 'h': 11, 'w': 14, 'y': 0, 'x': 0}, + 'md': {'minH': 3, 'minW': 3, 'h': 8, 'w': 12, 'y': 0, 'x': 0}, + 'sm': {'minH': 3, 'minW': 3, 'h': 8, 'w': 12, 'y': 0, 'x': 0} + } + }, + { + 'type': 'terms', + 'showinput': True, + 'scale': 'linear', + 'quantity': 'results.material.symmetry.space_group_symbol', + 'layout': { + 'xxl': {'minH': 3, 'minW': 3, 'h': 9, 'w': 6, 'y': 0, 'x': 30}, + 'xl': {'minH': 3, 'minW': 3, 'h': 6, 'w': 6, 'y': 5, 'x': 24}, + 'lg': {'minH': 3, 'minW': 3, 'h': 5, 'w': 5, 'y': 6, 'x': 19}, + 'md': {'minH': 3, 'minW': 3, 'h': 6, 'w': 6, 'y': 8, 'x': 12}, + 'sm': {'minH': 3, 'minW': 3, 'h': 5, 'w': 6, 'y': 13, 'x': 6} + } + }, + { + 'type': 'terms', + 'showinput': False, + 'scale': '1/8', + 'quantity': 'results.material.structural_type', + 'layout': { + 'xxl': {'minH': 3, 'minW': 3, 'h': 9, 'w': 6, 'y': 0, 'x': 19}, + 'xl': {'minH': 3, 'minW': 3, 'h': 11, 'w': 5, 'y': 0, 'x': 19}, + 'lg': {'minH': 3, 'minW': 3, 'h': 6, 'w': 5, 'y': 0, 'x': 19}, + 'md': {'minH': 3, 'minW': 3, 'h': 6, 'w': 6, 'y': 8, 'x': 0}, + 'sm': {'minH': 3, 'minW': 3, 'h': 5, 'w': 6, 'y': 8, 'x': 6} + } + }, + { + 'type': 'terms', + 'showinput': True, + 'scale': '1/4', + 'quantity': 'results.method.simulation.program_name', + 'layout': { + 'xxl': {'minH': 3, 'minW': 3, 'h': 9, 'w': 6, 'y': 0, 'x': 13}, + 'xl': {'minH': 3, 'minW': 3, 'h': 11, 'w': 5, 'y': 0, 'x': 14}, + 'lg': {'minH': 3, 'minW': 3, 'h': 6, 'w': 5, 'y': 0, 'x': 14}, + 'md': {'minH': 3, 'minW': 3, 'h': 8, 'w': 6, 'y': 0, 'x': 12}, + 'sm': {'minH': 3, 'minW': 3, 'h': 5, 'w': 6, 'y': 8, 'x': 0} + } + }, + { + 'type': 'terms', + 'showinput': False, + 'scale': 'linear', + 'quantity': 'results.material.symmetry.crystal_system', + 'layout': { + 'xxl': {'minH': 3, 'minW': 3, 'h': 9, 'w': 5, 'y': 0, 'x': 25}, + 'xl': {'minH': 3, 'minW': 3, 'h': 5, 'w': 6, 'y': 0, 'x': 24}, + 'lg': {'minH': 3, 'minW': 3, 'h': 5, 'w': 5, 'y': 6, 'x': 14}, + 'md': {'minH': 3, 'minW': 3, 'h': 6, 'w': 6, 'y': 8, 'x': 6}, + 'sm': {'minH': 3, 'minW': 3, 'h': 5, 'w': 6, 'y': 13, 'x': 0} + } + } + ] }, 'filters_locked': { 'quantities': 'results.method.simulation.program_name', - }, + } }, 'materials': { 'label': 'Materials', 'path': 'materials', 'resource': 'materials', - 'breadcrumb': 'Materials', 'category': 'Theory', 'description': 'Search materials that are identified from calculations', - 'help': { - 'title': 'Materials', - 'content': inspect.cleandoc(r''' - This page allows you to search **materials** within - NOMAD. NOMAD can often automatically detect the material - from individual calculations that contain the full - atomistic structure and can then group the data by using - these detected materials. This allows you to search - individual materials which have properties that are - aggregated from several entries. Following the link for - a specific material will take you to the corresponding - [NOMAD Encyclopedia](https://nomad-lab.eu/prod/rae/encyclopedia/#/search) - page for that material. NOMAD Encyclopedia is a service - that is specifically oriented towards materials property - exploration. - - Notice that by default the properties that you search - can be combined from several different entries. If - instead you wish to search for a material with an - individual entry fullfilling your search criteria, - uncheck the **combine results from several - entries**-checkbox. - '''), - }, + 'readme': inspect.cleandoc(r''' + This page allows you to search **materials** within + NOMAD. NOMAD can often automatically detect the material + from individual calculations that contain the full + atomistic structure and can then group the data by using + these detected materials. This allows you to search + individual materials which have properties that are + aggregated from several entries. Following the link for + a specific material will take you to the corresponding + [NOMAD Encyclopedia](https://nomad-lab.eu/prod/rae/encyclopedia/#/search) + page for that material. NOMAD Encyclopedia is a service + that is specifically oriented towards materials property + exploration. + + Notice that by default the properties that you search + can be combined from several different entries. If + instead you wish to search for a material with an + individual entry fullfilling your search criteria, + uncheck the **combine results from several + entries**-checkbox. + '''), 'pagination': { 'order_by': 'chemical_formula_hill', 'order': 'asc' @@ -1254,7 +1334,7 @@ class UI(StrictSettings): 'options': { 'material': {'label': 'Material', 'level': 0}, 'elements': {'label': 'Elements / Formula', 'level': 1, 'size': 'xl'}, - 'structure': {'label': 'Structure', 'level': 1}, + 'structure': {'label': 'Structure / Symmetry', 'level': 1}, 'method': {'label': 'Method', 'level': 0}, 'dft': {'label': 'DFT', 'level': 1}, 'gw': {'label': 'GW', 'level': 1}, @@ -1291,19 +1371,14 @@ class UI(StrictSettings): 'eln': { 'label': 'ELN', 'path': 'eln', - 'resource': 'entries', - 'breadcrumb': 'ELN', 'category': 'Experiment', 'description': 'Search electronic lab notebooks', - 'help': { - 'title': 'ELN search', - 'content': inspect.cleandoc(r''' - This page allows you to specifically seach **electronic - lab notebooks (ELNs)** within NOMAD. It is very similar - to the entries search, but with a reduced filter set and - specialized arrangement of default columns. - '''), - }, + 'readme': inspect.cleandoc(r''' + This page allows you to specifically seach **electronic + lab notebooks (ELNs)** within NOMAD. It is very similar + to the entries search, but with a reduced filter set and + specialized arrangement of default columns. + '''), 'columns': { 'selected': [ 'entry_name', @@ -1330,11 +1405,6 @@ class UI(StrictSettings): 'published': {'label': 'Access'} } }, - 'rows': { - 'actions': {'enabled': True}, - 'details': {'enabled': True}, - 'selection': {'enabled': True} - }, 'filter_menus': { 'options': { 'material': {'label': 'Material', 'level': 0}, @@ -1346,9 +1416,6 @@ class UI(StrictSettings): 'optimade': {'label': 'Optimade', 'level': 0, 'size': 'm'}, } }, - 'filters': { - 'exclude': ['mainfile', 'entry_name', 'combine'] - }, 'filters_locked': { 'quantities': 'data' } @@ -1356,36 +1423,31 @@ class UI(StrictSettings): 'eels': { 'label': 'EELS', 'path': 'eels', - 'resource': 'entries', - 'breadcrumb': 'EELS', 'category': 'Experiment', 'description': 'Search electron energy loss spectroscopy experiments', - 'help': { - 'title': 'EELS', - 'content': inspect.cleandoc(r''' - This page allows you to spefically search **Electron - Energy Loss Spectroscopy (EELS) experiments** within - NOMAD. It is similar to the entries search, but with a - reduced filter set and specialized arrangement of - default columns. - '''), - }, + 'readme': inspect.cleandoc(r''' + This page allows you to spefically search **Electron + Energy Loss Spectroscopy (EELS) experiments** within + NOMAD. It is similar to the entries search, but with a + reduced filter set and specialized arrangement of + default columns. + '''), 'columns': { 'selected': [ 'results.material.chemical_formula_hill', - 'results.properties.spectroscopy.eels.detector_type', - 'results.properties.spectroscopy.eels.resolution', + 'results.properties.spectroscopic.spectra.provenance.eels.detector_type', + 'results.properties.spectroscopic.spectra.provenance.eels.resolution', 'upload_create_time', 'authors' ], 'options': { 'results.material.chemical_formula_hill': {'label': 'Formula', 'align': 'left'}, - 'results.properties.spectroscopy.eels.detector_type': {'label': 'Detector type'}, - 'results.properties.spectroscopy.eels.resolution': {'label': 'Resolution'}, + 'results.properties.spectroscopic.spectra.provenance.eels.detector_type': {'label': 'Detector type'}, + 'results.properties.spectroscopic.spectra.provenance.eels.resolution': {'label': 'Resolution'}, 'upload_create_time': {'label': 'Upload time', 'align': 'left'}, 'authors': {'label': 'Authors', 'align': 'left'}, - 'results.properties.spectroscopy.eels.min_energy': {}, - 'results.properties.spectroscopy.eels.max_energy': {}, + 'results.properties.spectroscopic.spectra.provenance.eels.min_energy': {}, + 'results.properties.spectroscopic.spectra.provenance.eels.max_energy': {}, 'entry_name': {'label': 'Name', 'align': 'left'}, 'entry_type': {'label': 'Entry type', 'align': 'left'}, 'mainfile': {'label': 'Mainfile', 'align': 'left'}, @@ -1395,11 +1457,6 @@ class UI(StrictSettings): 'published': {'label': 'Access'} } }, - 'rows': { - 'actions': {'enabled': True}, - 'details': {'enabled': True}, - 'selection': {'enabled': True} - }, 'filter_menus': { 'options': { 'material': {'label': 'Material', 'level': 0}, @@ -1411,9 +1468,6 @@ class UI(StrictSettings): 'optimade': {'label': 'Optimade', 'level': 0, 'size': 'm'}, } }, - 'filters': { - 'exclude': ['mainfile', 'entry_name', 'combine'] - }, 'filters_locked': { 'results.method.method_name': 'EELS' } @@ -1421,20 +1475,15 @@ class UI(StrictSettings): 'solarcells': { 'label': 'Solar Cells', 'path': 'solarcells', - 'resource': 'entries', - 'breadcrumb': 'Solar Cells', 'category': 'Use Cases', 'description': 'Search solar cells', - 'help': { - 'title': 'Solar cells', - 'content': inspect.cleandoc(r''' - This page allows you to search **solar cell data** - within NOMAD. The filter menu on the left and the shown - default columns are specifically designed for solar cell - exploration. The dashboard directly shows useful - interactive statistics about the data. - '''), - }, + 'readme': inspect.cleandoc(r''' + This page allows you to search **solar cell data** + within NOMAD. The filter menu on the left and the shown + default columns are specifically designed for solar cell + exploration. The dashboard directly shows useful + interactive statistics about the data. + '''), 'pagination': { 'order_by': 'results.properties.optoelectronic.solar_cell.efficiency', }, @@ -1629,16 +1678,11 @@ class UI(StrictSettings): 'published': {'label': 'Access'}, } }, - 'rows': { - 'actions': {'enabled': True}, - 'details': {'enabled': True}, - 'selection': {'enabled': True} - }, 'filter_menus': { 'options': { 'material': {'label': 'Absorber Material', 'level': 0}, 'elements': {'label': 'Elements / Formula', 'level': 1, 'size': 'xl'}, - 'structure': {'label': 'Structure', 'level': 1}, + 'structure': {'label': 'Structure / Symmetry', 'level': 1}, 'electronic': {'label': 'Electronic Properties', 'level': 0}, 'solarcell': {'label': 'Solar Cell Properties', 'level': 0}, 'eln': {'label': 'Electronic Lab Notebook', 'level': 0}, @@ -1648,13 +1692,302 @@ class UI(StrictSettings): 'optimade': {'label': 'Optimade', 'level': 0, 'size': 'm'}, } }, - 'filters': { - 'exclude': ['mainfile', 'entry_name', 'combine'] - }, 'filters_locked': { 'sections': 'nomad.datamodel.results.SolarCell' } }, + 'heterogeneouscatalyst': { + 'label': 'Heterogeneous Catalysis', + 'path': 'heterogeneouscatalyst', + 'category': 'Use Cases', + 'description': 'Search heterogeneous catalysts', + 'readme': inspect.cleandoc(r''' + This page allows you to search **catalyst and catalysis data** + within NOMAD. The filter menu on the left and the shown + default columns are specifically designed for Heterogeneous Catalyst + exploration. The dashboard directly shows useful + interactive statistics about the data. + '''), + 'pagination': { + 'order_by': 'upload_create_time', + 'order': 'asc' + }, + 'dashboard': { + 'widgets': [ + { + 'type': 'periodictable', + "scale": "linear", + "quantity": "results.material.elements", + "layout": { + "xxl": {"minH": 8, "minW": 12, "h": 8, "w": 12, "y": 5, "x": 0}, + "xl": {"minH": 8, "minW": 12, "h": 8, "w": 12, "y": 5, "x": 0}, + "lg": {"minH": 8, "minW": 12, "h": 8, "w": 12, "y": 6, "x": 0}, + "md": {"minH": 8, "minW": 12, "h": 8, "w": 12, "y": 5, "x": 0}, + "sm": {"minH": 8, "minW": 12, "h": 8, "w": 12, "y": 5, "x": 0} + }, + }, + { + 'type': 'terms', + 'showinput': True, + 'scale': 'linear', + 'quantity': 'results.properties.catalytic.reactivity.reactants.name', + 'layout': { + 'xxl': {'minH': 3, 'minW': 3, 'h': 5, 'w': 6, 'y': 0, 'x': 6}, + 'xl': {'minH': 3, 'minW': 3, 'h': 5, 'w': 6, 'y': 0, 'x': 0}, + 'lg': {'minH': 3, 'minW': 3, 'h': 6, 'w': 6, 'y': 0, 'x': 0}, + 'md': {'minH': 3, 'minW': 3, 'h': 5, 'w': 6, 'y': 0, 'x': 0}, + 'sm': {'minH': 3, 'minW': 3, 'h': 5, 'w': 4, 'y': 0, 'x': 0} + }, + }, + { + 'type': 'terms', + 'showinput': True, + 'scale': 'linear', + 'quantity': 'results.properties.catalytic.reactivity.reaction_name', + 'layout': { + 'xxl': {'minH': 3, 'minW': 3, 'h': 5, 'w': 6, 'y': 0, 'x': 0}, + 'xl': {'minH': 3, 'minW': 3, 'h': 5, 'w': 6, 'y': 0, 'x': 12}, + 'lg': {'minH': 3, 'minW': 3, 'h': 6, 'w': 6, 'y': 0, 'x': 12}, + 'md': {'minH': 3, 'minW': 3, 'h': 5, 'w': 6, 'y': 0, 'x': 12}, + 'sm': {'minH': 3, 'minW': 3, 'h': 5, 'w': 4, 'y': 0, 'x': 8} + }, + }, + { + 'type': 'terms', + 'showinput': True, + 'scale': 'linear', + 'quantity': 'results.properties.catalytic.reactivity.products.name', + 'layout': { + 'xxl': {'minH': 3, 'minW': 3, 'h': 5, 'w': 6, 'y': 0, 'x': 12}, + 'xl': {'minH': 3, 'minW': 3, 'h': 5, 'w': 6, 'y': 0, 'x': 6}, + 'lg': {'minH': 3, 'minW': 3, 'h': 6, 'w': 6, 'y': 0, 'x': 6}, + 'md': {'minH': 3, 'minW': 3, 'h': 5, 'w': 6, 'y': 0, 'x': 6}, + 'sm': {'minH': 3, 'minW': 3, 'h': 5, 'w': 4, 'y': 0, 'x': 4} + }, + }, + { + 'type': 'terms', + 'showinput': True, + 'scale': 'linear', + 'quantity': 'results.properties.catalytic.catalyst_synthesis.preparation_method', + 'layout': { + 'xxl': {'minH': 3, 'minW': 3, 'h': 4, 'w': 6, 'y': 5, 'x': 12}, + 'xl': {'minH': 3, 'minW': 3, 'h': 4, 'w': 6, 'y': 5, 'x': 12}, + 'lg': {'minH': 3, 'minW': 3, 'h': 4, 'w': 6, 'y': 6, 'x': 12}, + 'md': {'minH': 3, 'minW': 3, 'h': 4, 'w': 6, 'y': 5, 'x': 12}, + 'sm': {'minH': 3, 'minW': 3, 'h': 3, 'w': 4, 'y': 13, 'x': 8} + }, + }, + { + 'type': 'terms', + 'showinput': True, + 'scale': 'linear', + 'quantity': 'results.properties.catalytic.catalyst_synthesis.catalyst_type', + 'layout': { + 'xxl': {'minH': 3, 'minW': 3, 'h': 4, 'w': 6, 'y': 9, 'x': 12}, + 'xl': {'minH': 3, 'minW': 3, 'h': 4, 'w': 6, 'y': 9, 'x': 12}, + 'lg': {'minH': 3, 'minW': 3, 'h': 4, 'w': 6, 'y': 10, 'x': 12}, + 'md': {'minH': 3, 'minW': 3, 'h': 4, 'w': 6, 'y': 9, 'x': 12}, + 'sm': {'minH': 3, 'minW': 3, 'h': 3, 'w': 4, 'y': 16, 'x': 8} + }, + }, + { + 'type': 'histogram', + 'showinput': False, + 'autorange': False, + 'nbins': 30, + 'scale': 'linear', + 'quantity': 'results.properties.catalytic.reactivity.test_temperatures', + 'layout': { + 'xxl': {'minH': 3, 'minW': 8, 'h': 3, 'w': 9, 'y': 13, 'x': 0}, + 'xl': {'minH': 3, 'minW': 8, 'h': 4, 'w': 9, 'y': 13, 'x': 0}, + 'lg': {'minH': 3, 'minW': 8, 'h': 4, 'w': 9, 'y': 14, 'x': 0}, + 'md': {'minH': 3, 'minW': 8, 'h': 3, 'w': 9, 'y': 13, 'x': 0}, + 'sm': {'minH': 3, 'minW': 8, 'h': 3, 'w': 8, 'y': 13, 'x': 0} + }, + }, + { + 'type': 'histogram', + 'showinput': False, + 'autorange': False, + 'nbins': 30, + 'scale': 'linear', + 'quantity': 'results.properties.catalytic.reactivity.gas_hourly_space_velocity', + 'layout': { + 'xxl': {'minH': 3, 'minW': 8, 'h': 3, 'w': 9, 'y': 16, 'x': 0}, + 'xl': {'minH': 3, 'minW': 8, 'h': 4, 'w': 9, 'y': 17, 'x': 0}, + 'lg': {'minH': 3, 'minW': 8, 'h': 4, 'w': 9, 'y': 18, 'x': 0}, + 'md': {'minH': 3, 'minW': 8, 'h': 3, 'w': 9, 'y': 16, 'x': 9}, + 'sm': {'minH': 3, 'minW': 8, 'h': 3, 'w': 8, 'y': 22, 'x': 0} + }, + }, + { + 'type': 'histogram', + 'showinput': False, + 'autorange': False, + 'nbins': 30, + 'scale': 'linear', + 'quantity': 'results.properties.catalytic.reactivity.reactants.gas_concentration_in', + 'layout': { + 'xxl': {'minH': 3, 'minW': 8, 'h': 3, 'w': 9, 'y': 13, 'x': 9}, + 'xl': {'minH': 3, 'minW': 8, 'h': 4, 'w': 9, 'y': 13, 'x': 9}, + 'lg': {'minH': 3, 'minW': 8, 'h': 4, 'w': 9, 'y': 14, 'x': 9}, + 'md': {'minH': 3, 'minW': 8, 'h': 3, 'w': 9, 'y': 13, 'x': 9}, + 'sm': {'minH': 3, 'minW': 8, 'h': 3, 'w': 8, 'y': 16, 'x': 0} + }, + }, + { + 'type': 'histogram', + 'showinput': False, + 'autorange': False, + 'nbins': 30, + 'scale': 'linear', + 'quantity': 'results.properties.catalytic.reactivity.pressure', + 'layout': { + 'xxl': {'minH': 3, 'minW': 8, 'h': 3, 'w': 9, 'y': 16, 'x': 9}, + 'xl': {'minH': 3, 'minW': 8, 'h': 4, 'w': 9, 'y': 17, 'x': 9}, + 'lg': {'minH': 3, 'minW': 8, 'h': 4, 'w': 9, 'y': 14, 'x': 9}, + 'md': {'minH': 3, 'minW': 8, 'h': 3, 'w': 9, 'y': 16, 'x': 0}, + 'sm': {'minH': 3, 'minW': 8, 'h': 3, 'w': 8, 'y': 16, 'x': 0} + }, + }, + { + 'type': 'histogram', + 'showinput': False, + 'autorange': False, + 'nbins': 30, + 'scale': 'linear', + 'quantity': 'results.properties.catalytic.reactivity.products.selectivity', + 'layout': { + 'xxl': {'minH': 3, 'minW': 8, 'h': 3, 'w': 8, 'y': 19, 'x': 0}, + 'xl': {'minH': 3, 'minW': 8, 'h': 4, 'w': 9, 'y': 21, 'x': 0}, + 'lg': {'minH': 3, 'minW': 8, 'h': 4, 'w': 9, 'y': 26, 'x': 0}, + 'md': {'minH': 3, 'minW': 8, 'h': 3, 'w': 9, 'y': 22, 'x': 0}, + 'sm': {'minH': 3, 'minW': 8, 'h': 3, 'w': 8, 'y': 33, 'x': 0} + }, + }, + { + 'type': 'histogram', + 'showinput': False, + 'autorange': False, + 'nbins': 30, + 'scale': 'linear', + 'quantity': 'results.properties.catalytic.reactivity.reactants.conversion', + 'layout': { + 'xxl': {'minH': 3, 'minW': 8, 'h': 3, 'w': 8, 'y': 22, 'x': 0}, + 'xl': {'minH': 3, 'minW': 8, 'h': 4, 'w': 9, 'y': 25, 'x': 0}, + 'lg': {'minH': 3, 'minW': 8, 'h': 4, 'w': 9, 'y': 22, 'x': 0}, + 'md': {'minH': 3, 'minW': 8, 'h': 3, 'w': 9, 'y': 19, 'x': 0}, + 'sm': {'minH': 3, 'minW': 8, 'h': 3, 'w': 8, 'y': 30, 'x': 0} + }, + }, + { + 'type': 'histogram', + 'showinput': False, + 'autorange': False, + 'nbins': 30, + 'scale': 'linear', + 'quantity': 'results.properties.catalytic.reactivity.rates.reaction_rate', + 'layout': { + 'xxl': {'minH': 3, 'minW': 8, 'h': 3, 'w': 8, 'y': 25, 'x': 8}, + 'xl': {'minH': 3, 'minW': 8, 'h': 4, 'w': 9, 'y': 29, 'x': 9}, + 'lg': {'minH': 3, 'minW': 8, 'h': 4, 'w': 12, 'y': 30, 'x': 0}, + 'md': {'minH': 3, 'minW': 8, 'h': 3, 'w': 9, 'y': 25, 'x': 0}, + 'sm': {'minH': 3, 'minW': 8, 'h': 3, 'w': 8, 'y': 36, 'x': 0} + }, + }, + { + 'type': 'scatterplot', + 'autorange': True, + 'size': 1000, + 'color': 'results.properties.catalytic.catalyst_characterization.surface_area', + 'y': 'results.properties.catalytic.reactivity.products.selectivity', + 'x': 'results.properties.catalytic.reactivity.reactants.conversion', + 'layout': { + 'xxl': {'minH': 3, 'minW': 3, 'h': 6, 'w': 10, 'y': 19, 'x': 8}, + 'xl': {'minH': 3, 'minW': 3, 'h': 8, 'w': 9, 'y': 21, 'x': 9}, + 'lg': {'minH': 3, 'minW': 3, 'h': 8, 'w': 9, 'y': 22, 'x': 9}, + 'md': {'minH': 3, 'minW': 3, 'h': 6, 'w': 9, 'y': 19, 'x': 9}, + 'sm': {'minH': 3, 'minW': 3, 'h': 5, 'w': 8, 'y': 25, 'x': 9} + }, + }, + { + 'type': 'histogram', + 'showinput': False, + 'autorange': False, + 'nbins': 30, + 'scale': '1/4', + 'quantity': 'results.properties.catalytic.catalyst_characterization.surface_area', + 'layout': { + 'xxl': {'minH': 3, 'minW': 8, 'h': 3, 'w': 8, 'y': 25, 'x': 0}, + 'xl': {'minH': 3, 'minW': 8, 'h': 4, 'w': 9, 'y': 29, 'x': 0}, + 'lg': {'minH': 3, 'minW': 8, 'h': 4, 'w': 12, 'y': 34, 'x': 0}, + 'md': {'minH': 3, 'minW': 8, 'h': 3, 'w': 9, 'y': 28, 'x': 0}, + 'sm': {'minH': 3, 'minW': 8, 'h': 3, 'w': 8, 'y': 39, 'x': 0} + }, + }, + ] + }, + 'columns': { + 'selected': [ + 'entry_name', + 'results.properties.catalytic.reactivity.reaction_name', + 'results.properties.catalytic.catalyst_synthesis.catalyst_type', + 'results.properties.catalytic.catalyst_synthesis.preparation_method', + 'results.properties.catalytic.catalyst_characterization.surface_area' + ], + 'options': { + 'results.material.elements': {'label': 'Elements', 'align': 'left'}, + 'results.properties.catalytic.catalyst_synthesis.catalyst_type': {'label': 'Catalyst Type', 'align': 'left'}, + 'results.properties.catalytic.catalyst_synthesis.preparation_method': {'label': 'Preparation', 'align': 'left'}, + 'results.properties.catalytic.catalyst_characterization.surface_area': { + 'label': 'Surface Area (m^2/g)', + 'format': {'decimals': 2, 'mode': 'standard'}}, + 'results.properties.catalytic.reactivity.reaction_name': { + 'label': 'Reaction Name', 'align': 'left'}, + 'results.properties.catalytic.reactivity.reaction_class': { + 'label': 'Reaction Class', 'align': 'left'}, + 'results.properties.catalytic.catalyst_synthesis.catalyst_name': { + 'label': 'Catalyst Name', 'align': 'left'}, + 'results.properties.catalytic.reactivity.reactants.name': { + 'label': 'Reactants', 'align': 'left'}, + 'results.properties.catalytic.reactivity.products.name': { + 'label': 'Products', 'align': 'left'}, + 'references': {'label': 'References', 'align': 'left'}, + 'results.material.chemical_formula_hill': {'label': 'Formula', 'align': 'left'}, + 'results.material.structural_type': {'label': 'Dimensionality'}, + 'results.eln.lab_ids': {'label': 'Lab IDs'}, + 'results.eln.sections': {'label': 'Sections'}, + 'results.eln.methods': {'label': 'Methods'}, + 'results.eln.tags': {'label': 'Tags'}, + 'results.eln.instruments': {'label': 'Instruments'}, + 'entry_name': {'label': 'Name', 'align': 'left'}, + 'entry_type': {'label': 'Entry type', 'align': 'left'}, + 'mainfile': {'label': 'Mainfile', 'align': 'left'}, + 'upload_create_time': {'label': 'Upload time', 'align': 'left'}, + 'authors': {'label': 'Authors', 'align': 'left'}, + 'comment': {'label': 'Comment', 'align': 'left'}, + 'datasets': {'label': 'Datasets', 'align': 'left'}, + 'published': {'label': 'Access'}, + } + }, + 'filter_menus': { + 'options': { + 'material': {'label': 'Catalyst Material', 'level': 0}, + 'elements': {'label': 'Elements / Formula', 'level': 1, 'size': 'xl'}, + 'structure': {'label': 'Structure / Symmetry', 'level': 1}, + 'heterogeneouscatalyst': {'label': 'Catalytic Properties', 'level': 0}, + 'eln': {'label': 'Electronic Lab Notebook', 'level': 0}, + 'custom_quantities': {'label': 'User Defined Quantities', 'level': 0, 'size': 'l'}, + 'author': {'label': 'Author / Origin / Dataset', 'level': 0, 'size': 'm'}, + 'metadata': {'label': 'Visibility / IDs / Schema', 'level': 0}, + 'optimade': {'label': 'Optimade', 'level': 0, 'size': 'm'}, + } + }, + 'filters_locked': { + 'quantities': 'results.properties.catalytic' + } + }, } }), description='Contains the App definitions.' diff --git a/nomad/config/north.py b/nomad/config/north.py index 4b5785f4b945b11dab855ff17d9e6c307838553a..fcdcade3e943d3172d016e6a7ac61aa9ea07ef5a 100644 --- a/nomad/config/north.py +++ b/nomad/config/north.py @@ -16,6 +16,7 @@ # limitations under the License. # +from enum import Enum from typing import Optional, Dict, List from pydantic import BaseModel, Field @@ -33,6 +34,17 @@ class NORTHToolMaintainer(BaseModel): email: str +class ReadMode(str, Enum): + ro = 'ro' + rw = 'rw' + + +class NORTHExternalMount(BaseModel): + host_path: str + bind: str + mode: ReadMode = ReadMode.ro + + class NORTHTool(BaseModel): image: str description: str = None @@ -44,6 +56,7 @@ class NORTHTool(BaseModel): file_extensions: List[str] = [] maintainer: List[NORTHToolMaintainer] = [] privileged: bool = False + external_mounts: List[NORTHExternalMount] = [] class NORTHTools(Options): @@ -86,7 +99,7 @@ class NORTH(NomadSettings): 'jupyter': NORTHTool( short_description='Basic jupyter run with an empty notebook or on given notebook file.', description='### **Jupyter Notebook**: The Classic Notebook Interface\n\nThe Jupyter Notebook is the original web application for creating and sharing computational documents. It offers a simple, streamlined, document-centric experience.', - image='gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/jupyterlab:latest', + image='gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/jupyterlab:v0.0.1', path_prefix='tree', mount_path='/home/jovyan', icon='jupyter_logo.svg', @@ -107,7 +120,7 @@ class NORTH(NomadSettings): 'nionswift': NORTHTool( short_description='Run NionSwift to analyze data as well as prepare focus series reconstructions', description='Run Nion Swift to analyze data.', - image='gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/nionswift-webtop:latest', + image='gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/nionswift-webtop', privileged=True, mount_path='/config', maintainer=[ @@ -119,7 +132,7 @@ class NORTH(NomadSettings): ), 'nexustools': NORTHTool( description='Includes multiple NeXus tools for visualization and analysis.', - image='gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/nexus-webtop:latest', + image='gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/nexus-webtop', privileged=True, mount_path='/config', file_extensions=[ @@ -183,7 +196,7 @@ class NORTH(NomadSettings): 'xps': NORTHTool( short_description='An example for analyzing XPS data.', description='Includes tools for analyzing X-ray Photoelectron Spectroscopy (XPS) spectra and converting SPECS xml files into NeXus.', - image='gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/xps-jupyter:0.1', + image='gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/xps-jupyter', path_prefix='lab/tree', icon='jupyter_logo.svg', mount_path='/home/jovyan', @@ -204,6 +217,27 @@ class NORTH(NomadSettings): ) ] ), + + 'sts': NORTHTool( + short_description='An example for analyzing SPM (STM /STS) experiment.', + description="AT this moment, the reader works for two types of experiments, Scanning Tunneling Microscopy (STM) and Scanning Tunneling Spectroscopy (STS) from Scanning Probe Microscopy. It can only transform the data from Nanonis machine generated files into standarised nexus application definition NXsts. The present version of STS reader can handle files from two specific software versions generic 5e and genric 4.5.", + image='gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/sts-jupyter', + path_prefix='lab/tree', + icon='jupyter_logo.svg', + mount_path='/home/jovyan', + file_extensions=[ + 'ipynb', + 'nxs', + 'h5', + 'hdf5' + ], + maintainer=[ + NORTHToolMaintainer( + name='Rubel Mozumder', + email='rubel.mozumder@physik.hu-berlin.de' + ) + ] + ), 'webtop': NORTHTool( description='Baseline webtop image for test', image='gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/webtop', @@ -218,7 +252,7 @@ class NORTH(NomadSettings): ), 'apmtools': NORTHTool( short_description='An example for analyzing atom probe data.', - description='Miscellaneous tools from the atom probe community:\nCurrently the Leoben APT_analyzer and the paraprobe-toolbox.', + description='Miscellaneous tools from the atom probe community:\nCurrently APTyzer, paraprobe-toolbox, and APAV', image='gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-remote-tools-hub/apmtools-webtop', privileged=True, icon='jupyter_logo.svg', diff --git a/nomad/config/plugins.py b/nomad/config/plugins.py index a289ef8a6d61c9370580966fa3a035b7693bf870..b979744eadb1f99cb946b66fdb425e5be8e3a601 100644 --- a/nomad/config/plugins.py +++ b/nomad/config/plugins.py @@ -16,6 +16,8 @@ # limitations under the License. # +import sys +import importlib from typing_extensions import Annotated from typing import Optional, Dict, Union, List, Literal, Any from pydantic import BaseModel, Field, root_validator @@ -58,22 +60,25 @@ class PythonPluginBase(PluginBase): if not python_package: raise ValueError('Python plugins must provide a python_package.') - try: - # We manually look for the package to avoid the circlular imports that - # all "official" methods (importlib, pkgutil) will cause. This will also - # make the config import faster. - # We try to deduce the package path form the top-level package - package_path_segments = python_package.split('.') - root_package = package_path_segments[0] - package_dirs = package_path_segments[1:] - package_path = os.path.join( - os.path.dirname(pkgutil.get_loader(root_package).get_filename()), # type: ignore - *package_dirs) - if not os.path.isdir(package_path): - # We could not find it this way. Let's try to official way - package_path = os.path.dirname(pkgutil.get_loader(python_package).get_filename()) # type: ignore - except Exception as e: - raise ValueError(f'The python package {python_package} cannot be loaded.', e) + package_path = values.get('package_path') + if package_path is None: + try: + # We manually look for the package to avoid the circlular imports that + # all "official" methods (importlib, pkgutil) will cause. This will also + # make the config import faster. + # We try to deduce the package path from the top-level package + package_path_segments = python_package.split('.') + root_package = package_path_segments[0] + package_dirs = package_path_segments[1:] + package_path = os.path.join( + os.path.dirname(pkgutil.get_loader(root_package).get_filename()), # type: ignore + *package_dirs) + if not os.path.isdir(package_path): + # We could not find it this way. Let's try to official way + package_path = os.path.dirname(pkgutil.get_loader(python_package).get_filename()) # type: ignore + except Exception as e: + raise ValueError(f'The python package {python_package} cannot be loaded.', e) + values['package_path'] = package_path metadata_path = os.path.join(package_path, 'nomad_plugin.yaml') if os.path.exists(metadata_path): @@ -91,6 +96,8 @@ class Schema(PythonPluginBase): ''' A Schema describes a NOMAD Python schema that can be loaded as a plugin. ''' + package_path: Optional[str] = Field(description='Path of the plugin package. Will be determined using python_package if not explicitly defined.') + key: Optional[str] = Field(description='Key used to identify this plugin.') plugin_type: Literal['schema'] = Field('schema', description=''' The type of the plugin. This has to be the string `schema` for schema plugins. ''') @@ -203,3 +210,50 @@ Plugin = Annotated[Union[Schema, Parser], Field(discriminator='plugin_type')] class Plugins(Options): options: Dict[str, Plugin] = Field(dict(), description='The available plugin.') + + +def add_plugin(plugin: Schema) -> None: + '''Function for dynamically adding a plugin.''' + from nomad import config + from nomad.metainfo.elasticsearch_extension import entry_type + + if plugin.package_path not in sys.path: + sys.path.insert(0, plugin.package_path) + + # Add plugin to config + config.plugins.options[plugin.key] = plugin + + # Add plugin to Package registry + package = importlib.import_module(plugin.python_package) + package.m_package.__init_metainfo__() + + # Reload the dynamic quantities so that API is aware of the plugin + # quantities. + entry_type.reload_quantities_dynamic() + + +def remove_plugin(plugin) -> None: + '''Function for removing a plugin.''' + from nomad import config + from nomad.metainfo.elasticsearch_extension import entry_type + from nomad.metainfo import Package + + # Remove from path + try: + sys.path.remove(plugin.package_path) + except Exception: + pass + + # Remove package as plugin + del config.plugins.options[plugin.key] + + # Remove plugin from Package registry + package = importlib.import_module(plugin.python_package).m_package + for key, i_package in Package.registry.items(): + if i_package is package: + del Package.registry[key] + break + + # Reload the dynamic quantities so that API is aware of the plugin + # quantities. + entry_type.reload_quantities_dynamic() diff --git a/nomad/datamodel/data.py b/nomad/datamodel/data.py index 115a24d325d65023a272126cd04bc5289cae37c7..759a1ca0f0471dd2ba6ea5add1987690225b9ca3 100644 --- a/nomad/datamodel/data.py +++ b/nomad/datamodel/data.py @@ -85,7 +85,7 @@ class EntryData(ArchiveSection): from nomad.datamodel.metainfo.simulation.workflow import SimulationWorkflow # TODO entry_type should only be assigned if not already defined (done to pass eln test) - if not isinstance(archive.workflow2, SimulationWorkflow) or not archive.metadata.entry_type: + if not isinstance(archive.workflow2, SimulationWorkflow) and not archive.metadata.entry_type: archive.metadata.entry_type = self.m_def.name if archive.metadata.entry_name is None and archive.metadata.mainfile: archive.metadata.entry_name = os.path.basename(archive.metadata.mainfile) diff --git a/nomad/datamodel/datamodel.py b/nomad/datamodel/datamodel.py index 922ebf9f32ad8e8d475053d1fe8ba969334a17af..4e45ba90336496281476f6eab19ad7983e1a13a9 100644 --- a/nomad/datamodel/datamodel.py +++ b/nomad/datamodel/datamodel.py @@ -23,14 +23,17 @@ from enum import Enum import rfc3161ng from elasticsearch_dsl import analyzer, tokenizer -import numpy as np -from pint import Quantity as PintQuantity from nomad import utils from nomad.metainfo.mongoengine_extension import Mongo, MongoDocument from nomad.datamodel.metainfo.common import FastAccess from nomad.metainfo.pydantic_extension import PydanticModel -from nomad.metainfo.elasticsearch_extension import Elasticsearch, material_entry_type, entry_type as es_entry_type +from nomad.metainfo.elasticsearch_extension import ( + Elasticsearch, + material_entry_type, + entry_type as es_entry_type, + create_searchable_quantity +) from .util import parse_path from ..metainfo import ( Bytes, Package, Definition, MProxy, MSection, MCategory, Section, SubSection, Quantity, Reference, @@ -286,31 +289,40 @@ class EntryArchiveReference(MSection): class SearchableQuantity(MSection): - quantity_name = Quantity( + id = Quantity( type=str, - description='The name of the quantity holding the value.', - a_elasticsearch=Elasticsearch()) - section_definition = Quantity( + description=''' + The full identifier for this quantity that contains the path in the schema + + schema name. + ''', + a_elasticsearch=[Elasticsearch()]) + definition = Quantity( type=str, - description='A reference to the section definition for the section that holds the quantity that holds the value.', - a_elasticsearch=Elasticsearch()) - path = Quantity( - type=str, description='The path to the quantity holding the value.', + description='A reference to the quantity definition.', a_elasticsearch=Elasticsearch()) - keyword_value = Quantity( - type=str, description='The value mapped as an ES keyword field.', + path_archive = Quantity( + type=str, description='Path of the value within the archive.', a_elasticsearch=Elasticsearch()) - text_value = Quantity( - type=str, description='The value mapped as an ES text field.', - a_elasticsearch=Elasticsearch(mapping='text')) - long_value = Quantity( + bool_value = Quantity( + type=bool, description='The value mapped as an ES boolean field.', + a_elasticsearch=Elasticsearch(mapping='boolean')) + str_value = Quantity( + type=str, + description=''' + The value mapped as an ES text and keyword field. + ''', + a_elasticsearch=[ + Elasticsearch(mapping='text'), + Elasticsearch(mapping='keyword', field='keyword'), + ]) + int_value = Quantity( type=int, description='The value mapped as an ES long number field.', a_elasticsearch=Elasticsearch(mapping='long')) - double_value = Quantity( + float_value = Quantity( type=float, description='The value mapped as an ES double number field.', a_elasticsearch=Elasticsearch(mapping='double')) - date_value = Quantity( - type=str, description='The value mapped as an ES date field.', + datetime_value = Quantity( + type=Datetime, description='The value mapped as an ES date field.', a_elasticsearch=Elasticsearch(mapping='date')) @@ -398,7 +410,10 @@ class EntryMetadata(MSection): upload_name = Quantity( type=str, categories=[MongoUploadMetadata, EditableUserMetadata], description='The user provided upload name', - a_elasticsearch=Elasticsearch()) + a_elasticsearch=[ + Elasticsearch(material_entry_type), + Elasticsearch(suggestion="default"), + ]) upload_create_time = Quantity( type=Datetime, categories=[MongoUploadMetadata, EditableUserMetadata], @@ -682,7 +697,7 @@ class EntryMetadata(MSection): repeats=True, a_elasticsearch=Elasticsearch(nested=True)) - searchable_quantities = SubSection( + search_quantities = SubSection( sub_section=SearchableQuantity, repeats=True, a_elasticsearch=Elasticsearch(nested=True)) @@ -694,55 +709,7 @@ class EntryMetadata(MSection): section_paths = {} entry_references = [] - searchable_quantities = [] - - def create_searchable_quantity( - section: MSection, quantity_def: Quantity, quantity_path: str - ) -> SearchableQuantity: - if quantity_def.shape != []: - return None - - value = section.m_get(quantity_def) - if value is None: - return None - - is_supported = quantity_def.type in [str, float, int, np.float64, np.int32] - is_supported = is_supported or quantity_def.type == Datetime - is_supported = is_supported or isinstance(quantity_def.type, MEnum) - - if not is_supported: - return None - - searchable_quantity = SearchableQuantity() - searchable_quantity.quantity_name = quantity_def.name - try: - searchable_quantity.section_definition = quantity_def.m_parent.definition_reference( - archive, global_reference=True) - except AssertionError: - # TODO this happens if the schema is loaded from mongo and not an archive. - # As a result, the schema does not have an archive attached, the upload - # and entry id are unknown, and no global reference can be created. - pass - searchable_quantity.path = quantity_path - try: - if isinstance(quantity_def.type, MEnum): - searchable_quantity.keyword_value = str(value) - elif quantity_def.type == Datetime: - searchable_quantity.date_value = Datetime.serialize(section, quantity_def, value) - elif isinstance(value, str): - searchable_quantity.text_value = value - elif isinstance(value, int): - searchable_quantity.long_value = int(value) - elif isinstance(value, PintQuantity) and not np.isnan(value.m): - searchable_quantity.double_value = float(value.m) - elif isinstance(value, float) and not np.isnan(value): - searchable_quantity.double_value = float(value) - else: - return None - except TypeError: - return None - - return searchable_quantity + search_quantities = [] def get_section_path(section): section_path = section_paths.get(section) @@ -840,7 +807,13 @@ class EntryMetadata(MSection): if reference_section: entry_references.append(reference_section) - for section, property_def, _ in archive.m_traverse(): + # Determine the schema name to use for searchable quantities + schema_name = None + if hasattr(archive, 'data') and archive.data: + schema_name = archive.data.m_def.qualified_name() + + for section, property_def, _, location in archive.m_traverse(): + sections.add(section.m_def) if property_def is None: @@ -855,9 +828,15 @@ class EntryMetadata(MSection): if section_path.startswith(('data', 'nexus')) and \ isinstance(property_def, Quantity): - searchable_quantity = create_searchable_quantity(section, property_def, quantity_path) + searchable_quantity = create_searchable_quantity( + property_def, + quantity_path, + section, + '.'.join([str(x) for x in location]), + schema_name, + ) if searchable_quantity: - searchable_quantities.append(searchable_quantity) + search_quantities.append(searchable_quantity) # We collected entry_references, quantities, and sections before adding these # data to the archive itself. We manually add them here. @@ -877,7 +856,7 @@ class EntryMetadata(MSection): quantities.add(f'metadata.section_defs.{compatible_quantity.name}') self.entry_references.extend(entry_references) - self.searchable_quantities.extend(searchable_quantities) + self.search_quantities.extend(search_quantities) self.quantities = list(quantities) self.quantities.sort() self.sections = [section.qualified_name() for section in sections] diff --git a/nomad/datamodel/metainfo/__init__.py b/nomad/datamodel/metainfo/__init__.py index c76d9ebe505740e3113bcf6074a355d591d3f191..8b30523756a0120b1f4de14bf5503acf042bf47e 100644 --- a/nomad/datamodel/metainfo/__init__.py +++ b/nomad/datamodel/metainfo/__init__.py @@ -27,6 +27,7 @@ from .simulation import m_env from .eln.perovskite_solar_cell_database import m_package from .downloads import m_package from .eln.labfolder import m_package +from .plot import m_package for plugin in config.plugins.filtered_values(): if isinstance(plugin, Schema): diff --git a/nomad/datamodel/metainfo/annotations.py b/nomad/datamodel/metainfo/annotations.py index d31d7c0fe85e03bdf98cb6b5073ea9a67dc99ff5..19732d037fb7717bfb7f6dd3d5d3b4355137a8a0 100644 --- a/nomad/datamodel/metainfo/annotations.py +++ b/nomad/datamodel/metainfo/annotations.py @@ -25,6 +25,7 @@ from pydantic.main import BaseModel from nomad.utils import strip from nomad.metainfo import AnnotationModel, MEnum, MTypes, Datetime, Reference, Quantity +from .plot import PlotlyError class ELNComponentEnum(str, Enum): @@ -332,46 +333,58 @@ class BrowserAnnotation(AnnotationModel): class TabularMode(str, Enum): row = 'row' column = 'column' - root = 'root' - entry = 'entry' -class CurrentEntryOptions(BaseModel): - row_to_sections: Optional[List[str]] = Field([], description=''' - A `list` of paths to the repeating sub-sections where the tabular quantities are to be filled from individual rows - of the excel/csv file (i.e. in the row mode). Each path is a - `/` separated list of nested sub-sections. The targeted sub-sections, will be - considered when mapping table rows to quantities. - Has to be used to annotate the quantity that - holds the path to the `.csv` or excel file. - ''') - column_to_sections: Optional[List[str]] = Field([], description=''' - A `list` of paths to the sub-sections where the tabular quantities are to be filled from the - entire column of the excel/csv file (i.e. in the column mode). Each path is a - `/` separated list of nested sub-sections. The targeted sub-sections, will be - considered when mapping table columns to quantities. - Has to be used to annotate the quantity that - holds the path to the `.csv` or excel file. - ''') +class TabularParsingOptions(BaseModel): + skiprows: Union[List[int], int] = Field(None, description='Number of rows to skip') + sep: str = Field(None, description='Character identifier of a separator') + comment: str = Field(None, description='Character identifier of a commented line') + separator: str = Field(None, description='Alias for `sep`') + + +class TabularFileModeEnum(str, Enum): + current_entry = 'current_entry' + single_new_entry = 'single_new_entry' + multiple_new_entries = 'multiple_new_entries' + - def get_options(self): - return self.column_to_sections, self.row_to_sections +class TabularMappingOptions(BaseModel): + mapping_mode: TabularMode = Field(TabularMode.column, description=''' + This controls the behaviour of mapping of the extracted data onto NOMAD schema. + The supported values are: -class NewEntryOptions(CurrentEntryOptions): - row_to_entries: Optional[List[str]] = Field([], description=''' - A `list` of paths to the (sub)sections where the tabular quantities are to be filled from individual rows + `row`: A `list` of paths to the repeating sub-sections where the tabular quantities are to be filled from + individual rows of the excel/csv file (i.e. in the row mode). Each path is a `/` separated list of + nested sub-sections. The targeted sub-sections, will be considered when mapping table rows to quantities. + Has to be used to annotate the quantity that holds the path to the `.csv` or excel file.<br/> + `column`: A `list` of paths to the sub-sections where the tabular quantities are to be filled from the + entire column of the excel/csv file (i.e. in the column mode). Each path is a `/` + separated list of nested sub-sections. The targeted sub-sections, will be + considered when mapping table columns to quantities. Has to be used to annotate the quantity that + holds the path to the `.csv` or excel file.<br/> + `enrty`: A `list` of paths to the (sub)sections where the tabular quantities are to be filled from individual rows of the excel/csv file, to create distinct entries. Each path is a `/` separated list of nested sub-sections. The targeted (sub)sections, will be considered when mapping table rows to quantities. The schema of the resultant entry follows the (sub)section's schema. In order to parse the entire schema using entry mode, then set the first item in this list to `root`. Has to be used to annotate the quantity that - holds the path to the `.csv` or excel file. + holds the path to the `.csv` or excel file.<br/> ''') + file_mode: TabularFileModeEnum = Field(None, description=''' + This controls the behaviour of the parser towards working physical files in file system. - def get_options(self): - return self.column_to_sections, self.row_to_sections, self.row_to_entries + The supported values are: + + `current_entry`: Processing the data into the same NOMAD entry.<br/> + `single_new_entry`: Creating a new entry and processing the data into this new NOMAD entry.<br/> + `multiple_new_entries`: Creating many new entries and processing the data into these new NOMAD entries.<br/> + ''') + sections: List[str] = Field(None, description=''' + A `list` of paths to the (sub)sections where the tabular quantities are to be filled from the data + extracted from the tabular file. + ''') class TabularParserAnnotation(AnnotationModel): @@ -380,55 +393,173 @@ class TabularParserAnnotation(AnnotationModel): interprets the contents of this file as tabular data. Supports both `.csv` and Excel files. ''' + parsing_options: TabularParsingOptions = Field(TabularParsingOptions(), description=''' + Options on how to extract the data from csv/xlsx file. Under the hood, NOMAD uses pandas `Dataframe` + to parse the data from tabular files. These are the available options that can be passed down to the parser. - comment: str = Field(None, description=''' - The character denoting the commented lines in `.csv` files. This is passed to - pandas to parse the file. Has to be used to annotate the quantity that - holds the path to the `.csv` or excel file. - ''') - sep: str = Field(None, description=''' - The character used to separate cells in a `.csv` file. This is passed to - pandas to parse the file. Has to be used to annotate the quantity that - holds the path to the `.csv` or excel file. - ''') - skiprows: int = Field(None, description=''' - Number of `.csv` file rows that are skipped. This is passed to - pandas to parse the file. Has to be used to annotate the quantity that - holds the path to the `.csv` or excel file. - ''') - separator: str = Field(None, description='An alias for `sep`') - target_sub_section: List[str] = Field([], description=''' - this feature is deprecated and will be removed in future release. Use `row_sections` instead. - A `list` of paths to the repeating sub-sections where the tabular quantities are to be filled from individual rows - of the excel/csv file (i.e. in the row mode). Each path is a - `/` separated list of nested sub-sections. The targeted sub-sections, will be - considered when mapping table rows to quantities. - Has to be used to annotate the quantity that - holds the path to the `.csv` or excel file. + The supported values are: + + `skiprows`: Number of rows to be skipped while reading the file.<br/> + `sep`: The character used to separate cells (specific to csv files).<br/> + `comment`: The character denoting the commented lines.<br/> + `separator`: An alias for `sep`.<br/> ''') - mode: Optional[TabularMode] = Field(TabularMode.column, description=''' - This is optional. It will be removed in future release. - Either `column`, `row`, or `entry`. With `column` the whole column is mapped into a quantity - (needs to be a list). - With `row` each row (and its cells) are mapped into instances of a repeating - sub section, where each section represents a row (quantities need to be scalars). - With `entry` new entry is created and populated from each row (and its cells) where - all quantities should remain to be scalars. Has to be used to annotate the quantity that - holds the path to the `.csv` or excel file. + mapping_options: List[TabularMappingOptions] = Field([], description=''' + A list of directives on how to map the extracted data from the csv/xlsx file to NOMAD. Each directive + is a distinct directive, which allows for more modular definition of your tabular parser schema. + If no item is provided, the entire schema is treated to be parsed under column mode. + + The supported values in each item of this list are: + + `mapping_mode`: A `list` of paths to the repeating sub-sections where the tabular quantities are to be filled from + individual rows of the excel/csv file (i.e. in the row mode). Each path is a `/` separated list of + nested sub-sections. The targeted sub-sections, will be considered when mapping table rows to quantities. + Has to be used to annotate the quantity that holds the path to the `.csv` or excel file.<br/> + `file_mode`: The character used to separate cells (specific to csv files).<br/> + `sections`: The character denoting the commented lines.<br/> ''') - current_entry: CurrentEntryOptions = Field([], description=''' - Append a list of `row_sections` and `column_sections` here to parse the tabular data in the same NOMAD - entry + + +class PlotlyExpressTraceAnnotation(BaseModel): + ''' + Allows to plot figures using plotly Express. + ''' + method: str = Field(None, description='Plotly express plot method') + layout: Dict = Field(None, description='Plotly layout') + + x: Union[List[float], List[str], str] = Field(None, description='Plotly express x') + y: Union[List[float], List[str], str] = Field(None, description='Plotly express y') + z: Union[List[float], List[str], str] = Field(None, description='Plotly express z') + color: Union[List[float], List[str], str] = Field(None, description='Plotly express color') + symbol: str = Field(None, description='Plotly express symbol') + title: str = Field(None, description='Plotly express title') + + +class PlotlyExpressAnnotation(PlotlyExpressTraceAnnotation): + ''' + Allows to plot multi trace figures using plotly Express. + + ```yaml + sections: + Example: + base_sections: + - 'nomad.datamodel.metainfo.plot.PlotSection' + m_annotations: + plotly_express: + method: scatter + x: '#xArr' + y: '#yArr' + label: 'Example Express Plot' + index: 0 + layout: + title: + text: 'Example Express Plot' + xaxis: + title: + text: 'x axis' + yaxis: + title: + text: 'y axis' + traces: + - method: scatter + x: '#xArr' + y: '#zArr' + ``` + ''' + label: str = Field(None, description='Figure label') + traces: List[PlotlyExpressTraceAnnotation] = Field([], description=''' + List of traces added to the main trace defined by plotly_express method + ''') + + +class PlotlyGraphObjectAnnotation(BaseModel): + ''' + Allows to plot figures using plotly graph object. + + ```yaml + Example: + base_sections: + - 'nomad.datamodel.metainfo.plot.PlotSection' + m_annotations: + plotly_graph_object: + - data: + x: '#xArr' + y: '#xArr' + layout: + title: + text: 'Plotly Graph Object' + label: 'Plotly Graph Object' + index: 1 + ``` + ''' + label: str = Field(None, description='Figure label') + data: Dict = Field(None, description='Plotly data') + layout: Dict = Field(None, description='Plotly layout') + config: Dict = Field(None, description='Plotly config') + + def __init__(self, *args, **kwargs): + super(PlotlyGraphObjectAnnotation, self).__init__(*args, **kwargs) + if not self.data or not isinstance(self.data, dict): + raise PlotlyError('data should be a dictionary containing plotly data.') + + @validator('data') + def validate_data(cls, data): # pylint: disable=no-self-argument + assert isinstance(data, dict) and data, strip(f''' + data should be a dictionary containing plotly data. + ''') + + return data + + +class PlotlySubplotsAnnotation(BaseModel): + ''' + Allows to plot figures in subplots. + + ```yaml + Example: + base_sections: + - 'nomad.datamodel.metainfo.plot.PlotSection' + m_annotations: + plotly_subplots: + parameters: + rows: 2 + cols: 2 + layout: + title: + text: 'All plots' + plotly_express: + - method: scatter + x: '#xArr' + y: '#yArr' + title: 'subplot 1' + - method: scatter + x: '#xArr' + y: '#zArr' + title: 'subplot 2' + - method: scatter + x: '#zArr' + y: '#xArr' + title: 'subplot 3' + - method: scatter + x: '#zArr' + y: '#yArr' + title: 'subplot 4' + ``` + ''' + label: str = Field(None, description='Figure label') + layout: Dict = Field(None, description='Plotly layout') + parameters: Dict = Field(None, description=''' + plotly.subplots.make_subplots parameters i.e. rows, cols, shared_xaxes, shared_xaxes, horizontal_spacing , ... + See [plotly make_subplots documentation](https://plotly.com/python-api-reference/generated/plotly.subplots.make_subplots.html) for more information. ''') - new_entry: List[NewEntryOptions] = Field([], description=''' - Append a list of `row_sections` and `column_sections` and `row_to_entries` here to parse the tabular data - in new entries. + plotly_express: List[PlotlyExpressAnnotation] = Field([], description=''' + List of subplots defined by plotly_express method ''') class TabularAnnotation(AnnotationModel): ''' - Allows to map a quantity to a row of a tabular data-file. Should only be used + Allows to map a quantity to a row or a column of a spreadsheet data-file. Should only be used in conjunction with `tabular_parser`. ''' @@ -449,6 +580,9 @@ class TabularAnnotation(AnnotationModel): class PlotAnnotation(AnnotationModel): ''' + The `PlotAnnotation` is now deprecated and will be removed in future releases. + We recommend transitioning to the use of `PlotSection` and `PlotlyGraphObjectAnnotation` for your plotting needs. + This annotation can be used to add a plot to a section or quantity. Example: ```python @@ -510,7 +644,7 @@ class PlotAnnotation(AnnotationModel): See [https://plotly.com/javascript/reference/layout/](https://plotly.com/javascript/reference/layout/) for details. ''') config: dict = Field(None, description=''' - A dict passed as `config` to plotly to configure the plot functionallity. + A dict passed as `config` to plotly to configure the plot functionality. See [https://plotly.com/javascript/configuration-options/](https://plotly.com/javascript/configuration-options/) for details. ''') diff --git a/nomad/datamodel/metainfo/basesections.py b/nomad/datamodel/metainfo/basesections.py index 36e8f31a564a3ffc1bf1dd84e9b47752136e7eb3..315c1f575a816d68e05d86a20ab1ee44f8e775fb 100644 --- a/nomad/datamodel/metainfo/basesections.py +++ b/nomad/datamodel/metainfo/basesections.py @@ -16,7 +16,7 @@ # limitations under the License. # -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Iterable import datetime import re from typing import ( @@ -30,11 +30,16 @@ from ase.data import ( atomic_numbers, atomic_masses, ) +import requests + +from nomad.datamodel.metainfo.workflow import Link, Task, TaskReference, Workflow if TYPE_CHECKING: from structlog.stdlib import ( BoundLogger, ) - +from nomad.atomutils import ( + Formula, +) from nomad import ( utils, ) @@ -61,6 +66,125 @@ from nomad.datamodel.results import ( ElementalComposition as ResultsElementalComposition, Material, ) +from nomad.datamodel.metainfo.annotations import ( + ELNAnnotation, +) + + +PUB_CHEM_PUG_PATH = 'https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound' +CAS_API_PATH = 'https://commonchemistry.cas.org/api' +EXTERNAL_API_TIMEOUT = 5 + + +def pub_chem_api_get_properties(cid: int, properties: Iterable[str]) -> requests.Response: + ''' + Function for performing a get request to the PubChem PUG API to get properties for a + given compound identifier. + + Args: + cid (int): The compound identifier of the compound of interest. + properties (Iterable[str]): The properties to retrieve the value for. + + Returns: + requests.Response: The response as returned from the PubChem PUG API. + ''' + return requests.get( + url=f'{PUB_CHEM_PUG_PATH}/cid/{cid}/property/{str.join(",", properties)}/JSON', + timeout=EXTERNAL_API_TIMEOUT, + ) + + +def pub_chem_api_get_synonyms(cid: int) -> requests.Response: + ''' + Function for performing a get request to the PubChem PUG API to get properties for a + given compound identifier. + + Args: + cid (int): The compound identifier of the compound of interest. + + Returns: + requests.Response: The response as returned from the PubChem PUG API. + ''' + return requests.get( + url=f'{PUB_CHEM_PUG_PATH}/cid/{cid}/synonyms/JSON', + timeout=EXTERNAL_API_TIMEOUT, + ) + + +def pub_chem_api_search(path: str, search: str) -> requests.Response: + ''' + Function for performing a get request to the PubChem PUG API to search the given path + for a given string. + + Args: + path (str): The path (property) to search for. + search (str): The string to search for a match with. + + Returns: + requests.Response: The response as returned from the PubChem PUG API. + ''' + return requests.get( + url=f'{PUB_CHEM_PUG_PATH}/{path}/{search}/cids/JSON', + timeout=EXTERNAL_API_TIMEOUT, + ) + + +def cas_api_search(search: str) -> requests.Response: + ''' + Function for performing a get request to the CAS API to search for a match with the + given string. + + Args: + search (str): The string to search for a match with. + + Returns: + requests.Response: The response as returned from the CAS API. + ''' + return requests.get( + f'{CAS_API_PATH}/search?q={search}', + timeout=EXTERNAL_API_TIMEOUT, + ) + + +def cas_api_details(cas_rn: str) -> requests.Response: + ''' + Function for performing a get request to the CAS API to get the details for the + substance with the given CAS registry number. + + Args: + cas_rn (str): The CAS registry number of the substance for which to get details. + + Returns: + requests.Response: The response as returned from the CAS API. + ''' + return requests.get( + f'{CAS_API_PATH}/detail?cas_rn={cas_rn}', + timeout=EXTERNAL_API_TIMEOUT, + ) + + +def is_cas_rn(candidate: str) -> bool: + ''' + Help function for checking if a candidate string is a valid CAS Registry Number. + + Args: + candidate (str): The candidate string to be checked. + + Returns: + bool: Whether or not the candidate string is a valid CAS Registry Number. + ''' + try: + match = re.fullmatch( + r'(?P<p1>\d{2,7})-(?P<p2>\d{2})-(?P<check>\d{1})', + candidate + ) + check = sum([ + int(c) * (i + 1) for i, c + in enumerate(reversed(match.group('p1') + match.group('p2'))) + ]) % 10 + return int(match.group('check')) == check + except (AttributeError, TypeError): + return False class BaseSection(ArchiveSection): @@ -168,6 +292,52 @@ class Entity(BaseSection): ) +class ActivityStep(ArchiveSection): + ''' + Any dependant step of an `Activity`. + ''' + m_def = Section() + name = Quantity( + type=str, + description=''' + A short and descriptive name for this step. + ''', + a_eln=ELNAnnotation( + component='StringEditQuantity', + label='Step name', + ), + ) + start_time = Quantity( + type=Datetime, + description=''' + Optionally, the starting time of the activity step. If omitted, it is assumed to + follow directly after the previous step. + ''', + a_eln=ELNAnnotation( + component='DateTimeEditQuantity', + label='Starting time' + ), + ) + comment = Quantity( + type=str, + description=''' + Any additional information about the step not captured by the other fields. + ''', + a_eln=ELNAnnotation( + component='RichTextEditQuantity', + ), + ) + + def to_task(self) -> Task: + ''' + Returns the task description of this activity step. + + Returns: + Task: The activity step as a workflow task. + ''' + return Task(name=self.name) + + class Activity(BaseSection): ''' An action that has a temporal extension and for some time depends on some entity. @@ -180,11 +350,6 @@ class Activity(BaseSection): description='The date and time when this activity was started.', a_eln=dict(component='DateTimeEditQuantity', label='Starting Time'), ) - end_time = Quantity( - type=Datetime, - description='The date and time when this activity was done.', - a_eln=dict(component='DateTimeEditQuantity', label='Ending Time'), - ) method = Quantity( type=str, description='A short consistent handle for the applied method.', @@ -194,6 +359,13 @@ class Activity(BaseSection): description='location of the experiment.', a_eln=dict(component='StringEditQuantity'), ) + steps = SubSection( + section_def=ActivityStep, + description=''' + An ordered list of all the dependant steps that make up this activity. + ''', + repeats=True, + ) def normalize(self, archive, logger: 'BoundLogger') -> None: ''' @@ -212,6 +384,182 @@ class Activity(BaseSection): archive.results.eln.methods.append(self.method) else: archive.results.eln.methods.append(self.m_def.name) + if archive.workflow2 is None: + archive.workflow2 = Workflow(name=self.name) + archive.workflow2.tasks = [step.to_task() for step in self.steps] + + +class SectionReference(ArchiveSection): + ''' + A section used for referencing another section. + ''' + name = Quantity( + type=str, + description='A short descriptive name for the role of this reference.', + a_eln=ELNAnnotation( + component='StringEditQuantity', + ) + ) + reference = Quantity( + type=ArchiveSection, + description='A reference to a NOMAD archive section.', + a_eln=ELNAnnotation( + component='ReferenceEditQuantity', + label='Section Reference', + ), + ) + + +class EntityReference(SectionReference): + ''' + A section used for referencing an Entity. + ''' + reference = Quantity( + type=Entity, + description='A reference to a NOMAD `Entity` entry.', + a_eln=ELNAnnotation( + component='ReferenceEditQuantity', + label='Entity Reference', + ), + ) + lab_id = Quantity( + type=str, + description=''' + The readable identifier for the entity. + ''', + a_eln=ELNAnnotation( + component='StringEditQuantity' + ), + ) + + def normalize(self, archive, logger: 'BoundLogger') -> None: + ''' + The normalizer for the `EntityReference` class. + Will attempt to fill the `reference` from the `lab_id` or vice versa. + + Args: + archive (EntryArchive): The archive containing the section that is being + normalized. + logger ('BoundLogger'): A structlog logger. + ''' + super(EntityReference, self).normalize(archive, logger) + if self.reference is None and self.lab_id is not None: + from nomad.search import search, MetadataPagination + query = { + 'results.eln.lab_ids': self.lab_id + } + search_result = search( + owner='all', + query=query, + pagination=MetadataPagination(page_size=1), + user_id=archive.metadata.main_author.user_id) + if search_result.pagination.total > 0: + entry_id = search_result.data[0]["entry_id"] + upload_id = search_result.data[0]["upload_id"] + self.reference = f'../uploads/{upload_id}/archive/{entry_id}#data' + if search_result.pagination.total > 1: + logger.warn( + f'Found {search_result.pagination.total} entries with lab_id: ' + f'"{self.lab_id}". Will use the first one found.' + ) + else: + logger.warn( + f'Found no entries with lab_id: "{self.lab_id}".' + ) + elif self.lab_id is None and self.reference is not None: + self.lab_id = self.reference.lab_id + if self.name is None and self.lab_id is not None: + self.name = self.lab_id + + +class ExperimentStep(ActivityStep): + ''' + Any dependant step of an `Experiment`. + ''' + activity = Quantity( + type=Activity, + description=''' + The activity that makes up this step of the experiment. + ''', + a_eln=ELNAnnotation( + component='ReferenceEditQuantity', + ), + ) + lab_id = Quantity( + type=str, + description=''' + The readable identifier for the activity. + ''', + a_eln=ELNAnnotation( + component='StringEditQuantity', + label='Activity ID', + ), + ) + + def normalize(self, archive, logger: 'BoundLogger') -> None: + ''' + The normalizer for the `ExperimentStep` class. + Will attempt to fill the `activity` from the `lab_id` or vice versa. + If the activity reference is filled but the start time is not the time will be + taken from the `datetime` property of the referenced activity. + + Args: + archive (EntryArchive): The archive containing the section that is being + normalized. + logger ('BoundLogger'): A structlog logger. + ''' + super(ExperimentStep, self).normalize(archive, logger) + if self.activity is None and self.lab_id is not None: + from nomad.search import search, MetadataPagination + query = { + 'results.eln.lab_ids': self.lab_id + } + search_result = search( + owner='all', + query=query, + pagination=MetadataPagination(page_size=1), + user_id=archive.metadata.main_author.user_id) + if search_result.pagination.total > 0: + entry_id = search_result.data[0]["entry_id"] + upload_id = search_result.data[0]["upload_id"] + self.activity = f'../uploads/{upload_id}/archive/{entry_id}#data' + if search_result.pagination.total > 1: + logger.warn( + f'Found {search_result.pagination.total} entries with lab_id: ' + f'"{self.lab_id}". Will use the first one found.' + ) + else: + logger.warn( + f'Found no entries with lab_id: "{self.lab_id}".' + ) + elif self.lab_id is None and self.activity is not None: + self.lab_id = self.activity.lab_id + if self.name is None and self.lab_id is not None: + self.name = self.lab_id + if self.activity is not None and self.start_time is None and self.activity.datetime: + self.start_time = self.activity.datetime + + def to_task(self) -> Task: + return TaskReference(task=self.activity.m_parent.workflow2) + + +class Experiment(Activity): + ''' + A section for grouping activities together into an experiment. + ''' + steps = Activity.steps.m_copy() + steps.section_def = ExperimentStep + + +class Collection(Entity): + ''' + A section for grouping entities together into a collection. + ''' + entities = SubSection( + section_def=EntityReference, + description='References to the entities that make up the collection.', + repeats=True, + ) class ElementalComposition(ArchiveSection): @@ -401,87 +749,194 @@ class Instrument(Entity): archive.results.eln.instruments.append(self.name) -class Process(Activity): +class InstrumentReference(EntityReference): ''' - A planned process which results in physical changes in a specified input material. - [ obi : prs obi : mc obi : fg obi : jf obi : bp ] - - Synonyms: - - preparative method - - sample preparation - - sample preparative method - - material transformations + A section used for referencing an Instrument. ''' - m_def = Section( - links=['http://purl.obolibrary.org/obo/OBI_0000094'], + reference = Quantity( + type=Instrument, + description='A reference to a NOMAD `Instrument` entry.', + a_eln=ELNAnnotation( + component='ReferenceEditQuantity', + label='Instrument Reference', + ), ) -class Measurement(Activity): +class Component(ArchiveSection): ''' - A planned process with the objective to produce information about the material entity - that is the evaluant, by physically examining it or its proxies. [ obi : pppb ] + A section for describing a component and its role in a composite system. ''' - m_def = Section( - links=['http://purl.obolibrary.org/obo/OBI_0000070'], + name = Quantity( + type=str, + description='A short name for the component.', + a_eln=dict(component='StringEditQuantity', label='Component label'), + ) + mass = Quantity( + type=np.float64, + description='The mass of the component.', + unit='kg', + a_eln=dict(component='NumberEditQuantity', defaultDisplayUnit='mg'), + ) + mass_fraction = Quantity( + type=np.float64, + description='The mass fraction of the component in the composite system.', + a_eln=dict(component='NumberEditQuantity'), ) -class SynthesisMethod(Process): +class SystemComponent(Component): ''' - A method used to synthesise a sample. + A section for describing a system component and its role in a composite system. ''' - m_def = Section( - links=['http://purl.obolibrary.org/obo/CHMO_0001301'], + system = Quantity( + type=Reference(System.m_def), + description='A reference to the component system.', + a_eln=dict(component='ReferenceEditQuantity'), ) + def normalize(self, archive, logger: 'BoundLogger') -> None: + ''' + The normalizer for the `SystemComponent` class. If none is set, the normalizer + will set the name of the component to be that of the referenced system if it has + one. + + Args: + archive (EntryArchive): The archive containing the section that is being + normalized. + logger ('BoundLogger'): A structlog logger. + ''' + super(SystemComponent, self).normalize(archive, logger) + if self.name is None and self.system is not None: + self.name = self.system.name + -class Component(ArchiveSection): +class PureSubstanceSection(ArchiveSection): ''' - A section for describing a component and its role in an ensemble. + A sub section for describing any elemental, molecular or single phase pure substance. ''' name = Quantity( type=str, - description='A short name for the component.', - a_eln=dict(component='StringEditQuantity', label='Component name'), + description='A short name for the substance.', + a_eln=dict(component='StringEditQuantity', label='Substance name'), ) - system = Quantity( - type=Reference(System.m_def), - description='A reference to the component system.', - a_eln=dict(component='ReferenceEditQuantity'), + iupac_name = Quantity( + type=str, + description='IUPAC name.', + a_eln=dict(component='StringEditQuantity'), ) - mass = Quantity( - type=np.float64, - description='The mass of the component.', - unit='kg', - a_eln=dict(component='NumberEditQuantity', defaultDisplayUnit='mg'), + molecular_formula = Quantity( + type=str, + description='Molecular formula.', + a_eln=dict(component='StringEditQuantity'), + ) + molecular_mass = Quantity( + type=np.dtype(np.float64), + unit='Da', + description='Molecular mass.', + a_eln=dict( + component='NumberEditQuantity', + defaultDisplayUnit='Da', + ), + ) + inchi = Quantity( + type=str, + description='Inchi.', + a_eln=dict(component='StringEditQuantity'), + ) + inchi_key = Quantity( + type=str, + description='Inchi key.', + a_eln=dict(component='StringEditQuantity'), + ) + smile = Quantity( + type=str, + description='Smile.', + a_eln=dict(component='StringEditQuantity'), + ) + canonical_smile = Quantity( + type=str, + description='Canonical smile.', + a_eln=dict(component='StringEditQuantity'), + ) + cas_number = Quantity( + type=str, + description='CAS number.', + a_eln=dict(component='StringEditQuantity'), + ) + + +class PureSubstanceComponent(Component): + ''' + A section for describing a substance component and its role in a composite system. + ''' + substance_name = Quantity( + type=str, + description=''' + The name of the substance within the section where this component is contained. + ''', + a_eln=dict( + component='StringEditQuantity' + ) + ) + pure_substance = SubSection( + section_def=PureSubstanceSection, + description=''' + Section describing the pure substance that is the component. + ''', ) def normalize(self, archive, logger: 'BoundLogger') -> None: ''' - The normalizer for the `Component` class. If none is set, the normalizer - will set the name of the component to be that of the referenced system if it has - one. + The normalizer for the `PureSubstanceComponent` class. If none is set, the + normalizer will set the name of the component to be the molecular formula of the + substance. Args: archive (EntryArchive): The archive containing the section that is being normalized. logger ('BoundLogger'): A structlog logger. ''' - super(Component, self).normalize(archive, logger) - if self.name is None and self.system is not None: - self.name = self.system.name + super(PureSubstanceComponent, self).normalize(archive, logger) + if self.substance_name and self.pure_substance is None: + self.pure_substance = PureSubstanceSection( + name=self.substance_name + ) + if self.name is None and self.pure_substance is not None: + self.name = self.pure_substance.molecular_formula -class Ensemble(System): +def elemental_composition_from_formula(formula: Formula) -> List[ElementalComposition]: ''' - A base section for an ensemble of material systems. Each component of the ensemble is - of a (sub)type of `System`. + Help function for generating list of `ElementalComposition` instances from + `nomad.atomutils.Formula` item + + Args: + formula (Formula): The `nomad.atomutils.Formula` item + + Returns: + List[ElementalComposition]: List of filled `ElementalComposition` items + ''' + mass_fractions = formula.mass_fractions() + return [ + ElementalComposition( + element=element, + atomic_fraction=fraction, + mass_fraction=mass_fractions[element], + ) + for element, fraction in formula.atomic_fractions().items() + ] + + +class CompositeSystem(System): + ''' + A base section for a material systems composed of components. + Each component of the composite system is of a (sub)type of `System`. ''' components = SubSection( description=''' - A list of all the components of the ensemble containing a name, reference to the - system section and mass of that component. + A list of all the components of the composite system containing a name, reference + to the system section and mass of that component. ''', section_def=Component, repeats=True, @@ -556,13 +1011,13 @@ class Ensemble(System): def normalize(self, archive, logger: 'BoundLogger') -> None: ''' - The normalizer for the `Ensemble` class. If the elemental composition list is + The normalizer for the `CompositeSystem` class. If the elemental composition list is empty, the normalizer will iterate over the components and extract all the elements for populating the elemental composition list. If masses are provided for all components and the elemental composition of all components contain atomic fractions the normalizer will also calculate the atomic fractions for the - ensemble. The populated elemental composition list is added to the results by the - normalizer in the `System` super class. + composite system. The populated elemental composition list is added to the results + by the normalizer in the `System` super class. Args: archive (EntryArchive): The archive containing the section that is being @@ -571,18 +1026,43 @@ class Ensemble(System): ''' if logger is None: logger = utils.get_logger(__name__) + mass_fractions = [component.mass_fraction for component in self.components] + if mass_fractions.count(None) == 1: + empty_index = mass_fractions.index(None) + mass_fractions.pop(empty_index) + self.components[empty_index].mass_fraction = 1 - sum(mass_fractions) if not self.elemental_composition: - from pint import UnitRegistry - ureg = UnitRegistry() - mass_dict: Dict[str, float] = {} - for component in self.components: - if component.mass is None: - mass = None + if any(component.mass is None for component in self.components): + if all(component.mass is None for component in self.components): + masses = [component.mass_fraction for component in self.components] + else: + mass = next( + component.mass.to(ureg.kilogram).magnitude + for component in self.components if component.mass is not None + ) + masses = [ + mass * component.mass_fraction + if component.mass is None and component.mass_fraction is not None + else component.mass for component in self.components + ] + else: + masses = [ + component.mass.to(ureg.kilogram).magnitude + for component in self.components + ] + for component, mass in zip(self.components, masses): + if isinstance(component, PureSubstanceComponent): + try: + formula = Formula(component.pure_substance.molecular_formula) + elemental_composition = elemental_composition_from_formula(formula) + except ValueError: + elemental_composition = [] + elif isinstance(component, SystemComponent): + elemental_composition = component.system.elemental_composition else: - mass = component.mass.to(ureg.kilogram).magnitude - component_dict = self._atomic_to_mass( - component.system.elemental_composition, mass) + elemental_composition = [] + component_dict = self._atomic_to_mass(elemental_composition, mass) for element, mass in component_dict.items(): if element in mass_dict and mass is not None: mass_dict[element] += mass @@ -592,12 +1072,233 @@ class Ensemble(System): for comp in self.elemental_composition: comp.normalize(archive, logger) - super(Ensemble, self).normalize(archive, logger) + super(CompositeSystem, self).normalize(archive, logger) + + +class CompositeSystemReference(EntityReference): + ''' + A section used for referencing a CompositeSystem. + ''' + reference = Quantity( + type=CompositeSystem, + description='A reference to a NOMAD `CompositeSystem` entry.', + a_eln=ELNAnnotation( + component='ReferenceEditQuantity', + label='Composite System Reference', + ), + ) + + +class ProcessStep(ActivityStep): + ''' + Any dependant step of a `Process`. + ''' + duration = Quantity( + type=float, + unit='second', + description=''' + The duration time of the process step. + ''', + a_eln=ELNAnnotation( + component='NumberEditQuantity', + defaultDisplayUnit='second', + ), + ) + + +class Process(Activity): + ''' + A planned process which results in physical changes in a specified input material. + [ obi : prs obi : mc obi : fg obi : jf obi : bp ] + + Synonyms: + - preparative method + - sample preparation + - sample preparative method + - material transformations + ''' + m_def = Section( + links=['http://purl.obolibrary.org/obo/OBI_0000094'], + ) + end_time = Quantity( + type=Datetime, + description='The date and time when this process was finished.', + a_eln=dict(component='DateTimeEditQuantity', label='Ending Time'), + ) + steps = SubSection( + section_def=ProcessStep, + description=''' + An ordered list of all the dependant steps that make up this activity. + ''', + repeats=True, + ) + instruments = SubSection( + section_def=InstrumentReference, + description=''' + A list of all the instruments and their role in this process. + ''', + repeats=True, + ) + samples = SubSection( + section_def=CompositeSystemReference, + description=''' + The samples as that have undergone the process. + ''', + repeats=True, + ) + + def normalize(self, archive, logger: 'BoundLogger') -> None: + ''' + The normalizer for the `Process` class. + + Args: + archive (EntryArchive): The archive containing the section that is being + normalized. + logger ('BoundLogger'): A structlog logger. + ''' + super(Process, self).normalize(archive, logger) + if ( + self.datetime is not None + and all(step.duration is not None for step in self.steps) + and any(step.start_time is None for step in self.steps) + ): + start = self.datetime + for step in self.steps: + if step.start_time is None: + step.start_time = start + start += datetime.timedelta(seconds=step.duration.magnitude) + if self.end_time is None and start > self.datetime: + self.end_time = start + archive.workflow2.outputs = [ + Link(name=sample.name, section=sample.reference) for sample in self.samples + ] + + +class ActivityResult(ArchiveSection): + ''' + A section for the results of an `Activity`. + ''' + name = Quantity( + type=str, + description='A short and descriptive name for the result.', + a_eln=dict(component='StringEditQuantity', label='Short name'), + ) + + +class AnalysisResult(ActivityResult): + ''' + A section for the results of an `Analysis` process. + ''' + pass + + +class Analysis(Activity): + ''' + A planned process that produces output data from input data. + + Synonyms: + - data processing + - data analysis + ''' + m_def = Section( + links=['http://purl.obolibrary.org/obo/OBI_0200000'] + ) + inputs = SubSection( + section_def=SectionReference, + description='The input data of the analysis.', + repeats=True, + ) + outputs = SubSection( + section_def=AnalysisResult, + description='The output data of the analysis.', + repeats=True, + ) + + def normalize(self, archive, logger: 'BoundLogger') -> None: + ''' + The normalizer for the `Analysis` section. + + Args: + archive (EntryArchive): The archive containing the section that is being + normalized. + logger ('BoundLogger'): A structlog logger. + ''' + super(Analysis, self).normalize(archive, logger) + archive.workflow2.inputs = [ + Link(name=input.name, section=input.reference) for input in self.inputs + ] + archive.workflow2.outputs = [ + Link(name=output.name, section=output) for output in self.outputs + ] + + +class SynthesisMethod(Process): + ''' + A method used to synthesise a sample. + ''' + m_def = Section( + links=['http://purl.obolibrary.org/obo/CHMO_0001301'], + ) + + +class MeasurementResult(ActivityResult): + ''' + A section for the results of an `Measurement` process. + ''' + pass + + +class Measurement(Activity): + ''' + A planned process with the objective to produce information about the material entity + that is the evaluant, by physically examining it or its proxies. [ obi : pppb ] + ''' + m_def = Section( + links=['http://purl.obolibrary.org/obo/OBI_0000070'], + ) + samples = SubSection( + section_def=CompositeSystemReference, + description=''' + A list of all the samples measured during the measurement. + ''', + repeats=True, + ) + instruments = SubSection( + section_def=InstrumentReference, + description=''' + A list of all the instruments and their role in this process. + ''', + repeats=True, + ) + results = SubSection( + section_def=MeasurementResult, + description=''' + The result of the measurement. + ''', + repeats=True, + ) + + def normalize(self, archive, logger: 'BoundLogger') -> None: + ''' + The normalizer for the `Measurement` section. + + Args: + archive (EntryArchive): The archive containing the section that is being + normalized. + logger ('BoundLogger'): A structlog logger. + ''' + super(Measurement, self).normalize(archive, logger) + archive.workflow2.inputs = [ + Link(name=sample.name, section=sample.reference) for sample in self.samples + ] + archive.workflow2.outputs = [ + Link(name=result.name, section=result) for result in self.results + ] -class Substance(System): +class PureSubstance(System): ''' - A base section for any elemental, molecular of single phase substance. + A base section for any elemental, molecular, or single phase pure substance. ''' m_def = Section( links=['http://purl.obolibrary.org/obo/CHEBI_23367'], @@ -614,11 +1315,6 @@ class Substance(System): ''', a_eln=dict(component='StringEditQuantity', label='Substance ID'), ) - molecular_formula = Quantity( - type=str, - description='Molecular formula.', - a_eln=dict(component='StringEditQuantity'), - ) description = Quantity( type=str, description=''' @@ -630,6 +1326,12 @@ class Substance(System): label='Detailed substance description', ), ) + pure_substance = SubSection( + section_def=PureSubstanceSection, + description=''' + Section with properties describing the substance. + ''' + ) def normalize(self, archive, logger: 'BoundLogger') -> None: ''' @@ -641,34 +1343,198 @@ class Substance(System): archive (EntryArchive): The archive that is being normalized. logger ('BoundLogger'): A structlog logger. ''' - super(Substance, self).normalize(archive, logger) + super(PureSubstance, self).normalize(archive, logger) if logger is None: logger = utils.get_logger(__name__) - from nomad.atomutils import Formula - - if self.molecular_formula: + if self.pure_substance and self.pure_substance.molecular_formula: if not archive.results: archive.results = Results() if not archive.results.material: archive.results.material = Material() - try: - formula = Formula(self.molecular_formula) - formula.populate(archive.results.material) + formula = Formula(self.pure_substance.molecular_formula) + try: + formula.populate(archive.results.material) + except ValueError: + logger.info('Not overwriting existing results.material.') if not self.elemental_composition: - mass_fractions = formula.mass_fractions() - for element, fraction in formula.atomic_fractions().items(): - self.elemental_composition.append( - ElementalComposition( - element=element, - atomic_fraction=fraction, - mass_fraction=mass_fractions[element], - ) - ) + self.elemental_composition = elemental_composition_from_formula(formula) except Exception as e: logger.warn('Could not analyse chemical formula.', exc_info=e) +class PubChemPureSubstanceSection(PureSubstanceSection): + ''' + A section for pure substances existing as "compounds" in the PubChem database. + ''' + m_def = Section( + label='PubChem Pure Substance Section', + ) + pub_chem_cid = Quantity( + type=int, + a_eln=dict( + component='NumberEditQuantity', + ), + ) + pub_chem_link = Quantity( + type=str, + a_eln=dict( + component='StringEditQuantity', + ), + ) + + def _populate_from_cid(self, logger: 'BoundLogger') -> None: + ''' + Private method for populating unfilled properties by searching the PubChem using + the CID in `pub_chem_cid`. + + Args: + logger (BoundLogger): A structlog logger. + ''' + properties = { + 'Title': 'name', + 'IUPACName': 'iupac_name', + 'MolecularFormula': 'molecular_formula', + 'ExactMass': 'molecular_mass', + 'InChI': 'inchi', + 'InChIKey': 'inchi_key', + 'IsomericSMILES': 'smile', + 'CanonicalSMILES': 'canonical_smile', + } + response = pub_chem_api_get_properties(cid=self.pub_chem_cid, properties=properties) + if not response.ok: + logger.warn(f'Property request to PubChem responded with: {response}') + return + self.pub_chem_link = f'https://pubchem.ncbi.nlm.nih.gov/compound/{self.pub_chem_cid}' + try: + property_values = response.json()['PropertyTable']['Properties'][0] + except (KeyError, IndexError): + property_values = {} + for property_name in properties: + if getattr(self, properties[property_name], None) is None: + try: + setattr( + self, + properties[property_name], + property_values[property_name], + ) + except KeyError: + logger.warn( + f'Property "{property_name}" missing from PubChem response.' + ) + if self.cas_number is None: + response = pub_chem_api_get_synonyms(cid=self.pub_chem_cid) + if not response.ok: + logger.warn(f'Synonyms request to PubChem responded with: {response}') + return + response_dict = response.json() + try: + synonyms = response_dict['InformationList']['Information'][0]['Synonym'] + except (KeyError, IndexError): + synonyms = [] + for synonym in synonyms: + if is_cas_rn(synonym): + self.cas_number = synonym + break + + def _pub_chem_search_unique(self, search: str, path: str, logger: 'BoundLogger') -> bool: + ''' + Private method for searching the PubChem API for CIDs using the provided `path` + and `search` strings. + + Args: + search (str): The string containing the search value. + path (str): The path to search the string for. + logger (BoundLogger): A structlog logger. + + Returns: + bool: _description_ + ''' + response = pub_chem_api_search(path=path, search=search) + if response.status_code == 404: + logger.info(f'No results for PubChem search for {path}="{search}".') + return False + elif not response.ok: + logger.warn(f'PubChem search for {path}="{search}" yielded: {response}') + return False + try: + cids = response.json()['IdentifierList']['CID'] + except KeyError: + logger.warn(f'CID search request to PubChem response missing CID list.') + return False + if len(cids) == 0: + return False + elif len(cids) > 1: + urls = [ + f'https://pubchem.ncbi.nlm.nih.gov/compound/{cid}' for cid in cids + ] + logger.warn( + f'Search for PubChem CID yielded {len(cids)} results: ' + f'{", ".join(urls)}. Using {urls[0]}' + ) + self.pub_chem_cid = cids[0] + return True + + def _find_cid(self, logger: 'BoundLogger') -> None: + ''' + Private method for finding the PubChem CID using the filled attributes in the + following order: + + 1. `smile` + 2. `canonical_smile` + 3. `inchi_key` + 4. `iupac_name` + 5. `name` + 6. `molecular_formula` + + The first hit will populate the `pub_chem_cid` attribute and return. + + Args: + logger ('BoundLogger'): A structlog logger. + ''' + for search, path in ( + (self.smile, 'smiles'), + (self.canonical_smile, 'smiles'), + (self.inchi_key, 'inchikey'), + (self.iupac_name, 'name'), + (self.name, 'name'), + (self.molecular_formula, 'fastformula'), + (self.name, 'fastformula'), + (self.cas_number, 'name')): + if search and self._pub_chem_search_unique(search, path, logger): + self._populate_from_cid(logger) + + def normalize(self, archive, logger: 'BoundLogger') -> None: + ''' + The normalizer method for the `PubChemSubstanceSection` class. + This method will attempt to get data on the substance instance from the PubChem + PUG REST API: https://pubchem.ncbi.nlm.nih.gov/docs/pug-rest + If a PubChem CID is specified the details are retrieved directly. + Otherwise a search query is made for the filled attributes in the following order: + 1. `smile` + 2. `canonical_smile` + 3. `inchi_key` + 4. `iupac_name` + 5. `name` + 6. `molecular_formula` + 7. `cas_number` + + Args: + archive (EntryArchive): The archive that is being normalized. + logger ('BoundLogger'): A structlog logger. + ''' + if logger is None: + logger = utils.get_logger(__name__) + + if self.pub_chem_cid: + if any(getattr(self, value) is None for value in self.m_def.all_quantities): + self._populate_from_cid(logger) + else: + self._find_cid(logger) + + super(PubChemPureSubstanceSection, self).normalize(archive, logger) + + class CASExperimentalProperty(ArchiveSection): ''' A section for experimental properties retrieved from the CAS API. @@ -705,10 +1571,13 @@ class CASPropertyCitation(ArchiveSection): ) -class CASSubstance(Substance): +class CASPureSubstanceSection(PureSubstanceSection): ''' - A base section for any Substance with a CAS number. + A base section for any `PureSubstance` with a CAS number. ''' + m_def = Section( + label='CAS Pure Substance Section', + ) cas_uri = Quantity( type=str, description='CAS uri', @@ -730,37 +1599,6 @@ class CASSubstance(Substance): a_eln=dict(component='FileEditQuantity'), a_browser=dict(adaptor='RawFileAdaptor', label='Image of substance'), ) - inchi = Quantity( - type=str, - description='CAS inchi.', - a_eln=dict(component='StringEditQuantity'), - ) - inchi_key = Quantity( - type=str, - description='CAS inchi key.', - a_eln=dict(component='StringEditQuantity'), - ) - smile = Quantity( - type=str, - description='CAS smile.', - a_eln=dict(component='StringEditQuantity'), - ) - canonical_smile = Quantity( - type=str, - description='CAS canonical smile.', - a_eln=dict(component='StringEditQuantity'), - ) - molecular_formula = Quantity( - type=str, - description='CAS molecular formula.', - a_eln=dict(component='StringEditQuantity'), - ) - molecular_mass = Quantity( - type=np.dtype(np.float64), - unit='Da', - description='CAS molecular mass.', - a_eln=dict(component='NumberEditQuantity'), - ) cas_experimental_properties = SubSection( section_def=CASExperimentalProperty, repeats=True, @@ -779,18 +1617,15 @@ class CASSubstance(Substance): ''' Private method for populating the attributes from a call to the CAS API using the `cas_number`. - Will overwrite exisiting CAS attributes if the query provides a value for them. + Will overwrite existing CAS attributes if the query provides a value for them. I.e. all attributes that begin with `cas_`. Args: archive (EntryArchive): The archive that is being normalized. logger ('BoundLogger'): A structlog logger. ''' - import httpx - response = httpx.get( - f'https://commonchemistry.cas.org/api/detail?cas_rn={self.cas_number}', - timeout=2) - if response.status_code == 200: + response = cas_api_details(cas_rn=self.cas_number) + if response.ok: response_dict = response.json() self.cas_uri = response_dict.get("uri", None) @@ -870,10 +1705,8 @@ class CASSubstance(Substance): Returns: bool: Whether the search found a unique result. ''' - import httpx - response = httpx.get( - f'https://commonchemistry.cas.org/api/search?q={search}', timeout=2) - if response.status_code == 200: + response = cas_api_search(search=search) + if response.ok: response_dict = response.json() n_hits = response_dict.get("count", 0) if n_hits == 0: @@ -921,11 +1754,12 @@ class CASSubstance(Substance): def normalize(self, archive, logger: 'BoundLogger') -> None: ''' - The normalizer method for the `CASSubstance` class. - This method will attempt to get data on the substance instance from the CAS API: - https://commonchemistry.cas.org/api-overview + The normalizer method for the `CASPureSubstanceSection` class. + This method will attempt to get data on the pure substance instance from the CAS + API: https://commonchemistry.cas.org/api-overview If a CAS number is specified the details are retrieved directly. Otherwise a search query is made for the filled attributes in the following order: + 1. `cas_name` 2. `inchi` 3. `inchi_key` @@ -937,69 +1771,81 @@ class CASSubstance(Substance): archive (EntryArchive): The archive that is being normalized. logger ('BoundLogger'): A structlog logger. ''' - super(CASSubstance, self).normalize(archive, logger) if logger is None: logger = utils.get_logger(__name__) if self.cas_number: self.cas_number = self.cas_number.strip() - self._populate_from_cas(archive, logger) + if any(getattr(self, value) is None for value in self.m_def.all_quantities): + self._populate_from_cas(archive, logger) else: self._find_cas(archive, logger) - super(CASSubstance, self).normalize(archive, logger) + super(CASPureSubstanceSection, self).normalize(archive, logger) -class SampleID(ArchiveSection): +class ReadableIdentifiers(ArchiveSection): ''' - A base section that can be used for sample IDs. - If the `sample_owner`, `sample_short_name`, `ìnstitute`, and `creation_datetime` - quantities are provided, the sample_id will be automatically created as a combination + A base section that can be used to generate readable IDs. + If the `owner`, `short_name`, `institute`, and `datetime` + quantities are provided, the lab_id will be automatically created as a combination of these four quantities. ''' institute = Quantity( type=str, - description='Alias/short name of the home institute of the owner, i.e. *HZB*.', + description=''' + Alias/short name of the home institute of the owner, i.e. *HZB*. + ''', a_eln=dict(component='StringEditQuantity'), ) - sample_owner = Quantity( + owner = Quantity( type=str, shape=[], - description='Name or alias of the process operator, e.g. jmp', + description=''' + Alias for the owner of the identified thing. This should be unique within the + institute. + ''', a_eln=dict(component='StringEditQuantity'), ) - creation_datetime = Quantity( + datetime = Quantity( type=Datetime, - description='Creation date of the sample.', + description=''' + A datetime associated with the identified thing. In case of an `Activity`, this + should be the starting time and, in case of an `Entity`, the creation time. + ''', a_eln=dict(component='DateTimeEditQuantity'), ) - sample_short_name = Quantity( + short_name = Quantity( type=str, - description='''A short name of the sample (the identifier scribed on the smaple, - or in the sample container), e.g. 4001-8, YAG-2-34. - This is to be managed and decided internally by the labs, - although we recomend to avoid the following characters on it: "_", "/", "\" and "."''', + description=''' + A short name of the the identified thing (e.g. the identifier scribed on the + sample, the process number, or machine name), e.g. 4001-8, YAG-2-34. + This is to be managed and decided internally by the labs, although we recommend + to avoid the following characters in it: "_", "/", "\\" and ".". + ''', a_eln=dict(component='StringEditQuantity'), ) - sample_id = Quantity( + lab_id = Quantity( type=str, - description='''Full sample id. Ideally a human readable sample id convention, - which is simple, understandable and still having chances of becoming unique. - If the `sample_owner`, `sample_short_name`, `ìnstitute`, and `creation_datetime` - are provided, this will be formed automatically by joining these components by an underscore (_). + description=''' + Full readable id. Ideally a human readable id convention, which is simple, + understandable and still have chances of becoming unique. + If the `owner`, `short_name`, `ìnstitute`, and `datetime` are provided, this will + be formed automatically by joining these components by an underscore (_). Spaces in any of the individual components will be replaced with hyphens (-). - An example would be hzb_oah_20200602_4001-08''', + An example would be hzb_oah_20200602_4001-08. + ''', a_eln=dict(component='StringEditQuantity'), ) def normalize(self, archive, logger: 'BoundLogger') -> None: ''' - The normalizer for the `SampleID` class. - If sample owner is not filled the field will be filled by the first two letters of + The normalizer for the `ReadableIdentifiers` class. + If owner is not filled the field will be filled by the first two letters of the first name joined with the first two letters of the last name of the author. If the institute is not filled a institute abreviations will be constructed from the author's affiliation. - If no creation datetime is filled, the datetime will be taken from the `datetime` + If no datetime is filled, the datetime will be taken from the `datetime` property of the parent, if it exists, otherwise the current date and time will be used. If no short name is filled, the name will be taken from the parent name, if it @@ -1012,16 +1858,16 @@ class SampleID(ArchiveSection): normalized. logger ('BoundLogger'): A structlog logger. ''' - super(SampleID, self).normalize(archive, logger) + super(ReadableIdentifiers, self).normalize(archive, logger) - if self.sample_owner is None or self.institute is None: + if self.owner is None or self.institute is None: from unidecode import unidecode author = archive.metadata.main_author - if author and self.sample_owner is None: + if author and self.owner is None: first_short = unidecode(author.first_name)[:2] last_short = unidecode(author.last_name)[:2] - self.sample_owner = first_short + last_short - if author and self.institute is None: + self.owner = first_short + last_short + if author and self.institute is None and getattr(author, 'affiliation', None): unwanted_words = ("zu", "of", "the", "fur", "für") institute = '' all_words = re.split(' |-|_|,|:|;', unidecode(author.affiliation)) @@ -1040,37 +1886,37 @@ class SampleID(ArchiveSection): institute = ''.join([w[:1] for w in wanted_words[:3]]).upper() self.institute = institute - if self.creation_datetime is None: + if self.datetime is None: if self.m_parent and getattr(self.m_parent, 'datetime', None): - self.creation_datetime = self.m_parent.datetime + self.datetime = self.m_parent.datetime else: - self.creation_datetime = datetime.datetime.now() + self.datetime = datetime.datetime.now() - if self.sample_short_name is None: + if self.short_name is None: if self.m_parent and getattr(self.m_parent, 'name', None): name = self.m_parent.name elif archive.metadata.entry_name: name = archive.metadata.entry_name else: name = archive.metadata.mainfile - self.sample_short_name = re.sub(r'_|\s', '-', name.split('.')[0]) + self.short_name = re.sub(r'_|\s', '-', name.split('.')[0]) - if self.institute and self.sample_short_name and self.sample_owner and self.creation_datetime: - creation_date = self.creation_datetime.strftime('%Y%m%d') - sample_owner = self.sample_owner.replace(' ', '-') - sample_id_list = [self.institute, sample_owner, creation_date, self.sample_short_name] - self.sample_id = '_'.join(sample_id_list) + if self.institute and self.short_name and self.owner and self.datetime: + creation_date = self.datetime.strftime('%Y%m%d') + owner = self.owner.replace(' ', '-') + lab_id_list = [self.institute, owner, creation_date, self.short_name] + self.lab_id = '_'.join(lab_id_list) if not archive.results: archive.results = Results(eln=ELN()) if not archive.results.eln: archive.results.eln = ELN() - if self.sample_id: + if self.lab_id: if not archive.results.eln.lab_ids: archive.results.eln.lab_ids = [] - if self.sample_id not in archive.results.eln.lab_ids: - archive.results.eln.lab_ids.append(self.sample_id) + if self.lab_id not in archive.results.eln.lab_ids: + archive.results.eln.lab_ids.append(self.lab_id) if not archive.results.eln.sections: archive.results.eln.sections = [] @@ -1142,14 +1988,14 @@ class PublicationReference(ArchiveSection): super(PublicationReference, self).normalize(archive, logger) from nomad.datamodel.datamodel import EntryMetadata import dateutil.parser - import httpx + import requests # Parse journal name, lead author and publication date from crossref if self.DOI_number: try: url = f'https://api.crossref.org/works/{self.DOI_number}?mailto=contact@nomad-lab.eu' - timeout = 2 - r = httpx.get(url, timeout=timeout) + timeout = 5 + r = requests.get(url, timeout=timeout) if r.status_code == 200: temp_dict = r.json() # make sure the doi has the prefix https://doi.org/ diff --git a/nomad/datamodel/metainfo/eln/__init__.py b/nomad/datamodel/metainfo/eln/__init__.py index 9d879f44f14374a1bce297734246edd82ae854ef..05e63ab60f89c5f581cb8d203e7fd8254c120538 100644 --- a/nomad/datamodel/metainfo/eln/__init__.py +++ b/nomad/datamodel/metainfo/eln/__init__.py @@ -19,7 +19,14 @@ import numpy as np import datetime import re -from typing import Any, Dict, List +from typing import Any, Dict, List, TYPE_CHECKING + +from nomad.datamodel.metainfo.plot import PlotSection + +if TYPE_CHECKING: + from structlog.stdlib import ( + BoundLogger, + ) from nomad import utils from nomad.units import ureg from nomad.datamodel.data import EntryData, ArchiveSection, author_reference, BasicElnCategory @@ -48,13 +55,21 @@ from nomad.datamodel.metainfo.basesections import ( Process, Measurement, SynthesisMethod, - Component, - Ensemble, - CASExperimentalProperty, - CASPropertyCitation, - CASSubstance as Substance, - SampleID, + SystemComponent as Component, + CompositeSystem, + CompositeSystem as Ensemble, # For legacy support PublicationReference, + ReadableIdentifiers, + PureSubstance, + Experiment, + Collection, + Analysis, + AnalysisResult, + MeasurementResult, +) + +from nomad.datamodel.metainfo.annotations import ( + ELNAnnotation, ) @@ -163,7 +178,712 @@ class BasicEln(ElnBaseSection, EntryData): a_eln=dict(component='StringEditQuantity')) +class ELNProcess(Process, EntryData): + ''' + A basic electronic lab notebook for a material processing activity. + ''' + m_def = Section( + categories=[BasicElnCategory], + a_eln=ELNAnnotation( + lane_width='600px', + ), + a_template=dict( + process_identifiers=dict(), + ), + label='Material Processing ELN', + ) + tags = Quantity( + type=str, + shape=['*'], + description='Add a tag that can be used for search.', + a_eln=ELNAnnotation( + component='StringEditQuantity', + ), + a_template=dict( + process_identifiers=dict(), + ), + ) + process_identifiers = SubSection( + section_def=ReadableIdentifiers, + ) + + +class BasicMeasurementResult(MeasurementResult): + ''' + A basic section for describing the result of a measurement. + ''' + m_def = Section( + label='Measurement Result', + ) + result = Quantity( + type=str, + a_eln=ELNAnnotation( + component='RichTextEditQuantity', + ), + ) + + +class ELNMeasurement(Measurement, EntryData): + ''' + A basic electronic lab notebook for a measurement activity. + ''' + m_def = Section( + categories=[BasicElnCategory], + a_eln=ELNAnnotation( + lane_width='600px', + ), + a_template=dict( + measurement_identifiers=dict(), + ), + label='Measurement ELN', + ) + tags = Quantity( + type=str, + shape=['*'], + description='Add a tag that can be used for search.', + a_eln=ELNAnnotation( + component='StringEditQuantity', + ), + ) + measurement_identifiers = SubSection( + section_def=ReadableIdentifiers, + ) + results = Measurement.results.m_copy() + results.section_def = BasicMeasurementResult + + +class BasicAnalysisResult(AnalysisResult): + ''' + A basic section for describing the result of an analysis. + ''' + m_def = Section( + label='Analysis Result', + ) + result = Quantity( + type=str, + a_eln=ELNAnnotation( + component='RichTextEditQuantity', + ), + ) + + +class ELNAnalysis(Analysis, EntryData): + ''' + A basic electronic lab notebook for an analysis activity. + ''' + m_def = Section( + categories=[BasicElnCategory], + a_eln=ELNAnnotation( + lane_width='600px', + ), + a_template=dict( + analysis_identifiers=dict(), + ), + label='Analysis ELN', + ) + tags = Quantity( + type=str, + shape=['*'], + description='Add a tag that can be used for search.', + a_eln=ELNAnnotation( + component='StringEditQuantity', + ), + ) + analysis_identifiers = SubSection( + section_def=ReadableIdentifiers, + ) + outputs = Analysis.inputs.m_copy() + outputs.section_def = BasicAnalysisResult + + +class ELNSample(CompositeSystem, EntryData): + ''' + A basic electronic lab notebook for a generic sample. + ''' + m_def = Section( + categories=[BasicElnCategory], + a_eln=ELNAnnotation( + lane_width='600px', + ), + a_template=dict( + sample_identifiers=dict(), + ), + label='Generic Sample ELN', + ) + tags = Quantity( + type=str, + shape=['*'], + description='Add a tag that can be used for search.', + a_eln=ELNAnnotation( + component='StringEditQuantity', + ), + ) + sample_identifiers = SubSection( + section_def=ReadableIdentifiers, + ) + + +class ELNSubstance(PureSubstance, EntryData): + ''' + A basic electronic lab notebook for a generic sample. + ''' + m_def = Section( + categories=[BasicElnCategory], + a_eln=ELNAnnotation( + lane_width='600px', + ), + a_template=dict( + substance_identifiers=dict(), + substance=dict(m_def='nomad.datamodel.metainfo.basesections.PubChemPureSubstanceSection'), + ), + label='Substance ELN', + ) + tags = Quantity( + type=str, + shape=['*'], + description='Add a tag that can be used for search.', + a_eln=ELNAnnotation( + component='StringEditQuantity', + ), + ) + substance_identifiers = SubSection( + section_def=ReadableIdentifiers, + ) + + +class ELNInstrument(Instrument, EntryData): + ''' + A basic electronic lab notebook for a generic instrument. + ''' + m_def = Section( + categories=[BasicElnCategory], + a_eln=ELNAnnotation( + lane_width='600px', + ), + a_template=dict( + instrument_identifiers=dict(), + ), + label='Instrument ELN', + ) + tags = Quantity( + type=str, + shape=['*'], + description='Add a tag that can be used for search.', + a_eln=ELNAnnotation( + component='StringEditQuantity', + ), + ) + instrument_identifiers = SubSection( + section_def=ReadableIdentifiers, + ) + + +class ELNCollection(Collection, EntryData): + ''' + A basic electronic lab notebook for a collection of entities. + ''' + m_def = Section( + categories=[BasicElnCategory], + a_eln=ELNAnnotation( + lane_width='600px', + ), + a_template=dict( + collection_identifiers=dict(), + ), + label='Collection ELN', + ) + tags = Quantity( + type=str, + shape=['*'], + description='Add a tag that can be used for search.', + a_eln=ELNAnnotation( + component='StringEditQuantity', + ), + ) + collection_identifiers = SubSection( + section_def=ReadableIdentifiers, + ) + + +class ELNExperiment(Experiment, EntryData): + ''' + A basic electronic lab notebook for a collection of activities. + ''' + m_def = Section( + categories=[BasicElnCategory], + a_eln=ELNAnnotation( + lane_width='600px', + ), + a_template=dict( + experiment_identifiers=dict(), + ), + label='Experiment ELN', + ) + tags = Quantity( + type=str, + shape=['*'], + description='Add a tag that can be used for search.', + a_eln=ELNAnnotation( + component='StringEditQuantity', + ), + ) + experiment_identifiers = SubSection( + section_def=ReadableIdentifiers, + ) + + # Legacy sections: +class SampleID(ArchiveSection): + ''' + A base section that can be used for sample IDs. + If the `sample_owner`, `sample_short_name`, `institute`, and `creation_datetime` + quantities are provided, the sample_id will be automatically created as a combination + of these four quantities. + ''' + institute = Quantity( + type=str, + description='Alias/short name of the home institute of the owner, i.e. *HZB*.', + a_eln=dict(component='StringEditQuantity'), + ) + sample_owner = Quantity( + type=str, + shape=[], + description='Name or alias of the process operator, e.g. jmp', + a_eln=dict(component='StringEditQuantity'), + ) + creation_datetime = Quantity( + type=Datetime, + description='Creation date of the sample.', + a_eln=dict(component='DateTimeEditQuantity'), + ) + sample_short_name = Quantity( + type=str, + description='''A short name of the sample (the identifier scribed on the smaple, + or in the sample container), e.g. 4001-8, YAG-2-34. + This is to be managed and decided internally by the labs, + although we recomend to avoid the following characters on it: "_", "/", "\" and "."''', + a_eln=dict(component='StringEditQuantity'), + ) + sample_id = Quantity( + type=str, + description='''Full sample id. Ideally a human readable sample id convention, + which is simple, understandable and still having chances of becoming unique. + If the `sample_owner`, `sample_short_name`, `ìnstitute`, and `creation_datetime` + are provided, this will be formed automatically by joining these components by an underscore (_). + Spaces in any of the individual components will be replaced with hyphens (-). + An example would be hzb_oah_20200602_4001-08''', + a_eln=dict(component='StringEditQuantity'), + ) + + def normalize(self, archive, logger: 'BoundLogger') -> None: + ''' + The normalizer for the `SampleID` class. + If sample owner is not filled the field will be filled by the first two letters of + the first name joined with the first two letters of the last name of the author. + If the institute is not filled a institute abreviations will be constructed from + the author's affiliation. + If no creation datetime is filled, the datetime will be taken from the `datetime` + property of the parent, if it exists, otherwise the current date and time will be + used. + If no short name is filled, the name will be taken from the parent name, if it + exists, otherwise it will be taken from the archive metadata entry name, if it + exists, and finally if no other options are available it will use the name of the + mainfile. + + Args: + archive (EntryArchive): The archive containing the section that is being + normalized. + logger ('BoundLogger'): A structlog logger. + ''' + super(SampleID, self).normalize(archive, logger) + + if self.sample_owner is None or self.institute is None: + from unidecode import unidecode + author = archive.metadata.main_author + if author and self.sample_owner is None: + first_short = unidecode(author.first_name)[:2] + last_short = unidecode(author.last_name)[:2] + self.sample_owner = first_short + last_short + if author and self.institute is None: + unwanted_words = ("zu", "of", "the", "fur", "für") + institute = '' + all_words = re.split(' |-|_|,|:|;', unidecode(author.affiliation)) + wanted_words = [w for w in all_words if w.lower() not in unwanted_words] + for word in wanted_words: + word_remainder = word + while word_remainder and len(institute) < 3: + letter = word_remainder[:1] + if letter.isupper(): + institute += letter + word_remainder = word_remainder[1:] + if len(institute) < min(len(author.affiliation), 2): + if len(wanted_words) < 3: + institute = author.affiliation[:3].upper() + else: + institute = ''.join([w[:1] for w in wanted_words[:3]]).upper() + self.institute = institute + + if self.creation_datetime is None: + if self.m_parent and getattr(self.m_parent, 'datetime', None): + self.creation_datetime = self.m_parent.datetime + else: + self.creation_datetime = datetime.datetime.now() + + if self.sample_short_name is None: + if self.m_parent and getattr(self.m_parent, 'name', None): + name = self.m_parent.name + elif archive.metadata.entry_name: + name = archive.metadata.entry_name + else: + name = archive.metadata.mainfile + self.sample_short_name = re.sub(r'_|\s', '-', name.split('.')[0]) + + if self.institute and self.sample_short_name and self.sample_owner and self.creation_datetime: + creation_date = self.creation_datetime.strftime('%Y%m%d') + sample_owner = self.sample_owner.replace(' ', '-') + sample_id_list = [self.institute, sample_owner, creation_date, self.sample_short_name] + self.sample_id = '_'.join(sample_id_list) + + if not archive.results: + archive.results = Results(eln=ELN()) + if not archive.results.eln: + archive.results.eln = ELN() + + if self.sample_id: + if not archive.results.eln.lab_ids: + archive.results.eln.lab_ids = [] + if self.sample_id not in archive.results.eln.lab_ids: + archive.results.eln.lab_ids.append(self.sample_id) + + if not archive.results.eln.sections: + archive.results.eln.sections = [] + archive.results.eln.sections.append(self.m_def.name) + + +class CASExperimentalProperty(MSection): + '''A section for experimental properties retrieved from the CAS API.''' + + name = Quantity( + type=str, + description='CAS experimental property name.') + + property = Quantity( + type=str, + description='CAS experimental property.') + + sourceNumber = Quantity( + type=str, + description='CAS experimental property source.') + + +class CASPropertyCitation(MSection): + '''A section for citations of the experimental properties retrieved from the CAS API. + ''' + + docUri = Quantity( + type=str, + description='CAS property citation document uri.') + + sourceNumber = Quantity( + type=int, + decription='CAS property citation source number.') + + source = Quantity( + type=str, + description='CAS property citation source.') + + +class Substance(System): + '''A base section for any substance defined in the ELN.''' + + name = Quantity( + type=str, + description='The name of the substance entry.', + a_eln=dict(component='StringEditQuantity', label='Substance name')) + + lab_id = Quantity( + type=str, + description=''' + A human human readable substance ID that is at least unique for the lab. + ''', + a_eln=dict(component='StringEditQuantity', label='Substance ID')) + + cas_uri = Quantity( + type=str, + description='CAS uri', + a_eln=dict(component='StringEditQuantity', label='CAS uri')) + + cas_number = Quantity( + type=str, + description='CAS number.', + a_eln=dict(component='StringEditQuantity', label='CAS number')) + + cas_name = Quantity( + type=str, + description='CAS name.', + a_eln=dict(component='StringEditQuantity', label='CAS name')) + + image = Quantity( + type=str, + description='CAS image.', + a_eln=dict(component='FileEditQuantity'), + a_browser=dict(adaptor='RawFileAdaptor', label='Image of substance')) + + inchi = Quantity( + type=str, + description='CAS inchi.', + a_eln=dict(component='StringEditQuantity')) + + inchi_key = Quantity( + type=str, + description='CAS inchi key.', + a_eln=dict(component='StringEditQuantity')) + + smile = Quantity( + type=str, + description='CAS smile.', + a_eln=dict(component='StringEditQuantity')) + + canonical_smile = Quantity( + type=str, + description='CAS canonical smile.', + a_eln=dict(component='StringEditQuantity')) + + molecular_formula = Quantity( + type=str, + description='CAS molecular formula.', + a_eln=dict(component='StringEditQuantity')) + + molecular_mass = Quantity( + type=np.dtype(np.float64), + unit='Da', + description='CAS molecular mass.', + a_eln=dict( + component='NumberEditQuantity')) + + cas_experimental_properties = SubSection( + section_def=CASExperimentalProperty, + repeats=True) + + cas_property_citations = SubSection( + section_def=CASPropertyCitation, + repeats=True) + + cas_synonyms = Quantity( + type=str, + shape=['*'], + description='CAS synonyms.' + ) + + description = Quantity( + type=str, + description=''' + A field for adding additional information about the substance that is not captured + by the other quantities and subsections. + ''', + a_eln=dict( + component='RichTextEditQuantity', label='Detailed substance description')) + + def _populate_from_cas(self, archive, logger: Any) -> None: + '''Private method for populating the attributes from a call to the CAS API using + the `cas_number`. + Will overwrite exisiting CAS attributes if the query provides a value for them. + I.e. all attributes that begin with `cas_`. + + Args: + archive (EntryArchive): The archive that is being normalized. + logger (Any): A structlog logger. + ''' + import httpx + response = httpx.get( + f'https://commonchemistry.cas.org/api/detail?cas_rn={self.cas_number}', + timeout=2) + if response.status_code == 200: + response_dict = response.json() + + self.cas_uri = response_dict.get("uri", None) + + cas_name = response_dict.get("name", None) + if cas_name: + self.cas_name = re.sub(r'<.*?>', '', cas_name) + if not self.name: + self.name = self.cas_name + + if not self.image: + image = response_dict.get("image", None) + if image: + self.image = f"cas_{self.cas_number}_image.svg" + with archive.m_context.raw_file(self.image, 'w') as fh: + fh.write(image) + + if not self.inchi: + self.inchi = response_dict.get("inchi", None) + + if not self.inchi_key: + self.inchi_key = response_dict.get("inchiKey", None) + + if not self.smile: + self.smile = response_dict.get("smile", None) + + if not self.canonical_smile: + self.canonical_smile = response_dict.get("canonicalSmile", None) + + if not self.molecular_formula: + molecular_formula = response_dict.get("molecularFormula", None) + if molecular_formula: + self.molecular_formula = re.sub(r'<.*?>', '', molecular_formula) + + if not self.molecular_mass: + molecular_mass = response_dict.get("molecularMass", None) + if molecular_mass: + try: + self.molecular_mass = float(molecular_mass) + except ValueError as e: + logger.warn( + f"Could not convert molecular mass results'{molecular_mass}'" + + "returned from CAS api request.", + exc_info=e) + + experimental_properties = response_dict.get("experimentalProperties", []) + props = [ + CASExperimentalProperty.m_from_dict(p) for p in experimental_properties] + if len(props) > 0: + self.cas_experimental_properties = props + + property_citations = response_dict.get("propertyCitations", []) + citations = [CASPropertyCitation.m_from_dict(c) for c in property_citations] + if len(citations) > 0: + self.cas_property_citations = citations + + self.cas_synonyms = response_dict.get("synonyms", []) + + elif response.status_code == 404: + logger.warn(f"No CAS entry found with CAS number: {self.cas_number}") + elif response.status_code >= 500: + logger.warn(f"Remote server error on CAS API call.") + else: + logger.warn( + f"Unexpected response code: {response.status_code} from CAS API call.") + + def _cas_search_unique(self, search: str, archive, logger: Any) -> bool: + '''Private method for performing a search of the CAS API and populating the + attributes with the CAS number of any unique search result. + + Args: + search (str): The string to search the CAS API with. + archive (EntryArchive): The archive that is being normalized. + logger (Any): A structlog logger. + + Returns: + bool: Whether the search found a unique result. + ''' + import httpx + response = httpx.get( + f'https://commonchemistry.cas.org/api/search?q={search}', timeout=2) + if response.status_code == 200: + response_dict = response.json() + n_hits = response_dict.get("count", 0) + if n_hits == 0: + logger.info(f"Queried the CAS API for '{search}' without result.") + return False + elif n_hits == 1: + try: + self.cas_number = response_dict["results"][0]["rn"] + self._populate_from_cas(archive, logger) + return True + except KeyError as e: + logger.warn("Unknown response format from CAS API.", exc_info=e) + else: + logger.warn( + f"Query to CAS API for '{search}' returned {n_hits} hits, please " + + "specify further.") + return False + return False + + def _find_cas(self, archive, logger: Any) -> None: + '''Private method for finding the CAS number using the filled attributes in the + following order: + 1. `cas_name` + 2. `inchi` + 3. `inchi_key` + 4. `smile` + 5. `canonical_smile` + 6. `name` + The first unique hit will populate the `cas_number` attribute and return. + + Args: + archive (EntryArchive): The archive that is being normalized. + logger (Any): A structlog logger. + ''' + for key in ( + self.cas_name, + self.inchi, + self.inchi_key, + self.smile, + self.canonical_smile, + self.name): + if key and self._cas_search_unique(key, archive, logger): + return + + def normalize(self, archive, logger: Any) -> None: + '''The normalizer method for the `Substance` class. + This method will attempt to get data on the substance instance from the CAS API: + https://commonchemistry.cas.org/api-overview + If a CAS number is specified the details are retrieved directly. + Otherwise a search query is made for the filled attributes in the following order: + 1. `cas_name` + 2. `inchi` + 3. `inchi_key` + 4. `smile` + 5. `canonical_smile` + 6. `name` + + Args: + archive (EntryArchive): The archive that is being normalized. + logger (Any): A structlog logger. + ''' + super(Substance, self).normalize(archive, logger) + if logger is None: + logger = utils.get_logger(__name__) + logger.warn( + 'The Substance section in nomad.datamodel.metainfo.eln is deprecated. ' + 'Please use the nomad.datamodel.metainfo.basesections.Substance instead. ' + 'Note that the new section nests the substance properties in the subsection ' + '`substance` instead.' + ) + from nomad.atomutils import Formula + + if self.cas_number: + self.cas_number = self.cas_number.strip() + self._populate_from_cas(archive, logger) + else: + self._find_cas(archive, logger) + + if self.molecular_formula: + if not archive.results: + archive.results = Results() + if not archive.results.material: + archive.results.material = Material() + + try: + formula = Formula(self.molecular_formula) + formula.populate(archive.results.material) + if not self.elemental_composition: + mass_fractions = formula.mass_fractions() + for element, fraction in formula.atomic_fractions().items(): + self.elemental_composition.append( + ElementalComposition( + element=element, + atomic_fraction=fraction, + mass_fraction=mass_fractions[element], + ) + ) + except Exception as e: + logger.warn('Could not analyse chemical formula.', exc_info=e) + + super(Substance, self).normalize(archive, logger) + + class ElnWithFormulaBaseSection(ElnBaseSection): ''' A generic abstract base section for ELNs that provides a few commonly used for @@ -409,9 +1129,18 @@ class SolarCellBaseSectionWithOptoelectronicProperties(ArchiveSection): add_band_gap(archive, self.bandgap) -class SolarCellJV(ArchiveSection): +class SolarCellJV(PlotSection): - m_def = Section(label_quantity='cell_name') + m_def = Section( + label_quantity='cell_name', + a_plotly_graph_object=[ + { + 'data': {'x': '#voltage', 'y': '#current_density'} + }, { + 'data': {'x': '#voltage', 'y': '#current_density'} + } + ] + ) data_file = Quantity( type=str, @@ -618,19 +1347,13 @@ class SolarCellJVCurve(SolarCellJV): type=np.dtype(np.float64), shape=['n_values'], unit='mA/cm^2', - description='Current density array of the *JV* curve.', - a_plot={ - 'x': 'voltage', 'y': 'current_density' - }) + description='Current density array of the *JV* curve.') voltage = Quantity( type=np.dtype(np.float64), shape=['n_values'], unit='V', - description='Voltage array of the of the *JV* curve.', - a_plot={ - 'x': 'voltage', 'y': 'current_density' - }) + description='Voltage array of the of the *JV* curve.') def normalize(self, archive, logger): super(SolarCellJVCurve, self).normalize(archive, logger) @@ -640,10 +1363,26 @@ class SolarCellJVCurve(SolarCellJV): self.update_results(archive) -class SolarCellEQE(ArchiveSection): +class SolarCellEQE(PlotSection): m_def = Section( - a_eln=dict(lane_width='600px')) + a_eln=dict(lane_width='600px'), + a_plotly_graph_object=[ + { + 'data': {'x': '#photon_energy_array', 'y': '#raw_eqe_array'} + }, { + 'data': {'x': '#raw_photon_energy_array', 'y': '#raw_eqe_array'} + }, { + 'data': {'x': '#raw_wavelength_array', 'y': '#raw_eqe_array'} + }, { + 'data': {'x': '#photon_energy_array', 'y': '#eqe_array'} + }, { + 'data': {'x': '#wavelength_array', 'y': '#eqe_array'} + }, { + 'data': {'x': '#photon_energy_array', 'y': '#eqe_array'} + } + ] + ) eqe_data_file = Quantity( type=str, @@ -752,45 +1491,27 @@ class SolarCellEQE(ArchiveSection): raw_eqe_array = Quantity( type=np.dtype(np.float64), shape=['n_raw_values'], - description='EQE array of the spectrum', - a_plot={ - 'x': 'photon_energy_array', 'y': 'raw_eqe_array' - }) + description='EQE array of the spectrum') raw_photon_energy_array = Quantity( type=np.dtype(np.float64), shape=['n_raw_values'], unit='eV', - description='Raw Photon energy array of the eqe spectrum', - a_plot={ - 'x': 'raw_photon_energy_array', 'y': 'raw_eqe_array' - }) + description='Raw Photon energy array of the eqe spectrum') raw_wavelength_array = Quantity( type=np.dtype(np.float64), shape=['n_raw_values'], unit='nanometer', - description='Raw wavelength array of the eqe spectrum', - a_plot={ - 'x': 'raw_wavelength_array', 'y': 'raw_eqe_array' - }) + description='Raw wavelength array of the eqe spectrum') eqe_array = Quantity( type=np.dtype(np.float64), shape=['n_values'], - description='EQE array of the spectrum', - a_plot={ - 'x': 'photon_energy_array', 'y': 'eqe_array' - }) + description='EQE array of the spectrum') wavelength_array = Quantity( type=np.dtype(np.float64), shape=['n_values'], unit='nanometer', - description='Interpolated/extrapolated wavelength array with *E<sub>u</sub>* of the eqe spectrum ', - a_plot={ - 'x': 'wavelength_array', 'y': 'eqe_array' - }) + description='Interpolated/extrapolated wavelength array with *E<sub>u</sub>* of the eqe spectrum ') photon_energy_array = Quantity( type=np.dtype(np.float64), shape=['n_values'], unit='eV', - description='Interpolated/extrapolated photon energy array with a *E<sub>u</sub>* of the eqe spectrum', - a_plot={ - 'x': 'photon_energy_array', 'y': 'eqe_array' - }) + description='Interpolated/extrapolated photon energy array with a *E<sub>u</sub>* of the eqe spectrum') def normalize(self, archive, logger): super(SolarCellEQE, self).normalize(archive, logger) diff --git a/nomad/datamodel/metainfo/eln/nexus_data_converter.py b/nomad/datamodel/metainfo/eln/nexus_data_converter.py index e6cb4c68a81760dad9ee18bfce68baec71fab289..3124927e5963fcc4c9efcb2f489b4d01c6e86f1b 100644 --- a/nomad/datamodel/metainfo/eln/nexus_data_converter.py +++ b/nomad/datamodel/metainfo/eln/nexus_data_converter.py @@ -7,8 +7,8 @@ from nomad.datamodel.data import EntryData from nomad.metainfo import Package, Quantity, MEnum from nomad.units import ureg -from nexusutils.dataconverter.convert import get_names_of_all_readers, convert # pylint: disable=import-error -from nexusutils.nexus.nexus import get_app_defs_names # pylint: disable=import-error +from pynxtools.dataconverter.convert import get_names_of_all_readers, convert # pylint: disable=import-error +from pynxtools.nexus.nexus import get_app_defs_names # pylint: disable=import-error m_package = Package(name='nexus_data_converter') diff --git a/nomad/datamodel/metainfo/eln/perovskite_solar_cell_database/__init__.py b/nomad/datamodel/metainfo/eln/perovskite_solar_cell_database/__init__.py index 12c5354c88f2f602424eaf4fb4d62ba32ca1c3a4..6e237fdd63822cc7aac117b7c825a3e79a368fc1 100644 --- a/nomad/datamodel/metainfo/eln/perovskite_solar_cell_database/__init__.py +++ b/nomad/datamodel/metainfo/eln/perovskite_solar_cell_database/__init__.py @@ -18,6 +18,8 @@ # import numpy as np + +from nomad.datamodel.metainfo.plot import PlotSection from nomad.units import ureg from nomad.metainfo import ( MSection, Package, Quantity, SubSection, Datetime, Section) @@ -4746,11 +4748,18 @@ Air component='NumberEditQuantity')) -class JVcurve(MSection): +class JVcurve(PlotSection, MSection): ''' Section describing a current density, voltage curve. ''' - m_def = Section(label_quantity='cell_name') + m_def = Section( + label_quantity='cell_name', + a_plotly_graph_object=[{ + 'data': {'x': '#voltage', 'y': '#current_density'} + }, { + 'data': {'x': '#voltage', 'y': '#current_density'} + }] + ) def derive_n_values(self): if self.current_density is not None: @@ -4771,17 +4780,11 @@ class JVcurve(MSection): current_density = Quantity( type=np.dtype(np.float64), shape=['n_values'], unit='mA/cm^2', - description='Current density array of the *JV* curve.', - a_plot={ - 'x': 'voltage', 'y': 'current_density' - }) + description='Current density array of the *JV* curve.') voltage = Quantity( type=np.dtype(np.float64), shape=['n_values'], unit='V', - description='Voltage array of the of the *JV* curve.', - a_plot={ - 'x': 'voltage', 'y': 'current_density' - }) + description='Voltage array of the of the *JV* curve.') class JV(MSection): @@ -5603,7 +5606,7 @@ Short circuit component='EnumEditQuantity', props=dict(suggestions=['', 'false', 'www.testsite…']))) -class EQE(MSection): +class EQE(PlotSection, MSection): """ A section describing the External Quantum Efficiency **EQE** of the solar cell and additional parameteres derived from it. If used as an ELN, a file containing @@ -5613,20 +5616,45 @@ class EQE(MSection): m_def = Section( a_eln=dict(lane_width='600px'), - a_plot=[ - { - 'label': 'Raw EQE', - 'x': 'raw_wavelength_array', - 'y': 'raw_eqe_array', - 'layout': {'yaxis': {'type': 'lin'}}, - }, + a_plotly_graph_object=[ { - 'label': 'Interpolated/extrapolated EQE log scale', - 'x': 'wavelength_array', - 'y': 'eqe_array', - 'layout': {'yaxis': {'type': 'log'}}, + 'data': { + 'x': '#raw_wavelength_array', + 'y': '#raw_eqe_array' + }, + 'layout': { + 'label': { + 'text': 'Raw EQE' + }, + 'yaxis': {'type': 'lin'} + }, + }, { + 'data': { + 'x': '#wavelength_array', + 'y': '#eqe_array' + }, + 'layout': { + 'label': { + 'text': 'Interpolated/extrapolated EQE log scale' + }, + 'yaxis': {'type': 'log'} + }, 'config': {"editable": 'true'}, - }]) + }, { + 'data': {'x': '#photon_energy_array', 'y': '#raw_eqe_array'} + }, { + 'data': {'x': '#raw_photon_energy_array', 'y': '#raw_eqe_array'} + }, { + 'data': {'x': '#raw_wavelength_array', 'y': '#raw_eqe_array'} + }, { + 'data': {'x': '#photon_energy_array', 'y': '#eqe_array'} + }, { + 'data': {'x': '#wavelength_array', 'y': '#eqe_array'} + }, { + 'data': {'x': '#photon_energy_array', 'y': '#eqe_array'} + } + ] + ) eqe_data_file = Quantity( type=str, @@ -5743,45 +5771,27 @@ class EQE(MSection): raw_eqe_array = Quantity( type=np.dtype(np.float64), shape=['n_raw_values'], - description='EQE array of the spectrum', - a_plot={ - 'x': 'photon_energy_array', 'y': 'raw_eqe_array' - }) + description='EQE array of the spectrum') raw_photon_energy_array = Quantity( type=np.dtype(np.float64), shape=['n_raw_values'], unit='eV', - description='Raw Photon energy array of the eqe spectrum', - a_plot={ - 'x': 'raw_photon_energy_array', 'y': 'raw_eqe_array' - }) + description='Raw Photon energy array of the eqe spectrum') raw_wavelength_array = Quantity( type=np.dtype(np.float64), shape=['n_raw_values'], unit='nanometer', - description='Raw wavelength array of the eqe spectrum', - a_plot={ - 'x': 'raw_wavelength_array', 'y': 'raw_eqe_array' - }) + description='Raw wavelength array of the eqe spectrum') eqe_array = Quantity( type=np.dtype(np.float64), shape=['n_values'], - description='EQE array of the spectrum', - a_plot={ - 'x': 'photon_energy_array', 'y': 'eqe_array' - }) + description='EQE array of the spectrum') wavelength_array = Quantity( type=np.dtype(np.float64), shape=['n_values'], unit='nanometer', - description='Interpolated/extrapolated wavelength array with *E<sub>u</sub>* of the eqe spectrum ', - a_plot={ - 'x': 'wavelength_array', 'y': 'eqe_array' - }) + description='Interpolated/extrapolated wavelength array with *E<sub>u</sub>* of the eqe spectrum ') photon_energy_array = Quantity( type=np.dtype(np.float64), shape=['n_values'], unit='eV', - description='Interpolated/extrapolated photon energy array with a *E<sub>u</sub>* of the eqe spectrum', - a_plot={ - 'x': 'photon_energy_array', 'y': 'eqe_array' - }) + description='Interpolated/extrapolated photon energy array with a *E<sub>u</sub>* of the eqe spectrum') link_raw_data = Quantity( type=str, diff --git a/nomad/datamodel/metainfo/measurements.py b/nomad/datamodel/metainfo/measurements.py index 9d465a97a856c4762438e1988f1c8809598e373a..1dd37162e4e3e5f5c2597fa298db05a528be2a0f 100644 --- a/nomad/datamodel/metainfo/measurements.py +++ b/nomad/datamodel/metainfo/measurements.py @@ -21,6 +21,7 @@ import numpy as np from nomad.metainfo import ( MSection, Package, Quantity, SubSection, Datetime) from nomad.metainfo.metainfo import Reference, SectionProxy +from nomad.datamodel import Author m_package = Package(name='measurements') @@ -150,4 +151,12 @@ class Spectrum(MSection): n_additional_channels = Quantity(type=int, derived=lambda spectrum: len(spectrum.additional_channels)) +class EELSMeasurement(MSection): + spectrum = SubSection(section_def=Spectrum) + edges = Quantity(type=str, shape=['*']) + publish_time = Quantity( + type=Datetime, description='The datetime that this was published on EELS DB.') + authors = SubSection(section_def=Author, repreats=True) + + m_package.__init_metainfo__() diff --git a/nomad/datamodel/metainfo/plot.py b/nomad/datamodel/metainfo/plot.py new file mode 100644 index 0000000000000000000000000000000000000000..9fa569c46332d10013a5ee67ecbe46a7cbc5f486 --- /dev/null +++ b/nomad/datamodel/metainfo/plot.py @@ -0,0 +1,298 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +from nomad.datamodel.data import ArchiveSection +from nomad.metainfo import Quantity, SubSection, Package, MSection, JSON +import plotly.express as px +import plotly.graph_objs as go +from plotly.subplots import make_subplots +import logging +import numpy as np + + +class PlotlyError(Exception): + ''' Plotly errors. ''' + pass + + +def get_figure_layout(annotation): + label = annotation.get('label', None) + if label is not None: + annotation.pop('label') + index = annotation.get('index', None) + if index is not None: + annotation.pop('index') + return label, index + + +def express_do_plot(plotly_express_annotation, archive): + method_name = plotly_express_annotation.pop('method') + layout = plotly_express_annotation.get('layout', None) + if layout: + plotly_express_annotation.pop('layout') + traces = plotly_express_annotation.get('traces', []) + if traces: + plotly_express_annotation.pop('traces') + method = getattr(px, method_name) + kwargs = {} + for key, value in plotly_express_annotation.items(): + if isinstance(value, list): + items = [] + for item in value: + if item.startswith('#'): + resolved_value = None + try: + resolved_value = archive.m_resolve(f'/data/{item[1:]}') + except Exception as e: + logging.warning(e) + items.append(resolved_value) + else: + items.append(item) + kwargs[key] = items + elif isinstance(value, str): + if value.startswith('#'): + resolved_value = None + try: + resolved_value = archive.m_resolve(f'/data/{value[1:]}') + except Exception as e: + logging.warning(e) + kwargs[key] = resolved_value + else: + kwargs[key] = value + try: + figure = method(**kwargs) + return figure, layout, traces + except Exception as e: + raise PlotlyError(e) + + +def convert_to_list(data): + x = data.get('x', None) + y = data.get('y', None) + z = data.get('z', None) + marker = data.get('marker', None) + if x is not None and isinstance(x, np.ndarray): + data['x'] = x.tolist() + if y is not None and isinstance(y, np.ndarray): + data['y'] = y.tolist() + if z is not None and isinstance(z, np.ndarray): + data['z'] = z.tolist() + if marker is not None: + color = marker.get('color', None) + if color is not None and isinstance(color, np.ndarray): + marker['color'] = color.tolist() + + +m_package = Package() + + +class Figure(MSection): + label = Quantity(type=str, description='Label shown in the plot selection.') + index = Quantity(type=int, description='Index of figure in the plot selection.') + + +class PlotlyFigureQuantity(Quantity): + + def __set__(self, obj, value): + if obj is None: + raise KeyError('Cannot overwrite quantity definition. Only values can be set.') + + # Make generated json serializable by converting numpy.ndarray to python list + if value is not None: + if 'data' in value: + all_data = value['data'] + if isinstance(all_data, list): + for data in all_data: + convert_to_list(data) + else: + convert_to_list(all_data) + + obj.m_set(self, value) + + +class PlotlyFigure(Figure): + figure = PlotlyFigureQuantity(type=JSON, description='Contains the JSON serialization for a plotly figure.') + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.figure = kwargs.get('figure', None) + + +class PlotSection(ArchiveSection): + ''' + The PlotSection base section serves as an additional functionality to your sections. + This base section is designed to simplify the process of creating various types of + plots, making it easy to use Plotly Express, Plotly Subplot, and the general Plotly graph objects. + + Features: + - Plotly Express: Create simple and quick plots with a high-level, expressive API. + - Plotly Subplot: Organize multiple plots into subplots for more complex visualizations. + - General Plotly Graph Objects: Fine-tune your plots by working directly with Plotly's graph objects. + + Usage: + - Inherit from this base section to leverage its plot functionality. + - Customize your plots using the annotations plotly-express, plotly-subplots, or/and plotly-graph-object. + + Example Usage: + ```python + class CustomSection(PlotSection, ElnBaseSection, EntryData): + m_def = Section() + time = Quantity(type=float, shape=['*'], unit='s', a_eln=dict(component='NumberEditQuantity')) + substrate_temperature = Quantity(type=float, shape=['*'], unit='K', a_eln=dict(component='NumberEditQuantity')) + chamber_pressure = Quantity(type=float, shape=['*'], unit='Pa', a_eln=dict(component='NumberEditQuantity')) + + def normalize(self, archive, logger): + super(CustomSection, self).normalize(archive, logger) + + first_line = px.scatter(x=self.time, y=self.substrate_temperature) + second_line = px.scatter(x=self.time, y=self.chamber_pressure) + figure1 = make_subplots(rows=1, cols=2, shared_yaxes=True) + figure1.add_trace(first_line.data[0], row=1, col=1) + figure1.add_trace(second_line.data[0], row=1, col=2) + figure1.update_layout(height=400, width=716, title_text="Creating Subplots in Plotly") + self.figures.append(PlotlyFigure(label='figure 1', figure=figure1.to_plotly_json())) + + figure2 = px.scatter(x=self.substrate_temperature, y=self.chamber_pressure, color=self.chamber_pressure, title="Chamber as a function of Temperature") + self.figures.append(PlotlyFigure(label='figure 2', index=1, figure=figure2.to_plotly_json())) + + heatmap_data = [[None, None, None, 12, 13, 14, 15, 16], + [None, 1, None, 11, None, None, None, 17], + [None, 2, 6, 7, None, None, None, 18], + [None, 3, None, 8, None, None, None, 19], + [5, 4, 10, 9, None, None, None, 20], + [None, None, None, 27, None, None, None, 21], + [None, None, None, 26, 25, 24, 23, 22]] + + heatmap = go.Heatmap(z=heatmap_data, showscale=False, connectgaps=True, zsmooth='best') + figure3 = go.Figure(data=heatmap) + self.figures.append(PlotlyFigure(label='figure 3', index=0, figure=figure3.to_plotly_json())) + ``` + ''' + figures = SubSection(sub_section=PlotlyFigure.m_def, repeats=True, label_quantity='label') + + def normalize(self, archive, logger): + super(PlotSection, self).normalize(archive, logger) + + self.figures = [] + all_figures = [] + plotly_express_annotations = self.m_def.m_get_annotations('plotly_express', None) + plotly_graph_object_annotations = self.m_def.m_get_annotations('plotly_graph_object', None) + plotly_subplots_annotations = self.m_def.m_get_annotations('plotly_subplots', None) + + if isinstance(plotly_express_annotations, dict): + plotly_express_annotations = [plotly_express_annotations] + if isinstance(plotly_graph_object_annotations, dict): + plotly_graph_object_annotations = [plotly_graph_object_annotations] + if isinstance(plotly_subplots_annotations, dict): + plotly_subplots_annotations = [plotly_subplots_annotations] + + if plotly_graph_object_annotations: + for plotly_graph_object_annotation in plotly_graph_object_annotations: + figure = {} + label, figure_index = get_figure_layout(plotly_graph_object_annotation) + if 'data' in plotly_graph_object_annotation: + figure['data'] = plotly_graph_object_annotation['data'] + if 'layout' in plotly_graph_object_annotation: + figure['layout'] = plotly_graph_object_annotation['layout'] + if 'config' in plotly_graph_object_annotation: + figure['config'] = plotly_graph_object_annotation['config'] + all_figures.append({"label": label, "index": figure_index, "graph_object": figure}) + + if plotly_express_annotations: + for plotly_express_annotation in plotly_express_annotations: + label, figure_index = get_figure_layout(plotly_express_annotation) + fig, layout, traces = express_do_plot(plotly_express_annotation, archive) + try: + all_traces = go.Figure(fig.data[0]) + total_layout = layout + except Exception as e: + raise PlotlyError(e) + for trace in traces: + trace_fig, layout, _ = express_do_plot(trace, archive) + try: + all_traces.add_trace(trace_fig.data[0]) + except Exception as e: + raise PlotlyError(e) + if total_layout: + try: + all_traces.update_layout(**total_layout) + except Exception as e: + raise PlotlyError(e) + plotly_graph_object = all_traces.to_plotly_json() + all_figures.append({"label": label, "index": figure_index, "graph_object": plotly_graph_object}) + + if plotly_subplots_annotations: + for plotly_subplots_annotation in plotly_subplots_annotations: + label, figure_index = get_figure_layout(plotly_subplots_annotation) + parameters = plotly_subplots_annotation.get('parameters', None) + if parameters: + rows = parameters.get('rows', None) + cols = parameters.get('cols', None) + if rows and cols: + subplot_titles = [''] * rows * cols + plotly_express_list = plotly_subplots_annotation.get('plotly_express', []) + for index, plotly_express in enumerate(plotly_express_list): + title = plotly_express.get('title', None) + if title is not None: + title = plotly_express.get('layout', {}).get('title', {}).get('text', None) + if title is not None: + subplot_titles[index] = title + + default_parameters = {**{"subplot_titles": subplot_titles}, **parameters} + try: + figure = make_subplots(**default_parameters) + except Exception as e: + raise PlotlyError(e) + + for row in range(1, rows + 1): + for col in range(1, cols + 1): + if len(plotly_express_list) > 0: + plotly_express_annotation = plotly_express_list.pop(0) + fig, sub_layout, traces = express_do_plot(plotly_express_annotation, archive) + try: + if sub_layout: + fig.update_layout(**sub_layout) + figure.add_trace(fig.data[0], row=row, col=col) + for trace in traces: + trace_fig, layout, _ = express_do_plot(trace, archive) + try: + figure.add_trace(trace_fig.data[0], row=row, col=col) + except Exception as e: + raise PlotlyError(e) + if sub_layout: + xaxis = sub_layout.get('xaxis', None) + if xaxis: + figure.update_xaxes(xaxis, row=row, col=col) + yaxis = sub_layout.get('yaxis', None) + if yaxis: + figure.update_yaxes(yaxis, row=row, col=col) + except Exception as e: + raise PlotlyError(e) + layout = plotly_subplots_annotation.get('layout', None) + if layout: + try: + figure.update_layout(**layout) + except Exception as e: + raise PlotlyError(e) + plotly_graph_object = figure.to_plotly_json() + all_figures.append({"label": label, "index": figure_index, "graph_object": plotly_graph_object}) + + for figure in all_figures: + self.figures.append(PlotlyFigure(label=figure["label"], index=figure["index"], figure=figure["graph_object"])) + + +m_package.__init_metainfo__() diff --git a/nomad/datamodel/metainfo/simulation/__init__.py b/nomad/datamodel/metainfo/simulation/__init__.py index 3d33c8dbfac1c606a1d79f5f85f2ee4d96b5a1df..f96e7b8c8df29b3f64712d20dd9523a59dd54a73 100644 --- a/nomad/datamodel/metainfo/simulation/__init__.py +++ b/nomad/datamodel/metainfo/simulation/__init__.py @@ -35,6 +35,9 @@ # from nomad.metainfo import Environment from .run import Run +from .calculation import Calculation +from .method import Method +from .system import System from . import run from . import method from . import calculation diff --git a/nomad/datamodel/metainfo/simulation/calculation.py b/nomad/datamodel/metainfo/simulation/calculation.py index 1bcfaed8e3e1ef502f29b9f2f5b649aedfe2661b..922ce7e4c7726397da084bed76720432b10a29a1 100644 --- a/nomad/datamodel/metainfo/simulation/calculation.py +++ b/nomad/datamodel/metainfo/simulation/calculation.py @@ -99,21 +99,21 @@ class Atomic(MSection): ''') n_orbitals = Quantity( - type=int, + type=np.int32, shape=[], description=''' Number of orbitals used in the projection. ''') n_atoms = Quantity( - type=int, + type=np.int32, shape=[], description=''' Number of atoms. ''') n_spin_channels = Quantity( - type=int, + type=np.int32, shape=[], description=''' Number of spin channels. @@ -233,6 +233,7 @@ class EnergyEntry(Atomic): code-independent value of the energy. ''') + # TODO Can we remove reference to unit cell in this description to make more general? value = Quantity( type=np.dtype(np.float64), shape=[], @@ -283,6 +284,22 @@ class EnergyEntry(Atomic): Value of the correction to the energy. ''') + short_range = Quantity( + type=np.dtype(np.float64), + shape=[], + unit='joule', + description=''' + Value of the short range contributions to the energy. + ''') + + long_range = Quantity( + type=np.dtype(np.float64), + shape=[], + unit='joule', + description=''' + Value of the long range contributions to the energy. + ''') + class Energy(MSection): ''' @@ -389,6 +406,7 @@ class Energy(MSection): Contains the value and information regarding the Madelung energy. ''') + # TODO I suggest ewald is moved to "long range" under electrostatic->energyentry, unless there is some other usage I am misunderstanding ewald = SubSection( sub_section=EnergyEntry.m_def, description=''' @@ -458,6 +476,7 @@ class Energy(MSection): Value of the calculated enthalpy per cell i.e. energy_total + pressure * volume. ''') + # TODO Shouldn't this be moved out of energy? entropy = Quantity( type=np.dtype(np.float64), shape=[], @@ -482,6 +501,13 @@ class Energy(MSection): Value of the internal energy. ''') + double_counting = SubSection( + sub_section=EnergyEntry.m_def, + categories=[FastAccess], + description=''' + Double counting correction when performing Hubbard model calculations. + ''') + # TODO remove this should be be entropy.correction correction_entropy = SubSection( sub_section=EnergyEntry.m_def, @@ -553,6 +579,12 @@ class Energy(MSection): Contains the value and information regarding the potential energy. ''') + pressure_volume_work = SubSection( + sub_section=EnergyEntry.m_def, + description=''' + Contains the value and information regarding the instantaneous pV work. + ''') + class ForcesEntry(Atomic): ''' @@ -1091,7 +1123,18 @@ class DosValues(AtomicValues): class Dos(Atomic): ''' Section containing information of an electronic-energy or phonon density of states - (DOS) evaluation. + (DOS) evaluation per spin channel. + + It includes the total DOS and the projected DOS values. We differentiate `species_projected` as the + projected DOS for same atomic species, `atom_projected` as the projected DOS for different + atoms in the cell, and `orbital_projected` as the projected DOS for the orbitals of each + atom. These are hierarchically connected as: + + atom_projected = sum_{orbitals} orbital_projected + + species_projected = sum_{atoms} atom_projected + + total = sum_{species} species_projected ''' m_def = Section(validate=False) @@ -1104,42 +1147,51 @@ class Dos(Atomic): ''') energies = Quantity( - type=np.dtype(np.float64), + type=np.float64, shape=['n_energies'], unit='joule', description=''' Contains the set of discrete energy values for the DOS. ''') - energy_shift = Quantity( - type=np.dtype(np.float64), + energy_fermi = Quantity( + type=np.float64, + unit="joule", shape=[], - unit='joule', description=''' - Value necessary to shift the energies array so that the energy zero corresponds to - the highest occupied energy level. + Fermi energy. ''') - band_gap = SubSection(sub_section=BandGapDeprecated.m_def, repeats=True) - - energy_fermi = Quantity( - type=np.dtype(np.float64), + energy_ref = Quantity( + type=np.float64, unit="joule", shape=[], - description=""" - Fermi energy. - """) + description=''' + Energy level denoting the origin along the energy axis, used for comparison and visualization. + It is defined as the energy_highest_occupied and does not necessarily coincide with energy_fermi. + ''') - total = SubSection(sub_section=DosValues.m_def, repeats=True) + spin_channel = Quantity( + type=np.int32, + shape=[], + description=''' + Spin channel of the corresponding DOS. It can take values of 0 or 1. + ''') - atom_projected = SubSection(sub_section=DosValues.m_def, repeats=True) + # TODO total is neither repeated, nor inheriting from AtomicValues; we have to change this when overhauling. + total = SubSection(sub_section=DosValues.m_def, repeats=True) species_projected = SubSection(sub_section=DosValues.m_def, repeats=True) + atom_projected = SubSection(sub_section=DosValues.m_def, repeats=True) + orbital_projected = SubSection(sub_section=DosValues.m_def, repeats=True) fingerprint = SubSection(sub_section=DosFingerprint.m_def, repeats=False) + # TODO deprecate this subsection + band_gap = SubSection(sub_section=BandGapDeprecated.m_def, repeats=True) + class ElectronicStructureProvenance(ProvenanceTracker): ''' @@ -1160,6 +1212,13 @@ class ElectronicStructureProvenance(ProvenanceTracker): description=''' ''' ) + methodology = Quantity( + type=Reference(Method.m_def), + shape=[], + description=''' + Reference to the specific method section. + ''' + ) class BandGap(BandGapDeprecated): @@ -1490,9 +1549,9 @@ class Density(Volumetric): ''') -class Spectra(MSection): +class Spectra(ArchiveSection): ''' - Excited states properties. + Section containing the spectra properties. ''' m_def = Section(validate=False) @@ -1519,6 +1578,14 @@ class Spectra(MSection): ''', categories=[EnergyValue]) + energy_zero_ref = Quantity( + type=np.float64, + unit='joule', + shape=[], + description=''' + Reference energy to set the origin of the spectra to 0 eV. + ''') + intensities = Quantity( type=np.float64, shape=['n_energies'], @@ -1526,6 +1593,13 @@ class Spectra(MSection): Excitation intensities in arbitrary units. ''') + intensities_units = Quantity( + type=str, + description=''' + Units in which the intensities of the spectra are returned by a calculation. The + typical units for the dielectric constant are `F/m`. + ''') + oscillator_strengths = Quantity( type=np.float64, shape=['n_energies'], @@ -1541,6 +1615,8 @@ class Spectra(MSection): Transition dipole moments. ''') + provenance = SubSection(sub_section=ElectronicStructureProvenance.m_def, repeats=True) + class GreensFunctions(MSection): ''' @@ -1549,11 +1625,20 @@ class GreensFunctions(MSection): m_def = Section(validate=False) + type = Quantity( + type=MEnum('impurity', 'lattice'), + description=''' + Type of Green's function calculated from the mapping of the Hubbard-Kanamori model + into the Anderson impurity model. These calculations are converged if both types of + Green's functions converge to each other (G_impurity == G_lattice). + ''') + matsubara_freq = Quantity( type=np.float64, - shape=['2 * n_matsubara_freq'], + shape=['*'], description=''' - Matsubara frequencies (imaginary frequencies). + Matsubara frequencies (imaginary frequencies). Can be either positives or both positives + and negatives. ''') tau = Quantity( @@ -1563,38 +1648,67 @@ class GreensFunctions(MSection): Imaginary times. ''') + frequencies = Quantity( + type=np.float64, + shape=['n_frequencies'], + description=''' + Real space frequencies. + ''') + chemical_potential = Quantity( type=np.float64, - unit='electron_volt', + unit='joule', description=''' Chemical potential. ''') self_energy_iw = Quantity( type=np.complex128, - shape=['n_atoms_per_unit_cell', 2, 'n_correlated_orbitals', '2 * n_matsubara_freq'], + shape=['n_atoms_per_unit_cell', 2, 'n_correlated_orbitals', '*'], description=''' - Self-energy matrix in Matsubara frequencies. + Self-energy tensor in Matsubara frequencies. ''') greens_function_iw = Quantity( type=np.complex128, - shape=['n_atoms_per_unit_cell', 2, 'n_correlated_orbitals', '2 * n_matsubara_freq'], + shape=['n_atoms_per_unit_cell', 2, 'n_correlated_orbitals', '*'], description=''' - Green's function matrix in Matsubara frequencies. + Green's function tensor in Matsubara frequencies. ''') - greens_function_freq = Quantity( + hybridization_function_iw = Quantity( type=np.complex128, + shape=['n_atoms_per_unit_cell', 2, 'n_correlated_orbitals', '*'], description=''' - Green's function matrix in real frequencies. + Hybridization function tensor in Matsubara frequencies. ''') greens_function_tau = Quantity( type=np.complex128, shape=['n_atoms_per_unit_cell', 2, 'n_correlated_orbitals', 'n_tau'], description=''' - Green's function matrix in tau (imaginary time). + Green's function tensor in tau (imaginary time). + ''') + + self_energy_freq = Quantity( + type=np.complex128, + shape=['n_atoms_per_unit_cell', 2, 'n_correlated_orbitals', 'n_frequencies'], + description=''' + Self-energy tensor in real frequencies. + ''') + + greens_function_freq = Quantity( + type=np.complex128, + shape=['n_atoms_per_unit_cell', 2, 'n_correlated_orbitals', 'n_frequencies'], + description=''' + Green's function tensor in real frequencies. + ''') + + hybridization_function_freq = Quantity( + type=np.complex128, + shape=['n_atoms_per_unit_cell', 2, 'n_correlated_orbitals', 'n_frequencies'], + description=''' + Hybridization function tensor in real frequencies. ''') orbital_occupations = Quantity( @@ -1780,16 +1894,6 @@ class BaseCalculation(ArchiveSection): decomposed simulation that needs to be connected. ''') - time_calculation = Quantity( - type=np.dtype(np.float64), - shape=[], - unit='second', - description=''' - Stores the wall-clock time needed for a calculation i.e. the real time that has - been elapsed from start to end. - ''', - categories=[TimeInfo, AccessoryInfo]) - calculation_converged = Quantity( type=bool, shape=[], @@ -1814,12 +1918,23 @@ class BaseCalculation(ArchiveSection): contamination in spin-unrestricted calculations. ''') + time_calculation = Quantity( + type=np.dtype(np.float64), + shape=[], + unit='second', + description=''' + Stores the wall-clock time needed to complete the calculation i.e. the real time + that has elapsed from start to end of calculation. + ''', + categories=[TimeInfo, AccessoryInfo]) + time_physical = Quantity( - type=np.dtype(np.int32), + type=np.dtype(np.float64), shape=[], unit='second', description=''' - The elapsed time with respect to the start of the simulation. + The elapsed real time at the end of the calculation with respect to the start of + the simulation. ''') energy = SubSection(sub_section=Energy.m_def, categories=[FastAccess]) @@ -1868,14 +1983,48 @@ class BaseCalculation(ArchiveSection): Value of the volume of the system. ''') - pressure = Quantity( + density = Quantity( type=np.dtype(np.float64), shape=[], + unit='kg / m ** 3', + description=''' + Value of the density of the system. + ''') + + pressure = Quantity( + type=np.float64, + shape=[], unit='pascal', description=''' Value of the pressure of the system. ''') + pressure_tensor = Quantity( + type=np.float64, + shape=[3, 3], + unit='pascal', + description=''' + Value of the pressure in terms of the x, y, z components of the simulation cell. + Typically calculated as the difference between the kinetic energy and the virial. + ''') + + virial_tensor = Quantity( + type=np.dtype(np.float64), + shape=[3, 3], + unit='joule', + description=''' + Value of the virial in terms of the x, y, z components of the simulation cell. + Typically calculated as the cross product between positions and forces. + ''') + + enthalpy = Quantity( + type=np.dtype(np.float64), + shape=[], + unit='joule', + description=''' + Value of the calculated enthalpy per cell i.e. energy_total + pressure * volume. + ''') + temperature = Quantity( type=np.dtype(np.float64), shape=[], diff --git a/nomad/datamodel/metainfo/simulation/method.py b/nomad/datamodel/metainfo/simulation/method.py index d76420d1155d96d6163b8c7720959e4004963ae8..4815f8de855f08fea86a07478747eb2783aeba8b 100644 --- a/nomad/datamodel/metainfo/simulation/method.py +++ b/nomad/datamodel/metainfo/simulation/method.py @@ -52,7 +52,7 @@ class Mesh(MSection): sampling_method = Quantity( type=MEnum( 'Gamma-centered', 'Monkhorst-Pack', 'Gamma-offcenter', 'Line-path', - 'Equidistant', 'Logarithmic', 'Gauss-Legendre', 'Gauss-Laguerre' + 'Equidistant', 'Logarithmic', 'Tan', 'Gauss-Legendre', 'Gauss-Laguerre' 'Clenshaw-Curtis', 'Newton-Cotes', 'Gauss-Hermite' ), shape=[], @@ -75,6 +75,8 @@ class Mesh(MSection): | `'Logarithmic'` | log distance 1D grid | + | `'Tan'` | Non-uniform tan mesh for 1D grids. More dense at low abs values of the points, while less dense for higher values | + | `'Gauss-Legendre'` | Quadrature rule for integration using Legendre polynomials | | `'Gauss-Laguerre'` | Quadrature rule for integration using Laguerre polynomials | @@ -459,6 +461,12 @@ class AtomParameters(MSection): Atomic number (number of protons) of this atom kind, use 0 if not an atom. ''') + atom_index = Quantity( + type=np.int32, + description=''' + The atom index with respect to the parsed system atoms section. + ''') + n_valence_electrons = Quantity( type=np.float64, shape=[], @@ -1362,15 +1370,6 @@ class LatticeModelHamiltonian(MSection): Hopping parameters for simple models, with [t, t`, t``, etc]. ''') - # TODO determine standard dimensions for projection_matrix: - # KMesh.n_points x n_atoms_per_unit_cell x n_orbitals? x n_bands? - projection_matrix = Quantity( - type=np.complex128, - shape=['*', '*', '*', '*'], - description=''' - Projection matrices from Bloch bands to virtual projected orbitals. - ''') - hopping_matrix = SubSection(sub_section=HoppingMatrix.m_def, repeats=False) hubbard_kanamori_model = SubSection(sub_section=HubbardKanamoriModel.m_def, repeats=True) @@ -1615,25 +1614,25 @@ class DMFT(MSection): m_def = Section(validate=False) - n_atoms_per_unit_cell = Quantity( + n_impurities = Quantity( type=np.int32, shape=[], description=''' - Number of atoms per unit cell. + Number of impurities mapped from the correlated atoms in the unit cell. ''') n_correlated_orbitals = Quantity( type=np.int32, - shape=['n_atoms_per_unit_cell'], + shape=['n_impurities'], description=''' - Number of correlated orbitals per atom in the unit cell. + Number of correlated orbitals per impurity. ''') - n_correlated_electrons = Quantity( + n_electrons = Quantity( type=np.float64, - shape=['n_atoms_per_unit_cell'], + shape=['n_impurities'], description=''' - Number of correlated electrons per atom in the unit cell. + Initial number of valence electrons per impurity. ''') inverse_temperature = Quantity( @@ -2055,9 +2054,9 @@ class Method(ArchiveSection): k_mesh = SubSection(sub_section=KMesh.m_def) - frequency_mesh = SubSection(sub_section=FrequencyMesh.m_def) + frequency_mesh = SubSection(sub_section=FrequencyMesh.m_def, repeats=True) - time_mesh = SubSection(sub_section=TimeMesh.m_def) + time_mesh = SubSection(sub_section=TimeMesh.m_def, repeats=True) electronic = SubSection(sub_section=Electronic.m_def) diff --git a/nomad/datamodel/metainfo/simulation/system.py b/nomad/datamodel/metainfo/simulation/system.py index aeaa95207f5c3527a08c1fdfa17e861ef1e66fab..ea573d96849fa55ef0cf439d2edecc2dd0694bbf 100644 --- a/nomad/datamodel/metainfo/simulation/system.py +++ b/nomad/datamodel/metainfo/simulation/system.py @@ -24,6 +24,7 @@ from nomad.metainfo import ( # pylint: disable=unused-import from nomad.datamodel.data import ArchiveSection from ..common import FastAccess +from nomad.units import ureg m_package = Package() @@ -248,8 +249,8 @@ class Atoms(MSection): from ase import Atoms return Atoms( symbols=self.labels, - positions=self.positions.m, - cell=self.lattice_vectors.m, + positions=self.positions.to(ureg.angstroms).m, + cell=self.lattice_vectors.to(ureg.angstroms).m, pbc=self.periodic ) except Exception as e: diff --git a/nomad/datamodel/metainfo/simulation/workflow.py b/nomad/datamodel/metainfo/simulation/workflow.py index 1fad77dd4f96f777efaaf6e657509a1e56bb3716..7ed3f3b8a7db0f94f70645a81963e158d389520b 100644 --- a/nomad/datamodel/metainfo/simulation/workflow.py +++ b/nomad/datamodel/metainfo/simulation/workflow.py @@ -29,12 +29,14 @@ from nomad.datamodel.metainfo.common import FastAccess from nomad.datamodel.metainfo.workflow import Workflow, Link, Task from nomad.datamodel.metainfo.simulation.system import System, AtomsGroup from nomad.datamodel.metainfo.simulation.method import ( - Method, XCFunctional, BasisSetContainer, GW as GWMethodology, + Method, XCFunctional, BasisSetContainer, GW as GWMethodology, Projection as ProjectionMethodology, + DMFT as DMFTMethodology, BSE as BSEMethodology ) from nomad.datamodel.metainfo.simulation.calculation import ( Calculation, BandGap, Dos, BandStructure, BandEnergies, Density, Potential, Spectra, + ElectronicStructureProvenance, GreensFunctions, RadiusOfGyration as RadiusOfGyrationCalculation, - RadiusOfGyrationValues as RadiusOfGyrationValuesCalculation) + RadiusOfGyrationValues as RadiusOfGyrationValuesCalculation, EnergyEntry) from nomad.atomutils import archive_to_universe from nomad.atomutils import ( calc_molecular_rdf, @@ -57,11 +59,12 @@ def resolve_difference(values): return delta_values -_input_structure_name = 'Input structure' -_output_structure_name = 'Output structure' +_input_system_name = 'Input structure' +_output_system_name = 'Output structure' _input_method_name = 'Input method' +_input_calculation_name = 'Input calculation' _output_calculation_name = 'Output calculation' -_workflow_method_name = 'Workflow parameters' +_workflow_method_name = 'Workflow method' _workflow_results_name = 'Workflow results' @@ -137,15 +140,15 @@ class SimulationWorkflow(Workflow): logger.warning('System, method and calculation required for normalization.') pass - if not self._calculations or not self._systems: + if not self._calculations: return if not self.inputs: if self._systems: self.m_add_sub_section( - Workflow.inputs, Link(name=_input_structure_name, section=self._systems[0])) + Workflow.inputs, Link(name=_input_system_name, section=self._systems[0])) - if self.method: + if self.method is not None: self.m_add_sub_section( Workflow.inputs, Link(name=_workflow_method_name, section=self.method)) @@ -159,10 +162,61 @@ class SimulationWorkflow(Workflow): self.m_add_sub_section( Workflow.outputs, Link(name=_output_calculation_name, section=self._calculations[-1])) - if self.results: + if self.results is not None: self.m_add_sub_section( Workflow.outputs, Link(name=_workflow_results_name, section=self.results)) + if not self.tasks: + current_step = 1 + current_time = None + inputs = [] + add_inputs, add_outputs = False, False + tasks = [] + for n, calc in enumerate(self._calculations): + if calc.time_physical is None or calc.time_calculation is None: + # all calculation sections should have time info inorder to create workflow tasks + tasks = [] + break + + task = Task(outputs=[Link(name=_output_calculation_name, section=calc)]) + # successive tasks in serial if overlap in time duration exists + if current_time is None: + current_time = calc.time_physical + start_time = calc.time_physical - calc.time_calculation + if start_time and (start_time > current_time or np.isclose(start_time, current_time)): + task.inputs = inputs + inputs = [] + current_step += 1 + else: + if tasks: + for input in tasks[-1].inputs: + if input.name == _input_method_name: + continue + task.m_add_sub_section(Task.inputs, input) + if calc.method_ref: + task.m_add_sub_section(Task.inputs, Link(name=_input_method_name, section=calc.method_ref)) + if calc.system_ref: + inputs.append(Link(name=_input_system_name, section=calc.system_ref)) + task.m_add_sub_section(Task.outputs, Link(name=_output_system_name, section=calc.system_ref)) + else: + inputs.append(Link(name=_input_calculation_name, section=calc)) + task.name = f'Step {current_step}' + tasks.append(task) + current_time = max(current_time, calc.time_physical) + # add input if first calc in tasks + add_inputs = add_inputs or n == 0 + # add output if last calc in tasks + add_outputs = add_outputs or n == len(self._calculations) - 1 + for task in tasks: + # add workflow inputs to first parallel tasks + if task.name == 'Step 1' and add_inputs: + task.inputs.extend([input for input in self.inputs if input not in task.inputs]) + # add outputs of last parallel tasks to workflow outputs + if task.name == f'Step {current_step}' and add_outputs: + self.outputs.extend([output for output in task.outputs if output not in self.outputs]) + + self.tasks = tasks + class Decomposition(MSection): ''' @@ -551,7 +605,7 @@ class SinglePoint(SimulationWorkflow): task = Task() if self._systems: task.m_add_sub_section( - Task.inputs, Link(name=_input_structure_name, section=self._systems[0])) + Task.inputs, Link(name=_input_system_name, section=self._systems[0])) if self._methods: task.m_add_sub_section( Task.inputs, Link(name=_input_method_name, section=self._methods[0])) @@ -633,9 +687,9 @@ class ParallelSimulation(SimulationWorkflow): for n, calculation in enumerate(self._calculations): inputs, outputs = [], [Link(name=_output_calculation_name, section=calculation)] if self._calculations[n].system_ref: - inputs.append(Link(name=_input_structure_name, section=self._calculations[n].system_ref)) + inputs.append(Link(name=_input_system_name, section=self._calculations[n].system_ref)) elif len(self._calculations) == len(self._systems): - inputs.append(Link(name=_input_structure_name, section=self._systems[n])) + inputs.append(Link(name=_input_system_name, section=self._systems[n])) else: continue if self._calculations[n].method_ref: @@ -660,12 +714,12 @@ class SerialSimulation(SimulationWorkflow): if not input_structure: input_structure = previous_structure if input_structure: - inputs.append(Link(name=_input_structure_name, section=input_structure)) + inputs.append(Link(name=_input_system_name, section=input_structure)) previous_structure = calculation.system_ref - outputs.append(Link(name=_output_structure_name, section=calculation.system_ref)) + outputs.append(Link(name=_output_system_name, section=calculation.system_ref)) elif len(self._calculations) == len(self._systems): - inputs.append(Link(name=_input_structure_name, section=self.input_structure if n == 0 else self._systems[n - 1])) - outputs.append(Link(name=_output_structure_name, section=self._systems[n])) + inputs.append(Link(name=_input_system_name, section=self.input_structure if n == 0 else self._systems[n - 1])) + outputs.append(Link(name=_output_system_name, section=self._systems[n])) else: continue if calculation.method_ref: @@ -894,10 +948,11 @@ class GeometryOptimization(SerialSimulation): if invalid: logger.warning('Energy not reported for an calculation that is part of a geometry optimization') if energies: - self.results.energies = energies + self.results.energies = energies * EnergyEntry.value.unit - if not self.results.final_energy_difference: - self.results.final_energy_difference = resolve_difference(energies) + energy_difference = resolve_difference(energies) + if not self.results.final_energy_difference and energy_difference is not None: + self.results.final_energy_difference = energy_difference * EnergyEntry.value.unit if not self.results.final_force_maximum: if len(self._calculations) > 0: @@ -968,7 +1023,7 @@ class ThermostatParameters(MSection): thermostat_type = Quantity( type=MEnum('andersen', 'berendsen', 'brownian', 'langevin_goga', 'langevin_schneider', 'nose_hoover', 'velocity_rescaling', - 'velocity_rescaling_langevin'), + 'velocity_rescaling_langevin', 'velocity_rescaling_woodcock'), shape=[], description=''' The name of the thermostat used for temperature control. If skipped or an empty string is used, it @@ -1007,6 +1062,9 @@ class ThermostatParameters(MSection): | `"velocity_rescaling_langevin"` | G. Bussi and M. Parrinello, [Phys. Rev. E **75**, 056707 (2007)](https://doi.org/10.1103/PhysRevE.75.056707) | + + | `"velocity_rescaling_woodcock"` | L. V. Woodcock, + [Chem. Phys. Lett. **10**, 257 (1971)](https://doi.org/10.1016/0009-2614(71)80281-6) | ''') reference_temperature = Quantity( @@ -1014,7 +1072,7 @@ class ThermostatParameters(MSection): shape=[], unit='kelvin', description=''' - The target temperature for the simulation. + The target temperature for the simulation. Typically used when temperature_profile is "constant". ''') coupling_constant = Quantity( @@ -1034,6 +1092,69 @@ class ThermostatParameters(MSection): The effective or fictitious mass of the temperature resevoir. ''') + temperature_profile = Quantity( + type=MEnum('constant', 'linear', 'exponential'), + shape=[], + description=''' + Type of temperature control (i.e., annealing) procedure. Can be "constant" (no annealing), "linear", or "exponential". + If linear, "temperature_update_delta" specifies the corresponding update parameter. + If exponential, "temperature_update_factor" specifies the corresponding update parameter. + ''') + + reference_temperature_start = Quantity( + type=np.float64, + shape=[], + unit='kelvin', + description=''' + The initial target temperature for the simulation. Typically used when temperature_profile is "linear" or "exponential". + ''') + + reference_temperature_end = Quantity( + type=np.float64, + shape=[], + unit='kelvin', + description=''' + The final target temperature for the simulation. Typically used when temperature_profile is "linear" or "exponential". + ''') + + temperature_update_frequency = Quantity( + type=int, + shape=[], + description=''' + Number of simulation steps between changing the target temperature. + ''') + + temperature_update_delta = Quantity( + type=np.float64, + shape=[], + description=''' + Amount to be added (subtracted if negative) to the current reference_temperature + at a frequency of temperature_update_frequency when temperature_profile is "linear". + The reference temperature is then replaced by this new value until the next update. + ''') + + temperature_update_factor = Quantity( + type=np.float64, + shape=[], + description=''' + Factor to be multiplied to the current reference_temperature at a frequency of temperature_update_frequency when temperature_profile is exponential. + The reference temperature is then replaced by this new value until the next update. + ''') + + step_start = Quantity( + type=int, + shape=[], + description=''' + Trajectory step where this thermostating starts. + ''') + + step_end = Quantity( + type=int, + shape=[], + description=''' + Trajectory step number where this thermostating ends. + ''') + class BarostatParameters(MSection): ''' @@ -1101,7 +1222,7 @@ class BarostatParameters(MSection): unit='pascal', description=''' The target pressure for the simulation, stored in a 3x3 matrix, indicating the values for individual directions - along the diagonal, and coupling between directions on the off-diagonal. + along the diagonal, and coupling between directions on the off-diagonal. Typically used when pressure_profile is "constant". ''') coupling_constant = Quantity( @@ -1125,6 +1246,71 @@ class BarostatParameters(MSection): the input/output files. ''') + pressure_profile = Quantity( + type=MEnum('constant', 'linear', 'exponential'), + shape=[], + description=''' + Type of pressure control procedure. Can be "constant" (no annealing), "linear", or "exponential". + If linear, "pressure_update_delta" specifies the corresponding update parameter. + If exponential, "pressure_update_factor" specifies the corresponding update parameter. + ''') + + reference_pressure_start = Quantity( + type=np.float64, + shape=[3, 3], + unit='pascal', + description=''' + The initial target pressure for the simulation, stored in a 3x3 matrix, indicating the values for individual directions + along the diagonal, and coupling between directions on the off-diagonal. Typically used when pressure_profile is "linear" or "exponential". + ''') + + reference_pressure_end = Quantity( + type=np.float64, + shape=[3, 3], + unit='pascal', + description=''' + The final target pressure for the simulation, stored in a 3x3 matrix, indicating the values for individual directions + along the diagonal, and coupling between directions on the off-diagonal. Typically used when pressure_profile is "linear" or "exponential". + ''') + + pressure_update_frequency = Quantity( + type=int, + shape=[], + description=''' + Number of simulation steps between changing the target pressure. + ''') + + pressure_update_delta = Quantity( + type=np.float64, + shape=[], + description=''' + Amount to be added (subtracted if negative) to the current reference_pressure + at a frequency of pressure_update_frequency when pressure_profile is "linear". + The pressure temperature is then replaced by this new value until the next update. + ''') + + pressure_update_factor = Quantity( + type=np.float64, + shape=[], + description=''' + Factor to be multiplied to the current reference_pressure at a frequency of pressure_update_frequency when pressure_profile is exponential. + The reference pressure is then replaced by this new value until the next update. + ''') + + step_start = Quantity( + type=int, + shape=[], + description=''' + Trajectory step where this barostating starts. + ''') + + step_end = Quantity( + type=int, + shape=[], + description=''' + Trajectory step number where this barostating ends. + ''') + class MolecularDynamicsMethod(SimulationWorkflowMethod): @@ -1224,9 +1410,9 @@ class MolecularDynamicsMethod(SimulationWorkflowMethod): The number of timesteps between saving the thermodynamic quantities. ''') - thermostat_parameters = SubSection(sub_section=ThermostatParameters.m_def, repeats=False) + thermostat_parameters = SubSection(sub_section=ThermostatParameters.m_def, repeats=True) - barostat_parameters = SubSection(sub_section=BarostatParameters.m_def, repeats=False) + barostat_parameters = SubSection(sub_section=BarostatParameters.m_def, repeats=True) class EnsemblePropertyValues(MSection): @@ -1685,41 +1871,39 @@ class MolecularDynamicsResults(ThermodynamicsResults): # calculate radius of gyration for polymers try: - sec_system = archive.run[-1].system[0] + sec_systems = archive.run[-1].system + sec_system = sec_systems[0] sec_calc = archive.run[-1].calculation sec_calc = sec_calc if sec_calc is not None else [] except Exception: return flag_rgs = False - for i_calc, calc in enumerate(sec_calc): - if calc.radius_of_gyration: + for calc in sec_calc: + if calc.get('radius_of_gyration'): flag_rgs = True break # TODO Should transfer Rg's to workflow results if they are already supplied in calculation if not flag_rgs: - flag_warned = False sec_rgs_calc = None - system_topology = sec_system.get('atoms_group') + system_topology = sec_system.atoms_group rg_results = calc_molecular_radius_of_gyration(universe, system_topology) for rg in rg_results: + n_frames = rg.get('n_frames') + if len(sec_systems) != n_frames: + self.logger.warning( + 'Mismatch in length of system references in calculation and calculated Rg values.' + 'Will not store Rg values under calculation section') + continue + sec_rgs = RadiusOfGyration() sec_rgs._rg_results = rg self.radius_of_gyration.append(sec_rgs) - # disperse results into calculation section - n_frames = rg.get('n_frames') - if len(sec_calc) == 0: - sec_calc = [self.run.m_create(Calculation) for _ in range(n_frames)] - elif n_frames != len(sec_calc): - if not flag_warned: - self.logger.warning( - 'Unexpected mismatch in number of calculations and number of' - 'trajectory frames. Not storing Rg values under calculation.') - flag_warned = True - # TODO sync calculation and system sections to be able to store the Rgs under calculation - continue - for i_calc, calc in enumerate(sec_calc): + for calc in sec_calc: + if not calc.system_ref: + continue + sys_ind = calc.system_ref.m_parent_index sec_rgs_calc = calc.radius_of_gyration if not sec_rgs_calc: sec_rgs_calc = calc.m_create(RadiusOfGyrationCalculation) @@ -1729,7 +1913,7 @@ class MolecularDynamicsResults(ThermodynamicsResults): sec_rg_values = sec_rgs_calc.m_create(RadiusOfGyrationValuesCalculation) sec_rg_values.atomsgroup_ref = rg.get('atomsgroup_ref') sec_rg_values.label = rg.get('label') - sec_rg_values.value = rg.get('value')[i_calc] + sec_rg_values.value = rg.get('value')[sys_ind] class MolecularDynamics(SerialSimulation): @@ -2347,72 +2531,81 @@ class Thermodynamics(SerialSimulation): class GWResults(SimulationWorkflowResults): + '''Groups DFT and GW outputs: band gaps, DOS, band structures. The ResultsNormalizer + takes care of adding a label 'DFT' or 'GW' in the method `get_gw_workflow_properties`. + ''' band_gap_dft = Quantity( type=Reference(BandGap), shape=['*'], description=''' - DFT band gap + Reference to the DFT band gap. ''') band_gap_gw = Quantity( type=Reference(BandGap), shape=['*'], description=''' - GW band gap + Reference to the GW band gap. ''') dos_dft = Quantity( type=Reference(Dos), shape=['*'], description=''' - DFT density of states + Reference to the DFT density of states. ''') dos_gw = Quantity( type=Reference(Dos), shape=['*'], description=''' - GW density of states + Reference to the GW density of states. ''') band_structure_dft = Quantity( type=Reference(BandStructure), shape=['*'], description=''' - DFT density of states + Reference to the DFT band structure. ''') band_structure_gw = Quantity( type=Reference(BandStructure), shape=['*'], description=''' - DFT density of states + Reference to the GW band structure. ''') class GWMethod(SimulationWorkflowMethod): - - gw_method_ref = Quantity( - type=Reference(GWMethodology), - description=''' - GW methodology reference. - ''') + '''Groups DFT and GW input methodologies: starting XC functional, electrons + representation (basis set), GW method reference. + ''' starting_point = Quantity( type=Reference(XCFunctional), description=''' - Starting point (XC functional or HF) used. + Reference to the starting point (XC functional or HF) used. ''') electrons_representation = Quantity( type=Reference(BasisSetContainer), description=''' - Basis set used. + Reference to the basis set used. + ''') + + gw_method_ref = Quantity( + type=Reference(GWMethodology), + description=''' + Reference to the GW methodology. ''') class GW(SerialSimulation): + '''The GW workflow is generated in an extra EntryArchive IF both the DFT SinglePoint + and the GW SinglePoint EntryArchives are present in the upload. + ''' method = SubSection(sub_section=GWMethod) @@ -2421,20 +2614,6 @@ class GW(SerialSimulation): def normalize(self, archive, logger): super().normalize(archive, logger) - if not self.method: - self.method = GWMethod() - self.inputs.append(Link(name=_workflow_method_name, section=self.method)) - # link method also to first task - if self.tasks: - self.tasks[0].inputs.append(Link(name=_workflow_method_name, section=self.method)) - - if not self.results: - self.results = GWResults() - self.outputs.append(Link(name=_workflow_results_name, section=self.results)) - # link results also to last task - if self.tasks: - self.tasks[-1].inputs.append(Link(name=_workflow_results_name, section=self.results)) - if len(self.tasks) != 2: logger.error('Expected two tasks.') return @@ -2442,6 +2621,9 @@ class GW(SerialSimulation): dft_task = self.tasks[0] gw_task = self.tasks[1] + if not self.results: + self.results = GWResults() + for name, section in self.results.m_def.all_quantities.items(): calc_name = '_'.join(name.split('_')[:-1]) if calc_name in ['dos', 'band_structure']: @@ -2456,6 +2638,8 @@ class GW(SerialSimulation): class PhotonPolarizationResults(SimulationWorkflowResults): + '''Groups all polarization outputs: spectrum. + ''' n_polarizations = Quantity( type=np.int32, @@ -2472,11 +2656,24 @@ class PhotonPolarizationResults(SimulationWorkflowResults): class PhotonPolarizationMethod(SimulationWorkflowMethod): + '''Defines the full macroscopic dielectric tensor methodology: BSE method reference. + ''' + # TODO add TDDFT methodology reference. - pass + bse_method_ref = Quantity( + type=Reference(BSEMethodology), + description=''' + BSE methodology reference. + ''') class PhotonPolarization(ParallelSimulation): + '''The PhotonPolarization workflow is generated in an extra EntryArchive FOR all polarization + EntryArchives present in the upload. It groups them for a set of given method parameters. + + This entry is also recognized as the full macroscopic dielectric tensor entry (e.g. calculated + via BSE). + ''' method = SubSection(sub_section=PhotonPolarizationMethod) @@ -2485,79 +2682,330 @@ class PhotonPolarization(ParallelSimulation): def normalize(self, archive, logger): super().normalize(archive, logger) - if not self.method: - self.method = PhotonPolarizationMethod() - if not self.inputs: - self.inputs.append(Link(name=_workflow_method_name, section=self.method)) - # link method also to first task - if self.tasks: - self.tasks[0].inputs.append(Link(name=_workflow_method_name, section=self.method)) - if not self.results: - self.results = PhotonPolarizationResults() - if not self.outputs: - self.outputs.append(Link(name=_workflow_results_name, section=self.results)) - # link results also to last task - if self.tasks: - self.tasks[-1].inputs.append(Link(name=_workflow_results_name, section=self.results)) +class XSResults(SimulationWorkflowResults): + '''Groups DFT, GW and PhotonPolarization outputs: band gaps (DFT, GW), DOS (DFT, GW), + band structures (DFT, GW), spectra (PhotonPolarization). The ResultsNormalizer takes + care of adding a label 'DFT' or 'GW' in the method `get_xs_workflow_properties`. + ''' + band_gap_dft = Quantity( + type=Reference(BandGap), + shape=['*'], + description=''' + Reference to the DFT band gap. + ''') -class ParticleHoleExcitationsResults(SimulationWorkflowResults): + band_gap_gw = Quantity( + type=Reference(BandGap), + shape=['*'], + description=''' + Reference to the GW band gap. + ''') + + band_structure_dft = Quantity( + type=Reference(BandStructure), + shape=['*'], + description=''' + Reference to the DFT density of states. + ''') + + band_structure_gw = Quantity( + type=Reference(BandStructure), + shape=['*'], + description=''' + Reference to the GW density of states. + ''') dos_dft = Quantity( type=Reference(Dos), + shape=['*'], description=''' - DFT density of states + Reference to the DFT band structure. ''') dos_gw = Quantity( type=Reference(Dos), + shape=['*'], + description=''' + Reference to the GW band structure. + ''') + + spectra = SubSection(sub_section=PhotonPolarizationResults, repeats=True) + + +class XSMethod(SimulationWorkflowMethod): + + pass + + +class XS(SerialSimulation): + '''The XS workflow is generated in an extra EntryArchive IF both the DFT SinglePoint + and the PhotonPolarization EntryArchives are present in the upload. + ''' + # TODO extend to reference a GW SinglePoint. + + method = SubSection(sub_section=XSMethod) + + results = SubSection(sub_section=XSResults) + + def normalize(self, archive, logger): + super().normalize(archive, logger) + + if len(self.tasks) < 2: + logger.error('Expected more than one task: DFT+PhotonPolarization or DFT+GW+PhotonPolarization.') + return + + dft_task = self.tasks[0] + xs_tasks = [self.tasks[i] for i in range(1, len(self.tasks))] + gw_task = None + # Check if the xs_tasks contain GW SinglePoint or a list of PhotonPolarizations + if xs_tasks[0].task.m_def.name != 'PhotonPolarization': + gw_task = xs_tasks[0] + xs_tasks.pop(0) # we delete the [0] element associated with GW in case DFT+GW+PhotonPolarization workflow + + if not self.results: + self.results = XSResults() + + for name, section in self.results.m_def.all_quantities.items(): + calc_name = '_'.join(name.split('_')[:-1]) + if calc_name in ['dos', 'band_structure']: + calc_name = f'{calc_name}_electronic' + calc_section = [] + if 'dft' in name: + calc_section = getattr(dft_task.outputs[-1].section, calc_name) + elif 'gw' in name and gw_task: + calc_section = getattr(gw_task.outputs[-1].section, calc_name) + elif name == 'spectra': + pass + if calc_section: + self.results.m_set(section, calc_section) + for xs in xs_tasks: + if xs.m_xpath('task.results'): + photon_results = xs.task.results + # Adding provenance to BSE method section, in addition to the existent 'photon' provenance + if xs.task.m_xpath('inputs[1].section'): + for spectra in photon_results.spectrum_polarization: + provenance = ElectronicStructureProvenance(methodology=xs.task.inputs[1].section, label='bse') + spectra.m_add_sub_section(Spectra.provenance, provenance) + self.results.m_add_sub_section(XSResults.spectra, photon_results) + + +class MaxEntResults(SimulationWorkflowResults): + '''Groups DMFT and MaxEnt outputs: greens functions (DMFT, MaxEnt), band gaps (MaxEnt), + DOS (MaxEnt), band structures (MaxEnt). The ResultsNormalizer takes care of adding a + label 'DMFT' or 'MaxEnt' in the method `get_maxent_workflow_properties`. + ''' + + greens_functions_dmft = Quantity( + type=Reference(GreensFunctions), + shape=['*'], + description=''' + Ref to the DMFT Greens functions. + ''') + + band_gap_maxent = Quantity( + type=Reference(BandGap), + shape=['*'], + description=''' + MaxEnt band gap. + ''') + + dos_maxent = Quantity( + type=Reference(Dos), + shape=['*'], + description=''' + Ref to the MaxEnt density of states (also called spectral function). + ''') + + greens_functions_maxent = Quantity( + type=Reference(GreensFunctions), + shape=['*'], + description=''' + Ref to the MaxEnt Greens functions. + ''') + + +class MaxEntMethod(SimulationWorkflowMethod): + '''Groups DMFT and MaxEnt input methodologies: DMFT method references, MaxEnt method reference. + ''' + + dmft_method_ref = Quantity( + type=Reference(DMFTMethodology), + description=''' + DMFT methodology reference. + ''') + + # TODO define MaxEnt metainfo in Method + maxent_method_ref = Quantity( + type=Reference(Method), + description=''' + MaxEnt methodology reference. + ''') + + +class MaxEnt(SerialSimulation): + '''The MaxEnt (Maximum Entropy) workflow is generated in an extra EntryArchive IF both + the DMFT SinglePoint and the MaxEnt SinglePoint EntryArchives are present in the upload. + ''' + + method = SubSection(sub_section=MaxEntMethod) + + results = SubSection(sub_section=MaxEntResults) + + def normalize(self, archive, logger): + super().normalize(archive, logger) + + if len(self.tasks) != 2: + logger.error('Expected two tasks: DMFT and MaxEnt SinglePoint tasks') + return + + dmft_task = self.tasks[0] + maxent_task = self.tasks[1] + + if not self.results: + self.results = MaxEntResults() + + for name, section in self.results.m_def.all_quantities.items(): + calc_name = '_'.join(name.split('_')[:-1]) + if calc_name in ['dos', 'band_structure']: + calc_name = f'{calc_name}_electronic' + calc_section = [] + if 'dmft' in name: + calc_section = getattr(dmft_task.outputs[-1].section, calc_name) + elif 'maxent' in name: + calc_section = getattr(maxent_task.outputs[-1].section, calc_name) + if calc_section: + self.results.m_set(section, calc_section) + + +class DMFTResults(SimulationWorkflowResults): + '''Groups DFT, Projection and DMFT outputs: band gaps (all), DOS (DFT, Projection), band + structures (DFT, Projection), Greens functions (DMFT). The ResultsNormalizer takes care + of adding a label 'DFT', 'PROJECTION, or 'DMFT' in the method `get_dmft_workflow_properties`. + ''' + + band_gap_dft = Quantity( + type=Reference(BandGap), + shape=['*'], + description=''' + DFT band gap. + ''') + + band_gap_projection = Quantity( + type=Reference(BandGap), + shape=['*'], + description=''' + Projection band gap. + ''') + + band_gap_dmft = Quantity( + type=Reference(BandGap), + shape=['*'], description=''' - GW density of states + DMFT band gap. ''') band_structure_dft = Quantity( type=Reference(BandStructure), + shape=['*'], description=''' - DFT density of states + Ref to the DFT band structure. ''') - band_structure_gw = Quantity( + dos_dft = Quantity( + type=Reference(Dos), + shape=['*'], + description=''' + Ref to the DFT density of states. + ''') + + band_structure_projection = Quantity( type=Reference(BandStructure), + shape=['*'], description=''' - DFT density of states + Ref to the projected band structure. ''') - spectra = SubSection(sub_section=PhotonPolarizationResults, repeats=True) + dos_projection = Quantity( + type=Reference(Dos), + shape=['*'], + description=''' + Ref to the projected density of states. + ''') + + greens_functions_dmft = Quantity( + type=Reference(GreensFunctions), + shape=['*'], + description=''' + Ref to the DMFT Greens functions. + ''') -class ParticleHoleExcitationsMethod(SimulationWorkflowMethod): +class DMFTMethod(SimulationWorkflowMethod): + '''Groups DFT, Projection and DMFT input methodologies: starting XC functional, electrons + representation (basis set), Projection method reference, DMFT method reference. + ''' - pass + starting_point = Quantity( + type=Reference(XCFunctional), + description=''' + Starting point (XC functional or HF) used. + ''') + electrons_representation = Quantity( + type=Reference(BasisSetContainer), + description=''' + Basis set used. + ''') -class ParticleHoleExcitations(SerialSimulation): + projection_method_ref = Quantity( + type=Reference(ProjectionMethodology), + description=''' + Projection methodology reference. + ''') - method = SubSection(sub_section=ParticleHoleExcitationsMethod) + dmft_method_ref = Quantity( + type=Reference(DMFTMethodology), + description=''' + DMFT methodology reference. + ''') + + +class DMFT(SerialSimulation): + '''The DMFT workflow is generated in an extra EntryArchive IF both the Projection SinglePoint + and the DMFT SinglePoint EntryArchives are present in the upload. + ''' + # TODO extend to reference a DFT SinglePoint. - results = SubSection(sub_section=ParticleHoleExcitationsResults) + method = SubSection(sub_section=DMFTMethod) + + results = SubSection(sub_section=DMFTResults) def normalize(self, archive, logger): super().normalize(archive, logger) - if not self.method: - self.method = ParticleHoleExcitationsMethod() - self.inputs.append(Link(name=_workflow_method_name, section=self.method)) - # link method also to first task - if self.tasks: - self.tasks[0].inputs.append(Link(name=_workflow_method_name, section=self.method)) + if len(self.tasks) != 2: + logger.error('Expected two tasks: Projection and DMFT SinglePoint tasks') + return + + proj_task = self.tasks[0] + dmft_task = self.tasks[1] if not self.results: - self.results = ParticleHoleExcitationsResults() - self.outputs.append(Link(name=_workflow_results_name, section=self.results)) - # link results also to last task - if self.tasks: - self.tasks[-1].inputs.append(Link(name=_workflow_results_name, section=self.results)) + self.results = DMFTResults() + + for name, section in self.results.m_def.all_quantities.items(): + calc_name = '_'.join(name.split('_')[:-1]) + if calc_name in ['dos', 'band_structure']: + calc_name = f'{calc_name}_electronic' + calc_section = [] + if 'projection' in name: + calc_section = getattr(proj_task.outputs[-1].section, calc_name) + elif 'dmft' in name: + calc_section = getattr(dmft_task.outputs[-1].section, calc_name) + if calc_section: + self.results.m_set(section, calc_section) class EquationOfStateMethod(SimulationWorkflowMethod): @@ -2726,3 +3174,127 @@ class EquationOfState(ParallelSimulation): self.results.eos_fit.append(eos_fit) except Exception: self.logger.warning('EOS fit not succesful.') + + +class ChemicalReactionMethod(SimulationWorkflowMethod): + + m_def = Section(validate=False) + + reaction_type = Quantity( + type=MEnum('surface_adsorption'), + description=''' + The type of the chemical reaction. + ''' + ) + + +class ChemicalReactionResults(SimulationWorkflowMethod): + + reaction_energy = Quantity( + type=np.float64, + unit='joule', + description=''' + Calculated value of the reaction energy, E_reaction= E_products - E_reactants + ''' + ) + + activation_energy = Quantity( + type=np.float64, + unit='joule', + description=''' + Calculated value of the activation energy, E_activation = E_transitions - E_reactants + ''' + ) + + +class ChemicalReaction(SimulationWorkflow): + + method = SubSection(sub_section=ChemicalReactionMethod) + + results = SubSection(sub_section=ChemicalReactionResults) + + def normalize(self, archive, logger): + super().normalize(archive, logger) + + if not self.method: + self.method = ChemicalReactionMethod() + + if not self.results: + self.results = ChemicalReactionResults() + + # identify if input is rectant or product + reactants, products, transitions = [], [], [] + for input in self.inputs: + calculation = input.section + if calculation.m_def.section_cls != Calculation or not input.name: + continue + if calculation.m_xpath('energy.total.value') is None: + logger.error('Calculation energy required to calculate adsorption energy.') + reactants, products, transitions = [], [], [] + break + # TODO resolve reagent type automatically + if 'product' in input.name.lower(): + products.append(calculation) + elif 'transition' in input.name.lower(): + transitions.append(calculation) + elif 'reactant' in input.name.lower(): + reactants.append(calculation) + + def get_lattices(calculations): + lattices = [] + for calculation in calculations: + dimensionality = calculation.m_parent.m_parent.m_xpath('results.material.dimensionality') + if not dimensionality or dimensionality == '0D': + continue + lattice = calculation.m_xpath('system_ref.atoms.lattice_vectors') + if lattice is not None: + lattices.append(lattice) + return lattices + + # check compatibiliy of cell sizes + reactant_lattices = get_lattices(reactants) + for reference_lattice in reactant_lattices: + for lattice in get_lattices(products): + array_equal = np.isclose(reference_lattice, lattice, atol=0, rtol=1e-6) + if not array_equal[np.where((reference_lattice != 0) & (lattice != 0))].all(): + logger.error('Reactant and product lattices do not match.') + reactants, products = [], [] + break + for lattice in get_lattices(transitions): + array_equal = np.isclose(reference_lattice, lattice, atol=0, rtol=1e-6) + if not array_equal[np.where((reference_lattice != 0) & (lattice != 0))].all(): + logger.error('Reactant and transition state lattices do not match.') + transitions = [] + break + + def get_labels(calculations): + atom_labels = [] + for calculation in calculations: + labels = calculation.m_xpath('system_ref.atoms.labels') + if labels: + atom_labels.extend(labels) + return sorted(atom_labels) + + # check consistency of composition, i.e. sum of species in reactants should equal + # products and transition state + reactants_labels = get_labels(reactants) + if reactants_labels != get_labels(products): + logger.error('Inconsistent composition of reactants and products.') + reactants, products = [], [] + if transitions and reactants_labels != get_labels(transitions): + logger.error('Inconsistent composition of reactants and transition states.') + transitions = [] + + energy_reactants = np.sum([calc.energy.total.value.magnitude for calc in reactants]) + energy_products = np.sum([calc.energy.total.value.magnitude for calc in products]) + energy_transitions = np.sum([calc.energy.total.value.magnitude for calc in transitions]) + + if reactants and products: + self.results.reaction_energy = energy_products - energy_reactants + + if reactants and transitions: + self.results.activation_energy = energy_transitions - energy_reactants + + # create task for calculating reaction energy + self.tasks.append(Task( + name='Calculation of reaction energy.', inputs=self.inputs, outputs=self.outputs)) diff --git a/nomad/datamodel/results.py b/nomad/datamodel/results.py index a0bf6a867f4bb7cc7f6f4dfd64d32bb3a7352902..73d56e86e7cb35e60be1db6b2c710256c731828b 100644 --- a/nomad/datamodel/results.py +++ b/nomad/datamodel/results.py @@ -24,7 +24,6 @@ from ase.data import chemical_symbols from nomad import config from nomad.datamodel.metainfo.common import ProvenanceTracker, PropertySection -from nomad.datamodel.metainfo.measurements import Spectrum from nomad.datamodel.metainfo.simulation.system import Atoms, System as SystemRun from nomad.datamodel.metainfo.simulation.workflow import ( EquationOfStateResults, @@ -65,12 +64,13 @@ from nomad.datamodel.metainfo.simulation.calculation import ( DosValues, BandGapDeprecated as CalcBandGapDeprecated, BandGap as CalcBandGap, - Calculation + Calculation, + ElectronicStructureProvenance ) # noqa from nomad.datamodel.metainfo.simulation.method import ( Scf, Electronic, Smearing, ExcitedStateMethodology as XSMethod, GW as GWMethod, BSE as BSEMethod, HubbardKanamoriModel as HubbardKanamori, - AtomParameters, DMFT as DMFTMethod, BasisSet, BasisSetContainer, + AtomParameters, DMFT as DMFTMethod, BasisSet, BasisSetContainer ) # noqa from nomad.datamodel.metainfo.simulation.workflow import ( GeometryOptimization as MGeometryOptimization, @@ -208,6 +208,7 @@ def available_properties(root: MSection) -> List[str]: 'electronic.band_structure_electronic.band_gap': 'electronic.band_structure_electronic.band_gap', 'electronic.band_structure_electronic': 'band_structure_electronic', 'electronic.dos_electronic': 'dos_electronic', + 'electronic.dos_electronic_new': 'dos_electronic_new', 'electronic.greens_functions_electronic': 'greens_functions_electronic', 'vibrational.dos_phonon': 'dos_phonon', 'vibrational.band_structure_phonon': 'band_structure_phonon', @@ -221,7 +222,7 @@ def available_properties(root: MSection) -> List[str]: 'mechanical.bulk_modulus': 'bulk_modulus', 'mechanical.shear_modulus': 'shear_modulus', 'mechanical.energy_volume_curve': 'energy_volume_curve', - 'spectroscopy.eels': 'eels', + 'spectroscopic.spectra': 'spectra', 'optoelectronic.solar_cell': 'solar_cell', } available_properties: List[str] = [] @@ -1812,14 +1813,6 @@ class DMFT(MSection): Elasticsearch(suggestion='default') ] ) - total_filling = Quantity( - type=np.float64, - description=''' - Total filling of the correlated atoms in the unit cell per spin ∈[0.0, 1.0]. E.g., half-filling - is defined as 0.5. - ''', - a_elasticsearch=Elasticsearch(material_entry_type), - ) inverse_temperature = DMFTMethod.inverse_temperature.m_copy( a_elasticsearch=[ Elasticsearch(material_entry_type) @@ -1836,10 +1829,29 @@ class DMFT(MSection): Elasticsearch(material_entry_type) ] ) - hunds_hubbard_ratio = Quantity( - type=np.float64, + jh = HubbardKanamori.jh.m_copy( + a_elasticsearch=[ + Elasticsearch(material_entry_type) + ] + ) + analytical_continuation = Quantity( + type=MEnum('Pade', 'MaxEnt', 'SVD', ''), + shape=[], description=''' - Ratio JH/U, with JH being the Hunds coupling and U being the Hubbard local interaction. + Analytical continuation used to continuate the imaginary space Green's functions into + the real frequencies space. + + | Name | Description | Reference | + + | -------------- | ------------------- | -------------------------------- | + + | `'Pade'` | Pade's approximant | https://www.sciencedirect.com/science/article/pii/0021999173901277?via%3Dihub | + + | `'MaxEnt'` | Maximum Entropy method | https://journals.aps.org/prb/abstract/10.1103/PhysRevB.41.2380 | + + | `'SVD'` | Singular value decomposition | https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.75.517 | + + | `'Stochastic'` | Stochastic method | https://journals.aps.org/prb/abstract/10.1103/PhysRevB.57.10287 | ''', a_elasticsearch=Elasticsearch(material_entry_type), ) @@ -1925,6 +1937,51 @@ class Simulation(MSection): precision = SubSection(sub_section=Precision.m_def, repeats=False) +class XRDMethod(MSection): + m_def = Section( + description=''' + Methodology for an X-Ray Diffraction measurement. + ''' + ) + diffraction_method_name = Quantity( + type=MEnum( + [ + "Powder X-Ray Diffraction (PXRD)", + "Single Crystal X-Ray Diffraction (SCXRD)", + "High-Resolution X-Ray Diffraction (HRXRD)", + "Small-Angle X-Ray Scattering (SAXS)", + "X-Ray Reflectivity (XRR)", + "Grazing Incidence X-Ray Diffraction (GIXRD)", + config.services.unavailable_value + ] + ), + description=''' + The diffraction method used to obtain the diffraction pattern. + | X-Ray Diffraction Method | Description | + |------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| + | **Powder X-Ray Diffraction (PXRD)** | The term "powder" refers more to the random orientation of small crystallites than to the physical form of the sample. Can be used with non-powder samples if they present random crystallite orientations. | + | **Single Crystal X-Ray Diffraction (SCXRD)** | Used for determining the atomic structure of a single crystal. | + | **High-Resolution X-Ray Diffraction (HRXRD)** | A technique typically used for detailed characterization of epitaxial thin films using precise diffraction measurements. | + | **Small-Angle X-Ray Scattering (SAXS)** | Used for studying nanostructures in the size range of 1-100 nm. Provides information on particle size, shape, and distribution. | + | **X-Ray Reflectivity (XRR)** | Used to study thin film layers, interfaces, and multilayers. Provides info on film thickness, density, and roughness. | + | **Grazing Incidence X-Ray Diffraction (GIXRD)** | Primarily used for the analysis of thin films with the incident beam at a fixed shallow angle. | + ''', + a_elasticsearch=[ + Elasticsearch(material_entry_type), + Elasticsearch(suggestion='default') + ], + ) + + +class MeasurementMethod(MSection): + m_def = Section( + description=''' + Contains method details for a measurement entry. + ''' + ) + xrd = SubSection(sub_section=XRDMethod.m_def, repeats=False) + + class Method(MSection): m_def = Section( description=''' @@ -1961,7 +2018,12 @@ class Method(MSection): ''', ) method_name = Quantity( - type=MEnum(['DFT', 'Projection', 'GW', 'DMFT', 'CoreHole', 'BSE', 'EELS', 'XPS', config.services.unavailable_value]), + type=MEnum( + [ + 'DFT', 'Projection', 'GW', 'DMFT', 'CoreHole', 'BSE', 'EELS', 'XPS', + 'XRD', config.services.unavailable_value + ] + ), description=''' Common name for the used method. ''', @@ -1980,6 +2042,7 @@ class Method(MSection): Elasticsearch(suggestion='default') ] simulation = SubSection(sub_section=Simulation.m_def, repeats=False) + measurement = SubSection(sub_section=MeasurementMethod.m_def, repeats=False) class MolecularDynamics(MSection): @@ -2017,6 +2080,8 @@ class DOS(MSection): m_def = Section( description=''' Base class for density of states information. + + OLD VERSION: it will eventually be deprecated, please, don't use it! ''', ) energies = Quantity( @@ -2035,18 +2100,12 @@ class DOS(MSection): ) -class DOSPhonon(DOS): - m_def = Section( - description=''' - Contains the total phonon density of states. - ''', - ) - - class DOSElectronic(DOS): m_def = Section( description=''' Contains the total electronic density of states. + + OLD VERSION: it will eventually be deprecated. ''', ) label = Quantity( @@ -2078,6 +2137,100 @@ class DOSElectronic(DOS): ) +class DOSNew(MSection): + m_def = Section( + description=''' + Section containign the density of states data. + + It includes the total DOS and the projected DOS values. We differentiate `species_projected` as the + projected DOS for same atomic species, `atom_projected` as the projected DOS for different + atoms in the cell, and `orbital_projected` as the projected DOS for the orbitals of each + atom. + ''', + ) + energies = Quantity( + type=Dos.energies, + description=''' + Total DOS values for the entire system and all species. + ''', + ) + total = Quantity( + type=DosValues, + description=''' + Total DOS values for the entire system and all species. + ''', + ) + species_projected = Quantity( + type=DosValues, + shape=['*'], + description=''' + Projected DOS values per species. + ''', + ) + atom_projected = Quantity( + type=DosValues, + shape=['*'], + description=''' + Projected DOS values per atom. + ''', + ) + orbital_projected = Quantity( + type=DosValues, + shape=['*'], + description=''' + Projected DOS values per orbital and per atom. + ''', + ) + spin_channel = Dos.spin_channel.m_copy() + energy_fermi = Dos.energy_fermi.m_copy() + energy_ref = Dos.energy_ref.m_copy() + band_gap = SubSection( + sub_section=BandGapDeprecated.m_def, + repeats=True, + a_elasticsearch=Elasticsearch(material_entry_type, nested=True) + ) + + +class DOSPhonon(DOS): + m_def = Section( + description=''' + Contains the phonon density of states. + ''', + ) + + +class DOSElectronicNew(MSection): + m_def = Section( + description=''' + Contains the electronic Density of States (DOS). This section can be repeated to refer to + different methodologies (e.g., label = 'DFT', 'GW', 'TB', etc.), and it can be spin-polarized + or not. The sub-section data points to each (if present) spin channels. + ''', + ) + label = Quantity( + type=str, + description=''' + Label to identify the method employed to obtain the DOS data ('DFT', 'GW', etc.). + ''') + spin_polarized = Quantity( + type=bool, + description=''' + Whether the DOS is spin-polarized, i.e. is contains channels for both + spin values. + ''', + a_elasticsearch=Elasticsearch(material_entry_type), + ) + has_projected = Quantity( + type=bool, + description=''' + Whether the DOS has information about projections (species-, atom-, and/or orbital- + projected). + ''', + a_elasticsearch=Elasticsearch(material_entry_type), + ) + data = SubSection(sub_section=DOSNew.m_def, repeats=True) + + class BandStructure(MSection): m_def = Section( description=''' @@ -2160,30 +2313,86 @@ class GreensFunctionsElectronic(MSection): Base class for Green's functions information. ''', ) + type = GreensFunctionsCalculation.type.m_copy() label = Quantity( type=str, description=''' Label to identify the Greens functions data, e.g. the method employed. ''') - tau = GreensFunctionsCalculation.tau.m_copy() - real_greens_function_tau = Quantity( - type=np.float64, - shape=['n_atoms_per_unit_cell', 2, 'n_correlated_orbitals', 'n_tau'], + tau = Quantity( + type=GreensFunctionsCalculation.tau, description=''' - Real part (extraction done in normalizer) of the Green's function in tau (imaginary time). - ''' + Array containing the set of discrete imaginary times. + ''', ) - matsubara_freq = GreensFunctionsCalculation.matsubara_freq.m_copy() - imag_self_energy_iw = Quantity( - type=np.float64, - shape=['n_atoms_per_unit_cell', 2, 'n_correlated_orbitals', '2 * n_matsubara_freq'], + matsubara_freq = Quantity( + type=GreensFunctionsCalculation.matsubara_freq, description=''' - Imaginary part (extraction done in normalizer) of the Self energy in Matsubara (imaginary frequency). - ''' + Array containing the set of discrete imaginary (Matsubara) frequencies. + ''', + ) + frequencies = Quantity( + type=GreensFunctionsCalculation.frequencies, + description=''' + Array containing the set of discrete real frequencies. + ''', + ) + greens_function_tau = Quantity( + type=GreensFunctionsCalculation.greens_function_tau, + description=''' + Green's functions values in imaginary times. + ''', + ) + greens_function_iw = Quantity( + type=GreensFunctionsCalculation.greens_function_iw, + description=''' + Green's functions values in imaginary (Matsubara) frequencies. + ''', + ) + self_energy_iw = Quantity( + type=GreensFunctionsCalculation.self_energy_iw, + description=''' + Self-energy values in imaginary (Matsubara) frequencies. + ''', + ) + greens_function_freq = Quantity( + type=GreensFunctionsCalculation.greens_function_freq, + description=''' + Green's function values in real frequencies. + ''', + ) + self_energy_freq = Quantity( + type=GreensFunctionsCalculation.self_energy_freq, + description=''' + Self-energy values in real frequencies. + ''', + ) + hybridization_function_freq = Quantity( + type=GreensFunctionsCalculation.hybridization_function_freq, + description=''' + Hybridization function values in real frequencies. + ''', + ) + orbital_occupations = Quantity( + type=GreensFunctionsCalculation.orbital_occupations, + description=''' + Orbital occupation per correlated atom in the unit cell and per spin. + ''', + ) + quasiparticle_weights = Quantity( + type=GreensFunctionsCalculation.quasiparticle_weights, + description=''' + Quasiparticle weights of each orbital per site and spin. Calculated from: + Z = inv(1.0 - d [Re Sigma] / dw at w=0) + it takes values ∈ [0.0, 1.0], being Z=1 non-correlated, and Z=0 in a Mott state. + ''', + ) + chemical_potential = Quantity( + type=GreensFunctionsCalculation.chemical_potential, + description=''' + Chemical potential. + ''', ) - orbital_occupations = GreensFunctionsCalculation.orbital_occupations.m_copy() - quasiparticle_weights = GreensFunctionsCalculation.quasiparticle_weights.m_copy() - chemical_potential = GreensFunctionsCalculation.chemical_potential.m_copy() class HeatCapacityConstantVolume(MSection): @@ -2403,6 +2612,7 @@ class ElectronicProperties(MSection): a_elasticsearch=Elasticsearch(material_entry_type, nested=True) ) dos_electronic = SubSection(sub_section=DOSElectronic.m_def, repeats=True) + dos_electronic_new = SubSection(sub_section=DOSElectronicNew.m_def, repeats=True) band_structure_electronic = SubSection(sub_section=BandStructureElectronic.m_def, repeats=True) greens_functions_electronic = SubSection(sub_section=GreensFunctionsElectronic.m_def, repeats=True) @@ -2583,6 +2793,45 @@ class RadialDistributionFunction(MDPropertySection): frame_end = RadialDistributionFunctionValues.frame_end.m_copy() +class DiffractionPattern(MSection): + m_def = Section( + description=''' + Diffraction pattern. + ''', + ) + incident_beam_wavelength = Quantity( + links=['https://manual.nexusformat.org/classes/base_classes/NXbeam.html#nxbeam-incident-wavelength-field'], + description=''' + The wavelength of the incident beam. + ''', + type=np.float64, + unit='m', + a_elasticsearch=Elasticsearch(material_entry_type), + ) + two_theta_angles = Quantity( + # type=Dos.energies, + type=np.float64, # TODO convert to reference when schema is in place + unit='degree', + shape=['*'], + description=''' + Array containing the set of 2-theta angles. + ''', + ) + intensity = Quantity( + # type=DosValues, + type=np.float64, # TODO convert to reference when schema is in place + shape=['*'], + description=''' + Array containing the set of intensities. + ''', + ) + q_vector = Quantity( + type=np.dtype(np.float64), + shape=['*'], + unit='meter**(-1)', + description='The scattering vector *Q*.') + + class StructuralProperties(MSection): m_def = Section( description=''' @@ -2599,6 +2848,11 @@ class StructuralProperties(MSection): repeats=True, a_elasticsearch=Elasticsearch(material_entry_type, nested=True) ) + diffraction_pattern = SubSection( + sub_section=DiffractionPattern.m_def, + repeats=True, + a_elasticsearch=Elasticsearch(material_entry_type, nested=True) + ) class MeanSquaredDisplacement(MDPropertySection): @@ -2803,13 +3057,479 @@ class OptoelectronicProperties(MSection): ) -class SpectroscopyProperties(MSection): +class Reactant(MSection): + m_def = Section( + description=''' + A reactant in a catalytic test reaction. A reactant is identified by having a conversion. + ''', + label_quantity='name', + ) + name = Quantity( + type=str, + shape=[], + description=''' + Name of the reactant. + ''', + a_elasticsearch=Elasticsearch(material_entry_type) + ) + gas_concentration_in = Quantity( + type=np.float64, + shape=[], + description=''' + Volumetric concentration of the reactant in the feed gas, value between 0 and 1. + ''', + a_elasticsearch=Elasticsearch(material_entry_type) + ) + gas_concentration_out = Quantity( + type=np.float64, + shape=[], + description=''' + Volumetric concentration of the reactant after the reactor, value between 0 and 1. + ''', + a_elasticsearch=Elasticsearch(material_entry_type) + ) + conversion = Quantity( + type=np.float64, + shape=[], + description=''' + Conversion of the reactant, in %. + ''', + a_elasticsearch=Elasticsearch(material_entry_type) + ) + + +class Product(MSection): + m_def = Section( + description=''' + A product of a catalytic test reaction. A product is identified by having a selectivity. + ''', + label_quantity='name', + ) + name = Quantity( + type=str, + shape=[], + description=''' + Name of the product. + ''', + a_elasticsearch=Elasticsearch(material_entry_type) + ) + gas_concentration_out = Quantity( + type=np.float64, + shape=[], + description=''' + Volumetric concentration of the product after the reactor, value between 0 and 1. + ''', + a_elasticsearch=Elasticsearch(material_entry_type) + ) + selectivity = Quantity( + type=np.float64, + shape=[], + description=''' + Selectivity of the product, in %. + ''', + a_elasticsearch=Elasticsearch(material_entry_type) + ) + space_time_yield = Quantity( + type=np.float64, + shape=[], + unit='1/s', + description=''' + Space-time-yield of the product, in mass product per mass catalyst per time. + ''', + a_elasticsearch=Elasticsearch(material_entry_type) + ) + + +class Rate(MSection): + reaction_rate = Quantity( + type=np.float64, + shape=[], + description=''' + The rate of the number of reactant or product molecules converted/produced, per mass of total catalyst, per time. + ''', + unit='mol/(g*s)', + a_elasticsearch=Elasticsearch(material_entry_type)) + + specific_mass_rate = Quantity( + type=np.float64, + shape=[], + description=''' + The specific rate of the reactant, per mass of active catalyst component (e.g. metal). + ''', + unit='mol/(g*s)', + a_elasticsearch=Elasticsearch(material_entry_type) + ) + specific_surface_area_rate = Quantity( + type=np.float64, + shape=[], + description=''' + The specific rate of the reactant, per surface area of active catalyst. + ''', + unit='mol/(m**2*s)', + a_elasticsearch=Elasticsearch(material_entry_type) + ) + rate = Quantity( + type=np.float64, shape=['*'], unit='g/g/s', + description=''' + The rate calculated from the mass of reactant or product converted/produced, per total catalyst mass per time. + ''' + ) + turn_over_frequency = Quantity( + type=np.float64, + shape=[], + description=''' + The turn over frequency, calculated from mol of reactant or product per number of sites over time. + ''', + unit='1/s', + a_elasticsearch=Elasticsearch(material_entry_type) + ) + + +class Reactivity(MSection): + m_def = Section( + description=''' + Properties of a catalytic test reaction. + ''' + ) + reaction_name = Quantity( + type=str, + shape=[], + description=''' + Name of the catalytic test reaction. + ''', + a_elasticsearch=Elasticsearch(material_entry_type) + ) + + reaction_class = Quantity( + type=str, + shape=[], + description=''' + Classification of the catalytic test reaction such as Oxidation, Hydrogenation, + Isomerization, Coupling... + ''', + a_elasticsearch=Elasticsearch(material_entry_type) + ) + + reactants = SubSection( + sub_section=Reactant.m_def, + repeats=True, + a_elasticsearch=Elasticsearch(material_entry_type, nested=True) + ) + + products = SubSection( + sub_section=Product.m_def, + repeats=True, + a_elasticsearch=Elasticsearch(material_entry_type, nested=True) + ) + + rates = SubSection( + sub_section=Rate.m_def, + repeats=True, + a_elasticsearch=Elasticsearch(material_entry_type, nested=True) + ) + + gas_hourly_space_velocity = Quantity( + type=np.float64, + shape=[], + unit='(s)^-1', + description=''' + The gas hourly space velocity in 1/time (gas flow per catalyst volume). + ''', + a_elasticsearch=Elasticsearch(material_entry_type) + ) + + flow_rate = Quantity( + type=np.float64, + shape=[], + unit='m^3/s', + description=''' + The volumetric gas flow in volume per time + ''', + a_elasticsearch=Elasticsearch(material_entry_type) + ) + + test_temperatures = Quantity( + type=np.float64, + shape=['*'], + unit='K', + description=''' + The reaction temperature(s) during the catalytic test reaction. + ''', + a_elasticsearch=Elasticsearch(material_entry_type) + ) + + time_on_stream = Quantity( + type=np.float64, + shape=['*'], + unit='s', + description=''' + The time on stream of the catalyst in the catalytic test reaction. + ''', + a_elasticsearch=Elasticsearch(material_entry_type) + ) + + total_time_on_stream = Quantity( + type=np.float64, + shape=[], + unit='s', + description=''' + The time on stream of the catalyst in the catalytic test reaction. + ''', + a_elasticsearch=Elasticsearch(material_entry_type) + ) + + pressure = Quantity( + type=np.float64, + shape=['*'], + unit='Pa', + description=''' + The pressure set during the catalytic test reaction. + ''', + a_elasticsearch=Elasticsearch(material_entry_type) + ) + + +class CatalystSynthesis(MSection): + m_def = Section( + description=''' + Synthesis of a heterogeneous catalyst. + ''' + ) + + catalyst_name = Quantity( + type=str, shape=[], + description=""" + Custom name of catalyst. + """, + a_elasticsearch=Elasticsearch(material_entry_type)) + + preparation_method = Quantity( + type=str, + shape=[], + description=''' + The main preparation method of the sample. + ''', + a_elasticsearch=Elasticsearch(material_entry_type)) + + catalyst_type = Quantity( + type=str, shape=[], + description=""" + The type of catalyst, wether metal or oxide, ... + """, + a_elasticsearch=Elasticsearch(material_entry_type)) + + +class CatalystCharacterization(MSection): + m_def = Section( + description=''' + Properties of a heterogeneous catalyst. + ''' + ) + + surface_area = Quantity( + type=np.float64, + shape=[], + unit=("m**2/g"), + description=''' + The surface area per catalyst mass. + ''', + a_elasticsearch=Elasticsearch(material_entry_type) + ) + + method_surface_area = Quantity( + type=str, + shape=[], + description=''' + The method with which the surface area per catalyst mass was determined, e.g. BET. + ''', + a_elasticsearch=Elasticsearch(material_entry_type) + ) + + +class CatalyticProperties(MSection): + m_def = Section( + description=''' + Properties of Heterogeneous Catalysts. + ''' + ) + reactivity = SubSection( + sub_section=Reactivity.m_def, + repeats=False + ) + catalyst_synthesis = SubSection( + sub_section=CatalystSynthesis.m_def, + repeats=False + ) + catalyst_characterization = SubSection( + sub_section=CatalystCharacterization.m_def, + repeats=False + ) + + +class EELSInstrument(MSection): + m_def = Section( + description=''' + Base class for an EELS instrument. + ''', + ) + detector_type = Quantity( + type=str, + description=''' + Detector type. + ''') + max_energy = Quantity( + type=np.float64, + unit='joule', + description=''' + Maximum energy of the detector. + ''') + min_energy = Quantity( + type=np.float64, + unit='joule', + description=''' + Minimum energy of the detector. + ''') + guntype = Quantity( + type=str, + description=''' + Gun type of the detector. + ''') + beam_energy = Quantity( + type=np.float64, + unit='volt', + description=''' + Incoming beam energy. + ''') + beam_current = Quantity( + type=str, + description=''' + Incoming beam current. + ''') + resolution = Quantity( + type=np.float64, + unit='joule', + description=''' + Energy resolution of the detector. + ''') + step_size = Quantity( + type=str, + description=''' + Step size for axes in units of energy / pixel. + ''') + acquisition_mode = Quantity( + type=str, + description=''' + Acquisition mode for the counts in the detector. + ''') + dark_current = Quantity( + type=bool, + description=''' + Is dark current or noise to be substract included in the output? + ''') + + +class EELSMethodology(MSection): + m_def = Section( + description=''' + Base class for the EELS methodology. + ''', + ) + detector_type = EELSInstrument.detector_type.m_copy( + a_elasticsearch=[ + Elasticsearch(material_entry_type), + Elasticsearch(suggestion="default")]) + resolution = EELSInstrument.resolution.m_copy( + a_elasticsearch=[ + Elasticsearch(material_entry_type)]) + max_energy = EELSInstrument.max_energy.m_copy( + a_elasticsearch=[ + Elasticsearch(material_entry_type)]) + min_energy = EELSInstrument.min_energy.m_copy( + a_elasticsearch=[ + Elasticsearch(material_entry_type)]) + + +class SpectraProvenance(ProvenanceTracker): + m_def = Section( + description=""" + Contains provenance information (mainly the methodology section) for spectra properties + derived from an experiment or a calculation. + """, + ) + eels = SubSection( + sub_section=EELSMethodology.m_def, + ) + electronic_structure = SubSection( + sub_section=ElectronicStructureProvenance.m_def, + repeats=True + ) + + +class Spectra(MSection): + m_def = Section( + description=''' + Base class for Spectra calculation information as obtained from an experiment or a computation. + ''', + ) + type = Quantity( + type=MEnum('EELS', 'XAS', 'XANES', 'EXAFS', 'XES', 'XPS', 'RXIS', config.services.unavailable_value), + description=''' + Identifier for the methodology done to obtain the spectra data: EELS, XAS, XPS, etc. + ''', + a_elasticsearch=[ + Elasticsearch(material_entry_type), + Elasticsearch(suggestion='default') + ], + ) + label = Quantity( + type=MEnum('computation', 'experiment'), + description=''' + Identifier for the source of the spectra data, either 'computation' or 'experiment'. + ''', + a_elasticsearch=[ + Elasticsearch(material_entry_type), + Elasticsearch(suggestion='default') + ], + ) + n_energies = Quantity( + type=np.int32, + description=''' + Number of excitation energies. + ''') + energies = Quantity( + type=np.float64, + shape=['n_energies'], + unit='joule', + description=''' + Excitation energies for which the spectra is obtained. + ''') + intensities = Quantity( + type=np.float64, + shape=['n_energies'], + description=''' + Intensitites obtained at each excitation energy. This can be computationally calculated, + or electron counts coming from an experiment. In arbitrary units. + ''') + intensities_units = Quantity( + type=str, + description=''' + Units in which the intensities of the spectra are returned. It can be `F/m` as for + the dielectric constant, or `counts` for the data of a CCD device. + ''') + provenance = SubSection(sub_section=SpectraProvenance.m_def) + + +class SpectroscopicProperties(MSection): m_def = Section( description=''' Spectroscopic properties. ''', ) - spectrum = Quantity(type=Spectrum) + spectra = SubSection( + sub_section=Spectra.m_def, + repeats=True, + a_elasticsearch=Elasticsearch(material_type, nested=True) + ) class Properties(MSection): @@ -2825,9 +3545,10 @@ class Properties(MSection): vibrational = SubSection(sub_section=VibrationalProperties.m_def, repeats=False) electronic = SubSection(sub_section=ElectronicProperties.m_def, repeats=False) optoelectronic = SubSection(sub_section=OptoelectronicProperties.m_def, repeats=False) + catalytic = SubSection(sub_section=CatalyticProperties.m_def, repeats=False) mechanical = SubSection(sub_section=MechanicalProperties.m_def, repeats=False) thermodynamic = SubSection(sub_section=ThermodynamicProperties.m_def, repeats=False) - spectroscopy = SubSection(sub_section=SpectroscopyProperties.m_def, repeats=False) + spectroscopic = SubSection(sub_section=SpectroscopicProperties.m_def, repeats=False) geometry_optimization = SubSection(sub_section=GeometryOptimization.m_def, repeats=False) n_calculations = Quantity( diff --git a/nomad/files.py b/nomad/files.py index 8be3ce4a1469e71538291f4912a94da862f1d90b..02395a439421efa72367ed32a32957c5cd7d1650 100644 --- a/nomad/files.py +++ b/nomad/files.py @@ -157,16 +157,25 @@ def is_safe_relative_path(path: str) -> bool: It may end with a single '/', indicating that a folder is referred. For referring to the base folder, the empty string should be used (not '.' etc). ''' - if type(path) != str: + if not isinstance(path, str): return False if path == '': return True if path.startswith('/') or '//' in path or '\n' in path: return False + + depth = 0 for element in path.split('/'): - if element == '.' or element == '..': - return False - return True + if element == '.': + continue + if element == '..': + depth -= 1 + else: + depth += 1 + return depth >= 0 + # if element == '.' or element == '..': + # return False + # return True class PathObject: @@ -641,7 +650,8 @@ class UploadFiles(DirectoryObject, metaclass=ABCMeta): raise NotImplementedError() def raw_directory_list( - self, path: str = '', recursive=False, files_only=False, path_prefix=None) -> Iterable[RawPathInfo]: + self, path: str = '', recursive=False, files_only=False, path_prefix=None, depth: int = -1 + ) -> Iterable[RawPathInfo]: ''' Returns an iterable of RawPathInfo, one for each element (file or folder) in the directory specified by `path`. If `recursive` is set to True, subdirectories are @@ -650,6 +660,8 @@ class UploadFiles(DirectoryObject, metaclass=ABCMeta): as path (which is the default value) gives the content of the whole raw directory. The `path_prefix` argument can be used to filter out elements where the path starts with a specific prefix. + + The `depth` argument can be used to limit the depth of the recursion. ''' raise NotImplementedError() @@ -681,6 +693,9 @@ class UploadFiles(DirectoryObject, metaclass=ABCMeta): mime_type = 'application/octet-stream' return mime_type + def scandir(self, path: str = '', depth: int = -1): + raise NotImplementedError() + def read_archive(self, entry_id: str, use_blocked_toc: bool = True) -> ArchiveReader: ''' Returns an :class:`nomad.archive.ArchiveReader` that contains the @@ -766,7 +781,7 @@ class StagingUploadFiles(UploadFiles): def raw_path_exists(self, path: str) -> bool: if not is_safe_relative_path(path): return False - return os.path.exists(os.path.join(self._raw_dir.os_path, path)) + return os.path.exists(os.path.abspath(os.path.join(self._raw_dir.os_path, path))) def raw_path_is_file(self, path: str) -> bool: if not is_safe_relative_path(path): @@ -778,8 +793,9 @@ class StagingUploadFiles(UploadFiles): os.makedirs(os.path.join(self._raw_dir.os_path, path)) def raw_directory_list( - self, path: str = '', recursive=False, files_only=False, path_prefix=None) -> Iterable[RawPathInfo]: - if not is_safe_relative_path(path): + self, path: str = '', recursive=False, files_only=False, path_prefix=None, depth: int = -1 + ) -> Iterable[RawPathInfo]: + if not is_safe_relative_path(path) or depth == 0: return os_path = os.path.join(self._raw_dir.os_path, path) if not os.path.isdir(os_path): @@ -791,15 +807,15 @@ class StagingUploadFiles(UploadFiles): element_raw_path = os.path.join(path, element_name) element_os_path = os.path.join(os_path, element_name) is_file = os.path.isfile(element_os_path) + dir_size = 0 if not is_file: # Crawl sub directory. - dir_size = 0 - for sub_path_info in self.raw_directory_list(element_raw_path, True, files_only): + for sub_path_info in self.raw_directory_list( + element_raw_path, True, files_only, depth=depth - 1): if sub_path_info.is_file: dir_size += sub_path_info.size - if recursive: - if not path_prefix or sub_path_info.path.startswith(path_prefix): - yield sub_path_info + if recursive and (not path_prefix or sub_path_info.path.startswith(path_prefix)): + yield sub_path_info if not files_only or is_file: size = os.stat(element_os_path).st_size if is_file else dir_size @@ -810,6 +826,9 @@ class StagingUploadFiles(UploadFiles): size=size, access='unpublished') + def scandir(self, path: str = '', depth: int = -1): + raise NotImplementedError() + def raw_file(self, file_path: str, *args, **kwargs) -> IO: assert is_safe_relative_path(file_path) return self._file(self.raw_file_object(file_path), *args, **kwargs) @@ -1451,8 +1470,9 @@ class PublicUploadFiles(UploadFiles): return False def raw_directory_list( - self, path: str = '', recursive=False, files_only=False, path_prefix=None) -> Iterable[RawPathInfo]: - if not is_safe_relative_path(path): + self, path: str = '', recursive=False, files_only=False, path_prefix=None, depth: int = -1 + ) -> Iterable[RawPathInfo]: + if not is_safe_relative_path(path) or depth == 0: return if not path and self.missing_raw_files: return @@ -1460,15 +1480,21 @@ class PublicUploadFiles(UploadFiles): path = path.rstrip(os.path.sep) directory_content = self._directories.get(path) if directory_content is not None: + if isinstance(directory_content, RawPathInfo): + directory_content = {directory_content.path: directory_content} for __, path_info in sorted(directory_content.items()): if not files_only or path_info.is_file: if not path_prefix or path_info.path.startswith(path_prefix): yield path_info if recursive and not path_info.is_file: - for sub_path_info in self.raw_directory_list(path_info.path, recursive, files_only): + for sub_path_info in self.raw_directory_list( + path_info.path, recursive, files_only, depth=depth - 1): if not path_prefix or sub_path_info.path.startswith(path_prefix): yield sub_path_info + def scandir(self, path: str = '', depth: int = -1): + raise NotImplementedError() + def raw_file(self, file_path: str, *args, **kwargs) -> IO: assert is_safe_relative_path(file_path) mode = kwargs.get('mode') if len(args) == 0 else args[0] diff --git a/nomad/graph/__init__.py b/nomad/graph/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/nomad/archive/query_reader.py b/nomad/graph/graph_reader.py similarity index 75% rename from nomad/archive/query_reader.py rename to nomad/graph/graph_reader.py index b02d85880a784a30f050871c5ed0d16bb7fb0d6c..8f061a233f3b73b375dabc178f2bac0b1f9ba7a1 100644 --- a/nomad/archive/query_reader.py +++ b/nomad/graph/graph_reader.py @@ -20,6 +20,7 @@ from __future__ import annotations import copy import dataclasses import functools +import os import re from typing import Any, Callable, Type @@ -29,15 +30,16 @@ from mongoengine import Q from nomad import utils from nomad.app.v1.models import ( - Direction, WithQuery, MetadataPagination, Pagination, PaginationResponse, MetadataRequired + MetadataPagination, Pagination, PaginationResponse, Metadata ) from nomad.app.v1.routers.datasets import DatasetPagination from nomad.app.v1.routers.entries import perform_search from nomad.app.v1.routers.uploads import ( - get_upload_with_read_access, upload_to_pydantic, entry_to_pydantic, UploadProcDataQuery, UploadProcDataPagination + get_upload_with_read_access, upload_to_pydantic, entry_to_pydantic, UploadProcDataQuery, UploadProcDataPagination, + EntryProcDataPagination ) from nomad.archive import ArchiveList, ArchiveDict, to_json -from nomad.archive.model import RequestConfig, DefinitionType, DirectiveType, ResolveType, DatasetQuery +from nomad.graph.model import RequestConfig, DefinitionType, DirectiveType, ResolveType, DatasetQuery, EntryQuery from nomad.datamodel import ServerContext, User, EntryArchive, Dataset from nomad.datamodel.util import parse_path from nomad.files import UploadFiles, RawPathInfo @@ -58,14 +60,22 @@ class Token: It is thus recommended to use a prefix to avoid collision. ''' DEF = 'm_def' - RAW = 'm_raw' - ARCHIVE = 'm_archive' - ENTRY = 'm_entries' - UPLOAD = 'm_uploads' - USER = 'm_users' - DATASET = 'm_datasets' - METAINFO = 'm_metainfo' + RAW = 'files' + ARCHIVE = 'archive' + ENTRY = 'entry' + ENTRIES = 'entries' + UPLOAD = 'upload' + UPLOADS = 'uploads' + USER = 'user' + USERS = 'users' + DATASET = 'dataset' + DATASETS = 'm_datasets' + METAINFO = 'metainfo' + SEARCH = 'search' ERROR = 'm_errors' + METADATA = 'metadata' + MAINFILE = 'mainfile' + RESPONSE = 'm_response' @dataclasses.dataclass(frozen=True) @@ -73,6 +83,7 @@ class QueryError: NOACCESS = 'NOACCESS' NOTFOUND = 'NOTFOUND' ARCHIVEERROR = 'ARCHIVEERROR' + GENERAL = 'GENERAL' def dataset_to_pydantic(item): @@ -98,7 +109,7 @@ class ConfigError(Exception): @dataclasses.dataclass(frozen=True) -class ArchiveNode: +class GraphNode: upload_id: str # the upload id of the current node entry_id: str # the entry id of the current node current_path: list[str] # the path in the result container @@ -111,6 +122,11 @@ class ArchiveNode: current_depth: int # current depth, for tracking depth limit reader: Any # the reader used to read the archive # pylint: disable=E0601 + @functools.cached_property + def _prefix_to_remove(self): + '''Duplicated prefix to remove.''' + return f'uploads/{self.upload_id}/entries/{self.entry_id}/archive/' + def replace(self, **kwargs): ''' Create a new `ArchiveNode` instance with the attributes of the current instance replaced. @@ -123,18 +139,19 @@ class ArchiveNode: Generate a reference string using a given path or the current path. ''' actual_path: list = path if path is not None else self.current_path - return f'{self._generate_prefix()}#/{"/".join(str(v) for v in actual_path)}' + actual_ref: str = '/'.join(str(v) for v in actual_path).removeprefix(self._prefix_to_remove) + return f"{self._generate_prefix()}#/{actual_ref}" def _generate_prefix(self) -> str: return f'../uploads/{self.upload_id}/archive/{self.entry_id}' - def goto(self, reference: str, resolve_inplace: bool) -> ArchiveNode: + def goto(self, reference: str, resolve_inplace: bool) -> GraphNode: if reference.startswith(('/', '#')): return self._goto_local(reference, resolve_inplace) return self._goto_remote(reference, resolve_inplace) - def _goto_local(self, reference: str, resolve_inplace: bool) -> ArchiveNode: + def _goto_local(self, reference: str, resolve_inplace: bool) -> GraphNode: ''' Go to a local reference. Since it is a local reference, only need to walk to the proper position. @@ -151,7 +168,7 @@ class ArchiveNode: try: target = self.__goto_path(self.archive_root, path_stack) - except(KeyError, IndexError): + except (KeyError, IndexError): raise ArchiveError(f'Archive {self.entry_id} does not contain {reference}.') return self._switch_root(self.replace( @@ -159,7 +176,7 @@ class ArchiveNode: visited_path=self.visited_path.union({reference_url}) ), resolve_inplace, reference_url) - def _goto_remote(self, reference: str, resolve_inplace: bool) -> ArchiveNode: + def _goto_remote(self, reference: str, resolve_inplace: bool) -> GraphNode: ''' Go to a remote archive, which can be either in the same server or another installation. ''' @@ -198,7 +215,7 @@ class ArchiveNode: try: # now go to the target path other_target = self.__goto_path(other_archive_root, path_stack) - except(KeyError, IndexError): + except (KeyError, IndexError): raise ArchiveError(f'Archive {other_entry_id} does not contain {path}.') return self._switch_root(self.replace( @@ -209,7 +226,7 @@ class ArchiveNode: archive_root=other_archive_root ), resolve_inplace, reference_url) - def _switch_root(self, node: ArchiveNode, resolve_inplace: bool, reference_url: str): + def _switch_root(self, node: GraphNode, resolve_inplace: bool, reference_url: str): if resolve_inplace: # place the target into the current result container return node @@ -264,15 +281,15 @@ def _convert_ref_to_path(ref: str, upload_id: str = None) -> list: if installation: path_stack.append(installation) - path_stack.append(Token.UPLOAD) + path_stack.append(Token.UPLOADS) path_stack.append(upload_id) if kind == 'raw': path_stack.append(Token.RAW) path_stack.extend(v for v in entry_id.split('/') if v) - path_stack.append(Token.ENTRY) + path_stack.append(Token.ENTRIES) else: - path_stack.append(Token.ENTRY) + path_stack.append(Token.ENTRIES) path_stack.append(entry_id) path_stack.append(Token.ARCHIVE) @@ -286,9 +303,13 @@ def _convert_ref_to_path_string(ref: str, upload_id: str = None) -> str: return '/'.join(_convert_ref_to_path(ref, upload_id)) -def _populate_result(container_root: dict, path: list, value): +def _populate_result(container_root: dict, path: list, value, *, path_like=False): ''' For the given path and the root of the target container, populate the value. + + If `path_like` is set to `True`, + the path will be treated as a true file system path such that + numerical values are not interpreted as list indices. ''' def _merge_list(a: list, b: list): @@ -305,7 +326,7 @@ def _populate_result(container_root: dict, path: list, value): logger.warning(f'Cannot merge {a[i]} and {v}, potential conflicts.') def _merge_dict(a: dict, b: dict): - for k, v in b.items(): + for k, v in sorted(b.items(), key=lambda item: item[0]): if k not in a or a[k] is None: a[k] = v elif isinstance(a[k], set) and isinstance(v, set): @@ -331,6 +352,11 @@ def _populate_result(container_root: dict, path: list, value): container[k_or_i] = value_type() return container[k_or_i] + if len(path) == 0: + assert isinstance(container_root, dict) and isinstance(value, dict) + _merge_dict(container_root, value) + return + path_stack: list = list(reversed(path)) target_container: dict | list = container_root key_or_index: None | str | int = None @@ -339,6 +365,8 @@ def _populate_result(container_root: dict, path: list, value): if key_or_index is not None: target_container = _set_default(target_container, key_or_index, dict) key_or_index = path_stack.pop() + if path_like: + continue while len(path_stack) > 0 and path_stack[-1].isdigit(): target_container = _set_default(target_container, key_or_index, list) key_or_index = int(path_stack.pop()) @@ -409,15 +437,29 @@ def _normalise_required(required, config: RequestConfig, *, key: str = None, rea # discard pagination and query so that they are not passed to the children config_dict: dict = {'property_name': name, 'index': index, 'pagination': None, 'query': None} - if name in GeneralReader.__USER_ID__ or name == Token.USER: + can_query: bool = False + + if name in GeneralReader.__USER_ID__ or name == Token.USER or name == Token.USERS: reader_type = UserReader - elif name in GeneralReader.__UPLOAD_ID__ or name == Token.UPLOAD: + elif name in GeneralReader.__UPLOAD_ID__: reader_type = UploadReader - elif name in GeneralReader.__DATASET_ID__ or name == Token.DATASET: + elif name == Token.UPLOAD or name == Token.UPLOADS: + reader_type = UploadReader + can_query = True + elif name in GeneralReader.__DATASET_ID__: + reader_type = DatasetReader + elif name == Token.DATASET or name == Token.DATASETS: reader_type = DatasetReader - elif name == Token.ENTRY: + can_query = True + elif name in GeneralReader.__ENTRY_ID__: reader_type = EntryReader - elif name == Token.RAW: + elif name == Token.ENTRY or name == Token.ENTRIES: + reader_type = EntryReader + can_query = True + elif name == Token.SEARCH: + reader_type = ElasticSearchReader + can_query = True + elif name == Token.RAW or name == Token.MAINFILE: reader_type = FileSystemReader elif name == Token.ARCHIVE: reader_type = ArchiveReader @@ -434,16 +476,29 @@ def _normalise_required(required, config: RequestConfig, *, key: str = None, rea if isinstance(required, dict): # check if there is a config dict new_config_dict = required.pop(GeneralReader.__CONFIG__, {}) + + def _populate_query(_config_dict): + if can_query: + if new_query := required.pop('query', None): + _config_dict['query'] = new_query + if new_pagination := required.pop('pagination', None): + _config_dict['pagination'] = new_pagination + if GeneralReader.__WILDCARD__ in required: + _config_dict.setdefault('pagination', {'page': 1}) # a default pagination + if isinstance(new_config_dict, dict): + _populate_query(new_config_dict) combined: RequestConfig = config.new(dict(config_dict, **new_config_dict)) elif isinstance(new_config_dict, str): + child_config_dict: dict = {} if new_config_dict in ('*', 'include'): - new_directive = 'plain' + child_config_dict['directive'] = 'plain' elif new_config_dict == 'include-resolved': - new_directive = 'resolved' + child_config_dict['directive'] = 'resolved' else: raise ConfigError(f'Invalid config: {new_config_dict}.') - combined = config.new(dict(config_dict, directive=new_directive)) + _populate_query(child_config_dict) + combined = config.new(dict(config_dict, **child_config_dict)) else: raise ConfigError(f'Invalid config: {new_config_dict}.') @@ -510,13 +565,14 @@ class GeneralReader: # controls the names of fields that are treated as user id, for those fields, # implicit resolve is supported and explicit resolve does not require an explicit resolve type __USER_ID__: set = {'main_author', 'coauthors', 'reviewers', 'viewers', 'writers', 'entry_coauthors', 'user_id'} + # controls the names of fields that are treated as entry id, for those fields, + # implicit resolve is supported and explicit resolve does not require an explicit resolve type + __ENTRY_ID__: set = {'entry_id'} # controls the names of fields that are treated as upload id, for those fields, # implicit resolve is supported and explicit resolve does not require an explicit resolve type __UPLOAD_ID__: set = {'upload_id'} # controls the names of fields that are treated as dataset id __DATASET_ID__: set = {'datasets'} - # controls if the metadata stored in elastic search should be fetched for entries - __ES_METADATA__: bool = False __CACHE__: str = '__CACHE__' def __init__( @@ -528,7 +584,7 @@ class GeneralReader: 1. Provide `required_query` and `user` only. This is the mode that should be used by the external. The reader will be initialised with `required_query` and `user`. - The required_query` is a dict and will be validated. + The `required_query` is a dict and will be validated. The corresponding configuration dicts will be converted to `RequestConfig` objects. 2. Provide `required_query`, `user`, `init=False`, `config` and optionally, `global_root`. This is the mode used by the internal to switch between different readers. @@ -562,11 +618,15 @@ class GeneralReader: assert not isinstance(required_query, RequestConfig) self.required_query, self.global_config = _parse_required(required_query, self.__class__) - self.errors: dict = {} + self.errors: dict[str, set] = {} + + def _populate_error_list(self, container: dict): + if not self.errors: + return - def _populate_error_list(self, container): - if self.errors: - container.setdefault(Token.ERROR, {}).update({k: list(v) for k, v in self.errors.items()}) + error_list = container.setdefault(Token.ERROR, []) + for error_type, error_set in self.errors.items(): + error_list.extend({'error_type': error_type, 'message': error_item} for error_item in error_set) def __enter__(self): return self @@ -609,16 +669,15 @@ class GeneralReader: return range(_bound(start), _bound(end) + 1) - def _log(self, message: str, *, error_type: str = 'GENERAL', to_response: bool = True): + def _log(self, message: str, *, error_type: str = QueryError.GENERAL, to_response: bool = True): logger.debug(message) - if not to_response: - return - self.errors.setdefault(error_type, set()).add(message) + if to_response: + self.errors.setdefault(error_type, set()).add(message) def _check_cache(self, path: str | list, config_hash=None) -> bool: ''' Check if the given path has been cached. - Optionally using the config hash to identify different configurations. + Optionally, using the config hash to identify different configurations. ''' if isinstance(path, list): path = '/'.join(path) @@ -630,7 +689,7 @@ class GeneralReader: def _cache_hash(self, path: str | list, config_hash=None): ''' Check if the given path has been cached. - Optionally using the config hash to identify different configurations. + Optionally, using the config hash to identify different configurations. ''' if isinstance(path, list): path = '/'.join(path) @@ -655,6 +714,21 @@ class GeneralReader: return user.m_to_dict(with_out_meta=True, include_derived=True) + def _overwrite_upload(self, item: Upload): + plain_dict = orjson.loads(upload_to_pydantic(item).json()) + if n_entries := plain_dict.pop('entries', None): + plain_dict['n_entries'] = n_entries + plain_dict['processing_successful'] = item.processed_entries_count + plain_dict['processing_failed'] = item.total_entries_count - item.processed_entries_count + + if main_author := plain_dict.pop('main_author', None): + plain_dict['main_author'] = self.retrieve_user(main_author) + for name in ('coauthors', 'reviewers', 'viewers', 'writers'): + if (items := plain_dict.pop(name, None)) is not None: + plain_dict[name] = [self.retrieve_user(item) for item in items] + + return plain_dict + @functools.lru_cache(maxsize=128) def retrieve_upload(self, upload_id: str) -> str | dict: try: @@ -666,8 +740,18 @@ class GeneralReader: self._log(f'No access to upload {upload_id}.', error_type=QueryError.NOACCESS) return upload_id - # to convert datetime to string - return orjson.loads(upload_to_pydantic(upload).json()) + return self._overwrite_upload(upload) + + @staticmethod + def _overwrite_entry(item: Entry): + plain_dict = orjson.loads(entry_to_pydantic(item).json()) + plain_dict.pop('entry_metadata', None) + if mainfile := plain_dict.pop('mainfile', None): + plain_dict['mainfile_path'] = mainfile + if datasets := plain_dict.pop('datasets', None): + plain_dict['dataset_ids'] = datasets + + return plain_dict @functools.lru_cache(maxsize=128) def retrieve_entry(self, entry_id: str) -> str | dict: @@ -680,11 +764,7 @@ class GeneralReader: error_type=QueryError.NOACCESS) return entry_id - return orjson.loads(entry_to_pydantic( - Entry.objects(entry_id=entry_id).first(), - add_es_metadata=GeneralReader.__ES_METADATA__, - user=self.user - ).json()) + return self._overwrite_entry(Entry.objects(entry_id=entry_id).first()) @functools.lru_cache(maxsize=128) def retrieve_dataset(self, dataset_id: str) -> str | dict: @@ -717,10 +797,11 @@ class GeneralReader: except KeyError: raise ArchiveError(f'Archive {entry_id} does not exist in upload {entry_id}.') - def _apply_resolver(self, node: ArchiveNode, config: RequestConfig): + def _apply_resolver(self, node: GraphNode, config: RequestConfig): if_skip: bool = config.property_name not in GeneralReader.__UPLOAD_ID__ if_skip &= config.property_name not in GeneralReader.__USER_ID__ if_skip &= config.property_name not in GeneralReader.__DATASET_ID__ + if_skip &= config.property_name not in GeneralReader.__ENTRY_ID__ if_skip &= config.resolve_type is None if_skip |= config.directive is DirectiveType.plain if if_skip: @@ -741,21 +822,21 @@ class GeneralReader: return node.archive - def _resolve_list(self, node: ArchiveNode, config: RequestConfig): + def _resolve_list(self, node: GraphNode, config: RequestConfig): # the original archive may be an empty list # populate an empty list to keep the structure _populate_result(node.result_root, node.current_path, []) - new_config: RequestConfig = config.new({'index': None}) + new_config: RequestConfig = config.new({'index': None}, retain_pattern=True) for i in self._normalise_index(config.index, len(node.archive)): self._resolve(node.replace( archive=node.archive[i], current_path=node.current_path + [str(i)] ), new_config) - def _walk(self, node: ArchiveNode, required: dict | RequestConfig, parent_config: RequestConfig): + def _walk(self, node: GraphNode, required: dict | RequestConfig, parent_config: RequestConfig): raise NotImplementedError() - def _resolve(self, node: ArchiveNode, config: RequestConfig, *, omit_keys=None, wildcard: bool = False): + def _resolve(self, node: GraphNode, config: RequestConfig, *, omit_keys=None, wildcard: bool = False): raise NotImplementedError() @classmethod @@ -770,33 +851,78 @@ class MongoReader(GeneralReader): self.uploads = None self.datasets = None - def _query_entries(self, config: RequestConfig): + def _query_es(self, config: RequestConfig): search_params: dict = { 'owner': 'user', 'user_id': self.user.user_id, - 'required': MetadataRequired(include=['entry_id']) + 'query': {}, + # 'required': MetadataRequired(include=['entry_id']) } + search_query: dict = {} if config.query: - assert isinstance(config.query, WithQuery) + assert isinstance(config.query, Metadata) + + search_query = config.query.dict(exclude_none=True) # type: ignore if config.query.owner: search_params['owner'] = config.query.owner if config.query.query: search_params['query'] = config.query.query - - if config.pagination: + if config.query.pagination: + search_params['pagination'] = config.query.pagination + if config.query.required: + search_params['required'] = config.query.required + if config.query.aggregations: + search_params['aggregations'] = config.query.aggregations + + if config.pagination and (not config.query or not config.query.pagination): # type: ignore search_params['pagination'] = config.pagination search_response = perform_search(**search_params) # overwrite the pagination to the new one from the search response config.pagination = search_response.pagination - return self.entries.filter(entry_id__in=[v['entry_id'] for v in search_response.data]) + def _overwrite(item): + if mainfile := item.pop('mainfile', None): + item['mainfile_path'] = mainfile + return item + + return search_query, {v['entry_id']: _overwrite(v) for v in search_response.data} + + def _query_entries(self, config: RequestConfig): + if not config.query: + return None, self.entries + + assert isinstance(config.query, EntryQuery) + + mongo_query = Q() + if config.query.parser_name: + parser_name = Q() + for item in config.query.parser_name: + if item: + parser_name |= Q(parser_name__regex=item) + mongo_query &= parser_name + + if config.query.mainfile: + mainfile = Q() + for item in config.query.mainfile: + if item: + mainfile |= Q(mainfile__regex=item) + mongo_query &= mainfile + + if config.query.references: + references = Q() + for item in config.query.references: + if item: + references |= Q(references__regex=item) + mongo_query &= references + + return config.query.dict(exclude_unset=True), self.uploads.filter(mongo_query) def _query_uploads(self, config: RequestConfig): if not config.query: - return self.uploads + return None, self.uploads assert isinstance(config.query, UploadProcDataQuery) @@ -805,7 +931,9 @@ class MongoReader(GeneralReader): mongo_query &= Q(upload_id__in=config.query.upload_id) if config.query.upload_name: mongo_query &= Q(upload_name__in=config.query.upload_name) - if config.query.is_processing is True: + if config.query.process_status is not None: + mongo_query &= Q(process_status=config.query.process_status) + elif config.query.is_processing is True: mongo_query &= Q(process_status__in=ProcessStatus.STATUSES_PROCESSING) elif config.query.is_processing is False: mongo_query &= Q(process_status__in=ProcessStatus.STATUSES_NOT_PROCESSING) @@ -813,12 +941,16 @@ class MongoReader(GeneralReader): mongo_query &= Q(publish_time__ne=None) elif config.query.is_published is False: mongo_query &= Q(publish_time=None) + if config.query.is_owned is True: + mongo_query &= Q(main_author=self.user.user_id) + elif config.query.is_owned is False: + mongo_query &= Q(main_author__ne=self.user.user_id) - return self.uploads.filter(mongo_query) + return config.query.dict(exclude_unset=True), self.uploads.filter(mongo_query) def _query_datasets(self, config: RequestConfig): if not config.query: - return self.datasets + return None, self.datasets assert isinstance(config.query, DatasetQuery) @@ -836,11 +968,10 @@ class MongoReader(GeneralReader): if config.query.prefix: mongo_query &= Q(dataset_name=re.compile(rf'^{config.query.prefix}.*$', re.IGNORECASE)) - return self.datasets.filter(mongo_query) + return config.query.dict(exclude_unset=True), self.datasets.filter(mongo_query) - @staticmethod - def _normalise_mongo( - mongo_result, config: RequestConfig, transformer: Callable + def _normalise( + self, mongo_result, config: RequestConfig, transformer: Callable ) -> tuple[dict, PaginationResponse | None]: ''' Apply pagination and transform to the mongo search results. @@ -867,55 +998,31 @@ class MongoReader(GeneralReader): if config.pagination is not None and not isinstance(config.pagination, PaginationResponse): assert isinstance(config.pagination, Pagination) - if config.pagination.order_by is not None: - prefix: str = '-' if config.pagination.order == Direction.desc else '+' - order_list: list = [f'{prefix}{config.pagination.order_by}'] - if config.pagination.order_by == 'dataset_create_time': - order_list.append('dataset_id') - else: - order_list.extend(['dataset_create_time', 'dataset_id']) - - mongo_result = mongo_result.order_by(*order_list) + mongo_result = config.pagination.order_result(mongo_result) def _pick_id(_item): if transformer == upload_to_pydantic: return _item.upload_id if transformer == dataset_to_pydantic: return _item.dataset_id - return _item.entry_id - - if config.pagination.page is not None: - start = (config.pagination.page - 1) * config.pagination.page_size - end = start + config.pagination.page_size - elif config.pagination.page_offset is not None: - start = config.pagination.page_offset - end = start + config.pagination.page_size - elif config.pagination.page_after_value is not None: - start = 0 - for index, entry in enumerate(mongo_result): - if _pick_id(entry) == config.pagination.page_after_value: - start = index + 1 - break - end = start + config.pagination.page_size - else: - start, end = 0, config.pagination.page_size + if transformer == entry_to_pydantic: + return _item.entry_id - total_size = mongo_result.count() - first, last = min(start, total_size), min(end, total_size) - if first == last: - return {}, pagination_response + raise ValueError(f'Should not reach here.') - mongo_result = mongo_result[first:last] + mongo_result = config.pagination.paginate_result(mongo_result, _pick_id) - if (size := last - first - 1) >= 0: - pagination_response.next_page_after_value = _pick_id(mongo_result[size]) + if mongo_result: + pagination_response.next_page_after_value = _pick_id(mongo_result[len(mongo_result) - 1]) if transformer == upload_to_pydantic: - mongo_dict = {v['upload_id']: v for v in [orjson.loads(transformer(item).json()) for item in mongo_result]} + mongo_dict = {v['upload_id']: v for v in [self._overwrite_upload(item) for item in mongo_result]} elif transformer == dataset_to_pydantic: mongo_dict = {v['dataset_id']: v for v in [orjson.loads(transformer(item)) for item in mongo_result]} + elif transformer == entry_to_pydantic: + mongo_dict = {v['entry_id']: v for v in [self._overwrite_entry(item) for item in mongo_result]} else: - mongo_dict = {v['entry_id']: v for v in [orjson.loads(transformer(item).json()) for item in mongo_result]} + raise ValueError(f'Should not reach here.') return mongo_dict, pagination_response @@ -932,7 +1039,7 @@ class MongoReader(GeneralReader): In other methods, it may only populate one or two of them, which represents the available edges to the current node. For example, in a `UploadReader`, it only populates `self.entries`, which implies that from an upload, one can - only navigate to its entries, using `m_entries` token. + only navigate to its entries, using `Token.ENTRIES` token. ''' response: dict = {} @@ -943,7 +1050,7 @@ class MongoReader(GeneralReader): self.entries = Entry.objects(upload_id__in=[v.upload_id for v in self.uploads]) self.datasets = Dataset.m_def.a_mongo.objects(user_id=self.user.user_id) - self._walk(ArchiveNode( + self._walk(GraphNode( upload_id='__NOT_NEEDED__', entry_id='__NOT_NEEDED__', current_path=[], @@ -961,14 +1068,14 @@ class MongoReader(GeneralReader): return response - def _walk(self, node: ArchiveNode, required: dict | RequestConfig, parent_config: RequestConfig): + def _walk(self, node: GraphNode, required: dict | RequestConfig, parent_config: RequestConfig): if isinstance(required, RequestConfig): return self._resolve(node, required) has_config: bool = GeneralReader.__CONFIG__ in required has_wildcard: bool = GeneralReader.__WILDCARD__ in required - current_config: RequestConfig = required[GeneralReader.__CONFIG__] if has_config else parent_config + current_config: RequestConfig = required.get(GeneralReader.__CONFIG__, parent_config) if has_wildcard: wildcard_config = required[GeneralReader.__WILDCARD__] @@ -977,111 +1084,117 @@ class MongoReader(GeneralReader): self._resolve(node, wildcard_config, omit_keys=required.keys(), wildcard=True) elif isinstance(node.archive, dict): # nested fuzzy query, add all available keys to the required - required.update({k: wildcard_config for k in node.archive.keys() if k not in required}) + # !!! + # DO NOT directly use .update() as it will modify the original dict + # !!! + extra_required = {k: wildcard_config for k in node.archive.keys() if k not in required} + required = required | extra_required elif has_config: # use the inherited/assigned config to filter the current scope self._resolve(node, current_config, omit_keys=required.keys()) + offload_pack: dict = { + 'user': self.user, + 'init': False, + 'config': current_config, + 'global_root': self.global_root + } + for key, value in required.items(): if key in (GeneralReader.__CONFIG__, GeneralReader.__WILDCARD__): continue - offload_pack: dict = { - 'user': self.user, - 'init': False, - 'config': current_config, - 'global_root': self.global_root - } - offload_populate = functools.partial(_populate_result, node.result_root, node.current_path + [key]) + def offload_read(reader_cls, *args, read_list=False): + try: + with reader_cls(value, **offload_pack) as reader: + _populate_result( + node.result_root, + node.current_path + [key], + [reader.read(item) for item in args[0]] if read_list else reader.read(*args)) + except Exception as exc: + self._log(str(exc)) if key == Token.RAW and self.__class__ is UploadReader: # hitting the bottom of the current scope - try: - with FileSystemReader(value, **offload_pack) as reader: - offload_populate(reader.read(node.upload_id)) - except Exception as e: - self._log(str(e)) + offload_read(FileSystemReader, node.upload_id) + continue + + if key == Token.METADATA and self.__class__ is EntryReader: + # hitting the bottom of the current scope + offload_read(ElasticSearchReader, node.entry_id) + continue + + if key == Token.UPLOAD and self.__class__ is EntryReader: + # hitting the bottom of the current scope + offload_read(UploadReader, node.upload_id) + continue + + if key == Token.MAINFILE and self.__class__ is EntryReader: + # hitting the bottom of the current scope + offload_read(FileSystemReader, node.upload_id, node.archive['mainfile_path']) continue if key == Token.ARCHIVE and self.__class__ is EntryReader: # hitting the bottom of the current scope - try: - with ArchiveReader(value, **offload_pack) as reader: - offload_populate(reader.read(self.load_archive(node.upload_id, node.entry_id))) - except Exception as e: - self._log(str(e)) + offload_read(ArchiveReader, node.upload_id, node.entry_id) continue - if key in GeneralReader.__UPLOAD_ID__ and isinstance(node.archive, dict) and isinstance(value, dict): - # offload to the upload reader if it is a nested query - # treat it as a normal key and handle in applying resolver if it is a leaf node - if isinstance(upload_id := node.archive.get(key, None), str): - try: - with UploadReader(value, **offload_pack) as reader: - offload_populate(reader.read(upload_id)) - except Exception as e: - self._log(str(e)) - continue + if key == Token.ENTRIES and self.__class__ is ElasticSearchReader: + # hitting the bottom of the current scope + offload_read(EntryReader, node.archive['entry_id']) + continue - if key in GeneralReader.__USER_ID__ and isinstance(node.archive, dict) and isinstance(value, dict): - # offload to the user reader if it is a nested query - # treat it as a normal key and handle in applying resolver if it is a leaf node - if isinstance(user_id := node.archive.get(key, None), str): - try: - with UserReader(value, **offload_pack) as reader: - offload_populate(reader.read(user_id)) - except Exception as e: - self._log(str(e)) - continue - if isinstance(user_id, list): - try: - with UserReader(value, **offload_pack) as reader: - offload_populate([reader.read(user) for user in user_id]) - except Exception as e: - self._log(str(e)) - continue + if isinstance(node.archive, dict) and isinstance(value, dict): + # treat it as a normal key + # and handle in applying resolver if it is a leaf node + if key in GeneralReader.__ENTRY_ID__: + # offload to the upload reader if it is a nested query + if isinstance(entry_id := node.archive.get(key, None), str): + offload_read(EntryReader, entry_id) + continue - def __get_child_setting(): - if isinstance(value, RequestConfig): - return value - if isinstance(value, dict) and GeneralReader.__CONFIG__ in value: - return value[GeneralReader.__CONFIG__] + if key in GeneralReader.__UPLOAD_ID__: + # offload to the entry reader if it is a nested query + if isinstance(upload_id := node.archive.get(key, None), str): + offload_read(UploadReader, upload_id) + continue - return current_config + if key in GeneralReader.__USER_ID__: + # offload to the user reader if it is a nested query + if user_id := node.archive.get(key, None): + offload_read(UserReader, user_id, read_list=isinstance(user_id, list)) + continue + + if isinstance(value, RequestConfig): + child_config = value + elif isinstance(value, dict) and GeneralReader.__CONFIG__ in value: + child_config = value[GeneralReader.__CONFIG__] + else: + child_config = current_config.new({'query': None, 'pagination': None}) def __offload_walk(query_set, transformer): - if query_set is None: + response_path: list = node.current_path + [key, Token.RESPONSE] + + query, filtered = query_set + if query is not None: + _populate_result(node.result_root, response_path + ['query'], query) + + if filtered is None: return - mongo_result, mongo_pagination = self._normalise_mongo(query_set, __get_child_setting(), transformer) - if mongo_pagination: - _populate_result(node.result_root, node.current_path + ['pagination'], mongo_pagination.dict()) + result, pagination = self._normalise(filtered, child_config, transformer) + if pagination is not None: + _populate_result( + node.result_root, response_path + ['pagination'], pagination.dict()) self._walk(node.replace( - archive={k: k for k in mongo_result} if isinstance(value, RequestConfig) else mongo_result, + archive={k: k for k in result} if isinstance(value, RequestConfig) else result, current_path=node.current_path + [key]), value, current_config) - if key == Token.ENTRY: - __offload_walk(self._query_entries(__get_child_setting()), functools.partial( - entry_to_pydantic, add_es_metadata=GeneralReader.__ES_METADATA__, user=self.user)) - continue - if key == Token.UPLOAD: - __offload_walk(self._query_uploads(__get_child_setting()), upload_to_pydantic) - continue - if key == Token.DATASET: - __offload_walk(self._query_datasets(__get_child_setting()), dataset_to_pydantic) - continue - if key == Token.USER: - __offload_walk({k: v for k, v in value.items() if k not in ( - GeneralReader.__CONFIG__, GeneralReader.__WILDCARD__)}, None) + if self._offload_walk(__offload_walk, child_config, key, value): continue if len(node.current_path) > 0 and node.current_path[-1] in __M_SEARCHABLE__: - reader_type = __M_SEARCHABLE__[node.current_path[-1]] - try: - with reader_type(value, **offload_pack) as reader: - offload_populate(reader.read(key)) - except Exception as e: - self._log(str(e)) + offload_read(__M_SEARCHABLE__[node.current_path[-1]], key) continue # key may contain index, cached @@ -1114,13 +1227,33 @@ class MongoReader(GeneralReader): # should never reach here raise ConfigError(f'Invalid required config: {value}.') - def _resolve(self, node: ArchiveNode, config: RequestConfig, *, omit_keys=None, wildcard: bool = False): + def _offload_walk(self, offload_func: Callable, config: RequestConfig, key: str, value) -> bool: + if key == Token.SEARCH: + offload_func(self._query_es(config), None) + return True + if key == Token.ENTRY or key == Token.ENTRIES: + offload_func(self._query_entries(config), entry_to_pydantic) + return True + if key == Token.UPLOAD or key == Token.UPLOADS: + offload_func(self._query_uploads(config), upload_to_pydantic) + return True + if key == Token.DATASET or key == Token.DATASETS: + offload_func(self._query_datasets(config), dataset_to_pydantic) + return True + if key == Token.USER or key == Token.USERS: + offload_func((None, {k: v for k, v in value.items() if k not in ( + GeneralReader.__CONFIG__, GeneralReader.__WILDCARD__)}), None) + return True + + return False + + def _resolve(self, node: GraphNode, config: RequestConfig, *, omit_keys=None, wildcard: bool = False): if isinstance(node.archive, list): return self._resolve_list(node, config) if not isinstance(node.archive, dict): # primitive type data is always included - # this is not affect by size limit nor by depth limit + # this is not affected by size limit nor by depth limit return _populate_result(node.result_root, node.current_path, self._apply_resolver(node, config)) if config.directive is DirectiveType.resolved and len( @@ -1138,7 +1271,7 @@ class MongoReader(GeneralReader): if wildcard: assert omit_keys is not None - for key in node.archive: + for key in sorted(node.archive.keys()): new_config: dict = {'property_name': key, 'index': None} if wildcard: if any(k.startswith(key) for k in omit_keys): @@ -1190,7 +1323,7 @@ class UploadReader(MongoReader): if isinstance(target_upload := self.retrieve_upload(upload_id), dict): self.entries = Entry.objects(upload_id=upload_id) - self._walk(ArchiveNode( + self._walk(GraphNode( upload_id=upload_id, entry_id='__NOT_NEEDED__', current_path=[], @@ -1217,9 +1350,9 @@ class UploadReader(MongoReader): @classmethod def validate_config(cls, key: str, config: RequestConfig): try: - if config.query: + if config.query is not None: config.query = UploadProcDataQuery.parse_obj(config.query) - if config.pagination: + if config.pagination is not None: config.pagination = UploadProcDataPagination.parse_obj(config.pagination) except Exception as e: raise ConfigError(str(e)) @@ -1243,7 +1376,7 @@ class DatasetReader(MongoReader): self.entries = Entry.objects(datasets=dataset_id) self.uploads = Upload.objects(upload_id__in=list({v['upload_id'] for v in self.entries})) - self._walk(ArchiveNode( + self._walk(GraphNode( upload_id='__NOT_NEEDED__', entry_id='__NOT_NEEDED__', current_path=[], @@ -1267,9 +1400,9 @@ class DatasetReader(MongoReader): @classmethod def validate_config(cls, key: str, config: RequestConfig): try: - if config.query: + if config.query is not None: config.query = DatasetQuery.parse_obj(config.query) - if config.pagination: + if config.pagination is not None: config.pagination = DatasetPagination.parse_obj(config.pagination) except Exception as e: raise ConfigError(str(e)) @@ -1292,7 +1425,7 @@ class EntryReader(MongoReader): if isinstance(target_entry := self.retrieve_entry(entry_id), dict): self.datasets = Dataset.m_def.a_mongo.objects(entries=entry_id) - self._walk(ArchiveNode( + self._walk(GraphNode( upload_id=target_entry['upload_id'], entry_id=entry_id, current_path=[], @@ -1316,16 +1449,49 @@ class EntryReader(MongoReader): @classmethod def validate_config(cls, key: str, config: RequestConfig): try: - if config.query: - config.query = WithQuery.parse_obj(config.query) - if config.pagination: - config.pagination = MetadataPagination.parse_obj(config.pagination) + if config.query is not None: + config.query = EntryQuery.parse_obj(config.query) + if config.pagination is not None: + config.pagination = EntryProcDataPagination.parse_obj(config.pagination) except Exception as e: raise ConfigError(str(e)) return super().validate_config(key, config) +class ElasticSearchReader(EntryReader): + @functools.lru_cache(maxsize=128) + def retrieve_entry(self, entry_id: str) -> str | dict: + search_response = perform_search( + owner='all', + query={'entry_id': entry_id}, + user_id=self.user.user_id) + + if search_response.pagination.total == 0: + self._log( + f'The value {entry_id} is not a valid entry id or not visible to current user.', + error_type=QueryError.NOACCESS) + return entry_id + + plain_dict = search_response.data[0] + if mainfile := plain_dict.pop('mainfile', None): + plain_dict['mainfile_path'] = mainfile + + return plain_dict + + @classmethod + def validate_config(cls, key: str, config: RequestConfig): + try: + if config.query is not None: + config.query = Metadata.parse_obj(config.query) + if config.pagination is not None: + config.pagination = MetadataPagination.parse_obj(config.pagination) + except Exception as e: + raise ConfigError(str(e)) + + return MongoReader.validate_config(key, config) + + class UserReader(MongoReader): # noinspection PyMethodOverriding def read(self, user_id: str): # type: ignore @@ -1351,7 +1517,7 @@ class UserReader(MongoReader): self.datasets = Dataset.m_def.a_mongo.objects( dataset_id__in=set(v for e in self.entries if e.datasets for v in e.datasets)) - self._walk(ArchiveNode( + self._walk(GraphNode( upload_id='__NOT_NEEDED__', entry_id='__NOT_NEEDED__', current_path=[], @@ -1372,9 +1538,24 @@ class UserReader(MongoReader): return response + @classmethod + def validate_config(cls, key: str, config: RequestConfig): + if config.query is not None: + raise ConfigError('User reader does not support query.') + if config.pagination is not None: + raise ConfigError('User reader does not support pagination.') + + return MongoReader.validate_config(key, config) + class FileSystemReader(GeneralReader): - def read(self, upload_id: str) -> dict: + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self._root_path: list = [] + + def read(self, upload_id: str, path: str = None) -> dict: + self._root_path = [v for v in path.split('/') if v] if path else [] + response: dict = {} if self.global_root is None: @@ -1388,7 +1569,7 @@ class FileSystemReader(GeneralReader): except HTTPException: self._log(f'Current user does not have access to upload {upload_id}.', error_type=QueryError.NOACCESS) else: - self._walk(ArchiveNode( + self._walk(GraphNode( upload_id=upload_id, entry_id='__NOT_NEEDED__', current_path=[], @@ -1409,33 +1590,38 @@ class FileSystemReader(GeneralReader): return response - def _walk(self, node: ArchiveNode, required: dict | RequestConfig, parent_config: RequestConfig): + def _walk(self, node: GraphNode, required: dict | RequestConfig, parent_config: RequestConfig): if isinstance(required, RequestConfig): return self._resolve(node, required) if GeneralReader.__CONFIG__ in required: - # resolve current tree if config is present + # resolve the current tree if config is present # excluding explicitly assigned keys current_config: RequestConfig = required[GeneralReader.__CONFIG__] self._resolve(node, current_config, omit_keys=required.keys()) else: current_config = parent_config + full_path: list = self._root_path + node.current_path + full_path_str: str = '/'.join(full_path) + is_current_path_file: bool = node.archive.raw_path_is_file(full_path_str) + + if not is_current_path_file: + _populate_result(node.result_root, full_path + ['m_is'], 'Directory') + if Token.ENTRY in required: # implicit resolve - results = self._offload(node.upload_id, '/'.join(node.current_path), required[Token.ENTRY], current_config) - if results: - _populate_result(node.result_root, node.current_path + [Token.ENTRY], results) - return + if is_current_path_file and (results := self._offload( + node.upload_id, full_path_str, required[Token.ENTRY], current_config)): + _populate_result(node.result_root, full_path + [Token.ENTRY], results) for key, value in required.items(): if key == GeneralReader.__CONFIG__: continue child_path: list = node.current_path + [key] - os_path: str = '/'.join(child_path) - if not node.archive.raw_path_exists(os_path): + if not node.archive.raw_path_exists('/'.join(self._root_path + child_path)): continue self._walk(node.replace( @@ -1443,27 +1629,63 @@ class FileSystemReader(GeneralReader): current_depth=node.current_depth + 1, ), value, current_config) - def _resolve(self, node: ArchiveNode, config: RequestConfig, *, omit_keys=None, wildcard: bool = False): - os_path: str = '/'.join(node.current_path) + def _resolve(self, node: GraphNode, config: RequestConfig, *, omit_keys=None, wildcard: bool = False): + # at the point, it is guaranteed that the current path exists, but it could be a relative path + full_path: list = self._root_path + node.current_path + abs_path: list = [] + # condense the path + for p in full_path: + for pp in p.split('/'): # to consider '../../../' + if pp in ('.', ''): + continue + if pp == '..': + abs_path.pop() + else: + abs_path.append(pp) + + os_path: str = '/'.join(abs_path) + if not node.archive.raw_path_is_file(os_path): + _populate_result(node.result_root, full_path + ['m_is'], 'Directory') + # _populate_result( + # node.result_root, full_path + [Token.RESPONSE, 'pagination'], + # config.pagination.dict() if config.pagination is not None else dict(page=1, page_size=10)) + + ref_path = ['/'.join(self._root_path)] + if ref_path[0]: + ref_path += node.current_path + else: + ref_path = node.current_path + file: RawPathInfo - for file in node.archive.raw_directory_list(os_path): - file_name: str = file.path.split('/')[-1] - if not config.if_include(file_name) or omit_keys is not None and any( - k.startswith(file_name) for k in omit_keys): + for file in node.archive.raw_directory_list( + os_path, recursive=True, depth=config.depth if config.depth else -1): + if not config.if_include(file.path): continue results = file._asdict() - if config.directive is DirectiveType.resolved and (resolved := self._offload( - node.upload_id, file.path, config, config)): - results[Token.ENTRY] = resolved + results.pop('access', None) + results['m_is'] = 'File' if results.pop('is_file') else 'Directory' + if omit_keys is None or all(not file.path.endswith(os.path.sep + k) for k in omit_keys): + if config.directive is DirectiveType.resolved and (resolved := self._offload( + node.upload_id, file.path, config, config)): + results[Token.ENTRY] = resolved - _populate_result( - node.result_root, - node.current_path if os_path == file.path else node.current_path + [file_name], - results) + # need to consider the relative path and the absolute path conversion + file_path: list = [v for v in file.path.split('/') if v] # path from upload root + + if not (result_path := ref_path + file_path[len(abs_path):]): + result_path = [file_path[-1]] + + _populate_result(node.result_root, result_path, results, path_like=True) @classmethod def validate_config(cls, key: str, config: RequestConfig): + try: + if config.pagination is not None: + config.pagination = Pagination.parse_obj(config.pagination) + except Exception as e: + raise ConfigError(str(e)) + return config def _offload(self, upload_id: str, main_file: str, required, parent_config: RequestConfig) -> dict: @@ -1509,7 +1731,7 @@ class ArchiveReader(GeneralReader): ''' @staticmethod - def __if_strip(node: ArchiveNode, config: RequestConfig): + def __if_strip(node: GraphNode, config: RequestConfig): if config.max_list_size is not None and isinstance(node.archive, list) and len( node.archive) > config.max_list_size: return True @@ -1523,10 +1745,15 @@ class ArchiveReader(GeneralReader): return False - def read(self, archive: ArchiveDict | dict) -> dict: + def read(self, *args) -> dict: ''' Read the given archive with the required fields. + Takes two forms of arguments: + 1. archive: dict | ArchiveDict + 2. upload_id: str, entry_id: str ''' + archive = args[0] if len(args) == 1 else self.load_archive(*args) + metadata = archive['metadata'] response: dict = {} @@ -1537,7 +1764,7 @@ class ArchiveReader(GeneralReader): else: has_global_root = True - self._walk(ArchiveNode( + self._walk(GraphNode( upload_id=metadata['upload_id'], entry_id=metadata['entry_id'], current_path=[], @@ -1558,7 +1785,7 @@ class ArchiveReader(GeneralReader): return response - def _walk(self, node: ArchiveNode, required: dict | RequestConfig, parent_config: RequestConfig): + def _walk(self, node: GraphNode, required: dict | RequestConfig, parent_config: RequestConfig): ''' Walk through the archive according to the required query. The parent config is passed down to the children in case there is no config in any subtree. @@ -1566,6 +1793,11 @@ class ArchiveReader(GeneralReader): if isinstance(required, RequestConfig): return self._resolve(node, required) + if required.pop(GeneralReader.__WILDCARD__, None): + self._log( + "Wildcard '*' as field name is not supported in archive query as its data is not homogeneous", + error_type=QueryError.NOTFOUND) + current_config: RequestConfig = required.get(GeneralReader.__CONFIG__, parent_config) # if it is a subtree, itself needs to be resolved @@ -1613,10 +1845,10 @@ class ArchiveReader(GeneralReader): self._log(f'Definition {name} is not found.', error_type=QueryError.NOTFOUND) continue - from .storage_v2 import ArchiveList as ArchiveListNew + from nomad.archive.storage_v2 import ArchiveList as ArchiveListNew is_list: bool = isinstance(child_archive, (list, ArchiveList, ArchiveListNew)) - if is_list and not child_definition.repeats: + if is_list and isinstance(child_definition, SubSection) and not child_definition.repeats: self._log(f'Definition {key} is not repeatable.') continue @@ -1646,7 +1878,7 @@ class ArchiveReader(GeneralReader): # should never reach here raise ConfigError(f'Invalid required config: {value}.') - def _resolve(self, node: ArchiveNode, config: RequestConfig, *, omit_keys=None, wildcard: bool = False): + def _resolve(self, node: GraphNode, config: RequestConfig, *, omit_keys=None, wildcard: bool = False): ''' Resolve the given node. @@ -1654,7 +1886,7 @@ class ArchiveReader(GeneralReader): Those come from explicitly given fields in the required query. They are handled by the caller. ''' - from .storage_v2 import ArchiveList as ArchiveListNew + from nomad.archive.storage_v2 import ArchiveList as ArchiveListNew if isinstance(node.archive, (list, ArchiveList, ArchiveListNew)): return self._resolve_list(node, config) @@ -1663,10 +1895,10 @@ class ArchiveReader(GeneralReader): # if it needs to resolve, it is necessary to check references node = self._check_reference(node, config, implicit_resolve=omit_keys is not None) - from .storage_v2 import ArchiveDict as ArchiveDictNew + from nomad.archive.storage_v2 import ArchiveDict as ArchiveDictNew if not isinstance(node.archive, (dict, ArchiveDict, ArchiveDictNew)): # primitive type data is always included - # this is not affect by size limit nor by depth limit + # this is not affected by size limit nor by depth limit _populate_result(node.result_root, node.current_path, self._apply_resolver(node, config)) return @@ -1677,7 +1909,7 @@ class ArchiveReader(GeneralReader): _populate_result(node.result_root, node.current_path, result_to_write) return - for key in node.archive: + for key in sorted(node.archive.keys()): if key == Token.DEF: continue @@ -1712,12 +1944,12 @@ class ArchiveReader(GeneralReader): 'index': None, # ignore index requirements for children })) - def _check_definition(self, node: ArchiveNode, config: RequestConfig) -> ArchiveNode: + def _check_definition(self, node: GraphNode, config: RequestConfig) -> GraphNode: ''' Check the existence of custom definition. If positive, overwrite the corresponding information of the current node. ''' - from .storage_v2 import ArchiveDict as ArchiveDictNew + from nomad.archive.storage_v2 import ArchiveDict as ArchiveDictNew if not isinstance(node.archive, (dict, ArchiveDict, ArchiveDictNew)): return node @@ -1754,7 +1986,7 @@ class ArchiveReader(GeneralReader): return node.replace(definition=new_def) def _check_reference( - self, node: ArchiveNode, config: RequestConfig, *, implicit_resolve: bool = False) -> ArchiveNode: + self, node: GraphNode, config: RequestConfig, *, implicit_resolve: bool = False) -> GraphNode: ''' Check the existence of custom definition. If positive, overwrite the corresponding information of the current node. @@ -1795,7 +2027,7 @@ class ArchiveReader(GeneralReader): return self._check_definition(resolved_node.replace(definition=target.m_resolved()), config) # noinspection PyUnusedLocal - def _retrieve_definition(self, m_def: str | None, m_def_id: str | None, node: ArchiveNode): + def _retrieve_definition(self, m_def: str | None, m_def_id: str | None, node: GraphNode): # todo: more flexible definition retrieval, accounting for definition id, mismatches, etc. context = ServerContext(get_upload_with_read_access(node.upload_id, self.user, include_others=True)) @@ -1813,9 +2045,9 @@ class ArchiveReader(GeneralReader): @classmethod def validate_config(cls, key: str, config: RequestConfig): - if config.pagination: + if config.pagination is not None: raise ConfigError(f'Pagination is not supported in {cls.__name__} @ {key}.') - if config.query: + if config.query is not None: raise ConfigError(f'Query is not supported in {cls.__name__} @ {key}.') return config @@ -1839,7 +2071,7 @@ class DefinitionReader(GeneralReader): else: has_global_root = True - self._walk(ArchiveNode( + self._walk(GraphNode( upload_id='__NONE__', entry_id='__NONE__', current_path=[Token.DEF], @@ -1860,7 +2092,7 @@ class DefinitionReader(GeneralReader): return response - def _walk(self, node: ArchiveNode, required: dict | RequestConfig, parent_config: RequestConfig): + def _walk(self, node: GraphNode, required: dict | RequestConfig, parent_config: RequestConfig): if isinstance(required, RequestConfig): return self._resolve(self._switch_root(node, inplace=required.resolve_inplace), required) @@ -1936,7 +2168,7 @@ class DefinitionReader(GeneralReader): # should never reach here raise ConfigError(f'Invalid required config: {value}.') - def _resolve(self, node: ArchiveNode, config: RequestConfig, *, omit_keys=None, wildcard: bool = False): + def _resolve(self, node: GraphNode, config: RequestConfig, *, omit_keys=None, wildcard: bool = False): if isinstance(node.archive, list): return self._resolve_list(node, config) @@ -2020,7 +2252,7 @@ class DefinitionReader(GeneralReader): ), config) @staticmethod - def _switch_root(node: ArchiveNode, *, inplace: bool) -> ArchiveNode: + def _switch_root(node: GraphNode, *, inplace: bool) -> GraphNode: ''' Depending on whether to resolve in place, adapt the current root of the result tree. If NOT in place, write a global reference string to the current place, then switch to the referenced root. @@ -2040,8 +2272,14 @@ class DefinitionReader(GeneralReader): __M_SEARCHABLE__: dict = { + Token.SEARCH: ElasticSearchReader, + Token.METADATA: ElasticSearchReader, Token.ENTRY: EntryReader, + Token.ENTRIES: EntryReader, Token.UPLOAD: UploadReader, + Token.UPLOADS: UploadReader, Token.USER: UserReader, - Token.DATASET: DatasetReader + Token.USERS: UserReader, + Token.DATASET: DatasetReader, + Token.DATASETS: DatasetReader } diff --git a/nomad/archive/model.py b/nomad/graph/model.py similarity index 85% rename from nomad/archive/model.py rename to nomad/graph/model.py index b77336c8263448d78ebd30556d468c244e0e0ce5..7d9617979426d6b383f33d51a77f156801457342 100644 --- a/nomad/archive/model.py +++ b/nomad/graph/model.py @@ -21,24 +21,36 @@ import functools import re from enum import Enum from hashlib import sha1 -from typing import FrozenSet, Optional, Union, Tuple, List, Dict +from typing import FrozenSet, Optional, Union from pydantic import BaseModel, Field, Extra, ValidationError, validator -from nomad.app.v1.models import MetadataPagination, WithQuery +from nomad.app.v1.models import MetadataPagination, Metadata, Pagination from nomad.app.v1.routers.datasets import DatasetPagination -from nomad.app.v1.routers.uploads import UploadProcDataQuery, UploadProcDataPagination +from nomad.app.v1.routers.uploads import UploadProcDataQuery, UploadProcDataPagination, EntryProcDataPagination class DatasetQuery(BaseModel): dataset_id: str = Field(None) dataset_name: str = Field(None) - user_id: List[str] = Field(None) + user_id: list[str] = Field(None) dataset_type: str = Field(None) doi: str = Field(None) prefix: str = Field(None) +class EntryQuery(BaseModel): + mainfile: list[str] = Field(None, description=''' + Provide a list of regex patterns to match the mainfile. Case sensitive. + ''') + parser_name: list[str] = Field(None, description=''' + Provide a list of regex patterns to match the parser names. Case sensitive. + ''') + references: list[str] = Field(None, description=''' + Provide a list of regex patterns to match the references. Case sensitive. + ''') + + class DirectiveType(Enum): plain = 'plain' resolved = 'resolved' @@ -86,12 +98,12 @@ class RequestConfig(BaseModel): References can be resolved using `resolved`. The `*` is a shortcut of `plain`. ''') - include: Optional[FrozenSet[str]] = Field(None, regex=r'^[*?+a-zA-z_\d]+$', description=''' + include: Optional[FrozenSet[str]] = Field(None, regex=r'^[*?+a-zA-z_\d./]*$', description=''' A list of patterns to match the quantities and subsections of the current section. The quantities/sections that match the include patterns AND do not match the include patterns are included. Only one of `include` and `exclude` can be set. ''') - exclude: Optional[FrozenSet[str]] = Field(None, regex=r'^[*?+a-zA-z_\d]+$', description=''' + exclude: Optional[FrozenSet[str]] = Field(None, regex=r'^[*?+a-zA-z_\d./]*$', description=''' A list of patterns to match the quantities and subsections of the current section. The quantities/sections that match the include patterns AND do not match the include patterns are included. Only one of `include` and `exclude` can be set. @@ -131,7 +143,7 @@ class RequestConfig(BaseModel): If `both`, both original and custom definitions will be included, with custom definitions taking precedence. If `none`, no definition will be included. ''') - index: Union[Tuple[int], Tuple[Optional[int], Optional[int]]] = Field(None, description=''' + index: Union[tuple[int], tuple[Optional[int], Optional[int]]] = Field(None, description=''' The start and end index of the current field if it is a list. Can be a tuple of one index: (index). Or a tuple of two indices: (start, end), in which one of two can be `None`. @@ -141,19 +153,21 @@ class RequestConfig(BaseModel): Indicate whether to inherit the configuration from the parent section. This field only applies to the target section only, i.e., it does not propagate to its children. ''') - pagination: Union[dict, DatasetPagination, UploadProcDataPagination, MetadataPagination] = Field( + pagination: Union[ + dict, Pagination, + DatasetPagination, UploadProcDataPagination, MetadataPagination, EntryProcDataPagination] = Field( None, description=''' The pagination configuration used for MongoDB search. This setting does not propagate to its children. - For 'm_entries', 'm_uploads' and 'm_datasets', different validation rules apply. + For Token.ENTRIES, Token.UPLOADS and 'm_datasets', different validation rules apply. Please refer to `DatasetPagination`, `UploadProcDataPagination`, `MetadataPagination` for details. ''') - query: Union[dict, DatasetQuery, UploadProcDataQuery, WithQuery] = Field(None, description=''' + query: Union[dict, DatasetQuery, UploadProcDataQuery, Metadata, EntryQuery] = Field(None, description=''' The query configuration used for either mongo or elastic search. This setting does not propagate to its children. - It can only be defined at the root levels including 'm_entries', 'm_uploads' and 'm_datasets'. - For 'm_entries', the query is used in elastic search. It must comply with `WithQuery`. - For 'm_uploads', the query is used in mongo search. It must comply with `UploadProcDataQuery`. + It can only be defined at the root levels including Token.ENTRIES, Token.UPLOADS and 'm_datasets'. + For Token.ENTRIES, the query is used in elastic search. It must comply with `WithQuery`. + For Token.UPLOADS, the query is used in mongo search. It must comply with `UploadProcDataQuery`. For 'm_datasets', the query is used in mongo search. It must comply with `DatasetQuery`. ''') @@ -210,8 +224,9 @@ class RequestConfig(BaseModel): 3. Add `^` and `$` to the beginning and end of the pattern such that `quantity` becomes `^quantity$`. ''' pattern = frozenset(re.sub(r'\*+', '*', v) for v in pattern) + pattern = frozenset(re.sub(r'\.', r'\.', v) for v in pattern) # replace wildcard with regex - pattern = frozenset(v.replace('*', r'\w*').replace('?', r'\w') for v in pattern) + pattern = frozenset(v.replace('*', r'[\w\./]*').replace('?', r'[\w\./]') for v in pattern) # add ^ and $ to the pattern if not present pattern = frozenset('^' + v if not v.startswith('^') else v for v in pattern) pattern = frozenset(v + '$' if not v.endswith('$') else v for v in pattern) @@ -234,5 +249,5 @@ class RequestConfig(BaseModel): return sha1(self.json(exclude_defaults=True, exclude_none=True).encode('utf-8')).hexdigest() -class RequestQuery(Dict[str, Union["RequestQuery", Dict[str, RequestConfig]]]): +class RequestQuery(dict[str, Union["RequestQuery", dict[str, RequestConfig]]]): pass diff --git a/nomad/infrastructure.py b/nomad/infrastructure.py index 4b34cf38623e5cbd03e00f25aa6a7d9d21ea2d35..6f43e684a70e9c4c6debc4adc1702f6341d06a68 100644 --- a/nomad/infrastructure.py +++ b/nomad/infrastructure.py @@ -81,11 +81,15 @@ def setup_files(): def setup_mongo(client=False): ''' Creates connection to mongodb. ''' global mongo_client + kwargs = dict(db=config.mongo.db_name, host=config.mongo.host, port=config.mongo.port) + if config.mongo.username and config.mongo.password: + kwargs.update(username=config.mongo.username, password=config.mongo.password) + try: - mongo_client = connect(db=config.mongo.db_name, host=config.mongo.host, port=config.mongo.port) + mongo_client = connect(**kwargs) except ConnectionFailure: disconnect() - mongo_client = connect(db=config.mongo.db_name, host=config.mongo.host, port=config.mongo.port) + mongo_client = connect(**kwargs) logger.info('setup mongo connection') return mongo_client @@ -93,10 +97,14 @@ def setup_mongo(client=False): def setup_elastic(): ''' Creates connection to elastic search. ''' + http_auth = None + if config.elastic.username and config.elastic.password: + http_auth = (config.elastic.username, config.elastic.password) global elastic_client elastic_client = connections.create_connection( hosts=['%s:%d' % (config.elastic.host, config.elastic.port)], - timeout=config.elastic.timeout, max_retries=10, retry_on_timeout=True) + timeout=config.elastic.timeout, max_retries=10, retry_on_timeout=True, + http_auth=http_auth) logger.info('setup elastic connection') from nomad.metainfo.elasticsearch_extension import create_indices as create_v1_indices create_v1_indices() diff --git a/nomad/jupyterhub_config.py b/nomad/jupyterhub_config.py index f6998a547ffd1a94bb347da46f367f78b0f7ef13..49cd6ff12132f9649dc1a65708549bb0e18d78da 100644 --- a/nomad/jupyterhub_config.py +++ b/nomad/jupyterhub_config.py @@ -54,6 +54,13 @@ def pre_spawn(spawner): 'bind': upload['mount_path'] } + external_mounts = spawner.user_options.get('external_mounts', []) + for external_mount in external_mounts: + spawner.volumes[external_mount['host_path']] = { + 'bind': external_mount['bind'], + 'mode': external_mount['mode'] + } + environment = spawner.user_options.get('environment', {}) spawner.environment.update(environment) @@ -91,7 +98,7 @@ nomad_public_keycloak = f'{config.keycloak.public_server_url.rstrip("/")}/realms nomad_keycloak = f'{config.keycloak.server_url.rstrip("/")}/realms/{config.keycloak.realm_name}' c.JupyterHub.authenticator_class = GenericOAuthenticator c.GenericOAuthenticator.login_service = 'keycloak' -c.GenericOAuthenticator.client_id = 'nomad_public' +c.GenericOAuthenticator.client_id = config.keycloak.client_id c.GenericOAuthenticator.authorize_url = f'{nomad_public_keycloak}/protocol/openid-connect/auth' c.GenericOAuthenticator.token_url = f'{nomad_keycloak}/protocol/openid-connect/token' c.GenericOAuthenticator.userdata_url = f'{nomad_keycloak}/protocol/openid-connect/userinfo' diff --git a/nomad/metainfo/elasticsearch_extension.py b/nomad/metainfo/elasticsearch_extension.py index 51a0d2976dbc71979cfc732061bd8135fc412aa7..18dc8f5d749e7a305899a0b8c7c6c01cc8dc6356 100644 --- a/nomad/metainfo/elasticsearch_extension.py +++ b/nomad/metainfo/elasticsearch_extension.py @@ -156,17 +156,28 @@ sub-sections as if they were direct sub-sections. .. autoclass:: Index ''' - -from typing import Union, Any, Dict, cast, Set, List, Callable, Tuple, DefaultDict +import math +from typing import Union, Any, Dict, cast, Set, List, Callable, Tuple, Optional, DefaultDict from collections import defaultdict import numpy as np +from pint import Quantity as PintQuantity import re +from elasticsearch_dsl import Q from nomad import config, utils +from nomad.metainfo.util import MTypes from .metainfo import ( MSectionBound, Section, Quantity, MSection, MEnum, Datetime, Reference, DefinitionAnnotation, - Definition, QuantityReference, Unit) + Definition, QuantityReference, Unit, Package) + +from typing import TYPE_CHECKING +if TYPE_CHECKING: + from nomad.datamodel.datamodel import SearchableQuantity, EntryArchive + +schema_separator = '#' +dtype_separator = '#' +yaml_prefix = 'entry_id:' class DocumentType(): @@ -332,7 +343,8 @@ class DocumentType(): for elasticsearch_annotation in elasticsearch_annotations: if self != entry_type and elasticsearch_annotation.doc_type != self: continue - + if elasticsearch_annotation.dynamic: + continue if prefix is None: qualified_name = quantity_def.name else: @@ -357,7 +369,6 @@ class DocumentType(): fields = elasticsearch_annotation.fields if len(fields) > 0: mapping.setdefault('fields', {}).update(**fields) - else: mapping.update(**elasticsearch_annotation.mapping) @@ -400,15 +411,76 @@ class DocumentType(): if nested and qualified_name not in self.nested_object_keys: self.nested_object_keys.append(qualified_name) - search_quantity = SearchQuantity(annotation=annotation, doc_type=self, prefix=prefix) + search_quantity = SearchQuantity(annotation=annotation, prefix=prefix) self.nested_sections.append(search_quantity) self.nested_object_keys.sort(key=lambda item: len(item)) self.mapping = dict(properties=mappings) + + # Register all dynamic quantities + self.reload_quantities_dynamic() + return self.mapping + def reload_quantities_dynamic(self) -> None: + '''Reloads the dynamically mapped quantities from the plugin schemas. + ''' + from nomad.datamodel.data import EntryData + + if self != entry_type: + return None + + logger = utils.get_logger(__name__, doc_type=self.name) + + # Remove existing dynamic quantities + for name, quantity in list(self.quantities.items()): + if quantity.dynamic: + del self.quantities[name] + + # Gather the list of enabled schema plugins. Raise error if duplicate + # package name is encountered. + packages = set() + for plugin in config.plugins.filtered_values(): + if plugin.plugin_type == 'schema': + if plugin.python_package in packages: + raise ValueError( + f'Your plugin configuration contains two packages with the same name: {plugin.python_package}.' + ) + packages.add(plugin.python_package) + + # Import all quantities from the EntryData models found from plugin + # packages + def get_all_quantities(m_def, prefix=None): + for quantity_name, quantity in m_def.all_quantities.items(): + quantity_name = f'{prefix}.{quantity_name}' if prefix else quantity_name + yield quantity, quantity_name + for sub_section_def in m_def.all_sub_sections.values(): + name = sub_section_def.name + full_name = f'{prefix}.{name}' if prefix else name + for item in get_all_quantities(sub_section_def.sub_section, full_name): + yield item + + quantities_dynamic = {} + for name, package in Package.registry.items(): + if not name: + logger.warning(f'no name defined for package {package}, could not load dynamic quantities') + continue + package_name = name.split('.')[0] + if package_name in packages: + for section in package.section_definitions: + if isinstance(section, Section) and issubclass(section.section_cls, EntryData): + schema_name = section.qualified_name() + for quantity_def, path in get_all_quantities(section): + annotation = create_dynamic_quantity_annotation(quantity_def) + if not annotation: + continue + full_name = f'data.{path}{schema_separator}{schema_name}' + search_quantity = SearchQuantity(annotation, qualified_name=full_name) + quantities_dynamic[full_name] = search_quantity + self.quantities.update(quantities_dynamic) + def _register(self, annotation, prefix): - search_quantity = SearchQuantity(annotation=annotation, doc_type=self, prefix=prefix) + search_quantity = SearchQuantity(annotation=annotation, prefix=prefix) name = search_quantity.qualified_name assert name not in self.quantities or self.quantities[name] == search_quantity, \ @@ -623,10 +695,13 @@ class Elasticsearch(DefinitionAnnotation): value is indexed. es_query: The Elasticsearch query type that is used when querying for the annotated quantity, e.g. match, term, match_phrase. Default is 'match'. + dynamic: Whether this quantity should be stored inside a shared flat nested + field in ES instead of being assigned it's own mapping. Attributes: name: The name of the quantity (plus additional field if set). + definition: The metainfo definition associated with this annotation. search_quantity: The entry type SearchQuantity associated with this annotation. ''' def __init__( @@ -644,10 +719,12 @@ class Elasticsearch(DefinitionAnnotation): auto_include_subsections: bool = False, nested: bool = False, suggestion: Union[str, Callable[[MSectionBound], Any]] = None, - variants: Union[Callable[[str], List[str]]] = None, + variants: Optional[Callable[[str], List[str]]] = None, normalizer: Callable[[Any], Any] = None, es_query: str = 'match', - _es_field: str = None): + _es_field: str = None, + definition: Definition = None, + dynamic: bool = False): # TODO remove _es_field if it is not necessary anymore to enforce a specific mapping # for v0 compatibility @@ -687,17 +764,16 @@ class Elasticsearch(DefinitionAnnotation): self.value = value self.index = index self._mapping: Dict[str, Any] = None - self.default_aggregation_size = default_aggregation_size self.values = values self.metrics = metrics self.many_all = many_all - self.auto_include_subsections = auto_include_subsections self.nested = nested self.suggestion = suggestion - self.search_quantity = None + self.definition = definition + self.dynamic = dynamic @property def values(self): @@ -734,6 +810,22 @@ class Elasticsearch(DefinitionAnnotation): return self._mapping def compute_mapping(quantity: Quantity) -> Dict[str, Any]: + '''Used to generate an ES mapping based on the quantity definition if + no custom mapping is provided. + ''' + if self.dynamic: + if quantity.type in MTypes.bool: + return dict(type='boolean') + elif quantity.type in MTypes.str or isinstance(quantity.type, MEnum): + return dict(type='text') + elif quantity.type == Datetime: + return dict(type='date') + elif quantity.type in MTypes.int: + return dict(type='long') + elif quantity.type in MTypes.float: + return dict(type='double') + raise NotImplementedError( + 'Quantity type %s for dynamic quantity %s is not supported.' % (quantity.type, quantity)) if quantity.type == str: return dict(type='keyword') elif quantity.type in [float, np.float64]: @@ -797,6 +889,16 @@ class Elasticsearch(DefinitionAnnotation): return f'Elasticsearch({self.definition})' + @property + def aggregatable(self): + if isinstance(self.definition.type, Reference): + return False + + field_type = self.mapping['type'] + if self.dynamic and field_type == 'text': + return True + return field_type == 'keyword' or field_type == 'boolean' + def m_to_dict(self): if self.search_quantity: return self.search_quantity.qualified_name @@ -811,11 +913,6 @@ class SearchQuantity(): an archive (an search index document). A search quantity is uniquely identified by a qualified name that pin points its place in the sub-section hierarchy. - Arguments: - annotation: The elasticsearch annotation that this search quantity is based on. - doc_type: The elasticsearch document type that this search quantity appears in. - prefix: The prefix to build the full qualified name for this search quantity. - Attributes: qualified_field: The full qualified name of the resulting elasticsearch field in the entry @@ -828,15 +925,17 @@ class SearchQuantity(): Same name as qualified_field. This will be used to address the search property in our APIs. definition: The metainfo quantity definition that this search quantity is based on - aggregatable: - A boolean that determines, if this quantity can be used in aggregations. ''' - def __init__(self, annotation: Elasticsearch, doc_type: DocumentType, prefix: str): + def __init__(self, annotation: Elasticsearch, prefix: str = None, qualified_name: str = None): + ''' + Args: + annotation: The elasticsearch annotation that this search quantity is based on. + doc_type: The elasticsearch document type that this search quantity appears in. + prefix: The prefix to build the full qualified name for this search quantity. + ''' self.annotation = annotation - self.doc_type = DocumentType qualified_field = self.annotation.definition.name - if prefix is not None: qualified_field = f'{prefix}.{qualified_field}' @@ -853,18 +952,62 @@ class SearchQuantity(): self.qualified_field = qualified_field self.qualified_name = qualified_field + if annotation.dynamic: + self.qualified_name = qualified_name + self.search_field = self.get_dynamic_path() + self.dynamic_filter = self.get_dynamic_filter() + + def get_dynamic_path(self): + '''Returns the dynamic field name for this quantity. + ''' + mapping = self.annotation.mapping['type'] + field_name = get_searchable_quantity_value_field(self.annotation, aggregation=True) + if field_name is None: + raise ValueError( + f'quantity "{self.annotation.qualified_name}" has unsupported search index mapping "{mapping}".', + loc=['aggregation', 'quantity'] + ) + return f'search_quantities.{field_name}' + + def get_dynamic_filter(self): + '''Returns a filter for this quantity. + ''' + if self.dynamic: + path, schema_name = self.qualified_name.split(schema_separator, 1) + searchable_quantity = create_searchable_quantity(self.definition, path, schema_name=schema_name) + filter_path = Q('term', search_quantities__id=searchable_quantity.id) + + return filter_path + + def get_query(self, value: Any): + '''Returns an ES query for this quantity, the query type depends on the + annotation. Also normalizes the value. + ''' + normalizer = self.annotation.normalizer + if normalizer: + value = normalizer(value) + + sub_query = Q(self.annotation.es_query, **{self.search_field: value}) + return self.wrap_dynamic(sub_query) + + def get_range_query(self, value: Any): + '''Returns an ES range query for this quantity. + ''' + sub_query = Q('range', **{self.search_field: value.dict(exclude_unset=True)}) + return self.wrap_dynamic(sub_query) + + def wrap_dynamic(self, sub_query: Q): + '''For dynamic quantities, wraps the given query in a nested query to + target them correctly. + ''' + if self.dynamic: + return Q('nested', path='search_quantities', query=self.dynamic_filter & sub_query) + return sub_query + @property def definition(self): return self.annotation.definition - @property - def aggregatable(self): - if isinstance(self.definition.type, Reference): - return False - - field_type = self.annotation.mapping['type'] - return field_type == 'keyword' or field_type == 'boolean' - def __repr__(self): if self.definition is None: return super().__repr__() @@ -1208,3 +1351,118 @@ def update_materials(entries: List, refresh: bool = False): if refresh: entry_index.refresh() material_index.refresh() + + +def get_searchable_quantity_value_field(annotation: Elasticsearch, aggregation: bool = False): + '''Get the target field for based on the annotation and whether the field + should be used in aggregation or not. + + Args: + annotation: Annotation of the targeted field. + aggregation: Whether the field is used for aggregation or not. + ''' + mapping = annotation.mapping['type'] + if mapping == 'boolean': + return 'bool_value' + elif mapping == 'text': + if aggregation: + return 'str_value.keyword' + return 'str_value' + elif mapping == 'date': + return 'datetime_value' + elif mapping == 'text': + return 'str_value' + elif mapping == 'long': + return 'int_value' + elif mapping == 'double': + return 'float_value' + + return None + + +def create_dynamic_quantity_annotation(quantity_def: Quantity, doc_type: DocumentType = None) -> Optional[Elasticsearch]: + '''Given a quantity definition, this function will return the corresponding + ES annotation if one can be built. + ''' + if quantity_def.shape != []: + return None + try: + annotation = Elasticsearch(definition=quantity_def, dynamic=True, doc_type=doc_type) + annotation.mapping['type'] + except NotImplementedError: + return None + + return annotation + + +def create_searchable_quantity( + quantity_def: Quantity, + quantity_path: Quantity, + section: MSection = None, + path_archive: str = None, + schema_name: str = None, +) -> Optional['SearchableQuantity']: + '''Transforms a quantity definition into a SearchQuantity. + ''' + from nomad.datamodel.datamodel import SearchableQuantity + + annotation = create_dynamic_quantity_annotation(quantity_def) + if not annotation: + return None + mapping = annotation.mapping['type'] + + searchable_quantity = SearchableQuantity( + id=f'{quantity_path}{schema_separator}{schema_name}' if schema_name else quantity_path, + path_archive=path_archive, + definition=quantity_def.qualified_name() + ) + + # If a section is given, also store the value + if section is not None: + logger = utils.get_logger(__name__) + value = section.m_get(quantity_def) + if value is None: + return None + try: + 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) + elif mapping == 'boolean': + value = bool(value) + elif mapping == 'double': + if isinstance(value, PintQuantity): + value = float(value.m) + else: + value = float(value) + if math.isnan(value): + logger.warn('skipped indexing NaN value', path_archive=path_archive) + return None + setattr(searchable_quantity, value_field_name, value) + except Exception as e: + logger.error('error in indexing dynamic quantity', path_archive=path_archive, exc_info=e) + return None + + return searchable_quantity + + +def parse_quantity_name(name: str) -> Tuple[str, Optional[str], Optional[str]]: + dtype = None + schema = None + parts = name.split(schema_separator, 1) + if len(parts) == 2: + path, schema = parts + else: + path = parts[0] + if schema: + parts = schema.split(dtype_separator, 1) + if len(parts) == 2: + schema, dtype = parts + else: + schema = parts[0] + return path, schema, dtype diff --git a/nomad/metainfo/metainfo.py b/nomad/metainfo/metainfo.py index 3e3e11101408633d77e5bbed7cfa256c099a28a2..23f344255d0afb4fcf924708ec61e47ad6d22c6e 100644 --- a/nomad/metainfo/metainfo.py +++ b/nomad/metainfo/metainfo.py @@ -28,7 +28,7 @@ import sys from collections.abc import Iterable as IterableABC from functools import reduce from typing import ( - Any, Callable as TypingCallable, Dict, Iterable, List, Optional, Set, Tuple, Type, TypeVar, Union, cast, ClassVar) + Any, Callable as TypingCallable, Dict, Iterable, List, Optional, Set, Tuple, Type, TypeVar, Union, Generator, cast, ClassVar) import docstring_parser import jmespath @@ -52,6 +52,7 @@ m_package: Optional[Package] = None # pylint: disable=used-before-assignment is_bootstrapping = True Elasticsearch = TypeVar('Elasticsearch') MSectionBound = TypeVar('MSectionBound', bound='MSection') +TypeBound = TypeVar('TypeBound', bound=type) SectionDefOrCls = Union['Section', 'SectionProxy', Type['MSection']] T = TypeVar('T') @@ -580,6 +581,9 @@ class Reference(DataType): context_section = context.resolve_archive_url(url.archive_url) + if isinstance(context_section, Package) and "definitions" in url.fragment: + url.fragment = url.fragment.replace('/definitions', '') + return self.resolve_fragment(context_section, url.fragment) def resolve_fragment(self, context_section: MSection, fragment: str) -> MSection: @@ -1419,7 +1423,7 @@ class MSection(metaclass=MObjectMeta): # TODO find a way to make this a subclas return elif dimensions == 1: - if type(value) == str or not isinstance(value, IterableABC): + if isinstance(value, str) or not isinstance(value, IterableABC): raise TypeError( f'The shape of {quantity_def} requires an iterable value, but {value} is not iterable.') @@ -1491,7 +1495,7 @@ class MSection(metaclass=MObjectMeta): # TODO find a way to make this a subclas return elif dimensions == 1: - if type(m_quantity.value) == str or not isinstance(m_quantity.value, IterableABC): + if isinstance(m_quantity.value, str) or not isinstance(m_quantity.value, IterableABC): raise TypeError( f'The shape of {quantity_def} requires an iterable value, ' f'but {m_quantity.value} is not iterable.') @@ -1685,7 +1689,7 @@ class MSection(metaclass=MObjectMeta): # TODO find a way to make this a subclas if dimension == 0: attr_value = self.__set_normalize(tgt_attr, attr_value) elif dimension == 1: - if type(attr_value) == str or not isinstance(attr_value, IterableABC): + if isinstance(attr_value, str) or not isinstance(attr_value, IterableABC): raise TypeError(f'The shape requires an iterable value, but {attr_value} is not.') if tgt_attr.type == complex: @@ -2466,32 +2470,34 @@ class MSection(metaclass=MObjectMeta): # TODO find a way to make this a subclas if include_self and depth_first: yield self - def m_traverse(self): + def m_traverse(self) -> Generator[Tuple[Any, Any, int, List[Union[str, int]]], None, None]: ''' - Performs a depth-first traversal and yield tuples of section, property def, - parent index for all set properties. If the section has no property the empty - section is returned. + Performs a depth-first traversal and yield tuples of section, property + def, parent index and path for all set properties. If the section has no + property the empty section is returned. ''' - empty = True for key in self.__dict__: property_def = self.m_def.all_properties.get(key) if property_def is None: continue - empty = False if isinstance(property_def, SubSection): - for sub_section in self.m_get_sub_sections(property_def): - for i in sub_section.m_traverse(): - yield i - yield self, property_def, sub_section.m_parent_index + repeats = property_def.repeats + for i_repeated, sub_section in enumerate(self.m_get_sub_sections(property_def)): + for parent, definition, index, sub_path in sub_section.m_traverse(): + parent_path: List[Union[str, int]] = [key] + if repeats: + parent_path.append(i_repeated) + yield parent, definition, index, parent_path + sub_path + yield self, property_def, sub_section.m_parent_index, [key] else: - yield self, property_def, -1 + yield self, property_def, -1, [key] if empty: - yield self, None, -1 + yield self, None, -1, [] def m_pretty_print(self, indent=None): ''' Pretty prints the containment hierarchy ''' @@ -2599,7 +2605,7 @@ class MSection(metaclass=MObjectMeta): # TODO find a way to make this a subclas try: sub_section: str = path_stack.pop() - index: Any = int(sub_section) if sub_section.isnumeric() else sub_section + index: Any = int(sub_section) if sub_section.lstrip('-').isnumeric() else sub_section except ValueError: raise MetainfoReferenceError( f'Could not resolve {path}, {prop_name} repeats but there is no ' @@ -2633,6 +2639,9 @@ class MSection(metaclass=MObjectMeta): # TODO find a way to make this a subclas return _check_definition_id(target_id, cast(MSectionBound, section)) + def m_get_annotation(self, key: Union[str, Type[T]], default: T = None) -> T: + return self.m_get_annotations(key, default) + def m_get_annotations(self, key: Union[str, type], default=None, as_list: bool = False): ''' Convenience method to get annotations @@ -2760,9 +2769,9 @@ class MSection(metaclass=MObjectMeta): # TODO find a way to make this a subclas if isinstance(copy, Definition): copy.more = deepcopy(self.more) for sub_section_def in self.m_def.all_sub_sections.values(): - sub_sections_copy = [ - sub_section.m_copy(deep=True, parent=copy) - for sub_section in self.m_get_sub_sections(sub_section_def)] + sub_sections_copy = MSubSectionList(self, sub_section_def) + for sub_section in self.m_get_sub_sections(sub_section_def): + sub_sections_copy.append(sub_section.m_copy(deep=True, parent=copy)) if sub_section_def.repeats: copy.__dict__[sub_section_def.name] = sub_sections_copy diff --git a/nomad/metainfo/nexus.py b/nomad/metainfo/nexus.py index 7ce1f486c3b1450db37442a42199f070afcad4bc..0314e7996943fe20902da1424ef6896e22f21601 100644 --- a/nomad/metainfo/nexus.py +++ b/nomad/metainfo/nexus.py @@ -27,7 +27,7 @@ from typing import Dict, List, Optional, Union import numpy as np from toposort import toposort_flatten -from nexusutils.nexus import nexus # pylint: disable=import-error +from pynxtools.nexus import nexus # pylint: disable=import-error from nomad.datamodel import EntryArchive from nomad.metainfo import ( Attribute, Bytes, Datetime, Definition, MEnum, Package, Property, Quantity, Section, SubSection) @@ -526,6 +526,32 @@ def __create_class_section(xml_node: ET.Element) -> Section: return class_section +def __find_cycles(graph): + def dfs(node, visited, path): + visited.add(node) + path.append(node) + + for neighbor in graph.get(node, set()): + if neighbor in path: + # Found a cycle + cycle_start = path.index(neighbor) + cycle = path[cycle_start:] + cycles.append(cycle) + elif neighbor not in visited: + dfs(neighbor, visited, path) + + path.pop() + + cycles = [] + visited = set() + + for node in graph: + if node not in visited: + dfs(node, visited, []) + + return cycles + + def __sort_nxdl_files(paths): ''' Sort all definitions based on dependencies @@ -550,10 +576,12 @@ def __sort_nxdl_files(paths): dependency_list.append(child.get('type')) name_dependency_map[xml_name] = set(dependency_list) - # manually remove deprecated circular dependency - name_dependency_map['NXgeometry'].remove('NXorientation') - name_dependency_map['NXgeometry'].remove('NXtranslation') + # Find cycles and remove them + cycles = __find_cycles(name_dependency_map) + for cycle in cycles: + name_dependency_map[cycle[-2]].remove(cycle[-1]) + # this sorting can be skipped one should create empty classes instead sorted_nodes = toposort_flatten(name_dependency_map) validated_names = [] for node in sorted_nodes: diff --git a/nomad/metainfo/pydantic_extension.py b/nomad/metainfo/pydantic_extension.py index d263da6f591220c35ff09d7db54a16e3923eb3a8..196f0c8085ba5af302e041aedc4e0a265b58c9cd 100644 --- a/nomad/metainfo/pydantic_extension.py +++ b/nomad/metainfo/pydantic_extension.py @@ -32,8 +32,8 @@ Allows to create pydantic models from section definitions. ''' -from typing import cast -from pydantic import create_model, Field, BaseConfig +from typing import cast, Type +from pydantic import create_model, Field, BaseConfig, BaseModel from datetime import datetime from .metainfo import DefinitionAnnotation, Definition, Section, Quantity, Datetime, MEnum, Capitalized, JSON @@ -50,10 +50,10 @@ class PydanticModel(DefinitionAnnotation): to create pydantic model instances from section instances. Attributes: - model: The pydantic model that represents the section defintion. + model: The pydantic model that represents the section definition. ''' def __init__(self): - self.model = None + self.model: Type[BaseModel] = None def to_pydantic(self, section): ''' Returns the pydantic model instance for the given section. ''' diff --git a/nomad/metainfo/util.py b/nomad/metainfo/util.py index 3952c512b1abde895d6db854326f1790a99d07cb..27cbd71228770853fa02858c0508d8739b2259e5 100644 --- a/nomad/metainfo/util.py +++ b/nomad/metainfo/util.py @@ -194,7 +194,9 @@ class MTypes: num = num_python | num_numpy str_numpy = {np.str_} bool_numpy = {np.bool_} + bool = {bool, np.bool_} numpy = num_numpy | str_numpy | bool_numpy + str = {str} | str_numpy class MEnum(Sequence): diff --git a/nomad/mkdocs.py b/nomad/mkdocs.py index 780cb7679c91ae6cd30ed3da35e388717d213c37..193291315aaae4a724c07d8ab76da7c02882363d 100644 --- a/nomad/mkdocs.py +++ b/nomad/mkdocs.py @@ -369,6 +369,13 @@ def define_env(env): return pydantic_model_from_model(model, heading=heading, hide=hide) + @env.macro + def default_apps_list(): # pylint: disable=unused-variable + result = '' + for key, value in config.ui.apps.filtered_items(): + result += f' - `{key}`: {value.description}\n' + return result + @env.macro def parser_list(): # pylint: disable=unused-variable parsers = [ diff --git a/nomad/normalizing/dos.py b/nomad/normalizing/dos.py index 2bc43c9b6fcf9559dd0576c7cb04265ee6c5baf6..a953ca7c28a9ead9bcbf727e3834d7514b74d8c8 100644 --- a/nomad/normalizing/dos.py +++ b/nomad/normalizing/dos.py @@ -17,12 +17,14 @@ # import numpy as np -from nptyping import NDArray +import re +from collections import defaultdict +from typing import Optional from nomad import config from nomad_dos_fingerprints import DOSFingerprint # pylint: disable=import-error from nomad.datamodel.metainfo.simulation.calculation import ( - BandGap, BandGapDeprecated, Calculation, Dos, DosFingerprint, + BandGap, BandGapDeprecated, Calculation, Dos, DosValues, DosFingerprint, ElectronicStructureProvenance) from .normalizer import Normalizer @@ -52,88 +54,147 @@ class DosNormalizer(Normalizer): for calc in calculations: # Normalize electronic DOS dos_electronic = calc.dos_electronic - if dos_electronic is not None: + if dos_electronic: energy_fermi = calc.energy.fermi if calc.energy is not None else None energy_highest = calc.energy.highest_occupied if calc.energy is not None else None energy_lowest = calc.energy.lowest_unoccupied if calc.energy is not None else None - for dos in dos_electronic: + n_spin_channels = len(dos_electronic) + for index, dos in enumerate(dos_electronic): + orbital_projected = dos.orbital_projected + atom_projected = dos.atom_projected + species_projected = dos.species_projected + total_dos = dos.total + # If the atom_projected does not exist, we resolve the orbital_projected and + # store the summation of each orbital for each atom in atom_projected + if not atom_projected: + # `atom_data` is a dictionary of unknown keys (resolved inside the loop + # with `atom`) and whose values are list where the orbital-projected DOS + # has to be appended. + atom_data = defaultdict(list) + for orbital_pdos in orbital_projected: + atom = f'{orbital_pdos.atom_label}{orbital_pdos.atom_index if orbital_pdos.atom_index else ""}' + atom_data[atom].append(orbital_pdos.value.magnitude) + for atom, data in atom_data.items(): + atom_value = np.sum(data, axis=0) + sec_dos_atom = dos.m_create(DosValues, Dos.atom_projected) + atom_label = re.sub(r'\d', '', atom) + atom_index = re.sub(r'[a-zA-Z]', '', atom) + sec_dos_atom.atom_label = atom_label + sec_dos_atom.atom_index = atom_index if atom_index else None + sec_dos_atom.value = atom_value + # If the species_projected does not exist, we resolve the atom_projected and + # store the summation of each atom for each species in species_projected + if not species_projected: + # `species_data` is a dictionary of unknown keys (resolved inside the loop + # with `species`) and whose values are list where the atom-projected DOS + # has to be appended. + species_data = defaultdict(list) + for atom_pdos in atom_projected: + species = atom_pdos.atom_label + species_data[species].append(atom_pdos.value.magnitude) + for species, data in species_data.items(): + species_value = np.sum(data, axis=0) + sec_dos_species = dos.m_create(DosValues, Dos.species_projected) + sec_dos_species.atom_label = species + sec_dos_species.value = species_value + # If the total DOS does not exist but the species_projected dos, we store the + # species_projected summation into the total DOS and show a warning about + # our procedure + if not total_dos and species_projected: + self.logger.info('Total DOS not found, but Projected DOS was found. We ' + 'will sum up contributions leading to the final DOS.') + total_data = [] + for species_pdos in species_projected: + total_data.append(species_pdos.value.magnitude) + total_value = np.sum(total_data, axis=0) + sec_dos_total = dos.m_create(DosValues, Dos.total) + sec_dos_total.value = total_value + # TODO add provenance for the Dos. This will require that the spin_polarized + # and n_spin_channels are moved to `run.method`, and then add the provenance + # here for each Dos as a reference to the methodology. - # Add normalization factor - set_normalization_factor = self.add_electronic_normalization_factor(calc, dos) - if not set_normalization_factor: - continue + # Add energy references + dos_values = [dos_total.value.magnitude for dos_total in dos.total] + self.add_energy_references(calc, index, dos, energy_fermi, energy_highest, energy_lowest, dos_values) - # Add energy references - dos_values = [dos_total.value.magnitude for dos_total in dos.total] - self.add_energy_references(calc, dos, energy_fermi, energy_highest, energy_lowest, dos_values) + # Calculate the DOS fingerprint for successfully normalized DOS for finding + # the energy_highest_occupied + normalization_reference = None + for info in calc.band_gap: + energy_highest_occupied = info.energy_highest_occupied + if energy_highest_occupied is not None: + if normalization_reference is None: + normalization_reference = energy_highest_occupied + else: + normalization_reference = max(normalization_reference, energy_highest_occupied) + if normalization_reference is not None: + dos_energies_normalized = dos.energies - normalization_reference - # Calculate the DOS fingerprint for successfully normalized DOS - normalization_reference = None - for info in calc.band_gap: - energy_highest = info.energy_highest_occupied - if energy_highest is not None: - if normalization_reference is None: - normalization_reference = energy_highest - else: - normalization_reference = max(normalization_reference, energy_highest) - if normalization_reference is not None: - dos_energies_normalized = dos.energies - normalization_reference + try: + dos_fingerprint = DOSFingerprint().calculate( + dos_energies_normalized.magnitude, + dos_values + ) + except Exception as e: + self.logger.error('could not generate dos fingerprint', exc_info=e) + else: + sec_dos_fingerprint = dos.m_create(DosFingerprint) + sec_dos_fingerprint.bins = dos_fingerprint.bins + sec_dos_fingerprint.indices = dos_fingerprint.indices + sec_dos_fingerprint.stepsize = dos_fingerprint.stepsize + sec_dos_fingerprint.grid_id = dos_fingerprint.grid_id + sec_dos_fingerprint.filling_factor = dos_fingerprint.filling_factor - try: - dos_fingerprint = DOSFingerprint().calculate( - dos_energies_normalized.magnitude, - dos_values - ) - except Exception as e: - self.logger.error('could not generate dos fingerprint', exc_info=e) - else: - sec_dos_fingerprint = dos.m_create(DosFingerprint) - sec_dos_fingerprint.bins = dos_fingerprint.bins - sec_dos_fingerprint.indices = dos_fingerprint.indices - sec_dos_fingerprint.stepsize = dos_fingerprint.stepsize - sec_dos_fingerprint.grid_id = dos_fingerprint.grid_id - sec_dos_fingerprint.filling_factor = dos_fingerprint.filling_factor + # Add normalization factor + set_normalization_factor = self.add_electronic_normalization_factor(calc, dos, n_spin_channels) + if not set_normalization_factor: + continue # Normalize phonon DOS dos_phonons = calc.dos_phonon - if dos_phonons is not None: - for dos_phonon in dos_phonons: - self.add_phononic_normalization_factor(calc, dos_phonon) + for dos_phonon in dos_phonons: + self.add_phononic_normalization_factor(calc, dos_phonon) - def add_electronic_normalization_factor(self, calc, dos): + def add_electronic_normalization_factor( + self, calc: Calculation, dos: Dos, n_spin_channels: int) -> Optional[np.float64]: """Returns a factor that returns a size intensive electronic DOS. The values are divided by integral(DOS, lowest state, Fermi energy), or likewise sum(<atomic numbers>).""" + if not calc.system_ref: + self.logger.warning( + 'Could not resolve the system reference from calculation.system_ref, ' + 'thus electronic normalization factor not reported.') + return None atoms = calc.system_ref.atoms if not len(dos.total): self.logger.warning( 'Could not resolve total DOS from calculation.dos.total, ' - 'thus electronic normalization factor not reported.') - return + 'thus DOS electronic normalization factor not reported.') + return None elif not len(atoms.species): self.logger.warning( 'Could not resolve atoms information from calculation.system_ref.atoms, ' - 'thus electronic normalization factor not reported.') - return + 'thus DOS electronic normalization factor not reported.') + return None else: - normalization_factor = 1 / sum(atoms.species) + normalization_factor = 1 / (n_spin_channels * sum(atoms.species)) for dos_total in dos.total: dos_total.normalization_factor = normalization_factor return normalization_factor - def add_phononic_normalization_factor(self, calc, dos): + def add_phononic_normalization_factor(self, calc: Calculation, dos: Dos) -> Optional[float]: """Returns a factor that returns a size intensive phononic DOS. The values are divided by integral(DOS, 0, infinity), or likewise <no. degrees of freedom>""" atoms = calc.system_ref.atoms if not len(dos.total): self.logger.warning( 'Could not resolve total DOS from calculation.dos.total, ' - 'thus phononic normalization factor not reported.') - return + 'thus DOS phononic normalization factor not reported.') + return None elif not len(atoms.species): self.logger.warning( 'Could not resolve atoms information from calculation.system_ref.atoms, ' - 'thus phononic normalization factor not reported.') - return + 'thus DOS phononic normalization factor not reported.') + return None else: normalization_factor = 1 / (3 * len(atoms.species)) for dos_total in dos.total: @@ -143,11 +204,12 @@ class DosNormalizer(Normalizer): def add_energy_references( self, calc: Calculation, + i_channel: int, dos: Dos, energy_fermi: float, energy_highest: float, energy_lowest: float, - dos_values: NDArray) -> None: + dos_values: list) -> None: """Given the DOS and information about energy references, determines the energy references separately for all spin channels. """ @@ -167,64 +229,62 @@ class DosNormalizer(Normalizer): # Create channel information for each spin channel and populate with # initial values. - dos_total = dos.total - n_channels = len(dos_total) - for i_channel in range(n_channels): - info = BandGapDeprecated() - info.index = i_channel - if energy_highest is not None: - info.energy_highest_occupied = energy_highest - if energy_lowest is not None: - info.energy_lowest_unoccupied = energy_lowest + info = BandGapDeprecated() + info.index = i_channel + if energy_highest is not None: + info.energy_highest_occupied = energy_highest + if energy_lowest is not None: + info.energy_lowest_unoccupied = energy_lowest - # First check that the closest dos energy to energy reference - # is not too far away. If it is very far away, the - # normalization may be very inaccurate and we do not report it. - dos_channel = dos_values[i_channel] - fermi_idx = (np.abs(dos_energies - eref)).argmin() - fermi_energy_closest = dos_energies[fermi_idx] - distance = np.abs(fermi_energy_closest - eref) - if distance.magnitude <= energy_threshold: - - # See if there are zero values close below the energy reference. - idx = fermi_idx - idx_descend = fermi_idx - while True: - try: - value = dos_channel[idx] - energy_distance = np.abs(eref - dos_energies[idx]) - except IndexError: - break - if energy_distance.magnitude > energy_threshold: - break - if value <= value_threshold: - idx_descend = idx - break - idx -= 1 + # First check that the closest dos energy to energy reference + # is not too far away. If it is very far away, the + # normalization may be very inaccurate and we do not report it. + dos_channel = dos_values[0] + fermi_idx = (np.abs(dos_energies - eref)).argmin() + fermi_energy_closest = dos_energies[fermi_idx] + distance = np.abs(fermi_energy_closest - eref) + single_peak_fermi = False + if distance.magnitude <= energy_threshold: + # See if there are zero values close below the energy reference. + idx = fermi_idx + idx_descend = fermi_idx + while True: + try: + value = dos_channel[idx] + energy_distance = np.abs(eref - dos_energies[idx]) + except IndexError: + break + if energy_distance.magnitude > energy_threshold: + break + if value <= value_threshold: + idx_descend = idx + break + idx -= 1 - # See if there are zero values close above the fermi energy. - idx = fermi_idx - idx_ascend = fermi_idx - while True: - try: - value = dos_channel[idx] - energy_distance = np.abs(eref - dos_energies[idx]) - except IndexError: - break - if energy_distance.magnitude > energy_threshold: - break - if value <= value_threshold: - idx_ascend = idx - break - idx += 1 + # See if there are zero values close above the fermi energy. + idx = fermi_idx + idx_ascend = fermi_idx + while True: + try: + value = dos_channel[idx] + energy_distance = np.abs(eref - dos_energies[idx]) + except IndexError: + break + if energy_distance.magnitude > energy_threshold: + break + if value <= value_threshold: + idx_ascend = idx + break + idx += 1 - # If there is a single peak at fermi energy, no - # search needs to be performed. - if idx_ascend != fermi_idx and idx_descend != fermi_idx: - info.energy_highest_occupied = fermi_energy_closest - info.energy_lowest_unoccupied = fermi_energy_closest - continue + # If there is a single peak at fermi energy, no + # search needs to be performed. + if idx_ascend != fermi_idx and idx_descend != fermi_idx: + info.energy_highest_occupied = fermi_energy_closest + info.energy_lowest_unoccupied = fermi_energy_closest + single_peak_fermi = True + if not single_peak_fermi: # Look for highest occupied energy below the descend index idx = idx_descend while True: @@ -237,7 +297,6 @@ class DosNormalizer(Normalizer): info.energy_highest_occupied = dos_energies[idx] break idx -= 1 - # Look for lowest unoccupied energy above idx_ascend idx = idx_ascend while True: @@ -251,14 +310,17 @@ class DosNormalizer(Normalizer): break idx += 1 - # save band gap value + # save energy_ref for dos + dos.energy_ref = info.energy_highest_occupied if info.energy_highest_occupied else energy_fermi + + # save band gap value + if info.energy_lowest_unoccupied and info.energy_highest_occupied: gap_value = info.energy_lowest_unoccupied - info.energy_highest_occupied gap_value = gap_value if gap_value > 0. else 0. info.value = gap_value if info.value is not None: proper_info = BandGap().m_from_dict(info.m_to_dict()) - proper_info.provenance = ElectronicStructureProvenance( - dos=dos.total[i_channel], label='dos') + proper_info.provenance = ElectronicStructureProvenance(dos=dos.total[0], label='dos') calc.m_add_sub_section(Calculation.band_gap, proper_info) dos.m_add_sub_section(Dos.band_gap, info) diff --git a/nomad/normalizing/dos_integrator.py b/nomad/normalizing/dos_integrator.py index f9aacbca7690b4723321033126718d28e78ad92c..b2b4594b93aa27b7d0229a1505b6a023a53a84da 100644 --- a/nomad/normalizing/dos_integrator.py +++ b/nomad/normalizing/dos_integrator.py @@ -24,19 +24,20 @@ from typing import List, Union # TODO add tester for all functionalities +logger = get_logger(__name__) # set logger + + def get_fermi_energy(dos_object, efermi): """ Handle extraction of the Fermi level """ - logger = get_logger('get_fermi_energy') # set logger - if efermi is not None: e_fermi = efermi else: try: e_fermi = dos_object.energy_fermi except AttributeError: - logger.warn('Missing Fermi energy') + logger.warning('Missing Fermi energy') return return e_fermi @@ -44,7 +45,10 @@ def get_fermi_energy(dos_object, efermi): def get_energy_index(dos_object, energy_level): """ - Obtain the closest index that contains all electron states up to `energy_level` + Obtain the closest index that contains all electron states up to `energy_level`. If the + closest energy state index cannot be resolved, the function returns: + - the maximum of energies if energy_level > max(dos_energies) + - the minimum of energies if energy_level < min(dos_energies) """ if hasattr(energy_level, 'magnitude'): dos_energies = dos_object.energies.to(energy_level.units).magnitude # ensure that the units are correct @@ -52,39 +56,51 @@ def get_energy_index(dos_object, energy_level): else: dos_energies = dos_object.energies.magnitude # now it's up to the user to ensure correct units - for i, energy in enumerate(dos_energies): - if energy >= energy_level: - return i + closest_index = np.where(dos_energies >= energy_level) + if len(closest_index[0]) > 0: + return closest_index[0][0] + else: + logger.warning('Could not find closest_index for the energy_level.') + if energy_level > np.max(dos_energies): + return len(dos_energies) + else: + return 0 -def integrate_dos(dos_object: Dos, spin_channels: List[int] = [0, 1], - limits: List[str] = ['min', 'fermi'], efermi: Union[float, None] = None): +def integrate_dos( + dos_object: Union[List[Dos], None], + spin_channels: List[int] = [0, 1], + limits: List[str] = ['min', 'fermi'], + efermi: Union[float, None] = None): """ - Integrate a NOMAD run `dos_object` over the stated `spin_channels`. In unnormalized cases, this simply yields the number of band electrons. + Integrate a NOMAD run `dos_object` over the stated `spin_channels`. In non-normalized cases, this simply yields the number of band electrons. - `limits`: 2-object array determining the integration range in energy units. Outside of explicit values, one can also choose `min`, `max` and `fermi`. - `efermi`: explicitly passed Fermi level. To be used when the DOS object does not contain any Fermi level itself. """ - logger = get_logger('integrate_dos') # set logger - - # Set integral limits - limit_keywords_map = {'min': 0, 'max': -1, - 'fermi': get_energy_index(dos_object, get_fermi_energy(dos_object, efermi))} if len(limits) != 2: - logger.warn('Expected a list of length 2, but got {}'.format(len(limits))) + logger.warning(f'Expected a list of length 2, but got {len(limits)}') return - mapped_limits = [] - for limit in limits: - try: - mapped_limits.append(limit_keywords_map[limit]) - except KeyError: - mapped_limits.append(get_energy_index(dos_object, limit)) - # Extract energies and DOS values to perform the integration - sel_energies = dos_object.energies.magnitude[mapped_limits[0]:mapped_limits[1]] dos_integrated = 0. for spin_channel in spin_channels: try: - dos_values = dos_object.total[spin_channel].value.magnitude[mapped_limits[0]:mapped_limits[1]] + dos_spin = dos_object[spin_channel] + except Exception: + continue + # Setting the integral limits + limit_keywords_map = { + 'min': 0, + 'max': -1, + 'fermi': get_energy_index(dos_spin, get_fermi_energy(dos_spin, efermi))} + try: + mapped_limits = [limit_keywords_map[limit] for limit in limits] + except KeyError: + mapped_limits = [get_energy_index(dos_spin, limit) for limit in limits] + + # Extract energies and DOS values to perform the integration + sel_energies = dos_spin.energies.magnitude[mapped_limits[0]:mapped_limits[1]] + try: + dos_values = dos_spin.total[0].value.magnitude[mapped_limits[0]:mapped_limits[1]] dos_integrated += np.trapz(x=sel_energies, y=dos_values) except IndexError: continue diff --git a/nomad/normalizing/method.py b/nomad/normalizing/method.py index c3a85dd1c30df924679e7297198e0c05c740fd06..85ecc7326e8dcadd1fad0d742cfae540e94c280b 100644 --- a/nomad/normalizing/method.py +++ b/nomad/normalizing/method.py @@ -135,8 +135,8 @@ class MethodNormalizer(): # workflow_name if self.entry_archive.workflow2: method.workflow_name = self.entry_archive.workflow2.m_def.name - # if the entry is a GW or ParticleHoleExcitations workflow, keep method_name as DFT+XS - if method.workflow_name in ['GW', 'ParticleHoleExcitations']: + # if the entry is a GW or XS workflow, keep method_name as DFT+XS + if method.workflow_name in ['GW', 'XS']: try: gs_method = self.entry_archive.workflow2.tasks[0].task.tasks[-1].inputs[1].section # Ground-state method repr_method = gs_method @@ -153,6 +153,14 @@ class MethodNormalizer(): except Exception: self.logger.warning('Error finding the DFT and ExcitedState (GW, BSE) method sections from workflow refs.') return method + elif method.workflow_name == 'DMFT': + repr_method = self.entry_archive.workflow2.method.dmft_method_ref # DMFT method + repr_method = repr_method.m_parent + method_name = 'Projection+DMFT' + elif method.workflow_name == 'MaxEnt': + repr_method = self.entry_archive.workflow2.method.dmft_method_ref # DMFT method + repr_method = repr_method.m_parent + method_name = 'DMFT+MaxEnt' # if only one method is specified, use it directly elif n_methods == 1: repr_method = methods[0] @@ -234,7 +242,7 @@ class MethodNormalizer(): elif self.method_name in ['Projection']: # TODO extend for 'DFT+Projection' simulation = ProjectionMethod( self.logger, repr_method=self.repr_method, method=method, method_name=self.method_name).simulation() - elif self.method_name in ['DMFT']: # TODO extend for 'DFT+DMFT', 'DFT+Projection+DMFT' + elif self.method_name in ['DMFT', 'Projection+DMFT', 'DMFT+MaxEnt']: # TODO extend for 'DFT+DMFT', 'DFT+Projection+DMFT' simulation = DMFTMethod( self.logger, repr_method=self.repr_method, method=method, method_name=self.method_name).simulation() else: @@ -242,12 +250,12 @@ class MethodNormalizer(): # Fill meshes if self.run.m_xpath('method[-1].frequency_mesh'): - freq_mesh = self.run.method[-1].frequency_mesh - freq_mesh.dimensionality = 1 if freq_mesh.dimensionality is None else freq_mesh.dimensionality + for freq_mesh in self.run.method[-1].frequency_mesh: + freq_mesh.dimensionality = 1 if freq_mesh.dimensionality is None else freq_mesh.dimensionality if self.run.m_xpath('method[-1].time_mesh'): - time_mesh = self.run.method[-1].time_mesh - time_mesh.dimensionality = 1 if time_mesh.dimensionality is None else time_mesh.dimensionality + for time_mesh in self.run.method[-1].time_mesh: + time_mesh.dimensionality = 1 if time_mesh.dimensionality is None else time_mesh.dimensionality if self.run.m_xpath('method[-1].k_mesh'): k_mesh = self.run.method[-1].k_mesh @@ -785,16 +793,18 @@ class DMFTMethod(ElectronicMethod): self._method.method_name = 'DMFT' dmft = DMFT() dmft.impurity_solver_type = self._repr_method.dmft.impurity_solver - dmft.total_filling = 0.5 * np.sum(self._repr_method.dmft.n_correlated_electrons) / np.sum(self._repr_method.dmft.n_correlated_orbitals) dmft.inverse_temperature = self._repr_method.dmft.inverse_temperature dmft.magnetic_state = self._repr_method.dmft.magnetic_state - # TODO update U to be U/W when linking between DFT>Projection>DMFT (@ should - # be extracted from the bands obtained by Projection). - model_hamiltonian = self._repr_method.starting_method_ref.lattice_model_hamiltonian - if model_hamiltonian is not None: - dmft.u = model_hamiltonian[0].hubbard_kanamori_model[0].u # taking U,JH values from the first atom - if dmft.u.magnitude != 0.0: - dmft.hunds_hubbard_ratio = model_hamiltonian[0].hubbard_kanamori_model[0].jh.magnitude / dmft.u.magnitude + # taking U,JH values from the first atom + if self._repr_method.m_xpath('starting_method_ref.lattice_model_hamiltonian'): + hubbard_parameters = self._repr_method.starting_method_ref.lattice_model_hamiltonian[0].hubbard_kanamori_model[0] + elif self._repr_method.m_xpath('starting_method_ref.atom_parameters'): + hubbard_parameters = self._repr_method.starting_method_ref.atom_parameters[0].hubbard_kanamori_model + if hubbard_parameters is not None: + dmft.u = hubbard_parameters.u + dmft.jh = hubbard_parameters.jh + if self._method_name == 'DMFT+MaxEnt': + dmft.analytical_continuation = 'MaxEnt' simulation.dmft = dmft return simulation diff --git a/nomad/normalizing/mof_deconstructor.py b/nomad/normalizing/mof_deconstructor.py index 8d0cefa6e0e4977e78acbed90285d90ab0350a6b..186c0b6361bda4b0bd7ef58bb9d15f20463f36bf 100644 --- a/nomad/normalizing/mof_deconstructor.py +++ b/nomad/normalizing/mof_deconstructor.py @@ -231,6 +231,13 @@ def dfsutil_graph_method(graph, temp, node, visited): return temp +def longest_list(lst): + ''' + return longest list in list of list + ''' + return max(lst, key=len) + + def remove_unbound_guest(ase_atom): ''' A simple script to remove guest from a metal organic framework. @@ -264,7 +271,6 @@ def remove_unbound_guest(ase_atom): pymat_graph = connected_components(coordination_graph) if len(pymat_graph) == 1: polymeric_indices.append(i) - if len(polymeric_indices) > 0: Graphs = [StructureGraph.with_local_env_strategy(AseAtomsAdaptor.get_structure( ase_atom[fragments[i]]), JmolNN()) for i in polymeric_indices] @@ -278,9 +284,12 @@ def remove_unbound_guest(ase_atom): mof_indices = [] for frag_indices in temp_indices: mof_indices.extend(fragments[frag_indices]) - return mof_indices + if len(mof_indices) == 0: + return longest_list(fragments) + else: + return mof_indices else: - return sum(sum(fragments, [])) + return sum(fragments, []) def connected_components(graph): @@ -528,6 +537,68 @@ def find_carbonyl_sulphate(ase_atom): return sulphate +def find_sulfides(ase_atom): + ''' + A simple aglorimth to search for sulfides. + S + | + -C + | + S + + Parameters: + ----------- + ase_atom: ASE atom + + Returns + ------- + dictionary of key = carbon index and values = sulphur index + ''' + graph, _ = compute_ase_neighbour(ase_atom) + sulfides = {} + for atoms in ase_atom: + if atoms.symbol == 'C': + index = atoms.index + sulphure_atoms = [i for i in graph[index] + if ase_atom[i].symbol == 'S'] + if len(sulphure_atoms) == 2: + sulphure_to_metal = sum( + [[j for j in graph[i] if ase_atom[j].symbol in transition_metals()] for i in sulphure_atoms], []) + if len(sulphure_to_metal) > 0: + sulfides[index] = sulphure_atoms + return sulfides + + +def find_phosphate(ase_atom): + ''' + A simple algorithm to search for Carbonyl sulphate found in the system. + O + | + -P-o + | + O + Parameters: + ----------- + ase_atom: ASE atom + + Returns + ------- + dictionary of key = carbon index and values = oxygen index + ''' + graph, _ = compute_ase_neighbour(ase_atom) + phosphate = {} + for atoms in ase_atom: + if atoms.symbol == 'P': + index = atoms.index + oxygen = [i for i in graph[index] if ase_atom[i].symbol == 'O'] + if len(oxygen) >= 1: + oxy_metal = sum( + [[j for j in graph[i] if ase_atom[j].symbol in transition_metals()] for i in oxygen], []) + if len(oxy_metal) > 0: + phosphate[index] = oxygen + return phosphate + + def secondary_building_units(ase_atom): """ 1) Search for all carboxylate that are connected to a metal. @@ -553,8 +624,13 @@ def secondary_building_units(ase_atom): bonds_to_break = [] carboxylates = find_carboxylates(ase_atom) all_sulphates = find_carbonyl_sulphate(ase_atom) + all_sulfides = find_sulfides(ase_atom) + all_phosphates = find_phosphate(ase_atom) + seen_phosphorous = [] + seen_carbon = [] for atoms in graph: if atoms in list(carboxylates.keys()): + seen_carbon.append(atoms) connected = graph[atoms] all_carbon_indices = [ i for i in connected if ase_atom[i].symbol == 'C'] @@ -570,15 +646,34 @@ def secondary_building_units(ase_atom): bonds_to_break.append([atoms] + S_indx) atom_pairs_at_breaking_point[atoms] = S_indx[0] - if ase_atom[atoms].symbol == 'C': + if atoms in list(all_sulfides.keys()): + seen_carbon.append(atoms) connected = graph[atoms] - oxygens = [i for i in connected if ase_atom[i].symbol == 'O'] - if len(oxygens) == 1: - oxy_metal = [ - i for i in oxygens if ase_atom[i].symbol in transition_metals()] - if len(oxy_metal) == 1: - atom_pairs_at_breaking_point[oxygens[0]] = oxy_metal[0] - bonds_to_break.append([oxygens] + oxy_metal) + all_carbon_indices = [ + i for i in connected if ase_atom[i].symbol == 'C'] + all_nitrogens = [i for i in connected if ase_atom[i].symbol == 'N'] + # S_indx = [i for i in connected if ase_atom[i].symbol == 'S'] + if len(all_carbon_indices) == 1: + bonds_to_break.append([atoms] + all_carbon_indices) + atom_pairs_at_breaking_point[atoms] = all_carbon_indices[0] + if len(all_nitrogens) == 1: + bonds_to_break.append([atoms] + all_nitrogens) + atom_pairs_at_breaking_point[atoms] = all_nitrogens[0] + # if len(S_indx) == 1: + # bonds_to_break.append([atoms] + S_indx) + # atom_pairs_at_breaking_point[atoms] = S_indx[0] + if ase_atom[atoms].symbol == 'C': + if atoms not in seen_carbon: + connected = graph[atoms] + oxygens = [i for i in connected if ase_atom[i].symbol == 'O'] + if len(oxygens) == 1: + oxy_metal = [ + i for i in oxygens if ase_atom[i].symbol in transition_metals()] + oxy_metal = [ + i for i in oxy_metal if i not in porphyrin_checker] + if len(oxy_metal) == 1: + atom_pairs_at_breaking_point[oxygens[0]] = oxy_metal[0] + bonds_to_break.append([oxygens] + oxy_metal) if atoms in list(all_sulphates.keys()): connected = graph[atoms] @@ -592,6 +687,7 @@ def secondary_building_units(ase_atom): for oxy in oxygen: metal = [i for i in graph[oxy] if ase_atom[i].symbol in transition_metals()] + metal = [i for i in metal if i not in porphyrin_checker] if len(metal) > 0: for met in metal: atom_pairs_at_breaking_point[oxy] = met @@ -599,11 +695,13 @@ def secondary_building_units(ase_atom): if ase_atom[atoms].symbol == 'O': seen = sum(list(carboxylates.values()) - + list(all_sulphates.values()), []) + + list(all_sulphates.values()) + + list(all_phosphates.values()), []) if atoms not in seen: connected = graph[atoms] metal = [ i for i in connected if ase_atom[i].symbol in transition_metals()] + metal = [i for i in metal if i not in porphyrin_checker] Nitrogen = [i for i in connected if ase_atom[i].symbol == 'N'] carbon = [i for i in connected if ase_atom[i].symbol == 'C' and i not in list(carboxylates.keys())] @@ -638,13 +736,32 @@ def secondary_building_units(ase_atom): bonds_to_break.append([atoms] + metal) if ase_atom[atoms].symbol == 'S': + seen = sum(list(all_sulfides.values()), []) + if atoms not in seen: + connected = graph[atoms] + metal = [ + i for i in connected if ase_atom[i].symbol in transition_metals()] + if len(metal) > 0: + for met in metal: + atom_pairs_at_breaking_point[atoms] = met + bonds_to_break.append([atoms, met]) + + if atoms in list(all_phosphates.keys()): + seen_phosphorous.append(atoms) connected = graph[atoms] - metal = [ - i for i in connected if ase_atom[i].symbol in transition_metals()] - if len(metal) > 0: - for met in metal: - atom_pairs_at_breaking_point[atoms] = met - bonds_to_break.append([atoms, met]) + all_carbon_indices = [ + i for i in connected if ase_atom[i].symbol == 'C'] + all_nitrogens = [i for i in connected if ase_atom[i].symbol == 'N'] + S_indx = [i for i in connected if ase_atom[i].symbol == 'S'] + if len(all_carbon_indices) == 1: + bonds_to_break.append([atoms] + all_carbon_indices) + atom_pairs_at_breaking_point[atoms] = all_carbon_indices[0] + if len(all_nitrogens) == 1: + bonds_to_break.append([atoms] + all_nitrogens) + atom_pairs_at_breaking_point[atoms] = all_nitrogens[0] + if len(S_indx) == 1: + bonds_to_break.append([atoms] + S_indx) + atom_pairs_at_breaking_point[atoms] = S_indx[0] if ase_atom[atoms].symbol == 'P': ''' @@ -653,23 +770,26 @@ def secondary_building_units(ase_atom): 2) Look for all it's neigbours 3) Look for neigbours that are not connected to metal or hydrogen. ''' - connected = graph[atoms] - # not_connected_to_metal_or_hygrogen = [[i for i in graph[j] if ase_atom[i].symbol not in transition_metals() or ase_atom[i].symbol != 'H'] for j in connected] + # seen = list(all_phosphates.keys()) + if atoms not in seen_phosphorous: + connected = graph[atoms] + # not_connected_to_metal_or_hygrogen = [[i for i in graph[j] if ase_atom[i].symbol not in transition_metals() or ase_atom[i].symbol != 'H'] for j in connected] - metal_oxy = [[i for i in graph[j] if ase_atom[i].symbol in transition_metals()] - for j in connected] + metal_oxy = [[i for i in graph[j] if ase_atom[i].symbol in transition_metals()] + for j in connected] - metal = sum(metal_oxy, []) - closest_atoms = sum( - [[i for i in graph[j] if i != atoms and not ase_atom[i].symbol in transition_metals()] for j in connected], []) + metal = sum(metal_oxy, []) + metal = [i for i in metal if i not in porphyrin_checker] + closest_atoms = sum( + [[i for i in graph[j] if i != atoms and ase_atom[i].symbol not in transition_metals()] for j in connected], []) - if len(metal) > 0: - all_carbon_indices = sum([[i for i in graph[j] if i in connected] - for j in closest_atoms], []) - for frag in all_carbon_indices: - atom_pairs_at_breaking_point[atoms] = frag - atom_pairs_at_breaking_point[frag] = atoms - bonds_to_break.append([atoms, frag]) + if len(metal) > 0: + all_carbon_indices = sum([[i for i in graph[j] if i in connected] + for j in closest_atoms], []) + for frag in all_carbon_indices: + atom_pairs_at_breaking_point[atoms] = frag + atom_pairs_at_breaking_point[frag] = atoms + bonds_to_break.append([atoms, frag]) if ase_atom[atoms].symbol == 'B': ''' @@ -681,6 +801,7 @@ def secondary_building_units(ase_atom): for j in connected] metal_connect = sum(metal_oxy, []) + metal = [i for i in metal if i not in porphyrin_checker] if len(metal_connect) > 0: for frag in metal_connect: atom_pairs_at_breaking_point[frag[0]] = frag[1] @@ -737,15 +858,18 @@ def ligands_and_metal_clusters(ase_atom): bonds_to_break = [] carboxylates = find_carboxylates(ase_atom) all_sulphates = find_carbonyl_sulphate(ase_atom) - Seen_oxygen = [] + all_sulfides = find_sulfides(ase_atom) + all_phosphates = find_phosphate(ase_atom) + seen_sulphure = sum(list(all_sulfides.values()), []) + for atoms in graph: if atoms in list(carboxylates.keys()): oxygen = carboxylates[atoms] for oxy in oxygen: metal = [i for i in graph[oxy] if ase_atom[i].symbol in transition_metals()] + metal = [i for i in metal if i not in porphyrin_checker] if len(metal) > 0: - Seen_oxygen.append(oxy) for met in metal: bonds_to_break.append([atoms] + [met]) atom_pairs_at_breaking_point[atoms] = met @@ -757,36 +881,52 @@ def ligands_and_metal_clusters(ase_atom): for oxy in oxygen: metal = [i for i in graph[oxy] if ase_atom[i].symbol in transition_metals()] + metal = [i for i in metal if i not in porphyrin_checker] if len(metal) > 0: for met in metal: bonds_to_break.append([oxy] + [met]) atom_pairs_at_breaking_point[oxy] = met - if ase_atom[atoms].symbol == 'N': + if atoms in list(all_sulfides.keys()): + sulphure = all_sulfides[atoms] connected = graph[atoms] - metal = [ - i for i in connected if ase_atom[i].symbol in transition_metals()] - if len(metal) > 0 and atoms not in porphyrin_checker: - for met in metal: - bonds_to_break.append([atoms, met]) - atom_pairs_at_breaking_point[atoms] = met + for sulf in sulphure: + metal = [i for i in graph[sulf] + if ase_atom[i].symbol in transition_metals()] + metal = [i for i in metal if i not in porphyrin_checker] + if len(metal) > 0: + for met in metal: + bonds_to_break.append([sulf, met]) + atom_pairs_at_breaking_point[sulf] = met + + if ase_atom[atoms].symbol == 'N': + if atoms not in porphyrin_checker: + connected = graph[atoms] + metal = [ + i for i in connected if ase_atom[i].symbol in transition_metals()] + if len(metal) > 0 and atoms not in porphyrin_checker: + for met in metal: + bonds_to_break.append([atoms, met]) + atom_pairs_at_breaking_point[atoms] = met # atom_pairs_at_breaking_point [metal[0]] = atoms if ase_atom[atoms].symbol == 'S': - connected = graph[atoms] - metal = [ - i for i in connected if ase_atom[i].symbol in transition_metals()] - if len(metal) > 0: + if atoms not in seen_sulphure: + connected = graph[atoms] + metal = [ + i for i in connected if ase_atom[i].symbol in transition_metals()] + metal = [i for i in metal if i not in porphyrin_checker] if len(metal) > 0: for met in metal: bonds_to_break.append([atoms] + [met]) atom_pairs_at_breaking_point[atoms] = met if ase_atom[atoms].symbol == 'O': - # if not atoms in Seen_oxygen: + connected = graph[atoms] metal = [ i for i in connected if ase_atom[i].symbol in transition_metals()] + metal = [i for i in metal if i not in porphyrin_checker] Nitrogen = [i for i in connected if ase_atom[i].symbol == 'N'] carbon = [i for i in connected if ase_atom[i].symbol == 'C'] if len(metal) > 0 and len(carbon) == 1: @@ -811,18 +951,20 @@ def ligands_and_metal_clusters(ase_atom): ''' Find the carbon closest to P, which is not bonded to a metal and cut ''' - connected = [i for i in graph[atoms] - if ase_atom[i].symbol not in transition_metals()] - metal_oxy = [[i for i in graph[j] if ase_atom[i].symbol in transition_metals()] - for j in connected] - - metal = sum(metal_oxy, []) - closest_atoms = sum([[[i, j] for i in graph[j] if i != atoms and ase_atom[i].symbol in - transition_metals()]for j in connected], []) - - for frag in closest_atoms: - bonds_to_break.append(frag) - atom_pairs_at_breaking_point[frag[0]] = frag[1] + if atoms not in list(all_phosphates.keys()): + connected = [i for i in graph[atoms] + if ase_atom[i].symbol not in transition_metals()] + metal_oxy = [[i for i in graph[j] if ase_atom[i].symbol in transition_metals()] + for j in connected] + + metal = sum(metal_oxy, []) + metal = [i for i in metal if i not in porphyrin_checker] + closest_atoms = sum([[[i, j] for i in graph[j] if i != atoms and ase_atom[i].symbol in + transition_metals()]for j in connected], []) + + for frag in closest_atoms: + bonds_to_break.append(frag) + atom_pairs_at_breaking_point[frag[0]] = frag[1] for bonds in bonds_to_break: bond_matrix[bonds[0], bonds[1]] = 0 diff --git a/nomad/normalizing/porosity.py b/nomad/normalizing/porosity.py index e353ba96bec66bcf620ae94efb13e0a4c8adadc0..724c286ce9ef99237d9685702223fc9acc72bd05 100644 --- a/nomad/normalizing/porosity.py +++ b/nomad/normalizing/porosity.py @@ -343,31 +343,34 @@ def get_contents(filename): return contents -def zeo_calculation(ase_atom, probe_radius=1.8, number_of_steps=5000): +def zeo_calculation(ase_atom, probe_radius=1.8, number_of_steps=5000, high_accuracy=True): ''' Main script to compute geometric structure of porous systems. - The focus here is on MOF, but the script can run on any periodic - system. - The script computes the accesible surface area, accessible volume - and the pore geometry.There are many more outputs which can be extracted - from ,vol_str and sa_str. - More there are also other computation that can be done. Check out the - test directory in dependencies/pyzeo/test. Else contact bafgreat@gmail.com + The focus here is on MOF, but the script can run on any porous periodic + system. The script computes the accesible surface area, accessible volume + and the pore geometry. There are many more outputs which can be extracted + from ,vol_str and sa_str. Moreover there are also other computation that can be done. + Check out the test directory in dependencies/pyzeo/test. Else contact bafgreat@gmail.com if you need more output and can't figure it out. Main parameter: - ase atom object + ase_atom: ase atom object + probe_radius: The radius of the probe. Here 1.86 is used as default + number_of_steps: Number of GCMC simulation cycles + high_accuracy: key to determine where to perform high accuracy computation return python dictionary containing - 1) Accessible volume fraction + 1) Accessible volume void fraction 2) Accessible volume (A^3) 3) Accessible surface area (A^2) - 4) List of the surface area along identified pockets (A^2) - 5) Largest cavity diameter:The largest sphere that can - be inserted system without overlapping with any of the atoms - 6) Free sphere - 7) Pore limiting diameter: The largest sphere that can freely - diffuse through the porous network without overlapping with - any of the atoms + 4) Number_of_channels: Number of channels present in the porous system, which correspond to the number of + pores within the system + 5) LCD_A: The largest cavity diameter is the largest sphere that can be inserted in a porous + system without overlapping with any of the atoms in the system. + 6) lfpd_A:The largest included sphere along free sphere path is + largest sphere that can be inserted in the pore + 7) PLD_A:The pore limiting diameter is the largest sphere that can freely + diffuse through the porous network without overlapping with any + of the atoms in the system ''' tmp_cssr = 'tmp.cssr' tmp_out = 'tmp.res' @@ -376,8 +379,11 @@ def zeo_calculation(ase_atom, probe_radius=1.8, number_of_steps=5000): parameters = {} atmnet = AtomNetwork.read_from_CSSR(tmp_cssr) vol_str = volume( - atmnet, probe_radius, probe_radius, number_of_steps, high_accuracy=False) - vol_str = vol_str.decode("utf-8").split() + atmnet, probe_radius, probe_radius, number_of_steps, high_accuracy=high_accuracy) + if high_accuracy is True: + vol_str = vol_str[0].decode("utf-8").split() + else: + vol_str = vol_str.decode("utf-8").split() parameters['AV_Volume_fraction'] = np.float64(vol_str[10]) parameters['AV'] = np.float64(vol_str[8]) sa_str = surface_area(atmnet, probe_radius, probe_radius, diff --git a/nomad/normalizing/results.py b/nomad/normalizing/results.py index a5f1664705ca5a1e9140ac0be762f14755fd8e8e..4c51c1afd3c8b5f386cd56ef644aa452dd03a5e9 100644 --- a/nomad/normalizing/results.py +++ b/nomad/normalizing/results.py @@ -18,14 +18,14 @@ import re import numpy as np -from typing import List, Union, Any, Optional, Iterable +from typing import List, Union, Any, Optional, Dict import ase.data from matid import SymmetryAnalyzer # pylint: disable=import-error import matid.geometry # pylint: disable=import-error from nomad import config from nomad import atomutils -from nomad.utils import traverse_reversed +from nomad.utils import traverse_reversed, extract_section from nomad.atomutils import Formula from nomad.normalizing.normalizer import Normalizer from nomad.normalizing.method import MethodNormalizer @@ -64,10 +64,16 @@ from nomad.datamodel.results import ( BandStructureElectronic, BandStructurePhonon, DOSElectronic, + DOSNew, + DOSElectronicNew, DOSPhonon, GreensFunctionsElectronic, EnergyFreeHelmholtz, HeatCapacityConstantVolume, + SpectroscopicProperties, + EELSMethodology, + SpectraProvenance, + Spectra, ) re_label = re.compile("^([a-zA-Z][a-zA-Z]?)[^a-zA-Z]*") @@ -156,6 +162,30 @@ class ResultsNormalizer(Normalizer): if len(measurement.sample) > 0: self.normalize_sample(measurement.sample[0]) + # Results properties for EELSDB + if measurement.m_xpath('eels.spectrum'): + properties = results.properties + spectroscopic = properties.m_create(SpectroscopicProperties) + + spectra = Spectra( + type='EELS', + label='experiment', + n_energies=measurement.eels.spectrum.n_values, + energies=measurement.eels.spectrum.energy, + intensities=measurement.eels.spectrum.count, + intensities_units='counts', + ) + if measurement.instrument: + provenance = spectra.m_create(SpectraProvenance) + provenance.label = 'EELSDB' + methodology = EELSMethodology( + resolution=measurement.instrument[0].eels.resolution, + detector_type=measurement.instrument[0].eels.detector_type, + min_energy=measurement.instrument[0].eels.min_energy, + max_energy=measurement.instrument[0].eels.max_energy) + provenance.m_add_sub_section(SpectraProvenance.eels, methodology) + spectroscopic.m_add_sub_section(SpectroscopicProperties.spectra, spectra) + def normalize_run(self, logger=None) -> None: # Fetch different information resources from which data is gathered repr_system = None @@ -218,26 +248,26 @@ class ResultsNormalizer(Normalizer): else: self.entry_archive.metadata.entry_name = f'{type_tag}' - def resolve_band_gap(self, path: list[str]) -> Union[List[BandGap], None]: + def resolve_band_gap(self, path: list[str]) -> List[BandGap]: """Extract all band gaps from the given `path` and return them in a list along with their provenance. """ band_gaps = traverse_reversed(self.entry_archive, path) if not band_gaps: return None - bg_root: List[BandGap] = [] + bg_root: list[BandGap] = [] for bg in band_gaps: - bg_new = BandGap() - bg_new.index = bg.index - bg_new.value = bg.value - bg_new.type = bg.type - bg_new.energy_highest_occupied = bg.energy_highest_occupied - bg_new.energy_lowest_unoccupied = bg.energy_lowest_unoccupied - bg_new.provenance = bg.provenance - bg_root.insert(0, bg_new) + bg_results = BandGap() + bg_results.index = bg.index + bg_results.value = bg.value + bg_results.type = bg.type + bg_results.energy_highest_occupied = bg.energy_highest_occupied + bg_results.energy_lowest_unoccupied = bg.energy_lowest_unoccupied + bg_results.provenance = bg.provenance + bg_root.insert(0, bg_results) return bg_root - def resolve_band_structure(self, path: list[str]) -> Union[List[BandStructureElectronic], None]: + def resolve_band_structure(self, path: list[str]) -> List[BandStructureElectronic]: """Returns a new section containing an electronic band structure. In the case of multiple valid band structures, only the latest one is considered. @@ -262,103 +292,253 @@ class ResultsNormalizer(Normalizer): break if valid: # Fill band structure data to the newer, improved data layout - bs_new = BandStructureElectronic() - bs_new.reciprocal_cell = bs - bs_new.segment = bs.segment - bs_new.spin_polarized = bs_new.segment[0].energies.shape[0] > 1 - bs_new.energy_fermi = bs.energy_fermi + bs_results = BandStructureElectronic() + bs_results.reciprocal_cell = bs + bs_results.segment = bs.segment + bs_results.spin_polarized = bs_results.segment[0].energies.shape[0] > 1 + bs_results.energy_fermi = bs.energy_fermi for info in bs.band_gap: info_new = BandGapDeprecated().m_from_dict(info.m_to_dict()) - bs_new.m_add_sub_section(BandStructureElectronic.band_gap, info_new) - bs_root.insert(0, bs_new) + bs_results.m_add_sub_section(BandStructureElectronic.band_gap, info_new) + bs_root.insert(0, bs_results) return bs_root - def resolve_dos(self, path: list[str]) -> Union[List[DOSElectronic], None]: + def resolve_dos_deprecated(self, path: list[str]) -> List[DOSElectronic]: """Returns a reference to the section containing an electronic dos. In the case of multiple valid DOSes, only the latest one is reported. DOS is reported only under the following conditions: - There is a non-empty array of dos_values_normalized. - There is a non-empty array of dos_energies. + + NOTE: this function will be eventually deprecated. This is because DOSElectronic refers + to an old schema which will be deleted. The new function `resolve_dos` should be the + one which persists over time. """ - doss = traverse_reversed(self.entry_archive, path) - if not doss: - return None - dos_root: List[DOSElectronic] = [] - for dos in doss: - energies = dos.energies - values = np.array([d.value.magnitude for d in dos.total]) + dos_sections = extract_section(self.entry_archive, path, full_list=True) + # The old mapping does not work for the new spin-polarized schema + if not dos_sections or len(dos_sections) == 2: + return [] + dos = dos_sections[0] + energies = dos.energies + values = np.array([d.value.magnitude for d in dos.total]) + dos_results = None + if valid_array(energies) and valid_array(values): + dos_results = DOSElectronic() + dos_results.energies = dos + dos_results.total = dos.total + dos_results.energy_fermi = dos.energy_fermi + return [dos_results] if dos_results else [] + + def resolve_dos(self, path: list[str]) -> List[DOSElectronicNew]: + """Returns a section containing the references for an electronic DOS. This section + is then stored under `archive.results.properties.electronic.dos_electronic_new`. + + If the calculation is spin-polarized, inside this new section there is a list `data` of + length 2 and a boolean `spin_polarized` set to true. It also reference the species-, + atom-, and orbital-projected DOS, if these are present. + + This section is populated only when there are non-empty arrays for energies and DOS.total values. + + Args: + path (list[str]): the path to the dos_electronic section to be extracted from the + self.entry_archive. + + Returns: + List[DOSElectronicNew]: the mapped DOS. + """ + dos_sections = extract_section(self.entry_archive, path, full_list=True) + if not dos_sections: + return [] + dos_results = None # this is done to avoid problems of generating empty sections if no valid_arrays + for dos_section in dos_sections: + energies = dos_section.energies + values = np.array([d.value.magnitude for d in dos_section.total]) if valid_array(energies) and valid_array(values): - dos_new = DOSElectronic() - dos_new.energies = dos - dos_new.total = dos.total - n_channels = values.shape[0] - dos_new.spin_polarized = n_channels > 1 - dos_new.energy_fermi = dos.energy_fermi - for info in dos.band_gap: + dos_results = DOSElectronicNew() if not dos_results else dos_results + dos_data = dos_results.m_create(DOSNew) + dos_data.energies = dos_section + dos_data.total = dos_section.total[-1] + dos_data.energy_fermi = dos_section.energy_fermi + dos_data.energy_ref = dos_section.energy_ref + # Storing deprecated BandGap info + for info in dos_section.band_gap: info_new = BandGapDeprecated().m_from_dict(info.m_to_dict()) - dos_new.m_add_sub_section(DOSElectronic.band_gap, info_new) - dos_root.insert(0, dos_new) - return dos_root - - def resolve_greens_functions(self, path: list[str]) -> Union[List[GreensFunctionsElectronic], None]: - """Returns a reference to the section containing the electronic Green's functions. - In the case of multiple valid Green's functions sections, only the latest one is reported. - - Green's functions are reported only under the following conditions: - - There is a non-empty array of greens_function_tau or self_energy_iw or occupancies. - - There is a non-empty array of tau or matsubara_freq. + dos_data.m_add_sub_section(DOSNew.band_gap, info_new) + # Spin-polarized + dos_results.spin_polarized = len(dos_sections) == 2 + dos_data.spin_channel = dos_section.spin_channel + # Projected DOS + has_projected = False + _projected_sections = {key: value for key, value in dos_section.m_def.all_sub_sections.items() if 'projected' in key} + _projected_data = {key: value for key, value in dos_data.m_def.all_quantities.items() if 'projected' in key} + for key, value in _projected_sections.items(): + dos_projected = dos_section.m_get(value) + if dos_projected is not None and len(dos_projected) > 0: + dos_data.m_set(_projected_data.get(key), dos_projected) + has_projected = True + dos_results.has_projected = has_projected + return [dos_results] if dos_results else [] + + def resolve_greens_functions(self, path: list[str]) -> List[GreensFunctionsElectronic]: + """Returns a section containing the references of the electronic Greens functions. + This section is then stored under `archive.results.properties.electronic`. + + This section is only populated if there are non-zero values of the tau, matsubara_freq, + or frequencies, and its respective greens_function quantities. + + Args: + path (list[str]): the path to the dos_electronic section to be extracted from the + self.entry_archive. + + Returns: + List[GreensFunctionsElectronic]: the mapped Greens functions. """ - greens_functions = traverse_reversed(self.entry_archive, path) + greens_functions = extract_section(self.entry_archive, path, full_list=True) if not greens_functions: - return None + return [] gfs_root: List[GreensFunctionsElectronic] = [] for gfs in greens_functions: + gfs_results = GreensFunctionsElectronic() + # tau-axes quantities tau = gfs.tau - iw = gfs.matsubara_freq - values_gtau = np.array([np.absolute(gtau) for gtau in gfs.greens_function_tau.real]) - values_siw = np.array([siw for siw in gfs.self_energy_iw.imag]) - if (valid_array(tau) and valid_array(values_gtau)) or (valid_array(iw) and valid_array(values_siw)): - gfs_new = GreensFunctionsElectronic() - gfs_new.chemical_potential = gfs.chemical_potential - if valid_array(tau) and valid_array(values_gtau): - gfs_new.tau = tau - gfs_new.real_greens_function_tau = values_gtau - if valid_array(iw) and valid_array(values_siw): - gfs_new.matsubara_freq = iw - gfs_new.imag_self_energy_iw = values_siw - if valid_array(gfs.orbital_occupations): - gfs_new.orbital_occupations = gfs.orbital_occupations - if valid_array(gfs.quasiparticle_weights): - gfs_new.quasiparticle_weights = gfs.quasiparticle_weights - - gfs_root.insert(0, gfs_new) + if valid_array(tau): + gfs_results.tau = gfs + gfs_results.greens_function_tau = gfs if valid_array(gfs.greens_function_tau) else None + # matsubara_freq-axes quantities + matsubara_freq = gfs.matsubara_freq + if valid_array(matsubara_freq): + gfs_results.matsubara_freq = gfs + gfs_results.greens_function_iw = gfs if valid_array(gfs.greens_function_iw) else None + gfs_results.self_energy_iw = gfs if valid_array(gfs.self_energy_iw) else None + # frequencies-axes quantities + frequencies = gfs.frequencies + if valid_array(frequencies): + gfs_results.frequencies = gfs + gfs_results.greens_function_freq = gfs if valid_array(gfs.greens_function_freq) else None + gfs_results.self_energy_freq = gfs if valid_array(gfs.self_energy_freq) else None + gfs_results.hybridization_function_freq = gfs if valid_array(gfs.hybridization_function_freq) else None + # Other GFs quantities + gfs_results.orbital_occupations = gfs if valid_array(gfs.orbital_occupations) else None + gfs_results.quasiparticle_weights = gfs if valid_array(gfs.quasiparticle_weights) else None + if gfs.chemical_potential: + gfs_results.chemical_potential = gfs + gfs_results.type = gfs.type if gfs.type else None + gfs_root.append(gfs_results) return gfs_root - def gw_workflow_properties(self): - bg_electronic = self.electronic_properties[0] - bs_electronic = self.electronic_properties[1] - dos_electronic = self.electronic_properties[2] - for method in ['dft', 'gw']: - name = method.upper() - bgs = self.resolve_band_gap(["workflow2", "results", f"band_gap_{method}"]) - bss = self.resolve_band_structure(["workflow2", "results", f"band_structure_{method}"]) - doss = self.resolve_dos(["workflow2", "results", f"dos_{method}"]) - for bg in bgs: - bg.label = name - bg_electronic.append(bg) - for bs in bss: - bs.label = name - for band_gap in bs.band_gap: - band_gap.label = name - bs_electronic.append(bs) - for d in doss: - d.label = name - for band_gap in d.band_gap: - band_gap.label = name - dos_electronic.append(d) - return [bg_electronic, bs_electronic, dos_electronic, []] + def resolve_spectra(self, path: list[str]) -> Union[List[Spectra], None]: + """Returns a section containing the references for a Spectra. This section is then + stored under `archive.results.properties.spectroscopic`. + + This section is populated only when there are non-empty arrays for energies and intensities. + + Args: + path (list[str]): the path to the spectra section to be extracted from the + self.entry_archive. + + Returns: + List[Spectra]: the mapped Spectra. + """ + spectra = traverse_reversed(self.entry_archive, path) + if not spectra: + return None + spectra_root: List[Spectra] = [] + for spectrum in spectra: + n_energies = spectrum.n_energies + if n_energies and n_energies > 0: + spectra_results = Spectra( + type=spectrum.type, + label='computation', + n_energies=n_energies + ) + provenance = spectra_results.m_create(SpectraProvenance) + provenance.electronic_structure = spectrum.provenance + energies = spectrum.excitation_energies + intensities = spectrum.intensities + if valid_array(energies) and valid_array(intensities): + spectra_results.energies = energies + spectra_results.intensities = intensities + if spectrum.intensities_units: + spectra_results.intensities_units = spectrum.intensities_units + spectra_root.insert(0, spectra_results) + return spectra_root + + def _resolve_workflow_gs_properties(self, methods: list[str], properties: list[str]) -> None: + """Resolves the ground state (gs) properties passed as a list `properties` (band_gap, + band_structure, dos) for a given list of `methods` (dft, gw, projection, maxent). + + Args: + methods (list[str]): the list of methods from which the properties are resolved. + properties (list[str]): the list of properties to be resolved from `workflow2.results`. + """ + for method in methods: + name = 'Projection' if method == 'projection' else 'MaxEnt' if method == 'maxent' else method.upper() + for prop in properties: + property_list = self.electronic_properties.get(prop) + method_property_resolved = getattr(self, f'resolve_{prop}')(['workflow2', 'results', f'{prop}_{method}']) + for item in method_property_resolved: + item.label = name + property_list.append(item) + + def get_gw_workflow_properties(self) -> None: + """Gets the GW workflow (DFT+GW) properties and stores them in the self.electronic_properties + dictionary. + """ + properties = ['band_gap', 'band_structure', 'dos'] + methods = ['dft', 'gw'] + self._resolve_workflow_gs_properties(methods, properties) + + def get_dmft_workflow_properties(self) -> None: + """Gets the DMFT workflow (DFT+Projection+DMFT) properties and stores them in the + self.electronic_properties dictionary. + """ + properties = ['band_gap', 'band_structure', 'dos'] + methods = ['dft', 'projection'] + self._resolve_workflow_gs_properties(methods, properties) + # Resolving DMFT Greens functions + gfs_electronic: List[GreensFunctionsElectronic] = self.electronic_properties.get('greens_functions') # type: ignore + gfs_electronic_dmft = self.resolve_greens_functions(['workflow2', 'results', 'greens_functions_dmft']) + for item in gfs_electronic_dmft: + item.label = 'DMFT' + gfs_electronic.append(item) + + def get_maxent_workflow_properties(self) -> None: + """Gets the MaxEnt workflow (DMFT+MaxEnt) properties and stores them in the self.electronic_properties + dictionary. + """ + properties = ['band_gap', 'dos'] + methods = ['maxent'] + self._resolve_workflow_gs_properties(methods, properties) + # Resolving DMFT Greens functions + gfs_electronic: List[GreensFunctionsElectronic] = self.electronic_properties.get('greens_functions') # type: ignore + for method in ['dmft', 'maxent']: + name = 'MaxEnt' if method == 'maxent' else method.upper() + gfs = self.resolve_greens_functions(['workflow2', 'results', f'greens_functions_{method}']) + for item in gfs: + item.label = name + gfs_electronic.append(item) + + def get_xs_workflow_properties(self, spectra: List[Spectra]) -> List[Spectra]: + """Gets the XS workflow (DFT+GW+BSE) workflow properties and stores them in self.electronic_properties + and in spectra. Then it returns the new Spectra section with the resolved data + + Args: + spectra (Union[List[Spectra], None]): the input Spectra section resolved from + `archive.run`. + + Returns: + Union[List[Spectra], None]: the mapped Spectra from `workflow2.results`. + """ + properties = ['band_gap', 'band_structure', 'dos'] + methods = ['dft', 'gw'] + self._resolve_workflow_gs_properties(methods, properties) + spct_electronic = spectra + spectra = self.resolve_spectra(["workflow2", "results", "spectra", "spectrum_polarization"]) + if spectra: + spct_electronic = spectra + return spct_electronic def band_structure_phonon(self) -> Union[BandStructurePhonon, None]: """Returns a new section containing a phonon band structure. In @@ -694,30 +874,57 @@ class ResultsNormalizer(Normalizer): elif structural_type == "1D": conv_atoms, _ = self.structures_1d(original_atoms) - # Electronic properties - bg_electronic = self.resolve_band_gap(['run', 'calculation', 'band_gap']) - bs_electronic = self.resolve_band_structure(['run', 'calculation', 'band_structure_electronic']) - dos_electronic = self.resolve_dos(['run', 'calculation', 'dos_electronic']) - gfs_electronic = self.resolve_greens_functions(['run', 'calculation', 'greens_functions']) - self.electronic_properties = [bg_electronic, bs_electronic, dos_electronic, gfs_electronic] + # Electronic and Spectroscopic + # electronic properties list + ElectronicPropertyTypes = Dict[ + str, Union[ + List[BandGap], + List[BandStructureElectronic], + List[DOSElectronic], + List[DOSElectronicNew], + List[GreensFunctionsElectronic] + ] + ] + electronic_properties: ElectronicPropertyTypes = { + 'band_gap': self.resolve_band_gap(['run', 'calculation', 'band_gap']), + 'band_structure': self.resolve_band_structure(['run', 'calculation', 'band_structure_electronic']), + 'dos_deprecated': self.resolve_dos_deprecated(['run', 'calculation', 'dos_electronic']), + 'dos': self.resolve_dos(['run', 'calculation', 'dos_electronic']), + 'greens_functions': self.resolve_greens_functions(['run', 'calculation', 'greens_functions']) + } + self.electronic_properties = electronic_properties + # spectroscopic properties list + spectra = self.resolve_spectra(['run', 'calculation', 'spectra']) + # Resolving GW, XS workflow properties workflow = self.entry_archive.workflow2 if workflow: workflow_name = workflow.m_def.name if workflow_name == 'GW': - self.electronic_properties = self.gw_workflow_properties() + self.get_gw_workflow_properties() + elif workflow_name == 'DMFT': + self.get_dmft_workflow_properties() + elif workflow_name == 'MaxEnt': + self.get_maxent_workflow_properties() + elif workflow_name == 'PhotonPolarization': + spectra = self.resolve_spectra(['workflow2', 'results', 'spectrum_polarization']) + elif workflow_name == 'XS': + spectra = self.get_xs_workflow_properties(spectra) method_def = {value.sub_section.name: value for _, value in ElectronicProperties.m_def.all_sub_sections.items()} - if any(self.electronic_properties): + if any(len(value) > 0 for value in self.electronic_properties.values()): electronic = ElectronicProperties() - for electronic_property in self.electronic_properties: - if electronic_property: - if isinstance(electronic_property, Iterable): - for prop in electronic_property: - electronic.m_add_sub_section(method_def[prop.m_def.name], prop) - else: - continue + for electronic_property in self.electronic_properties.values(): + if len(electronic_property) > 0: + for prop in electronic_property: + electronic.m_add_sub_section(method_def[prop.m_def.name], prop) properties.electronic = electronic + # Spectroscopic + if spectra: + spectroscopic = SpectroscopicProperties() + spectroscopic.spectra = spectra + properties.spectroscopic = spectroscopic + # Vibrational bs_phonon = self.band_structure_phonon() dos_phonon = self.dos_phonon() diff --git a/nomad/normalizing/spectra.py b/nomad/normalizing/spectra.py new file mode 100644 index 0000000000000000000000000000000000000000..a4c889820a5c8da756ae83b62d655a17be18be4c --- /dev/null +++ b/nomad/normalizing/spectra.py @@ -0,0 +1,71 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +from nomad.datamodel.metainfo.simulation.calculation import ( + Spectra, ElectronicStructureProvenance +) +from nomad.normalizing.normalizer import Normalizer + + +class SpectraNormalizer(Normalizer): + """Normalizer for Spectra in run.calculation with the following responsibilities: + + - Sets provenance method section. + - Normalizes intensities to their maximum value. + """ + def normalize(self, logger=None) -> None: + # Setup logger + if logger is not None: + self.logger = logger.bind(normalizer=self.__class__.__name__) + + # SinglePoint + if self.entry_archive.m_xpath('run[-1].calculation[-1].spectra'): + calc_section = self.entry_archive.run[-1].calculation[-1] + for spectra in calc_section.spectra: + if self.is_valid_spectra(spectra): + # Find photon method provenance + if not calc_section.method_ref: + return + if calc_section.method_ref.photon and not spectra.provenance: + provenance = ElectronicStructureProvenance(methodology=calc_section.method_ref, label='photon') + spectra.m_add_sub_section(Spectra.provenance, provenance) + # Normalizing intensities to their maximum value. + # spectra.intensities = spectra.intensities / max(spectra.intensities) + # TODO set same excitations_energies reference for OCEAN (BSE), exciting (BSE), + # and XSPECTRA (Fermi rule) codes. Generalize for others + + def is_valid_spectra(self, spectra: Spectra) -> bool: + """Used to check that a spectra has all required information for normalization. + """ + if spectra.excitation_energies is not None and spectra.intensities is not None: + n_energies = len(spectra.excitation_energies) + n_intensities = len(spectra.intensities) + if n_energies > 0 and n_intensities > 0 and n_energies == n_intensities: + spectra.n_energies = n_energies + else: + self.logger.warning( + 'Empty arrays or size of arrays do not coincide: could not validate spectra.') + return False + if (spectra.intensities < 0.0).any(): + self.logger.warning('Invalid negative intensities found: could not validate spectra.') + return False + return True + else: + self.logger.warning( + 'Parsed spectra do not contain excitation_energies and intensitites to be normalized.') + return False diff --git a/nomad/parsing/chemotion/__init__.py b/nomad/parsing/chemotion/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..ada44668f29e0e672654a03e31cec711732c08d4 --- /dev/null +++ b/nomad/parsing/chemotion/__init__.py @@ -0,0 +1,19 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +from .chemotion import ChemotionParser diff --git a/nomad/parsing/chemotion/chemotion.py b/nomad/parsing/chemotion/chemotion.py new file mode 100644 index 0000000000000000000000000000000000000000..4250e17a3a1f1a9dc38029df36343276e910b325 --- /dev/null +++ b/nomad/parsing/chemotion/chemotion.py @@ -0,0 +1,431 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +import os +from typing import Union, Iterable +import json + +import numpy as np +from nomad.datamodel import EntryArchive, EntryData +from nomad.datamodel.data import ElnIntegrationCategory +from nomad.metainfo import Package, Quantity, JSON, MSection, Datetime, Section, SubSection +from nomad import utils +from nomad.parsing.parser import MatchingParser + +m_package = Package(name='chemotion') + + +class ChemotionGeneralMetainfo(MSection): + user_id = Quantity(type=str) + created_at = Quantity(type=Datetime) + updated_at = Quantity(type=Datetime) + deleted_at = Quantity(type=Datetime) + molecule_id = Quantity(type=str) + sample_id = Quantity(type=str) + collection_id = Quantity(type=str) + + +class ChemotionReactionSample(ChemotionGeneralMetainfo): + reaction_id = Quantity(type=str) + reference = Quantity(type=bool) + position = Quantity(type=int) + waste = Quantity(type=bool) + coefficient = Quantity(type=np.float16) + + +class ChemotionCollection(ChemotionGeneralMetainfo): + ancestry = Quantity(type=str) + label = Quantity(type=str) + shared_by_id = Quantity(type=str) + is_shared = Quantity(type=bool) + permission_level = Quantity(type=int) + sample_detail_level = Quantity(type=int) + reaction_detail_level = Quantity(type=int) + wellplate_detail_level = Quantity(type=int) + position = Quantity(type=int) + screen_detail_level = Quantity(type=int) + is_locked = Quantity(type=bool) + is_synchronized = Quantity(type=bool) + researchplan_detail_level = Quantity(type=int) + + +class ChemotionSample(ChemotionGeneralMetainfo): + name = Quantity(type=str) + target_amount_value = Quantity(type=np.float16) + target_amount_unit = Quantity(type=str) + description = Quantity(type=str) + molfile = Quantity(type=str) + purity = Quantity(type=str) + solvent = Quantity(type=str) + impurities = Quantity(type=str) + location = Quantity(type=str) + is_top_secret = Quantity(type=bool) + ancestry = Quantity(type=str) + external_label = Quantity(type=str) + created_by = Quantity(type=str) + short_label = Quantity(type=str) + real_amount_value = Quantity(type=str) + real_amount_unit = Quantity(type=str) + imported_readout = Quantity(type=str) + deleted_at = Quantity(type=str) + sample_svg_file = Quantity(type=str) + identifier = Quantity(type=str) + density = Quantity(type=np.float16) + melting_point = Quantity(type=np.float16) + boiling_point = Quantity(type=np.float16) + fingerprint_id = Quantity(type=str) + xref = Quantity(type=JSON, a_browser=dict(value_component='JsonValue')) + molarity_value = Quantity(type=np.float16) + molarity_unit = Quantity(type=str) + molecule_name_id = Quantity(type=str) + molfile_version = Quantity(type=str) + stereo = Quantity(type=JSON, a_browser=dict(value_component='JsonValue')) + file = Quantity(type=str, a_browser=dict(adaptor='RawFileAdaptor')) + + def post_process(self, **kwargs): + full_path = os.path.join('images', 'samples', self.sample_svg_file) + self.file = full_path + + +class ChemotionCollectionsSample(ChemotionGeneralMetainfo): + collection_id = Quantity(type=str) + + +class ChemotionFingerprint(ChemotionGeneralMetainfo): + fp0 = Quantity(type=str) + fp1 = Quantity(type=str) + fp2 = Quantity(type=str) + fp3 = Quantity(type=str) + fp4 = Quantity(type=str) + fp5 = Quantity(type=str) + fp6 = Quantity(type=str) + fp7 = Quantity(type=str) + fp8 = Quantity(type=str) + fp9 = Quantity(type=str) + fp10 = Quantity(type=str) + fp11 = Quantity(type=str) + fp12 = Quantity(type=str) + fp13 = Quantity(type=str) + fp14 = Quantity(type=str) + fp15 = Quantity(type=str) + num_set_bits = Quantity(type=int) + + +class ChemotionMolecule(ChemotionGeneralMetainfo): + inchikey = Quantity(type=str) + inchistring = Quantity(type=str) + density = Quantity(type=np.float16) + molecular_weight = Quantity(type=np.float16) + molfile = Quantity(type=str) + melting_point = Quantity(type=str) + boiling_point = Quantity(type=str) + sum_formular = Quantity(type=str) + names = Quantity(type=str) + iupac_name = Quantity(type=str) + molecule_svg_file = Quantity(type=str) + is_partial = Quantity(type=bool) + exact_molecular_weight = Quantity(type=np.float16) + cano_smiles = Quantity(type=str) + cas = Quantity(type=str) + molfile_version = Quantity(type=str) + file = Quantity(type=str, a_browser=dict(adaptor='RawFileAdaptor')) + + def post_process(self, **kwargs): + full_path = os.path.join('images', 'molecules', self.molecule_svg_file) + self.file = full_path + + +class ChemotionMoleculeName(ChemotionGeneralMetainfo): + description = Quantity(type=str) + name = Quantity(type=str) + + +class ChemotionResidue(ChemotionGeneralMetainfo): + residue_type = Quantity(type=str) + custom_info = Quantity(type=str) + + +class ChemotionReaction(ChemotionGeneralMetainfo): + name = Quantity(type=str) + description = Quantity(type=JSON, a_browser=dict(value_component='JsonValue')) + timestamp_start = Quantity(type=str) + timestamp_stop = Quantity(type=str) + observation = Quantity(type=JSON, a_browser=dict(value_component='JsonValue')) + purification = Quantity(type=JSON) + dangerous_products = Quantity(type=JSON) + tlc_solvents = Quantity(type=str) + tlc_description = Quantity(type=str) + rf_value = Quantity(type=str) + temperature = Quantity(type=JSON, a_browser=dict(value_component='JsonValue')) + status = Quantity(type=str) + reaction_svg_file = Quantity(type=str) + solvent = Quantity(type=str) + deleted_at = Quantity(type=str) + short_label = Quantity(type=str) + created_by = Quantity(type=str) + role = Quantity(type=str) + origin = Quantity(type=JSON, a_browser=dict(value_component='JsonValue')) + rinchi_string = Quantity(type=str) + rinchi_long_key = Quantity(type=str) + rinchi_short_key = Quantity(type=str) + rinchi_web_key = Quantity(type=str) + duration = Quantity(type=str) + file = Quantity(type=str, a_browser=dict(adaptor='RawFileAdaptor')) + + def post_process(self, **kwargs): + full_path = os.path.join('images', 'reactions', self.reaction_svg_file) + self.file = full_path + + +class ChemotionCollectionsReaction(ChemotionGeneralMetainfo): + + reaction_id = Quantity(type=str) + + +class ChemotionReactionsStartingMaterialSample(ChemotionReactionSample): + pass + + +class ChemotionReactionsSolventSample(ChemotionReactionSample): + pass + + +class ChemotionReactionsPurificationSolventSample(ChemotionReactionSample): + pass + + +class ChemotionReactionsReactantSample(ChemotionReactionSample): + pass + + +class ChemotionReactionsProductSample(ChemotionReactionSample): + pass + + +class ChemotionWellplate(ChemotionGeneralMetainfo): + name = Quantity(type=str) + size = Quantity(type=int) + description = Quantity(type=JSON, a_browser=dict(value_component='JsonValue')) + + +class ChemotionCollectionsWellplate(ChemotionGeneralMetainfo): + wellplate_id = Quantity(type=str) + + +class ChemotionWell(ChemotionGeneralMetainfo): + wellplate_id = Quantity(type=str) + position_x = Quantity(type=int) + position_y = Quantity(type=int) + readout = Quantity(type=Datetime) + additive = Quantity(type=Datetime) + + +class ChemotionScreen(ChemotionGeneralMetainfo): + description = Quantity(type=JSON, a_browser=dict(value_component='JsonValue')) + name = Quantity(type=str) + result = Quantity(type=str) + collaborator = Quantity(type=str) + conditions = Quantity(type=str) + requirements = Quantity(type=str) + + +class ChemotionCollectionsScreen(ChemotionGeneralMetainfo): + screen_id = Quantity(type=str) + + +class ChemotionScreensWellplate(ChemotionGeneralMetainfo): + screen_id = Quantity(type=str) + wellplate_id = Quantity(type=str) + + +class ChemotionResearchPlan(ChemotionGeneralMetainfo): + name = Quantity(type=str) + body = Quantity(type=JSON, a_browser=dict(value_component='JsonValue')) + sdf_file = Quantity(type=str) + svg_file = Quantity(type=str) + created_by = Quantity(type=str) + + def post_process(self): + pass + + +class ChemotionCollectionsResearchPlan(ChemotionGeneralMetainfo): + research_plan_id = Quantity(type=str) + + +class ChemotionContainer(MSection): + ancestry = Quantity(type=str) + containable_id = Quantity(type=str) + containable_type = Quantity(type=str) + name = Quantity(type=str) + container_type = Quantity(type=str) + description = Quantity(type=str) + extended_metadata = Quantity(type=JSON, a_browser=dict(value_component='JsonValue')) + created_at = Quantity(type=Datetime) + updated_at = Quantity(type=Datetime) + parent_id = Quantity(type=str) + + +class ChemotionAttachment(ChemotionGeneralMetainfo): + attachable_id = Quantity(type=str) + filename = Quantity(type=str) + identifier = Quantity(type=str) + checksum = Quantity(type=str) + storage = Quantity(type=str) + created_by = Quantity(type=str) + created_for = Quantity(type=str) + version = Quantity(type=int) + content_type = Quantity(type=str) + bucket = Quantity(type=str) + key = Quantity(type=str) + thumb = Quantity(type=bool) + folder = Quantity(type=bool) + attachable_type = Quantity(type=str) + aasm_state = Quantity(type=str) + file = Quantity(type=str, a_browser=dict(adaptor='RawFileAdaptor')) + + def post_process(self, **kwargs): + full_path = os.path.join('attachments', self.key) + self.file = full_path + + +class ChemotionLiteral(ChemotionGeneralMetainfo): + literature_id = Quantity(type=str) + element_id = Quantity(type=str) + element_type = Quantity(type=str) + category = Quantity(type=str) + + +class ChemotionLiterature(ChemotionGeneralMetainfo): + title = Quantity(type=str) + url = Quantity(type=str) + refs = Quantity(type=JSON, a_browser=dict(value_component='JsonValue')) + doi = Quantity(type=str) + + +class Chemotion(EntryData): + ''' + Each exported .eln formatted file contains ro-crate-metadata.json file which is parsed into this class. + Important Quantities are: + id: id of the file which holds metadata info + date_created: date of when the file is exported + + title is used as an identifier for the GUI to differentiate between the parsed entries and the original file. + ''' + m_def = Section(label='Chemotion Project Import', categories=[ElnIntegrationCategory]) + + name = Quantity(type=str, description='Name of the project', a_eln=dict(component='StringEditQuantity')) + title = Quantity(type=str, description='Title of the entry', a_eln=dict(component='StringEditQuantity')) + + date_created = Quantity(type=Datetime, description='Creation date of the .eln', + a_eln=dict(component='DateTimeEditQuantity')) + author = Quantity(type=str, description='Full name of the experiment\'s author', + a_eln=dict(component='StringEditQuantity')) + + Collection = SubSection(sub_section=ChemotionCollection, repeats=True) + Sample = SubSection(sub_section=ChemotionSample, repeats=True) + CollectionsSample = SubSection(sub_section=ChemotionCollectionsSample, repeats=True) + Fingerprint = SubSection(sub_section=ChemotionFingerprint, repeats=True) + Molecule = SubSection(sub_section=ChemotionMolecule, repeats=True) + MoleculeName = SubSection(sub_section=ChemotionMoleculeName, repeats=True) + Container = SubSection(sub_section=ChemotionContainer, repeats=True) + Attachment = SubSection(sub_section=ChemotionAttachment, repeats=True) + Reactions = SubSection(sub_section=ChemotionReaction, repeats=True) + CollectionsReaction = SubSection(sub_section=ChemotionCollectionsReaction, repeats=True) + ReactionsStartingMaterialSample = SubSection(sub_section=ChemotionReactionsStartingMaterialSample, repeats=True) + ReactionsSolventSample = SubSection(sub_section=ChemotionReactionsSolventSample, repeats=True) + ReactionsProductSample = SubSection(sub_section=ChemotionReactionsProductSample, repeats=True) + ResearchPlan = SubSection(sub_section=ChemotionResearchPlan, repeats=True) + CollectionsResearchPlan = SubSection(sub_section=ChemotionCollectionsResearchPlan, repeats=True) + + +_element_type_section_mapping = { + 'Collection': ChemotionCollection, + 'Sample': ChemotionSample, + 'CollectionsSample': ChemotionCollectionsSample, + 'Fingerprint': ChemotionFingerprint, + 'Molecule': ChemotionMolecule, + 'MoleculeName': ChemotionMoleculeName, + 'Container': ChemotionContainer, + 'Attachment': ChemotionAttachment, + 'Reaction': ChemotionReaction, + 'CollectionsReaction': ChemotionCollectionsReaction, + 'ReactionsStartingMaterialSample': ChemotionReactionsStartingMaterialSample, + 'ReactionsSolventSample': ChemotionReactionsSolventSample, + 'ReactionsProductSample': ChemotionReactionsProductSample, + 'ResearchPlan': ChemotionResearchPlan, + 'CollectionsResearchPlan': ChemotionCollectionsResearchPlan +} + + +def _set_inf_to_nan_if_string(dct, key): + if key in dct and isinstance(dct[key], str): + dct[key] = np.NaN + + +class ChemotionParser(MatchingParser): + creates_children = True + + def __init__(self) -> None: + super().__init__( + name='parsers/chemotion', code_name='Chemotion', + domain=None, + mainfile_mime_re=r'application/json|text/plain', + mainfile_name_re=r'^.*export.json$') + + def is_mainfile( + self, filename: str, mime: str, buffer: bytes, decoded_buffer: str, + compression: str = None + ) -> Union[bool, Iterable[str]]: + is_export_json = super().is_mainfile(filename, mime, buffer, decoded_buffer, compression) + if not is_export_json: + return False + + return [str(0)] + + def parse(self, mainfile: str, archive: EntryArchive, logger=None, child_archives=None): + + if logger is None: + logger = utils.get_logger(__name__) + + chemotion = Chemotion() + + with open(mainfile, 'rt') as f: + data = json.load(f) + + for item_name, item_content in data.items(): + for sub_item in item_content.values(): + try: + chemotion_subsection = _element_type_section_mapping[item_name]() + _set_inf_to_nan_if_string(sub_item, 'melting_point') + _set_inf_to_nan_if_string(sub_item, 'boiling_point') + + chemotion_subsection.m_update_from_dict(sub_item) + + if item_name in ['Sample', 'Molecule', 'Reaction', 'ResearchPlan']: + chemotion_subsection.post_process() + item_name = 'Reactions' if item_name == 'Reaction' else item_name + sub_section_def = getattr(chemotion.m_def.section_cls, item_name) + chemotion.m_add_sub_section(sub_section_def, chemotion_subsection, -1) + except Exception as e: + logger.error('No dot (.) is allowed in the column name.', details=dict(column=item_name), exc_info=e) + for child_archive in child_archives.values(): + child_archive.data = chemotion + logger.info('eln parsed successfully') + + +m_package.__init_metainfo__() diff --git a/nomad/parsing/chemotion/nomad_plugin.yaml b/nomad/parsing/chemotion/nomad_plugin.yaml new file mode 100644 index 0000000000000000000000000000000000000000..7091185371207d1ca4804aa4f47c273b235563c5 --- /dev/null +++ b/nomad/parsing/chemotion/nomad_plugin.yaml @@ -0,0 +1,21 @@ +code_category: ELN +code_homepage: https://chemotion.net/ +code_name: Chemotion +metadata: + codeCategory: ELN + codeLabel: Chemotion + codeLabelStyle: 'capitals: C.' + codeName: Chemotion + codeUrl: https://chemotion.net/ + parserDirName: nomad/parsing/chemotion + parserGitUrl: https://gitlab.mpcdf.mpg.de/nomad-lab/nomad-FAIR.git + preabmle: "" + status: production + tableOfFiles: | + |Input Filename| Description| + |--- | --- | + |`*.export.json` | **Mainfile** as part of the .eln chemotion export | + |`*` | Files in .eln chemotion export that are references by the mainfile and description.txt | +name: parsers/chemotion +parser_class_name: nomad.parsing.chemotion.ChemotionParser +python_package: nomad.parsing.chemotion diff --git a/nomad/parsing/file_parser/basic_parser.py b/nomad/parsing/file_parser/basic_parser.py index cc8cefd5cdb1aee62cfa82bc544579723113e94e..026f63e9835988c80950a508cdcc1d42292fca25 100644 --- a/nomad/parsing/file_parser/basic_parser.py +++ b/nomad/parsing/file_parser/basic_parser.py @@ -120,7 +120,7 @@ class BasicParser: def remove_empty_section(sections, definition): for n in range(len(sections) - 1, -1, -1): empty = True - for _, property_def, _ in sections[n].m_traverse(): + for _, property_def, _, _ in sections[n].m_traverse(): if property_def is None: continue empty = False diff --git a/nomad/parsing/file_parser/file_parser.py b/nomad/parsing/file_parser/file_parser.py index 56af40a52880b9e37c153360d3a7c72d60286738..4125e08a4b35f5b9e3b4241d6ca0a76feba04458 100644 --- a/nomad/parsing/file_parser/file_parser.py +++ b/nomad/parsing/file_parser/file_parser.py @@ -12,52 +12,59 @@ # See the License for the specific language governing permissions and # limitations under the License. - +from abc import ABC, abstractmethod import os -import logging import pint -from typing import Any, Dict +from typing import Any, Dict, Callable, IO, Union import gzip import bz2 import lzma import tarfile from nomad.metainfo import MSection +from nomad.utils import get_logger -class FileParser: +class FileParser(ABC): ''' - Base class for parsers. The parse method specific to a file type + Base class for file parsers. The parse method specific to a file type should be implemented in the corresponding child class. The parsed quantities are stored in results. One can access a quantity by using the get method or as attribute. Arguments: - mainfile: the file to be parsed + mainfile: the path to the file to be parsed logger: optional logger open: function to open file ''' - def __init__(self, mainfile=None, logger=None, open=None): - self._mainfile: Any = None - self._mainfile_obj: Any = None + def __init__(self, mainfile: Union[str, IO] = None, logger=None, open: Callable = None): + self._mainfile: str = None + self._mainfile_obj: IO = None if isinstance(mainfile, str): self._mainfile = os.path.abspath(mainfile) self._mainfile_obj = None elif hasattr(mainfile, 'name'): self._mainfile = mainfile.name self._mainfile_obj = mainfile - self._open = open - self.logger = logger if logger is not None else logging - self._results: Dict[str, Any] = None + self._open: Callable = open + self.logger = logger if logger is not None else get_logger(__name__) # a key is necessary for xml parsers, where parsing is done dynamically self._key: str = None self._kwargs: Dict[str, Any] = dict() + self._results: Dict[str, Any] = None self._file_handler: Any = None - def init_parameters(self): - pass + def reset(self): + ''' + Nullifies the parsed results. + ''' + self._results = None + self._file_handler = None @property def results(self): + ''' + Returns the parsed results. + ''' if self._results is None: self._results = dict() if self._key not in self._results: @@ -67,10 +74,16 @@ class FileParser: @property def maindir(self): + ''' + Returns the directory where the mainfile is located. + ''' return os.path.dirname(self._mainfile) @property def mainfile_obj(self): + ''' + Returns the mainfile object. + ''' if self._mainfile_obj is None: try: self._mainfile_obj = self.open(self._mainfile) @@ -81,6 +94,9 @@ class FileParser: @property def mainfile(self): + ''' + Returns the path to the mainfile. + ''' if self._mainfile is None: return @@ -90,8 +106,10 @@ class FileParser: @mainfile.setter def mainfile(self, val): - self._results = None - self._file_handler = None + ''' + Assigns the mainfile to be parsed. + ''' + self.reset() self._mainfile = None if isinstance(val, str): self._mainfile = os.path.abspath(val) @@ -99,9 +117,11 @@ class FileParser: elif hasattr(val, 'name'): self._mainfile = val.name self._mainfile_obj = val - self.init_parameters() - def open(self, mainfile): + def open(self, mainfile: str): + ''' + Opens the file with the provided open function or based on the file type. + ''' open_file = self._open if open_file is None: if mainfile.endswith('.gz'): @@ -116,7 +136,7 @@ class FileParser: open_file = open return open_file(mainfile) - def get(self, key: str, default: Any = None, unit: Any = None, **kwargs): + def get(self, key: str, default: Any = None, unit: Union[pint.Unit, pint.Quantity] = None, **kwargs): ''' Returns the parsed result for quantity with name key. If quantity is not in results default will be returned. A pint unit can be provided which is attached @@ -181,5 +201,15 @@ class FileParser: ''' return section.m_from_dict(self.to_dict()) + @abstractmethod def parse(self, quantity_key: str = None, **kwargs): pass + + def __repr__(self) -> str: + results = list(self._results.keys()) if self._results else [] + string = f'{self.__class__.__name__}' + if self.mainfile: + string += f'({os.path.basename(self.mainfile)}) ' + if results: + string += f'--> {len(results)} parsed quantities ({", ".join(results[:5])}{", ..." if len(results) > 5 else ""})' + return string diff --git a/nomad/parsing/file_parser/text_parser.py b/nomad/parsing/file_parser/text_parser.py index 4527799ce798970f1b3a29484cd72120b8bcb5c0..3c1f14d4f4945d7f878f0792ce200e87f9a954c7 100644 --- a/nomad/parsing/file_parser/text_parser.py +++ b/nomad/parsing/file_parser/text_parser.py @@ -13,16 +13,16 @@ # limitations under the License. -import logging import mmap import io import re import numpy as np import pint -from typing import List, Union, Callable, Type +from typing import List, Union, Callable, Type, Any from nomad.parsing.file_parser import FileParser from nomad.metainfo import Quantity as mQuantity +from nomad.utils import get_logger class ParsePattern: @@ -117,8 +117,8 @@ class Quantity: self._re_pattern: str = re_pattern.re_pattern if isinstance( re_pattern, ParsePattern) else re_pattern - self._str_operation: Callable = kwargs.get('str_operation', None) - self._sub_parser: TextParser = kwargs.get('sub_parser', None) + self.str_operation: Callable = kwargs.get('str_operation', None) + self.sub_parser: TextParser = kwargs.get('sub_parser', None) self.repeats: bool = kwargs.get('repeats', False) self.convert: bool = kwargs.get('convert', True) self.flatten: bool = kwargs.get('flatten', True) @@ -139,88 +139,82 @@ class Quantity: def re_pattern(self, val: str): self._re_pattern = val - @property - def str_operation(self): - return self._str_operation - - @str_operation.setter - def str_operation(self, val: Callable): - self._str_operation = val - - def to_data(self, val_in: List[str]): + def to_data(self, val_raw: str): ''' Converts the parsed block into data. ''' - def process(val): - if self.comment is not None: - if val.strip()[0] == self.comment: - return - if self.str_operation is not None: - val = self.str_operation(val) - - elif self.flatten: - val = val.strip().split() if isinstance(val, str) else val - if self.reduce: - val = val[0] if len(val) == 1 else val - - def _convert(val): - if isinstance(val, str): - if self.dtype is None: - if val.isdecimal(): - val = int(val) - else: - try: - val = float(val) - except Exception: - pass + def convert(val): + if isinstance(val, str): + if self.dtype is None: + if val.isdecimal(): + return int(val) else: try: - val = self.dtype(val) + return float(val) except Exception: pass + else: + try: + return self.dtype(val) + except Exception: + pass - return val + return val - elif type(val) in [np.ndarray, list]: - try: - dtype = float if self.dtype is None else self.dtype - val_test = np.array(val, dtype=dtype) - if self.dtype is None: - if np.all(np.mod(val_test, 1) == 0): - val_test = np.array(val_test, dtype=int) - val = val_test + elif isinstance(val, np.ndarray) or isinstance(val, list): + try: + dtype = float if self.dtype is None else self.dtype + val_test = np.array(val, dtype=dtype) + if self.dtype is None: + if np.all(np.mod(val_test, 1) == 0): + val_test = np.array(val_test, dtype=int) + dtype = int + return val_test - except Exception: - val = [_convert(v) for v in val] + except Exception: + self.dtype = None + return [convert(v) for v in val] - return val + elif isinstance(val, dict): + return {k: convert(v) for k, v in val.items()} - elif isinstance(val, dict): - for k, v in val.items(): - val[k] = _convert(v) - return val + else: + return val - else: - return val + if not val_raw: + return - if self.convert: - val = _convert(val) + if self.comment is not None: + if val_raw.strip()[0] == self.comment: + return - if isinstance(val, np.ndarray) and self.shape: - try: - val = np.reshape(val, self.shape) - except Exception: - pass + data: Any = val_raw + + if self.str_operation is not None: + data = self.str_operation(val_raw) - return val + elif self.flatten: + data = val_raw.strip().split() + if self.reduce: + data = data[0] if len(data) == 1 else data - val_out = [process(val) for val in val_in] + if self.convert: + data = convert(data) - if isinstance(val_out[0], np.ndarray): - self.dtype = val_out[0].dtype # type: ignore + if isinstance(data, np.ndarray) and self.shape: + try: + data = np.reshape(data, self.shape) + except Exception: + pass - return val_out + return data + + def __repr__(self) -> str: + if not self.sub_parser: + return self.name + sub_quantities = [q.name for q in self.sub_parser.quantities] + return f'{self.name}({", ".join(sub_quantities[:5])}{"..." if len(sub_quantities) > 5 else ""})' class DataTextParser(FileParser): @@ -235,8 +229,7 @@ class DataTextParser(FileParser): self._dtype: Type = kwargs.get('dtype', float) mainfile: str = kwargs.get('mainfile', None) self._mainfile_contents: str = kwargs.get('mainfile_contents', None) - logger = kwargs.get('logger', None) - logger = logger if logger is not None else logging + logger = kwargs.get('logger', get_logger(__name__)) super().__init__(mainfile, logger=logger, open=kwargs.get('open', None)) self.init_parameters() @@ -265,27 +258,32 @@ class DataTextParser(FileParser): self.init_parameters() return self._file_handler + def parse(self): + pass + class TextParser(FileParser): ''' Parser for unstructured text files using the re module. The quantities to be parsed - are given as a list of Quantity objects which specifies the re pattern. The mmap + are given as a list of Quantity objects which specifies the regular expression. The mmap module is used to handle the file. By default, re.find_all is used to get matches for performance reasons. In this case, overlap is not tolerated in the re patterns. To avoid this, set findall to False to switch to re.finditer. Arguments: - mainfile: the file to be parsed + mainfile: the path to the file to be parsed quantities: list of Quantity objects to be parsed. logger: optional logger - findall: switches between using re.findall and re.finditer + findall: if True will employ re.findall, otherwise re.finditer file_offset: offset in reading the file file_length: length of the chunk to be read from the file ''' - def __init__(self, mainfile=None, quantities=None, logger=None, findall=True, **kwargs): + def __init__(self, mainfile: str = None, quantities: List[Quantity] = None, logger=None, **kwargs): + if logger is None: + logger = get_logger(__name__) super().__init__(mainfile, logger=logger, open=kwargs.get('open', None)) self._quantities: List[Quantity] = quantities - self.findall: bool = findall + self.findall: bool = kwargs.get('findall', True) self._kwargs = kwargs self._file_length: int = kwargs.get('file_length', 0) self._file_offset: int = kwargs.get('file_offset', 0) @@ -294,18 +292,14 @@ class TextParser(FileParser): self.init_quantities() # check quantity patterns are valid re_has_group = re.compile(r'\(.+\)') - for i in range(len(self.quantities) - 1, -1, -1): - valid = True + for i in range(len(self._quantities) - 1, -1, -1): try: - if re_has_group.search(self.quantities[i].re_pattern.pattern.decode()) is None: - valid = False - except Exception: - valid = False - if not valid: + assert re_has_group.search(self._quantities[i].re_pattern.pattern.decode()) is not None + except Exception as e: self.logger.error( - 'Invalid quantity pattern', data=dict(quantity=self.quantities[i].name)) - self.quantities.pop(i) - self._re_findall = None + 'Invalid quantity pattern', exc_info=e, data=dict(quantity=self.quantities[i].name)) + self._quantities.pop(i) + self._re_findall: re.Pattern = None def copy(self): ''' @@ -322,10 +316,18 @@ class TextParser(FileParser): @property def quantities(self): + ''' + Returns the list of quantities to be parsed. + ''' return self._quantities @quantities.setter - def quantities(self, val): + def quantities(self, val: List[Quantity]): + ''' + Sets the quantities list. + ''' + self._file_handler = None + self._results = None self._quantities = val @property @@ -336,9 +338,13 @@ class TextParser(FileParser): return self._file_offset @file_offset.setter - def file_offset(self, val): + def file_offset(self, val: int): + ''' + Sets starting point where the file is read. + ''' self._file_pad = val % mmap.PAGESIZE self._file_offset = (val // mmap.PAGESIZE) * mmap.PAGESIZE + self.reset() @property def file_length(self): @@ -348,8 +354,12 @@ class TextParser(FileParser): return self._file_length @file_length.setter - def file_length(self, val): + def file_length(self, val: int): + ''' + Sets the length of the file to be read. + ''' self._file_length = val + self.reset() @property def file_mmap(self): @@ -382,45 +392,51 @@ class TextParser(FileParser): for key in self.keys(): yield key, self.get(key) - def _add_value(self, quantity, value, units): + def _add_value(self, quantity: Quantity, value: List[str], units): + ''' + Converts the list of parsed blocks into data and apply the corresponding units. + ''' try: - value_processed = quantity.to_data(value) - for i in range(len(value_processed)): - unit = units[i] if units[i] else quantity.unit + value_processed = [quantity.to_data(val) for val in value] + for n, value in enumerate(value_processed): + unit = units[n] if units[n] else quantity.unit if not unit: continue if isinstance(unit, str): - value_processed[i] = pint.Quantity(value_processed[i], unit) + value_processed[n] = pint.Quantity(value_processed[n], unit) else: - value_processed[i] = value_processed[i] * unit + value_processed[n] = value_processed[n] * unit if not quantity.repeats and value_processed: value_processed = value_processed[0] self._results[quantity.name] = value_processed except Exception: - self.logger.warn('Error setting value', data=dict(quantity=quantity.name)) + self.logger.warning('Error setting value', data=dict(quantity=quantity.name)) - def _parse_quantities(self, quantities): + def _parse_quantities(self, quantities: List[Quantity]): + ''' + Parse a list of quantities. + ''' if len(self._results) == 0 and self._re_findall is not None: - # maybe an opt - re_findall = self._re_findall + # attempt at optimization + re_findall_b = self._re_findall else: re_findall = '|'.join([q.re_pattern.pattern.decode() for q in quantities]) if len(quantities) == 1: # necessary to add a dummy variable to make multiple matches re_findall = '%s|(__dummy__)' % re_findall - re_findall = re_findall.encode() + re_findall_b = re.compile(re_findall.encode()) if self._re_findall is None: - self._re_findall = re.compile(re_findall) + self._re_findall = re_findall_b # map matches to quantities - matches = re.findall(re_findall, self.file_mmap) + matches = re.findall(re_findall_b, self.file_mmap) current_index = 0 - for i in range(len(quantities)): + for quantity in quantities: values = [] units = [] - n_groups = quantities[i].re_pattern.groups + n_groups = quantity.re_pattern.groups non_empty_matches = [] for match in matches: @@ -428,8 +444,8 @@ class TextParser(FileParser): if not non_empty_match: continue non_empty_matches.append(non_empty_match) - index_unit = quantities[i].re_pattern.groupindex.get( - '__unit_%s' % quantities[i].name, None) + index_unit = quantity.re_pattern.groupindex.get( + '__unit_%s' % quantity.name, None) for non_empty_match in non_empty_matches: try: if index_unit is not None: @@ -441,17 +457,19 @@ class TextParser(FileParser): values.append(' '.join([m.decode() for m in non_empty_match])) except Exception: - self.logger.error('Error parsing quantities.') + self.logger.error('Error parsing quantities.', data=dict(quantity=quantity.name)) current_index += n_groups if not values: continue - self._add_value(quantities[i], values, units) - - def _parse_quantity(self, quantity): + self._add_value(quantity, values, units) + def _parse_quantity(self, quantity: Quantity): + ''' + Parse a single quantity. + ''' value = [] units = [] re_matches = quantity.re_pattern.finditer(self.file_mmap) if quantity.repeats else [ @@ -459,13 +477,10 @@ class TextParser(FileParser): for res in re_matches: if res is None: continue - if quantity._sub_parser is not None: - sub_parser = quantity._sub_parser.copy() + if quantity.sub_parser is not None: + sub_parser = quantity.sub_parser.copy() sub_parser.mainfile = self.mainfile sub_parser.logger = self.logger - # self.logger.warn( - # 'Cannot use sub parser on quantity %s with blocks with size <' - # '%d. Will try to parse string' % (quantity.name, mmap.PAGESIZE)) sub_parser._file_handler = b' '.join([g for g in res.groups() if g]) value.append(sub_parser.parse()) @@ -481,7 +496,7 @@ class TextParser(FileParser): if not value: return - if quantity._sub_parser is not None: + if quantity.sub_parser is not None: self._results[quantity.name] = value if quantity.repeats else value[0] else: @@ -489,7 +504,9 @@ class TextParser(FileParser): def parse(self, key=None): ''' - Triggers parsing of all quantities if key is not provided. + Triggers parsing of quantity with name key, if key is None will parse all quantities. + + Returns file parser. ''' if self._results is None: self._results = dict() @@ -503,8 +520,9 @@ class TextParser(FileParser): n_results = 0 while True: + # use find all to parse quantities with no sub_parser. quantities_findall = [ - q for q in self.quantities if q.name not in self._results and q._sub_parser is None] + q for q in self.quantities if q.name not in self._results and q.sub_parser is None] if not quantities_findall: break @@ -512,11 +530,12 @@ class TextParser(FileParser): self._parse_quantities(quantities_findall) if n_results == len(self._results): + # will stop if no more matches are found break n_results = len(self._results) for quantity in self._quantities: - if quantity._sub_parser is not None: + if quantity.sub_parser is not None: self._parse_quantity(quantity) # free up memory @@ -535,6 +554,6 @@ class TextParser(FileParser): Deletes the file mapping for all sub parsers. ''' for quantity in self.quantities: - if quantity._sub_parser is not None: - quantity._sub_parser.clear() + if quantity.sub_parser is not None: + quantity.sub_parser.clear() self._file_handler = None diff --git a/nomad/parsing/nexus/nexus.py b/nomad/parsing/nexus/nexus.py index c5426c2cd21f5822b4d4757221760c10c16bbd56..432fab100b83e8f04394e4f45ddbf0d85f2001db 100644 --- a/nomad/parsing/nexus/nexus.py +++ b/nomad/parsing/nexus/nexus.py @@ -21,7 +21,7 @@ from typing import Optional import numpy as np -from nexusutils.nexus import nexus as read_nexus # pylint: disable=import-error +from pynxtools.nexus import nexus as read_nexus # pylint: disable=import-error from nomad.datamodel import EntryArchive from nomad.metainfo import MSection, nexus from nomad.metainfo.util import MQuantity, MSubSectionList, resolve_variadic_name @@ -285,7 +285,7 @@ class NexusParser(Parser): self.nx_root = self.archive.nexus self._logger = logger if logger else get_logger(__name__) - nexus_helper = read_nexus.HandleNexus(logger, [mainfile]) + nexus_helper = read_nexus.HandleNexus(logger, mainfile, None, None) nexus_helper.process_nexus_master_file(self.__nexus_populate) if archive.metadata is None: diff --git a/nomad/parsing/parser.py b/nomad/parsing/parser.py index aeea91dd05574374efc41ee08a5f033d302c95f3..c6e0c93922fe9378146912b08017472dd20408c9 100644 --- a/nomad/parsing/parser.py +++ b/nomad/parsing/parser.py @@ -288,7 +288,7 @@ class MatchingParser(Parser): def match(value, reference): if not isinstance(value, dict): - equal = value == reference[()] + equal = value == (reference[()] if isinstance(reference, h5py.Dataset) else reference) return equal.all() if isinstance(equal, np.ndarray) else equal if not hasattr(reference, 'keys'): @@ -300,8 +300,11 @@ class MatchingParser(Parser): if key == '__has_key': matches.append(val in reference_keys) elif key == '__has_all_keys': - assert isinstance(val, list) + assert isinstance(val, list) and isinstance(reference_keys, list) matches.append(False not in [v in reference_keys for v in val]) + elif key == '__has_only_keys': + assert isinstance(val, list) and isinstance(reference_keys, list) + matches.append(False not in [v in val for v in reference_keys]) else: if key not in reference_keys: matches.append(False) @@ -323,6 +326,29 @@ class MatchingParser(Parser): is_match = match(self._mainfile_contents_dict, f) except Exception: pass + elif re.match(r'.+\.(?:csv|xlsx?)$', filename): + from nomad.parsing.tabular import read_table_data + try: + data: Dict[str, Any] = {} + table_data = read_table_data(filename) + for sheet_name in table_data: + data.setdefault(sheet_name, {}) + nrow = 0 + for column_name in table_data[sheet_name][0].keys(): + column_values = list(table_data[sheet_name][0][column_name].values()) + if not nrow: + for n, row in enumerate(column_values): + if not str(row).strip().startswith('#'): + nrow = n + break + if nrow: + data[sheet_name][column_values[nrow]] = column_values[nrow + 1:] + else: + data[column_name] = column_values + + is_match = match(self._mainfile_contents_dict, data) + except Exception: + pass if not is_match: return False diff --git a/nomad/parsing/parsers.py b/nomad/parsing/parsers.py index 906a73718cd06b0cec47ef52e34e979531952356..073f1b08dcc4dd7c2fece6a90c69a71f9db4e851 100644 --- a/nomad/parsing/parsers.py +++ b/nomad/parsing/parsers.py @@ -112,7 +112,7 @@ def match_parser(mainfile_path: str, strict=True, parser_name: str = None) -> Tu if isinstance(match_result, Iterable): assert parser.creates_children, 'Illegal return value - parser does not specify `creates_children`' for mainfile_key in match_result: # type: ignore - assert mainfile_key and type(mainfile_key) == str, ( + assert mainfile_key and isinstance(mainfile_key, str), ( f'Child keys must be strings, got {type(mainfile_key)}') mainfile_keys = sorted(match_result) # type: ignore else: @@ -132,6 +132,9 @@ def match_parser(mainfile_path: str, strict=True, parser_name: str = None) -> Tu # TODO: deal with multiple possible parser specs return parser, mainfile_keys + if parser_name and parser: + return parser, None # Ignore any child entries + return None, None diff --git a/nomad/parsing/tabular.py b/nomad/parsing/tabular.py index 47f0101bfd4ed19946273b79feeca5b3dfa0d1aa..60bbdcc3bf31d86681c7ef1d33d89b205dae35b9 100644 --- a/nomad/parsing/tabular.py +++ b/nomad/parsing/tabular.py @@ -16,7 +16,7 @@ # limitations under the License. # import os -from typing import List, Dict, Callable, Set, Any, Tuple, Iterator, Union, Iterable, cast +from typing import List, Dict, Callable, Set, Any, Tuple, Iterator, Union, Iterable import pandas as pd from memoization import cached @@ -29,12 +29,11 @@ import yaml from nomad import utils from nomad.parsing import MatchingParser from nomad.units import ureg -from nomad.datamodel import EntryArchive, EntryMetadata -from nomad.datamodel.data import ArchiveSection, EntryData +from nomad.datamodel.data import ArchiveSection from nomad.metainfo import Section, Quantity, Package, Reference, MSection, Property -from nomad.metainfo.metainfo import MetainfoError, SubSection, MProxy, SectionProxy -from nomad.datamodel.context import Context -from nomad.datamodel.metainfo.annotations import TabularAnnotation, TabularParserAnnotation +from nomad.metainfo.metainfo import MetainfoError, SubSection, MProxy +from nomad.datamodel.metainfo.annotations import TabularAnnotation, TabularParserAnnotation, TabularFileModeEnum, \ + TabularMode from nomad.metainfo.util import MSubSectionList from nomad.utils import generate_entry_id @@ -45,7 +44,12 @@ from nomad.utils import generate_entry_id m_package = Package() -def create_archive(entry_dict, context, file_name, file_type): +root_mapping = { + 'root': '#root' +} + + +def create_archive(entry_dict, context, file_name, file_type, logger): if not context.raw_path_exists(file_name): with context.raw_file(file_name, 'w') as outfile: if file_type == 'json': @@ -53,6 +57,10 @@ def create_archive(entry_dict, context, file_name, file_type): elif file_type == 'yaml': yaml.dump(entry_dict, outfile) context.upload.process_updated_raw_file(file_name, allow_modify=True) + else: + logger.error( + f'{file_name} archive file already exists.' + f'If you intend to reprocess the older archive file, remove the existing one and run reprocessing again.') def traverse_to_target_data_file(section, path_list: List[str]): @@ -66,20 +74,6 @@ def traverse_to_target_data_file(section, path_list: List[str]): raise MetainfoError(f'The path {temp} in path_to_data_file does not exist') -class TableRow(EntryData): - ''' Represents the data in one row of a table. ''' - table_ref = Quantity( - type=Reference(SectionProxy('Table')), - description='A reference to the table that this row is contained in.') - - -class Table(EntryData): - ''' Represents a table with many rows. ''' - row_refs = Quantity( - type=Reference(TableRow.m_def), shape=['*'], - description='References that connect to each row. Each row is stored in it individual entry.') - - class TabularParserError(Exception): ''' Tabular-parser related errors. ''' pass @@ -104,7 +98,9 @@ class TableData(ArchiveSection): for quantity_def in self.m_def.all_quantities.values(): annotation = quantity_def.m_get_annotations('tabular_parser') annotation = annotation[0] if isinstance(annotation, list) else annotation - if annotation: + # this normalizer potentially creates new archives,.to avoid recursive call of the normalizer created by + # this normalizer, we check for if the parent is already parsed + if annotation and not archive.data.m_parent.metadata.entry_name: self.tabular_parser(quantity_def, archive, logger, annotation) def tabular_parser(self, quantity_def: Quantity, archive, logger, annotation: TabularParserAnnotation): @@ -132,103 +128,71 @@ class TableData(ArchiveSection): if not data_file or re.match(r'^#data/(\w+/)*\w+$', data_file): return + parsing_options = dict(annotation.parsing_options) with archive.m_context.raw_file(data_file) as f: - data = read_table_data(data_file, f, **annotation.dict(include={'sep', 'comment', 'skiprows'})) - - # Checking for any quantities in the root level of the TableData that is - # supposed to be filled from the excel file - for quantity_name, quantity in self.m_def.all_properties.items(): - if isinstance(quantity, Quantity) and getattr(self, quantity_name) is None and \ - quantity.m_get_annotations('tabular') is not None: - col_data = quantity.m_get_annotations('tabular').name - if '/' in col_data: - # extract the sheet & col names if there is a '/' in the 'name' - sheet_name, col_name = col_data.split('/') - if sheet_name not in list(data): - continue - try: - df = pd.DataFrame.from_dict(data.loc[0, sheet_name]) - self.m_set(quantity, np.array(df.loc[:, col_name])) - except Exception: - continue - else: - # Otherwise, assume the sheet_name is the first sheet of Excel/csv - try: - df = pd.DataFrame.from_dict(data.iloc[0, 0]) - self.m_set(quantity, np.array(df.loc[:, col_data])) - except Exception: - continue - current_entry = annotation.current_entry - new_entry = annotation.new_entry + data = read_table_data(data_file, f, **parsing_options) - if not current_entry and not new_entry: - parse_columns(data, self) - if current_entry: - try: - column_sections, row_sections = current_entry.get_options() - except Exception: - raise TabularParserError("Couldn't extract the list of row/column sections.") - if column_sections: - _parse_column_mode(self, column_sections, data, logger=logger) - - if row_sections: - _parse_row_mode(self, row_sections, data, logger) - - if new_entry: - for entry in new_entry: + mapping_options = annotation.mapping_options + if mapping_options: + for mapping_option in mapping_options: try: - column_sections, row_sections, entry_sections = entry.get_options() + file_mode = mapping_option.file_mode + mapping_mode = mapping_option.mapping_mode + column_sections = mapping_option.sections if mapping_mode == TabularMode.column else None + row_sections = mapping_option.sections if mapping_mode == TabularMode.row else None except Exception: - raise TabularParserError("Couldn't extract the list of row/column sections.") - if entry_sections: - for entry_section in entry_sections: - if entry_section == 'root': - self._parse_entry_mode(data, self.m_def, archive, mode='root', logger=logger) + raise TabularParserError( + "Couldn't extract the list of mapping_options. Double-check the mapping_options") + + if file_mode == TabularFileModeEnum.current_entry: + # Checking for any quantities in the root level of the TableData that is + # supposed to be filled from the excel file + for quantity_name, quantity in self.m_def.all_properties.items(): + if isinstance(quantity, Quantity) and getattr(self, quantity_name) is None and \ + quantity.m_get_annotations('tabular') is not None: + col_data = quantity.m_get_annotations('tabular').name + if '/' in col_data: + # extract the sheet & col names if there is a '/' in the 'name' + sheet_name, col_name = col_data.split('/') + if sheet_name not in list(data): + continue + try: + df = pd.DataFrame.from_dict(data.loc[0, sheet_name]) + self.m_set(quantity, np.array(df.loc[:, col_name])) + except Exception: + continue + else: + # Otherwise, assume the sheet_name is the first sheet of Excel/csv + try: + df = pd.DataFrame.from_dict(data.iloc[0, 0]) + self.m_set(quantity, np.array(df.loc[:, col_data])) + except Exception: + continue + if column_sections: + _parse_column_mode(self, column_sections, data, logger=logger) + if row_sections: + _parse_row_mode(self, row_sections, data, logger) + + if file_mode == TabularFileModeEnum.multiple_new_entries: + for row_section in row_sections: + if row_section == root_mapping['root']: + self._parse_entry_mode(data, self.m_def, archive, is_root=root_mapping['root'], logger=logger) else: - entry_section_list = entry_section.split('/') + entry_section_list = row_section.split('/') entry_section_instance = create_subsection( self.m_def.all_properties[entry_section_list.pop(0)], entry_section_list) self._parse_entry_mode(data, entry_section_instance, archive, logger=logger) - else: - section = self.m_def.all_properties[row_sections[0].split('/')[0]].sub_section.section_cls() + + if file_mode == TabularFileModeEnum.single_new_entry: if column_sections: - parse_columns(data, section) + self._parse_single_new_entry(parse_columns, data, column_sections, archive, logger) if row_sections: - # If there is a match, then remove the matched sections from row_sections so the main entry - # does not populate the matched row_section - is_quantity_def = False - for quantity_def in section.m_def.all_quantities.values(): - if isinstance(quantity_def.type, Reference): - try: - section_to_entry = quantity_def.type.target_section_def.section_cls() - is_quantity_def = True - except AttributeError: - continue - if not is_quantity_def: - raise TabularParserError( - f"No reference quantity is defined in {row_sections[0].split('/')[0]} section.") - matched_rows = [re.sub(r"^.*?\/", "", row) for row in row_sections] - _parse_row_mode(section_to_entry, matched_rows, data, logger) - child_archive = EntryArchive( - data=section_to_entry, - m_context=archive.m_context, - metadata=EntryMetadata(upload_id=archive.m_context.upload_id, entry_name=section.m_def.name)) - # child_archive.normalize(archive=child_archive, logger=logger) - create_archive( - child_archive.m_to_dict(), archive.m_context, f'{section.m_def.name}.archive.yaml', 'yaml') - child_entry_id = generate_entry_id( - archive.m_context.upload_id, f'{section.m_def.name}.archive.yaml', None) - ref_quantity_proxy = MProxy( - m_proxy_value=f'../uploads/{archive.m_context.upload_id}/archive/{child_entry_id}#data', - m_proxy_context=self.m_context) - section.m_set(quantity_def, ref_quantity_proxy) - - if hasattr(self, row_sections[0].split('/')[0]): - setattr(self, row_sections[0].split('/')[0], None) - self.m_add_sub_section( - self.m_def.all_properties[row_sections[0].split('/')[0]], section, -1) + self._parse_single_new_entry(_parse_row_mode, data, row_sections, archive, logger) + + else: + parse_columns(data, self) # If the `fill_archive_from_datafile` checkbox is set to be hidden for this specific section, parser's logic # also needs to be modified to 'Always run the parser if it's been called'. @@ -238,10 +202,63 @@ class TableData(ArchiveSection): except AttributeError: self.fill_archive_from_datafile = False - def _parse_entry_mode(self, data, subsection_def, archive, mode=None, logger=None): + def _parse_single_new_entry(self, parser, data, section_list, archive, logger): + for single_entry_section in section_list: + target_section_str = single_entry_section.split('/')[0] if '/' in single_entry_section else single_entry_section + if target_section_str == root_mapping['root']: + target_section = self.m_def.section_cls() + section_to_entry = target_section + elif target_section_str in single_entry_section: + target_section = self.m_def.all_properties[target_section_str].sub_section.section_cls() + section_to_entry = target_section + is_quantity_def = False + for quantity_def in target_section.m_def.all_quantities.values(): + if isinstance(quantity_def.type, Reference): + try: + section_to_entry = quantity_def.type.target_section_def.section_cls() + is_quantity_def = True + except AttributeError: + continue + if not is_quantity_def: + pass + # raise TabularParserError( + # f"To create a new entry from {target_section_str}, it should be of type Reference.") + if parser.__code__.co_argcount == 2: + parser(data, section_to_entry) + else: + # If there is a match, then remove the matched sections from row_sections so the main entry + # does not populate the matched row_section + matched_rows = [re.sub(r"^.*?\/", "", single_entry_section)] + parser(section_to_entry, matched_rows, data, logger) + entry_name = set_entry_name(quantity_def, target_section, 0) + + from nomad.datamodel import EntryArchive, EntryMetadata + + child_archive = EntryArchive( + data=section_to_entry, + m_context=archive.m_context, + metadata=EntryMetadata(upload_id=archive.m_context.upload_id, entry_name=entry_name)) + + filename = f'{target_section.m_def.name}.archive.yaml' + create_archive(child_archive.m_to_dict(), archive.m_context, filename, 'yaml', logger) + + child_entry_id = generate_entry_id(archive.m_context.upload_id, filename, None) + + if is_quantity_def: + ref_quantity_proxy = MProxy( + m_proxy_value=f'../upload/archive/{child_entry_id}#/data', + m_proxy_context=self.m_context) + target_section.m_set(quantity_def, ref_quantity_proxy) + + if hasattr(self, single_entry_section.split('/')[0]): + setattr(self, single_entry_section.split('/')[0], None) + self.m_add_sub_section( + self.m_def.all_properties[single_entry_section.split('/')[0]], target_section, -1) + + def _parse_entry_mode(self, data, subsection_def, archive, is_root=False, logger=None): section = None is_referenced_section = False - if mode: + if is_root: section = subsection_def quantity_def = subsection_def child_sections = parse_table(data, subsection_def, logger=logger) @@ -251,6 +268,7 @@ class TableData(ArchiveSection): try: section = quantity_def.type.target_section_def.section_cls is_referenced_section = True + break except AttributeError: continue if not section: @@ -275,16 +293,24 @@ class TableData(ArchiveSection): setattr(self, subsection_def.name, MSubSectionList(self, subsection_def)) except AttributeError: pass + + # creating new entries for each new child_archives + from nomad.datamodel import EntryArchive, EntryMetadata + + # if mode is #root when creating multiple new entries, then append the first child to the current entry, + # and create new ones from second child onwards + if is_root: + first_child = child_sections.pop(0) + first_child_entry_name = archive.metadata.mainfile.split('.archive') + self.m_update_from_dict(first_child.m_to_dict()) + for index, child_section in enumerate(child_sections): filename = f"{mainfile_name}_{index}.entry_data.archive.{file_type}" - try: - entry_name: str = quantity_def.m_get_annotations('entry_name', None) - if entry_name.startswith('#'): - entry_name = f"{getattr(child_section, entry_name.split('/')[-1])}_{index}" - else: - entry_name = f"{quantity_def.m_get_annotations('entry_name', None)}_{index}" - except Exception: - entry_name = f"{quantity_def.name}_{index}" + if is_root: + entry_name: str = f'{first_child_entry_name[0]}_{index + 1}.archive{first_child_entry_name[1]}' + else: + entry_name: str = set_entry_name(quantity_def, child_section, index) + try: child_archive = EntryArchive( data=child_section, @@ -292,12 +318,12 @@ class TableData(ArchiveSection): metadata=EntryMetadata(upload_id=archive.m_context.upload_id, entry_name=entry_name)) except Exception: raise TabularParserError('New entries could not be generated.') - create_archive(child_archive.m_to_dict(), archive.m_context, filename, file_type) + create_archive(child_archive.m_to_dict(), archive.m_context, filename, file_type, logger=logger) if is_referenced_section: child_entry_id = generate_entry_id(archive.m_context.upload_id, filename, None) ref_quantity_proxy = MProxy( - m_proxy_value=f'../uploads/{archive.m_context.upload_id}/archive/{child_entry_id}#data', + m_proxy_value=f'../upload/archive/{child_entry_id}#/data', m_proxy_context=self.m_context) section_ref: MSection = subsection_def.sub_section.section_cls() section_ref.m_set(quantity_def, ref_quantity_proxy) @@ -308,18 +334,29 @@ class TableData(ArchiveSection): m_package.__init_metainfo__() +def set_entry_name(quantity_def, child_section, index) -> str: + if name := child_section.m_def.more.get('label_quantity', None): + entry_name = f"{child_section[name]}_{index}" + elif isinstance(quantity_def.type, Reference): + entry_name = f"{quantity_def.type._target_section_def.name}_{index}" + else: + entry_name = f"{quantity_def.name}_{index}" + return entry_name + + def _parse_column_mode(main_section, list_of_columns, data, logger=None): for column_section in list_of_columns: - try: - column_section_list = column_section.split('/') - section = create_subsection( - main_section.m_def.all_properties[column_section_list.pop(0)], - column_section_list).sub_section.section_cls() - except Exception: - logger.error( - f'{column_section} sub_section does not exist. There might be a problem in schema definition') - parse_columns(data, section) - setattr(main_section, column_section, section) + if column_section != root_mapping['root']: + try: + column_section_list = column_section.split('/') + section = create_subsection( + main_section.m_def.all_properties[column_section_list.pop(0)], + column_section_list).sub_section.section_cls() + except Exception: + logger.error( + f'{column_section} sub_section does not exist. There might be a problem in schema definition') + parse_columns(data, section) + setattr(main_section, column_section, section) def append_section_to_subsection(main_section, section_name: str, source_section: MSection): @@ -347,8 +384,11 @@ def _parse_row_mode(main_section, row_sections, data, logger): for section_name in section_names: section_name_list = section_name.split('/') section_name_str = section_name_list[0] - target_sub_section = main_section.m_def.all_properties[section_name_str] - section_def = target_sub_section.sub_section + try: + target_sub_section = main_section.m_def.all_properties[section_name_str] + section_def = target_sub_section.sub_section + except Exception: + raise TabularParserError('row-mode failed to parse the list of subsections') if not list_of_visited_sections.count(section_name_str): list_of_visited_sections.append(section_name_str) @@ -393,68 +433,63 @@ def _create_column_to_quantity_mapping(section_def: Section): annotation = annotation[0] if isinstance(annotation, list) else annotation if annotation and annotation.name: col_name = annotation.name - else: - col_name = quantity.name - if len(path) > 0: - col_name = f'{".".join([item[0].name for item in path])}.{col_name}' - if col_name in mapping: - raise MetainfoError( - f'The schema has non unique column names. {col_name} exists twice. ' - f'Column names must be unique, to be used for tabular parsing.') + if col_name in mapping: + raise MetainfoError( + f'The schema has non unique column names. {col_name} exists twice. ' + f'Column names must be unique, to be used for tabular parsing.') - def set_value( - section: MSection, value, section_path_to_top_subsection=[], path=path, quantity=quantity, - annotation: TabularAnnotation = annotation): + def set_value( + section: MSection, value, section_path_to_top_subsection=[], path=path, quantity=quantity, + annotation: TabularAnnotation = annotation): - for sub_section, section_def in path: - next_section = None - try: - next_section = section.m_get_sub_section(sub_section, -1) - except (KeyError, IndexError): - pass - if not next_section: - next_section = section_def.section_cls() - section.m_add_sub_section(sub_section, next_section, -1) - section = next_section - - if annotation and annotation.unit: - value *= ureg(annotation.unit) - - # NaN values are not supported in the metainfo. Set as None - # which means that they are not stored. - if isinstance(value, float) and math.isnan(value): - value = None - - if isinstance(value, (int, float, str, pd.Timestamp)): - value = np.array([value]) - - if value is not None: - if len(value.shape) == 1 and len(quantity.shape) == 0: - if len(value) == 1: - value = value[0] - elif len(value) == 0: - value = None - else: + for sub_section, section_def in path: + next_section = None + try: + next_section = section.m_get_sub_section(sub_section, -1) + except (KeyError, IndexError): + pass + if not next_section: + next_section = section_def.section_cls() + section.m_add_sub_section(sub_section, next_section, -1) + section = next_section + + if annotation and annotation.unit: + value *= ureg(annotation.unit) + + # NaN values are not supported in the metainfo. Set as None + # which means that they are not stored. + if isinstance(value, float) and math.isnan(value): + value = None + + if isinstance(value, (int, float, str, pd.Timestamp)): + value = np.array([value]) + + if value is not None: + if len(value.shape) == 1 and len(quantity.shape) == 0: + if len(value) == 1: + value = value[0] + elif len(value) == 0: + value = None + else: + raise MetainfoError( + f'The shape of {quantity.name} does not match the given data.') + elif len(value.shape) != len(quantity.shape): raise MetainfoError( f'The shape of {quantity.name} does not match the given data.') - elif len(value.shape) != len(quantity.shape): - raise MetainfoError( - f'The shape of {quantity.name} does not match the given data.') - section.m_set(quantity, value) - _section_path_list: List[str] = list(_get_relative_path(section)) - _section_path_str: str = '/'.join(_section_path_list) - section_path_to_top_subsection.append(_section_path_str) - mapping[col_name] = set_value + section.m_set(quantity, value) + _section_path_list: List[str] = list(_get_relative_path(section)) + _section_path_str: str = '/'.join(_section_path_list) + section_path_to_top_subsection.append(_section_path_str) + mapping[col_name] = set_value for sub_section in section_def.all_sub_sections.values(): if sub_section in properties: continue next_base_section = sub_section.sub_section properties.add(sub_section) - for sub_section_section in next_base_section.all_inheriting_sections + [next_base_section]: - add_section_def(sub_section_section, path + [(sub_section, sub_section_section,)]) + add_section_def(next_base_section, path + [(sub_section, next_base_section,)]) add_section_def(section_def, []) return mapping @@ -554,8 +589,10 @@ def parse_table(pd_dataframe, section_def: Section, logger): logger.error( 'could not parse cell', details=dict(row=row_index, column=col_name), exc_info=e) - if col_index > 0: + if col_index > 0 and temp_quantity_path_container[0].split('/')[1:]: path_quantities_to_top_subsection.update(temp_quantity_path_container) + elif col_index > 0 and not temp_quantity_path_container[0].split('/')[1:]: + raise TabularParserError(f'there is a repeated column {column} that is not placed into a subsection in the schema. Please fix the schema.') except Exception as e: logger.error('could not parse row', details=dict(row=row_index), exc_info=e) @@ -579,7 +616,15 @@ def parse_table(pd_dataframe, section_def: Section, logger): def _strip_whitespaces_from_df_columns(df): transformed_column_names: Dict[str, str] = {} for col_name in list(df.columns): - transformed_column_names.update({col_name: col_name.strip()}) + cleaned_col_name = col_name.strip().split('.')[0] + count = 0 + for string in transformed_column_names.values(): + if cleaned_col_name in string: + count += 1 + if count: + transformed_column_names.update({col_name: f'{cleaned_col_name}.{count}'}) + else: + transformed_column_names.update({col_name: col_name.strip()}) df.rename(columns=transformed_column_names, inplace=True) @@ -600,7 +645,7 @@ def _append_subsections_from_section(section_name: List[str], target_section: MS def read_table_data( path, file_or_path=None, - comment: str = None, sep: str = None, skiprows: int = None): + comment: str = None, sep: str = None, skiprows: Union[list[int], int] = None, separator: str = None): import pandas as pd df = pd.DataFrame() @@ -612,14 +657,15 @@ def read_table_data( file_or_path if isinstance(file_or_path, str) else file_or_path.name) for sheet_name in excel_file.sheet_names: df.loc[0, sheet_name] = [ - pd.read_excel(excel_file, sheet_name=sheet_name, comment=comment).to_dict() + pd.read_excel(excel_file, skiprows=skiprows, sheet_name=sheet_name, comment=comment).to_dict() ] else: df.loc[0, 0] = [ pd.read_csv( file_or_path, engine='python', comment=comment, - sep=sep, + sep=sep if sep else separator, + skiprows=skiprows, skipinitialspace=True ).to_dict() ] @@ -672,47 +718,10 @@ class TabularDataParser(MatchingParser): data = pd.DataFrame.from_dict(data.iloc[0, 0]) return [str(item) for item in range(0, data.shape[0])] - def parse( - self, mainfile: str, archive: EntryArchive, logger=None, - child_archives: Dict[str, EntryArchive] = None - ): + def parse(self, logger=None, **kwargs): if logger is None: logger = utils.get_logger(__name__) - - # We use mainfile to check the files existence in the overall fs, - # and archive.metadata.mainfile to get an upload/raw relative schema_file - schema_file = self._get_schema(mainfile, archive.metadata.mainfile) - if schema_file is None: - logger.error('Tabular data file without schema.', details=( - 'For a tabular file like name.schema.archive.csv, there has to be an ' - 'uploaded schema like schema.archive.yaml')) - return - - try: - schema_archive = cast(Context, archive.m_context).load_raw_file( - schema_file, archive.metadata.upload_id, None) - package = schema_archive.definitions - section_def = package.section_definitions[0] - except Exception as e: - logger.error('Could not load schema', exc_info=e) - return - - if TableRow.m_def not in section_def.base_sections: - logger.error('Schema for tabular data must inherit from TableRow.') - return - - annotation: TabularParserAnnotation = section_def.m_get_annotations('tabular_parser') - kwargs = annotation.dict(include={'comment', 'sep', 'skiprows'}) if annotation else {} - data = read_table_data(mainfile, **kwargs) - child_sections = parse_table(data, section_def, logger=logger) - assert len(child_archives) == len(child_sections) - - table = Table() - archive.data = table - - child_section_refs: List[MSection] = [] - for child_archive, child_section in zip(child_archives.values(), child_sections): - child_archive.data = child_section - child_section_refs.append(child_section) - child_section.table_ref = table - table.row_refs = child_section_refs + logger.error(''' + You are trying to use the legacy tabular parser. Now it is encapsulated in buitl-in TableData + ''') + return diff --git a/nomad/processing/data.py b/nomad/processing/data.py index 78762d940d774bd837f1da98006c0a3c809c8c5a..b3c51200073addf516c2e6931dec3cfbe9196ef1 100644 --- a/nomad/processing/data.py +++ b/nomad/processing/data.py @@ -427,7 +427,7 @@ class MetadataEditRequestHandler: return True, self._verified_value_single(definition, raw_value) else: # We have a non-scalar quantity - if type(raw_value) == dict: + if isinstance(raw_value, dict): # The raw value is a dict - expected to contain keys add/remove/set assert raw_value, 'No operation specified' for key in raw_value: @@ -450,7 +450,7 @@ class MetadataEditRequestHandler: verified_ops = {} for op, values in raw_ops.items(): - values = values if type(values) == list else [values] + values = values if isinstance(values, list) else [values] verified_values = [self._verified_value_single(definition, v, op) for v in values] verified_ops[op] = verified_values @@ -486,13 +486,13 @@ class MetadataEditRequestHandler: datetime.fromisoformat(value) # Throws exception if badly formatted timestamp return None if value == '' else value elif isinstance(definition.type, metainfo.MEnum): - assert type(value) == str, 'Expected a string value' + assert isinstance(value, str), 'Expected a string value' if value == '': return None assert value in definition.type._values, f'Bad enum value {value}' return value elif isinstance(definition.type, metainfo.Reference): - assert type(value) == str, 'Expected a string value' + assert isinstance(value, str), 'Expected a string value' reference_type = definition.type.target_section_def.section_cls if reference_type in [datamodel.User, datamodel.Author]: if value in self.encountered_users: @@ -930,15 +930,15 @@ class Entry(Proc): # parts that are referenced by section_metadata/EntryMetadata # TODO somehow it should determine which root sections too load from the metainfo # or configuration - archive = upload.upload_files.read_archive(self.entry_id) - entry_archive = archive[self.entry_id] - entry_archive_dict = {section_metadata: to_json(entry_archive[section_metadata])} - if section_workflow in entry_archive: - entry_archive_dict[section_workflow] = to_json(entry_archive[section_workflow]) - if section_results in entry_archive: - entry_archive_dict[section_results] = to_json(entry_archive[section_results]) - entry_metadata = datamodel.EntryArchive.m_from_dict(entry_archive_dict)[section_metadata] - self._apply_metadata_from_mongo(upload, entry_metadata) + with upload.upload_files.read_archive(self.entry_id) as archive: + entry_archive = archive[self.entry_id] + entry_archive_dict = {section_metadata: to_json(entry_archive[section_metadata])} + if section_workflow in entry_archive: + entry_archive_dict[section_workflow] = to_json(entry_archive[section_workflow]) + if section_results in entry_archive: + entry_archive_dict[section_results] = to_json(entry_archive[section_results]) + entry_metadata = datamodel.EntryArchive.m_from_dict(entry_archive_dict)[section_metadata] + self._apply_metadata_from_mongo(upload, entry_metadata) except KeyError: # Due to hard processing failures, it might be possible that an entry might not # have an archive. Return the metadata that is available. @@ -1902,6 +1902,7 @@ class Upload(Proc): old_entries.add(entry.entry_id) with utils.timer(logger, 'matching completed'): + entries = [] for mainfile, mainfile_key, parser in self.match_mainfiles(path_filter, updated_files): entry, was_created, metadata_handler = self._get_or_create_entry( mainfile, mainfile_key, parser, @@ -1910,10 +1911,20 @@ class Upload(Proc): metadata_handler=metadata_handler, logger=logger) - if not was_created and entry is not None: + if was_created: + entries.append(entry) + # batched write if memory is an issue + # if len(entries) > 1000: + # Entry.objects.insert(entries) + # entries = [] + elif entry is not None: old_entries.remove(entry.entry_id) - # Delete old entries + with utils.timer(logger, 'storing entry metadata to mongo'): + if entries: + Entry.objects.insert(entries) + + # Delete old entries if len(old_entries) > 0: logger.warn('Some entries did not match', count=len(old_entries)) if not self.published or reprocess_settings.delete_unmatched_published_entries: @@ -1928,7 +1939,7 @@ class Upload(Proc): # to minimize problems (should be safe to do so). if processing_entries: logger.warn('Some entries are processing', count=len(processing_entries)) - with utils.timer(logger, 'processing entries resetted'): + with utils.timer(logger, 'processing entries reset'): Entry._get_collection().update_many( {'_id': {'$in': processing_entries}}, {'$set': Entry.reset_pymongo_update( @@ -1961,7 +1972,7 @@ class Upload(Proc): # No existing entry found if can_create: # Create new entry - entry = Entry.create( + entry = Entry( entry_id=entry_id, mainfile=mainfile, mainfile_key=mainfile_key, @@ -1975,7 +1986,6 @@ class Upload(Proc): entry_metadata = metadata_handler.get_entry_mongo_metadata(self, entry) for quantity_name, mongo_value in entry_metadata.items(): setattr(entry, quantity_name, mongo_value) - entry.save() was_created = True return entry, was_created, metadata_handler @@ -2030,20 +2040,28 @@ class Upload(Proc): for mainfile, mainfile_key, parser in self.match_mainfiles(path, None): # File matched! - entry, _was_created, metadata_handler = self._get_or_create_entry( + entry, was_created, metadata_handler = self._get_or_create_entry( mainfile, mainfile_key, parser, raise_if_exists=not allow_modify or self.published, can_create=not self.published, metadata_handler=metadata_handler, logger=logger) + + if was_created: + entry.save() + if entry: if self.current_process_flags.is_local: # Running locally if entry.process_running: # Should not happen, but if it does happen (which suggests that some jobs # have been interrupted abnormally or the like) we reset it, to avoid problems. - logger.warn('Running locally and entry is already processing, will reset it.', entry_id=entry.entry_id) - entry.reset(force=True, worker_hostname=self.worker_hostname, process_status=ProcessStatus.FAILURE) + logger.warn( + 'Running locally and entry is already processing, will reset it.', + entry_id=entry.entry_id) + entry.reset( + force=True, worker_hostname=self.worker_hostname, + process_status=ProcessStatus.FAILURE) entry.save() # Run also this entry processing locally. If it fails, an exception will be raised. entry.process_entry_local() @@ -2218,7 +2236,7 @@ class Upload(Proc): query = Entry.objects(upload_id=self.upload_id)[start:end] if not order_by: return query - if type(order_by) == str: + if isinstance(order_by, str): return query.order_by(order_by) assert type(order_by) == tuple, 'order_by must be a string or a tuple if set' return query.order_by(*order_by) diff --git a/nomad/search.py b/nomad/search.py index d03156083847db8e3e549be249e1ab60571d5030..03deb6f59efae97f05983cd7fa3ca91a35229342 100644 --- a/nomad/search.py +++ b/nomad/search.py @@ -32,9 +32,12 @@ update the v1 materials index according to the performed changes. TODO this is o partially implemented. ''' -from typing import Union, List, Tuple, Iterable, Any, cast, Dict, Iterator, Generator, Callable +from typing import Union, List, Tuple, Iterable, Any, cast, Dict, Iterator, Generator, Callable, Optional +import re +import fnmatch import math import json +from enum import Enum import elasticsearch.helpers from elasticsearch.exceptions import TransportError, RequestError from elasticsearch_dsl import Q, A, Search @@ -44,9 +47,10 @@ from pydantic import ValidationError from nomad import config, infrastructure, utils from nomad import datamodel -from nomad.app.v1 import models +from nomad.app.v1.models import models from nomad.datamodel import EntryArchive, EntryMetadata, user_reference, author_reference -from nomad.app.v1.models import ( +from nomad.metainfo import Quantity, Datetime +from nomad.app.v1.models.models import ( AggregationPagination, Criteria, MetadataPagination, Pagination, PaginationResponse, QuantityAggregation, Query, MetadataRequired, MetadataResponse, Aggregation, StatisticsAggregation, StatisticsAggregationResponse, @@ -57,7 +61,19 @@ from nomad.app.v1.models import ( from nomad.metainfo.elasticsearch_extension import ( index_entries, entry_type, entry_index, DocumentType, material_type, entry_type, material_entry_type, - entry_index, Index, DocumentType, SearchQuantity, update_materials) + entry_index, Index, DocumentType, SearchQuantity, create_dynamic_quantity_annotation, update_materials, + get_searchable_quantity_value_field, schema_separator, yaml_prefix, parse_quantity_name +) + + +class AggType(str, Enum): + '''Enumeration for the different aggregation types.''' + TERMS = 'terms' + MIN_MAX = 'min_max' + HISTOGRAM = 'histogram' + DATE_HISTOGRAM = 'date_histogram' + AUTO_DATE_HISTOGRAM = 'auto_date_histogram' + STATISTICS = 'statistics' def update_by_query( @@ -83,7 +99,7 @@ def update_by_query( es_query_normalized = normalize_api_query(cast(Query, query), doc_type=entry_type) owner_query = _owner_es_query(owner=owner, user_id=user_id, doc_type=entry_type) - es_query_validated = validate_api_query(es_query_normalized, entry_type, owner_query) + es_query_validated = _api_to_es_query(es_query_normalized, entry_type, owner_query) body = { 'script': { @@ -124,7 +140,7 @@ def delete_by_query( es_query_normalized = normalize_api_query(cast(Query, query), doc_type=entry_type) owner_query = _owner_es_query(owner=owner, user_id=user_id, doc_type=entry_type) - es_query_validated = validate_api_query(es_query_normalized, entry_type, owner_query) + es_query_validated = _api_to_es_query(es_query_normalized, entry_type, owner_query) body = { 'query': es_query_validated.to_dict() @@ -285,13 +301,119 @@ _all_author_quantities = [ if quantity.type in [user_reference, author_reference]] -def _es_to_entry_dict(hit, required: MetadataRequired = None) -> Dict[str, Any]: +def _api_to_es_required(required: MetadataRequired, pagination: MetadataPagination, doc_type: DocumentType) -> Tuple[Optional[List[str]], Optional[List[str]], bool]: + ''' + Translates an API include/exclude argument into the appropriate ES + arguments. Note that certain fields cannot be excluded from the underlying + ES call, but will be excluded in the response. + ''' + # Suggestion values are always excluded + excludes = ["*__suggestion"] + includes = None + requires_filtering = False + + def includes_dynamic(include): + for pattern in [] if include is None else include: + if pattern.startswith('data'): + return True + return False + + if required: + # Validate quantities + # TODO validate quantities with wildcards + for list_ in [required.include, required.exclude]: + for quantity in [] if list_ is None else list_: + if '*' not in quantity: + validate_quantity(quantity, doc_type=doc_type, loc=['required']) + + if required.include is not None and pagination.order_by not in required.include: + required.include.append(pagination.order_by) + + if required.exclude is not None and pagination.order_by in required.exclude: + required.exclude.remove(pagination.order_by) + + if required.include is not None and doc_type.id_field not in required.include: + required.include.append(doc_type.id_field) + + if required.exclude is not None and doc_type.id_field in required.exclude: + required.exclude.remove(doc_type.id_field) + + if required.include: + includes = list(required.include) + + # Searchable quantities must be included if dynamic quantities are + # requested, and searchable quantities cannot be excluded because we use + # that information to reconstruct the dynamic quantities. Note that we + # only modify the underlying ES call without changing the API request + # itself. + # TODO: Handle exclude patterns starting with wildcard + if includes_dynamic(includes): + includes.append('search_quantities*') + requires_filtering = True + if required.exclude: + for pattern in required.exclude: + if pattern.startswith('search_quantities'): + requires_filtering = True + else: + excludes.append(pattern) + if includes_dynamic(excludes): + requires_filtering = True + + return includes, excludes, requires_filtering + + +def _es_to_api_pagination(es_response, pagination: MetadataPagination, order_quantity: SearchQuantity, doc_type) -> PaginationResponse: + ''' + Translates an ES pagination response into a pagination response that is + expected by the API. + ''' + next_page_after_value = None + if 0 < len(es_response.hits) < es_response.hits.total.value and len(es_response.hits) >= pagination.page_size: + last = es_response.hits[-1] + if order_quantity.search_field == doc_type.id_field: + next_page_after_value = last[doc_type.id_field] + else: + # after_value is not necessarily the value stored in the field + # itself: internally ES can perform the sorting on a different + # value which is reported under meta.sort. + after_value = last.meta.sort[0] + next_page_after_value = '%s:%s' % (after_value, last[doc_type.id_field]) + + # For dynamic YAML quantities the field name is normalized to not include + # the data type + request_pagination = pagination.dict() + if order_quantity.dynamic: + request_pagination['order_by'] = order_quantity.qualified_name + + return PaginationResponse( + total=es_response.hits.total.value, + next_page_after_value=next_page_after_value, + **request_pagination) + + +def _es_to_entry_dict(hit, required: MetadataRequired = None, requires_filtering: bool = False, doc_type=None) -> Dict[str, Any]: ''' - Elasticsearch entry metadata does not contain default values, if a metadata is not - set. This will add default values to entry metadata in dict form obtained from - elasticsearch. + Translates an ES hit response into a response data object that is expected + by the API. ''' + def filter_hit(hit, include, exclude): + '''Used to filter the hit based on the required fields. + ''' + flattened_dict = utils.flatten_dict(hit, flatten_list=True) + keys = list(flattened_dict.keys()) + key_pattern_map = {key: re.sub(r'\.\d+\.', '.', key) for key in keys} + if include is not None: + keys = [key for key in keys if any(fnmatch.fnmatch(key_pattern_map[key], pattern) for pattern in include)] + if exclude is not None: + keys = [key for key in keys if not any(fnmatch.fnmatch(key_pattern_map[key], pattern) for pattern in exclude)] + filtered_dict = {key: flattened_dict[key] for key in keys} + hit = utils.rebuild_dict(filtered_dict) + + return hit + entry_dict = hit.to_dict() + + # Add metadata default values for key, value in _entry_metadata_defaults.items(): if key not in entry_dict: if required is not None: @@ -302,6 +424,7 @@ def _es_to_entry_dict(hit, required: MetadataRequired = None) -> Dict[str, Any]: entry_dict[key] = value + # Delete author email for author_quantity in _all_author_quantities: authors = entry_dict.get(author_quantity) if authors is None: @@ -312,6 +435,51 @@ def _es_to_entry_dict(hit, required: MetadataRequired = None) -> Dict[str, Any]: if 'email' in author: del(author['email']) + # The search_quantities field is mapped here into the return structure + search_quantities = entry_dict.get('search_quantities') + if search_quantities: + flattened_dict = {} + for search_quantity in search_quantities: + id = search_quantity.get('id') + path_archive = search_quantity.get('path_archive') + if id is None or path_archive is None: + continue + quantity = doc_type.quantities.get(id) + if not quantity: + path, schema, _ = parse_quantity_name(id) + if schema and schema.startswith(yaml_prefix): + dtype_map = { + 'float_value': float, + 'str_value': str, + 'int_value': int, + 'bool_value': bool, + 'datetime_value': Datetime, + } + dtype = None + for key, value in dtype_map.items(): + if key in search_quantity: + dtype = value + break + quantity = get_yaml_quantity(path, schema, dtype, doc_type) + else: + continue + value_field_name = get_searchable_quantity_value_field(quantity.annotation) + if not value_field_name: + continue + value = search_quantity[value_field_name] + flattened_dict[path_archive] = value + entry_dict.update(utils.rebuild_dict(flattened_dict)) + + # Here we do additional filtering that could not be done by ES directly + # TODO: If we at some point don't need to return search_quantities at + # all, this filtering could be replaced by the action of dropping the whole + # search_quantities field and doing additional filtering for the + # constructed dynamic quantities. + if requires_filtering and required: + include_patterns = [pattern.split(schema_separator)[0] for pattern in required.include] if required.include else None + exclude_patterns = [pattern.split(schema_separator)[0] for pattern in required.exclude] if required.exclude else None + entry_dict = filter_hit(entry_dict, include_patterns, exclude_patterns) + return entry_dict @@ -364,6 +532,18 @@ class QueryValidationError(Exception): self.errors = [ErrorWrapper(Exception(error), loc=loc)] +def get_yaml_quantity(path, schema, dtype, doc_type): + '''Creates a SearchQuantity definition for a YAML quantity. + ''' + quantity_def = Quantity(type=dtype) + annotation = create_dynamic_quantity_annotation(quantity_def, doc_type) + quantity = SearchQuantity( + annotation, + qualified_name=f'{path}{schema_separator}{schema}' + ) + return quantity + + def validate_quantity( quantity_name: str, doc_type: DocumentType = None, loc: List[str] = None) -> SearchQuantity: @@ -388,16 +568,34 @@ def validate_quantity( quantity = doc_type.quantities.get(quantity_name) if quantity is None: - raise QueryValidationError( - f'{quantity_name} is not a {doc_type} quantity', - loc=[quantity_name] if loc is None else loc) + path, schema, dtype = parse_quantity_name(quantity_name) + if schema and schema.startswith(yaml_prefix): + datatype = { + 'int': int, + 'str': str, + 'float': float, + 'bool': bool, + 'datetime': Datetime, + }.get(dtype) + if not datatype: + raise QueryValidationError(( + f'Could not resolve the data type for quantity {quantity_name}. ' + 'Please include the data type in the quantity name for quantities ' + 'that target a custom YAML schema.'), + loc=[quantity_name] if loc is None else loc + ) + quantity = get_yaml_quantity(path, schema, datatype, doc_type) + else: + raise QueryValidationError( + f'{quantity_name} is not a {doc_type} quantity', + loc=[quantity_name] if loc is None else loc) return quantity def normalize_api_query(query: Query, doc_type: DocumentType, prefix: str = None) -> Query: ''' - Normalizes the given query. Should be applied before validate_api_query, which + Normalizes the given query. Should be applied before _api_to_es_query, which expects a normalized query. Normalization will - replace nested dicts with`models.And`, `models.Nested` instances - introduce `models.Nested` if necessary @@ -414,6 +612,8 @@ def normalize_api_query(query: Query, doc_type: DocumentType, prefix: str = None prefixes = [] name_wo_prefix = name nested_prefix = None + + # If targeting nested key, add the nested filter for nested_key in doc_type.nested_object_keys: if nested_key == prefix: continue @@ -517,7 +717,7 @@ def remove_quantity_from_query(query: Query, quantity: str, prefix=None): raise NotImplementedError(f'Query type {query.__class__} is not supported') -def validate_api_query( +def _api_to_es_query( query: Query, doc_type: DocumentType, owner_query: EsQuery, prefix: str = None) -> EsQuery: ''' Creates an ES query based on the API's query model. This needs to be a normalized @@ -543,7 +743,6 @@ def validate_api_query( Raises: QueryValidationError ''' - def match(name: str, value: Value) -> EsQuery: if prefix is not None: name = f'{prefix}.{name}' @@ -561,13 +760,10 @@ def validate_api_query( # TODO non keyword quantities, type checks quantity = validate_quantity(name, doc_type=doc_type) - normalizer = quantity.annotation.normalizer - if normalizer: - value = normalizer(value) - return Q(quantity.annotation.es_query, **{quantity.search_field: value}) + return quantity.get_query(value) def validate_query(query: Query) -> EsQuery: - return validate_api_query( + return _api_to_es_query( query, doc_type=doc_type, owner_query=owner_query, prefix=prefix) def validate_criteria(name: str, value: Any): @@ -584,9 +780,7 @@ def validate_api_query( if prefix is not None: name = f'{prefix}.{name}' quantity = validate_quantity(name, doc_type=doc_type) - return Q('range', **{quantity.search_field: value.dict( - exclude_unset=True, - )}) + return quantity.get_range_query(value) elif isinstance(value, (models.And, models.Or, models.Not)): return validate_query(value) @@ -612,7 +806,7 @@ def validate_api_query( if isinstance(query, models.Nested): sub_doc_type = material_entry_type if query.prefix == 'entries' else doc_type - sub_query = validate_api_query( + sub_query = _api_to_es_query( query.query, doc_type=sub_doc_type, prefix=query.prefix, owner_query=owner_query) if query.prefix == 'entries': @@ -633,7 +827,7 @@ def validate_pagination(pagination: Pagination, doc_type: DocumentType, loc: Lis order_quantity = None if pagination.order_by is not None: order_quantity = validate_quantity( - pagination.order_by, doc_type=doc_type, loc=['pagination', 'order_by']) + pagination.order_by, doc_type=doc_type, loc=(loc if loc else []) + ['pagination', 'order_by']) if not order_quantity.definition.is_scalar: raise QueryValidationError( 'the order_by quantity must be a scalar', @@ -650,21 +844,66 @@ def validate_pagination(pagination: Pagination, doc_type: DocumentType, loc: Lis return order_quantity, page_after_value +def _api_to_es_sort(pagination: Pagination, doc_type: DocumentType, loc: List[str] = None) -> Tuple[Dict[str, Any], SearchQuantity, str]: + ''' + Creates an ES sort based on the API's pagination model. + + Args: + pagination: The API pagination setup. + doc_type: The document type to target + loc: Request location information for validation error messages + ''' + order_quantity, page_after_value = validate_pagination(pagination, doc_type, loc) + + sort: Dict[str, Any] = {} + if order_quantity.dynamic: + path = order_quantity.get_dynamic_path() + postfix = '.keyword' + section = path[:-len(postfix)] if path.endswith(postfix) else path + section = section.rsplit('.', 1)[0] + sort = { + path: { + 'order': pagination.order, + 'nested': { + 'path': section, + 'filter': order_quantity.get_dynamic_filter().to_dict(), + } + } + } + else: + path = order_quantity.search_field + sort = {order_quantity.search_field: pagination.order} + + # Add secondary sorting based on doc id + if path != doc_type.id_field: + sort[doc_type.id_field] = pagination.order + + return sort, order_quantity, page_after_value + + def _api_to_es_aggregation( es_search: Search, name: str, agg: AggregationBase, doc_type: DocumentType, post_agg_query: models.Query, create_es_query: Callable[[models.Query], EsQuery]) -> A: ''' Creates an ES aggregation based on the API's aggregation model. - ''' + Args: + name: Unique identifier for this aggregation. + agg: The aggregation information + ''' agg_name = f'agg:{name}' es_aggs = es_search.aggs + filter = None + # When the aggregation has been configured with exclude_from_search, we need + # to remove any filters targeting the aggregated quantity in the aggregation + # filters, but keep then in the post_agg_query if post_agg_query: if isinstance(agg, QuantityAggregation) and agg.exclude_from_search: filter = create_es_query(remove_quantity_from_query(post_agg_query, agg.quantity)) else: filter = create_es_query(post_agg_query) + if filter is not None: es_aggs = es_aggs.bucket(f'{agg_name}:filtered', A('filter', filter=filter)) if isinstance(agg, StatisticsAggregation): @@ -683,34 +922,48 @@ def _api_to_es_aggregation( return + # Get quantity aggregation details agg = cast(QuantityAggregation, agg) + quantity = validate_quantity(agg.quantity, doc_type=doc_type, loc=['aggregation', 'quantity']) + + # When targeting nested fields, add nested aggregation longest_nested_key = None is_nested = False - quantity = validate_quantity(agg.quantity, doc_type=doc_type, loc=['aggregation', 'quantity']) for nested_key in doc_type.nested_object_keys: if agg.quantity.startswith(nested_key): es_aggs = es_aggs.bucket('nested_agg:%s' % name, 'nested', path=nested_key) longest_nested_key = nested_key is_nested = True - es_agg = None + # If the quantity is dynamic, we need to add additional nested aggregation + # filters that ensure the returned values target only the specified + # quantity. + if quantity.dynamic: + es_aggs = es_aggs.bucket('nested_agg:%s' % name, 'nested', path='search_quantities') + is_nested = True + longest_nested_key = 'search_quantities' + es_aggs = es_aggs.bucket( + f'nested_agg:{name}:filtered', + A('filter', filter=quantity.dynamic_filter) + ) + es_agg = None if isinstance(agg, TermsAggregation): - if not quantity.aggregatable: + if not quantity.annotation.aggregatable: raise QueryValidationError( 'The aggregation quantity cannot be used in a terms aggregation.', - loc=['aggregation', name, 'terms', 'quantity']) + loc=['aggregation', name, AggType.TERMS, 'quantity']) if agg.pagination is not None: if post_agg_query is not None: raise QueryValidationError( - f'aggregation pagination cannot be used with exclude_from_search in the same request', - loc=['aggregations', name, 'terms', 'pagination']) + f'Aggregation pagination cannot be used with exclude_from_search in the same request', + loc=['aggregations', name, AggType.TERMS, 'pagination']) if agg.size is not None: raise QueryValidationError( f'You cannot paginate and provide an extra size parameter.', - loc=['aggregations', name, 'terms', 'pagination']) + loc=['aggregations', name, AggType.TERMS, 'pagination']) order_quantity, page_after_value = validate_pagination( agg.pagination, doc_type=doc_type, loc=['aggregation']) @@ -718,7 +971,7 @@ def _api_to_es_aggregation( # We are using elastic searchs 'composite aggregations' here. We do not really # compose aggregations, but only those pseudo composites allow us to use the # 'after' feature that allows to scan through all aggregation values. - terms = A('terms', field=quantity.search_field, order=agg.pagination.order.value) + terms = A(AggType.TERMS, field=quantity.search_field, order=agg.pagination.order) if order_quantity is None: composite = { @@ -730,9 +983,9 @@ def _api_to_es_aggregation( else: sort_terms = A( - 'terms', + AggType.TERMS, field=order_quantity.search_field, - order=agg.pagination.order.value) + order=agg.pagination.order) composite = { 'sources': [ @@ -776,7 +1029,7 @@ def _api_to_es_aggregation( else: terms_kwargs["include"] = agg.include - terms = A('terms', field=quantity.search_field, size=agg.size, **terms_kwargs) + terms = A(AggType.TERMS, field=quantity.search_field, size=agg.size, **terms_kwargs) es_agg = es_aggs.bucket(agg_name, terms) if agg.entries is not None and agg.entries.size > 0: @@ -793,40 +1046,40 @@ def _api_to_es_aggregation( es_agg.bucket(f'agg:parents:{name}', A('reverse_nested')) elif isinstance(agg, AutoDateHistogramAggregation): - if not quantity.annotation.mapping['type'] in ['date']: + if quantity.annotation.mapping['type'] not in ['date']: raise QueryValidationError( f'The quantity {quantity} cannot be used in a auto date histogram aggregation', - loc=['aggregations', name, 'histogram', 'quantity']) + loc=['aggregations', name, AggType.HISTOGRAM, 'quantity']) es_agg = es_aggs.bucket(agg_name, A( - 'auto_date_histogram', field=quantity.search_field, buckets=agg.buckets, + AggType.AUTO_DATE_HISTOGRAM, field=quantity.search_field, buckets=agg.buckets, format='yyyy-MM-dd')) elif isinstance(agg, DateHistogramAggregation): - if not quantity.annotation.mapping['type'] in ['date']: + if quantity.annotation.mapping['type'] not in ['date']: raise QueryValidationError( f'The quantity {quantity} cannot be used in a date histogram aggregation', - loc=['aggregations', name, 'histogram', 'quantity']) + loc=['aggregations', name, AggType.HISTOGRAM, 'quantity']) es_agg = es_aggs.bucket(agg_name, A( - 'date_histogram', field=quantity.search_field, interval=agg.interval, + AggType.DATE_HISTOGRAM, field=quantity.search_field, interval=agg.interval, format='yyyy-MM-dd')) elif isinstance(agg, HistogramAggregation): - if not quantity.annotation.mapping['type'] in ['integer', 'float', 'double', 'long', 'date']: + if quantity.annotation.mapping['type'] not in ['integer', 'float', 'double', 'long', 'date']: raise QueryValidationError( f'The quantity {quantity} cannot be used in a histogram aggregation', - loc=['aggregations', name, 'histogram', 'quantity']) + loc=['aggregations', name, AggType.HISTOGRAM, 'quantity']) params: Dict[str, Any] = {} if agg.offset is not None: params['offset'] = agg.offset if agg.extended_bounds is not None: params['extended_bounds'] = agg.extended_bounds.dict() es_agg = es_aggs.bucket(agg_name, A( - 'histogram', field=quantity.search_field, interval=agg.interval, **params)) + AggType.HISTOGRAM, field=quantity.search_field, interval=agg.interval, **params)) elif isinstance(agg, MinMaxAggregation): - if not quantity.annotation.mapping['type'] in ['integer', 'float', 'double', 'long', 'date']: + if quantity.annotation.mapping['type'] not in ['integer', 'float', 'double', 'long', 'date']: raise QueryValidationError( f'The quantity {quantity} cannot be used in a mix-max aggregation', loc=['aggregations', name, 'min_max', 'quantity']) @@ -854,27 +1107,27 @@ def _api_to_es_aggregation( def _es_to_api_aggregation( es_response, name: str, agg: AggregationBase, - histogram_responses: Dict[str, HistogramAggregation], bucket_values: Dict[str, float], + histogram_responses: Dict[str, HistogramAggregation], + bucket_values: Dict[str, float], doc_type: DocumentType): ''' Creates a AggregationResponse from elasticsearch response on a request executed with the given aggregation. ''' es_aggs = es_response.aggs - + aggregation_dict = agg.dict(by_alias=True) filtered_agg_name = f'agg:{name}:filtered' if filtered_agg_name in es_response.aggs: es_aggs = es_aggs[f'agg:{name}:filtered'] - aggregation_dict = agg.dict(by_alias=True) - - # The histogram config is written from the original request. + # The histogram config is returned using the original request. histogram_response = histogram_responses.get(name) bucket_value = bucket_values.get(name) if histogram_response is not None: aggregation_dict['buckets'] = histogram_response.buckets aggregation_dict['interval'] = histogram_response.interval + # Statistics aggregation if isinstance(agg, StatisticsAggregation): metrics = {} for metric in agg.metrics: # type: ignore @@ -883,6 +1136,7 @@ def _es_to_api_aggregation( return AggregationResponse( statistics=StatisticsAggregationResponse(data=metrics, **aggregation_dict)) + # If targeting nested object resolve nested aggregation result agg = cast(QuantityAggregation, agg) quantity = validate_quantity(agg.quantity, doc_type=doc_type) longest_nested_key = None @@ -891,8 +1145,16 @@ def _es_to_api_aggregation( es_aggs = es_aggs[f'nested_agg:{name}'] longest_nested_key = nested_key - has_no_pagination = getattr(agg, 'pagination', None) is None + # Dynamic quantity queries need to be translated back to using the original + # name and response structure + if quantity.dynamic: + aggregation_dict['quantity'] = quantity.qualified_name + es_aggs = es_aggs[f'nested_agg:{name}'] + es_aggs = es_aggs[f'nested_agg:{name}:filtered'] + longest_nested_key = 'search_quantities' + # Resolves any type of bucket aggregation + has_no_pagination = getattr(agg, 'pagination', None) is None if isinstance(agg, BucketAggregation): es_agg = es_aggs['agg:' + name] values: set = set() @@ -1087,8 +1349,14 @@ def _buckets_to_interval( interval = None extended_bounds = agg.extended_bounds if agg.extended_bounds: - min_value = extended_bounds.min if min_value is None else min(min_value, extended_bounds.min) - max_value = extended_bounds.max if max_value is None else max(max_value, extended_bounds.max) + if min_value is not None and extended_bounds.min is not None: + min_value = min(min_value, extended_bounds.min) + else: + min_value = extended_bounds.min if min_value is None else min_value + if max_value is not None and extended_bounds.max is not None: + max_value = max(max_value, extended_bounds.max) + else: + max_value = extended_bounds.max if max_value is None else max_value if min_value is not None and max_value is not None: interval = 0 if max_value == min_value else ((1 + 1e-8) * max_value - min_value) / agg.buckets quantity = validate_quantity(agg.quantity, doc_type=index.doc_type) @@ -1143,11 +1411,11 @@ def search( index ) + doc_type = index.doc_type + # The first half of this method creates the ES query. Then the query is run on ES. # The second half is about transforming the ES response to a MetadataResponse. - doc_type = index.doc_type - # owner owner_query = _owner_es_query(owner=owner, user_id=user_id, doc_type=doc_type) @@ -1156,7 +1424,7 @@ def search( query = {} def create_es_query(query: Query): - return validate_api_query(cast(Query, query), doc_type=doc_type, owner_query=owner_query) + return _api_to_es_query(cast(Query, query), doc_type=doc_type, owner_query=owner_query) if isinstance(query, EsQuery): es_query = cast(EsQuery, query) @@ -1169,23 +1437,15 @@ def search( nested_owner_query = Q('nested', path='entries', query=owner_query) es_query &= nested_owner_query + search = Search(index=index.index_name) + # pagination if pagination is None: pagination = MetadataPagination() - if pagination.order_by is None: pagination.order_by = doc_type.id_field - search = Search(index=index.index_name) - - # TODO this depends on doc_type - if pagination.order_by is None: - pagination.order_by = doc_type.id_field - order_quantity, page_after_value = validate_pagination(pagination, doc_type=doc_type) - order_field = order_quantity.search_field - sort = {order_field: pagination.order.value} - if order_field != doc_type.id_field: - sort[doc_type.id_field] = pagination.order.value + sort, order_quantity, page_after_value = _api_to_es_sort(pagination, doc_type=doc_type) search = search.sort(sort) search = search.extra(size=pagination.page_size, track_total_hits=True) @@ -1197,29 +1457,7 @@ def search( search = search.extra(search_after=page_after_value.rsplit(':', 1)) # required - excludes = ["*__suggestion"] # Suggestion values are always excluded - includes = None - if required: - for list_ in [required.include, required.exclude]: - for quantity in [] if list_ is None else list_: - # TODO validate quantities with wildcards - if '*' not in quantity: - validate_quantity(quantity, doc_type=doc_type, loc=['required']) - - if required.include is not None and pagination.order_by not in required.include: - required.include.append(pagination.order_by) - if required.exclude is not None and pagination.order_by in required.exclude: - required.exclude.remove(pagination.order_by) - - if required.include is not None and doc_type.id_field not in required.include: - required.include.append(doc_type.id_field) - - if required.exclude is not None and doc_type.id_field in required.exclude: - required.exclude.remove(doc_type.id_field) - - if required.exclude: - excludes += required.exclude - includes = required.include + includes, excludes, requires_filtering = _api_to_es_required(required, pagination, doc_type) search = search.source(includes=includes, excludes=excludes) # pylint: disable=no-member # aggregations @@ -1235,25 +1473,24 @@ def search( and_clause for and_clause in and_clauses if isinstance(and_clause, models.Criteria) and and_clause.name not in excluded_agg_quantities] - pre_agg_es_query = validate_api_query( + pre_agg_es_query = _api_to_es_query( models.And(**{'and': list(pre_clauses)}), doc_type=doc_type, owner_query=owner_query) post_agg_query = models.And(**{'and': [ and_clause for and_clause in and_clauses if and_clause not in pre_clauses]}) - post_agg_es_query = validate_api_query( + post_agg_es_query = _api_to_es_query( post_agg_query, doc_type=doc_type, owner_query=owner_query) search = search.post_filter(post_agg_es_query) search = search.query(pre_agg_es_query & nested_owner_query) - else: search = search.query(es_query) # pylint: disable=no-member post_agg_query = None for name, agg in aggs: _api_to_es_aggregation( - search, name, agg, doc_type=doc_type, - post_agg_query=post_agg_query, create_es_query=create_es_query) + search, name, agg, doc_type=doc_type, post_agg_query=post_agg_query, + create_es_query=create_es_query) # execute try: @@ -1263,21 +1500,7 @@ def search( more_response_data = {} # pagination - next_page_after_value = None - if 0 < len(es_response.hits) < es_response.hits.total.value and len(es_response.hits) >= pagination.page_size: - last = es_response.hits[-1] - if order_field == doc_type.id_field: - next_page_after_value = last[doc_type.id_field] - else: - # after_value is not necessarily the value stored in the field - # itself: internally ES can perform the sorting on a different - # value which is reported under meta.sort. - after_value = last.meta.sort[0] - next_page_after_value = '%s:%s' % (after_value, last[doc_type.id_field]) - pagination_response = PaginationResponse( - total=es_response.hits.total.value, - next_page_after_value=next_page_after_value, - **pagination.dict()) + pagination_response = _es_to_api_pagination(es_response, pagination, order_quantity, doc_type) # aggregations if len(aggregations) > 0: @@ -1297,7 +1520,7 @@ def search( query=query, pagination=pagination_response, required=required, - data=[_es_to_entry_dict(hit, required) for hit in es_response.hits], + data=[_es_to_entry_dict(hit, required, requires_filtering, doc_type) for hit in es_response.hits], **more_response_data) return result diff --git a/nomad/utils/__init__.py b/nomad/utils/__init__.py index 0c793cb797ddec14d020a031393ab9bd5aba1018..f1a9fc116770b0e38026590e781c52e1cb7bb063 100644 --- a/nomad/utils/__init__.py +++ b/nomad/utils/__init__.py @@ -41,6 +41,7 @@ Depending on the configuration all logs will also be send to a central logstash. from typing import List, Iterable, Union, Any, Dict from collections import OrderedDict from functools import reduce +from itertools import takewhile import base64 from contextlib import contextmanager import json @@ -505,25 +506,128 @@ def strip(docstring): return inspect.cleandoc(docstring) -def flat(obj, prefix=None): +def flatten_dict(src: dict, separator: str = '.', flatten_list: bool = False): ''' - Helper that translates nested dict objects into flattened dicts with - ``key.key....`` as keys. + Flattens nested dictionaries so that all information is stored + with depth=1. + + Args: + src: Dictionary to flatten + separator: String to use as a separator + flatten_list: Whether lists should be flattened as well. ''' - if isinstance(obj, dict): - result = {} - for key, value in obj.items(): - if isinstance(value, dict): - value = flat(value) - for child_key, child_value in value.items(): - result['%s.%s' % (key, child_key)] = child_value + def helper_list(src): + ret = {} + for i in range(len(src)): + if isinstance(src[i], dict): + flat_value = flatten_dict(src[i], separator, flatten_list) + for inner_key, inner_value in flat_value.items(): + join_key = separator.join((str(i), inner_key)) + ret[join_key] = inner_value + elif isinstance(src[i], list): + flat_value = helper_list(src[i]) + for inner_key, inner_value in flat_value.items(): + join_key = separator.join((str(i), inner_key)) + ret[join_key] = inner_value + else: + ret[str(i)] = src[i] + + return ret + + ret = {} + for key, value in src.items(): + if isinstance(value, dict): + flat_value = flatten_dict(value, separator, flatten_list) + for inner_key, inner_value in flat_value.items(): + join_key = separator.join((key, inner_key)) + ret[join_key] = inner_value + elif isinstance(value, list): + if flatten_list: + flat_value = helper_list(value) + for inner_key, inner_value in flat_value.items(): + join_key = separator.join((key, inner_key)) + ret[join_key] = inner_value + else: + ret[key] = value + else: + ret[key] = value + return ret + + +def rebuild_dict(src: dict, separator: str = '.'): + ''' + Rebuilds nested dictionaries from flattened ones. + ''' + separator_len = len(separator) + + def get_indices(key, split_index): + next_key = key[split_index + separator_len:] + num_string = list(takewhile(str.isdigit, next_key)) + n_numbers = len(num_string) + index = int(''.join(num_string)) if n_numbers else None + + if index is not None: + split_index_list = split_index + split_index_dict = split_index + n_numbers + separator_len + else: + split_index_dict = split_index + split_index_list = -1 + + return split_index_dict, split_index_list, index + + def helper_dict(key, value, result): + split_index = key.find(separator) + + # Insert dict item + if split_index == -1: + result.update({key: value}) + else: + split_index_dict, split_index_list, next_index = get_indices(key, split_index) + + # Handle next dictionary + if split_index_list == -1 or split_index_dict != -1 and split_index_dict < split_index_list: + if result.get(key[:split_index_dict]) is None: + result.update({key[:split_index_dict]: {}}) + helper_dict(key[split_index_dict + separator_len:], value, result[key[:split_index_dict]]) + # Handle next list else: - result[key] = value + if result.get(key[:split_index_list]) is None: + result.update({key[:split_index_list]: []}) + helper_list(key[split_index_list + separator_len:], value, next_index, result[key[:split_index_list]]) - return result - else: - return obj + def helper_list(key, value, index, result): + split_index = key.find(separator) + + # Insert list item + if split_index == -1: + result.insert(index, value) + else: + split_index_dict, split_index_list, next_index = get_indices(key, split_index) + + # Grow list to size of this index + if index > len(result): + result.extend([None] * (index - len(result))) + # Handle next dictionary + if split_index_list == -1 or split_index_dict != -1 and split_index_dict < split_index_list: + try: + old_value = result[index] + except IndexError: + old_value = None + if old_value is None: + result.insert(index, {}) + helper_dict(key[split_index_dict + separator_len:], value, result[index]) + # Handle next list + else: + if result[index] is None: + result.insert(index, []) + helper_list(key[split_index_list + separator_len:], value, next_index, result[index]) + + ret: Dict[str, Any] = {} + for key, value in src.items(): + helper_dict(key, value, ret) + + return ret def deep_get(dictionary, *keys): @@ -531,8 +635,13 @@ def deep_get(dictionary, *keys): Helper that can be used to access nested dictionary-like containers using a series of paths given as arguments. The path can contain dictionary string keys or list indices as integer numbers. + + Raises: ValueError if value not found for path. ''' - return reduce(lambda d, key: d[key] if isinstance(key, int) else d.get(key) if d else None, keys, dictionary) + try: + return reduce(lambda d, key: d[key], keys, dictionary) + except (IndexError, TypeError, KeyError): + raise ValueError(f'Could not find path: {keys}') def slugify(value): @@ -623,3 +732,30 @@ def traverse_reversed(archive: Any, path: List[str]) -> Any: for t in traverse(archive, path, 0): if t is not None: yield t + + +def extract_section(root: Any, path: List[str], full_list: bool = False): + """Extracts a section from source following the path and the last elements of the section + lists. If full_list is True, the resolved section gives the full list instead of the + last element. + + Args: + source: The root section. + path (str): List containing the sections to extract. + full_list (bool, optional): For the last element of path, if set to True returns the full + list instead. Defaults to False. + + Returns: + root: The resolved section. + """ + path_len = len(path) - 1 + for index, section in enumerate(path): + try: + value = getattr(root, section) + if full_list and index == path_len: + root = value + break + root = value[-1] if isinstance(value, list) else value + except Exception: + return + return root diff --git a/nomad/utils/exampledata.py b/nomad/utils/exampledata.py index f59f86b45f008be01525255b9b09511fd5e881a9..5e33de76ee6735f5c8d351585ce8133dea30c40a 100644 --- a/nomad/utils/exampledata.py +++ b/nomad/utils/exampledata.py @@ -195,6 +195,7 @@ class ExampleData: results = { 'material': { 'material_id': material_id, + 'dimensionality': '3D', 'elements': ['H', 'O'], 'nelements': 2, 'symmetry': { diff --git a/ops/docker-compose/nomad-oasis/configs/nginx.conf b/ops/docker-compose/nomad-oasis/configs/nginx.conf index 93b0ef9ab133fb3e9d828d34960aa7b81bb5e0be..1b8531f838cdff3aea1e3a770ed82d108d5cf39e 100644 --- a/ops/docker-compose/nomad-oasis/configs/nginx.conf +++ b/ops/docker-compose/nomad-oasis/configs/nginx.conf @@ -8,6 +8,22 @@ server { server_name localhost; proxy_set_header Host $host; + gzip_min_length 1000; + gzip_buffers 4 8k; + gzip_http_version 1.0; + gzip_disable "msie6"; + gzip_vary on; + gzip on; + gzip_proxied any; + gzip_types + text/css + text/javascript + text/xml + text/plain + application/javascript + application/x-javascript + application/json; + location / { proxy_pass http://app:8000; } diff --git a/ops/kubernetes/deployments/dev-values.yaml b/ops/kubernetes/deployments/dev-values.yaml index 80f93637a3bb04fcc0ba6571785edf7f95d4889a..8c266057997d43a571424dc6a331911d0bd7861a 100644 --- a/ops/kubernetes/deployments/dev-values.yaml +++ b/ops/kubernetes/deployments/dev-values.yaml @@ -28,9 +28,11 @@ worker: elastic: host: elasticsearch.elasticsearch-7.svc.cluster.local + # secret: nomad-elastic mongo: host: mongodb://mongodb-0.mongo.mongodb.svc.cluster.local,mongodb-1.mongo.mongodb.svc.cluster.local,mongodb-2.mongo.mongodb.svc.cluster.local/?replicaSet=rs0 + # secret: nomad-mongo logstash: host: logstash.elk.svc.cluster.local diff --git a/ops/kubernetes/deployments/prod-develop-values.yaml b/ops/kubernetes/deployments/prod-develop-values.yaml index 9ec5a7aadb8e518c423a94924cbe60f7926de59b..4e7dfe804eb2c2a970c3b6fb1149239688de74ab 100644 --- a/ops/kubernetes/deployments/prod-develop-values.yaml +++ b/ops/kubernetes/deployments/prod-develop-values.yaml @@ -24,8 +24,6 @@ gui: app: replicas: 2 - worker: 4 - threads: 4 nomadNodeType: "public" worker: @@ -37,9 +35,11 @@ worker: elastic: host: elasticsearch.elasticsearch-7.svc.cluster.local port: 9200 + # secret: nomad-elastic mongo: host: mongodb://mongodb-0.mongo.mongodb.svc.cluster.local,mongodb-1.mongo.mongodb.svc.cluster.local,mongodb-2.mongo.mongodb.svc.cluster.local/?replicaSet=rs0 + # secret: nomad-mongo logstash: host: logstash.elk.svc.cluster.local diff --git a/ops/kubernetes/deployments/prod-process-values.yaml b/ops/kubernetes/deployments/prod-process-values.yaml index d44d66f0217124b2521bd2a2ea63f0b648d56279..4183da9da7a885f9ed31329674865bea31f9f677 100644 --- a/ops/kubernetes/deployments/prod-process-values.yaml +++ b/ops/kubernetes/deployments/prod-process-values.yaml @@ -45,9 +45,11 @@ elastic: host: elasticsearch.elasticsearch-7.svc.cluster.local port: 9200 dbname: nomad_prod_v1.2 + # secret: nomad-elastic mongo: host: mongodb://mongodb-0.mongo.mongodb.svc.cluster.local,mongodb-1.mongo.mongodb.svc.cluster.local,mongodb-2.mongo.mongodb.svc.cluster.local/?replicaSet=rs0 + # secret: nomad-mongo logstash: host: logstash.elk.svc.cluster.local diff --git a/ops/kubernetes/deployments/prod-staging-values.yaml b/ops/kubernetes/deployments/prod-staging-values.yaml index 301d91082743558b0927c3b085807f18b9d0169f..c2fd7111db20ec6a56681b7617ec1044defd7e12 100644 --- a/ops/kubernetes/deployments/prod-staging-values.yaml +++ b/ops/kubernetes/deployments/prod-staging-values.yaml @@ -24,8 +24,6 @@ gui: app: replicas: 4 - worker: 4 - threads: 4 nomadNodeType: "public" worker: @@ -37,9 +35,11 @@ worker: elastic: host: elasticsearch.elasticsearch-7.svc.cluster.local port: 9200 + # secret: nomad-elastic mongo: host: mongodb://mongodb-0.mongo.mongodb.svc.cluster.local,mongodb-1.mongo.mongodb.svc.cluster.local,mongodb-2.mongo.mongodb.svc.cluster.local/?replicaSet=rs0 + # secret: nomad-mongo logstash: host: logstash.elk.svc.cluster.local diff --git a/ops/kubernetes/deployments/prod-test-values.yaml b/ops/kubernetes/deployments/prod-test-values.yaml index 2191f634456f3c020ed9ec5ef500c7463a6d2609..b7229d4f232f86f6eb0ac41d54b9d5e27b4df511 100644 --- a/ops/kubernetes/deployments/prod-test-values.yaml +++ b/ops/kubernetes/deployments/prod-test-values.yaml @@ -20,7 +20,6 @@ gui: app: replicas: 2 - worker: 4 worker: replicas: 1 @@ -31,9 +30,11 @@ worker: elastic: host: elasticsearch.elasticsearch-7.svc.cluster.local port: 9200 + # secret: nomad-elastic mongo: host: mongodb://mongodb-0.mongo.mongodb.svc.cluster.local,mongodb-1.mongo.mongodb.svc.cluster.local,mongodb-2.mongo.mongodb.svc.cluster.local/?replicaSet=rs0 + # secret: nomad-mongo logstash: host: logstash.elk.svc.cluster.local diff --git a/ops/kubernetes/deployments/prod-util-values.yaml b/ops/kubernetes/deployments/prod-util-values.yaml index e38777420108b5465f976b5bf111892c98060de6..224eacb42f651ee5ae2e02a7ddc0a516ab3a0570 100644 --- a/ops/kubernetes/deployments/prod-util-values.yaml +++ b/ops/kubernetes/deployments/prod-util-values.yaml @@ -24,7 +24,6 @@ gui: app: replicas: 1 - worker: 1 nomadNodeType: "public" celery: @@ -41,9 +40,11 @@ worker: elastic: host: elasticsearch.elasticsearch-7.svc.cluster.local port: 9200 + # secret: nomad-elastic mongo: host: mongodb://mongodb-0.mongo.mongodb.svc.cluster.local,mongodb-1.mongo.mongodb.svc.cluster.local,mongodb-2.mongo.mongodb.svc.cluster.local/?replicaSet=rs0 + # secret: nomad-mongo logstash: host: logstash.elk.svc.cluster.local diff --git a/ops/kubernetes/deployments/prod-values.yaml b/ops/kubernetes/deployments/prod-values.yaml index 625aa9e96c90ecc3430398b2ff885ddbd298900b..06c7b767cd1015c97ee729af0025d76db063962f 100644 --- a/ops/kubernetes/deployments/prod-values.yaml +++ b/ops/kubernetes/deployments/prod-values.yaml @@ -22,14 +22,14 @@ gui: matomoSiteId: 2 encyclopediaBase: "https://nomad-lab.eu/prod/rae/encyclopedia/#" aitoolkitEnabled: false - config: + config: entry: cards: exclude: ["relatedResources", "workflow"] app: - replicas: 8 - worker: 4 + replicas: 4 + worker: 8 nomadNodeType: "public" worker: @@ -41,9 +41,11 @@ worker: elastic: host: elasticsearch.elasticsearch-7.svc.cluster.local port: 9200 + # secret: nomad-elastic mongo: host: mongodb://mongodb-0.mongo.mongodb.svc.cluster.local,mongodb-1.mongo.mongodb.svc.cluster.local,mongodb-2.mongo.mongodb.svc.cluster.local/?replicaSet=rs0 + # secret: nomad-mongo logstash: host: logstash.elk.svc.cluster.local diff --git a/ops/kubernetes/nomad/templates/api-deployment.yaml b/ops/kubernetes/nomad/templates/api-deployment.yaml index 95eab97180a4d8b78d2f7896efa0b7865c02eb9a..5261d060202868041f34780329b8e9e0a1b3ee3e 100644 --- a/ops/kubernetes/nomad/templates/api-deployment.yaml +++ b/ops/kubernetes/nomad/templates/api-deployment.yaml @@ -10,7 +10,7 @@ metadata: data: uvicorn.log.conf: | [loggers] - keys=root, uvicorn.access + keys=root, uvicorn.access, gunicorn.access [handlers] keys=console, logstash @@ -27,6 +27,11 @@ data: handlers=console, logstash qualname=uvicorn.access + [logger_gunicorn.access] + level=INFO + handlers=console, logstash + qualname=gunicorn.access + [handler_console] class=StreamHandler formatter=generic @@ -135,6 +140,30 @@ spec: name: {{ .Values.datacite.secret }} key: user {{ end }} + {{ if .Values.elastic.secret }} + - name: NOMAD_ELASTIC_USERNAME + valueFrom: + secretKeyRef: + name: {{ .Values.elastic.secret }} + key: username + - name: NOMAD_ELASTIC_PASSWORD + valueFrom: + secretKeyRef: + name: {{ .Values.elastic.secret }} + key: password + {{ end }} + {{ if .Values.mongo.secret }} + - name: NOMAD_MONGO_USERNAME + valueFrom: + secretKeyRef: + name: {{ .Values.mongo.secret }} + key: username + - name: NOMAD_MONGO_PASSWORD + valueFrom: + secretKeyRef: + name: {{ .Values.mongo.secret }} + key: password + {{ end }} {{ if .Values.north.hubServiceApiTokenSecret }} - name: NOMAD_NORTH_HUB_SERVICE_API_TOKEN valueFrom: @@ -148,15 +177,15 @@ spec: path: "{{ .Values.proxy.external.path }}/alive" port: 8000 initialDelaySeconds: 60 - periodSeconds: 30 - timeoutSeconds: 5 + periodSeconds: 60 + timeoutSeconds: {{ .Values.proxy.timeout }} readinessProbe: httpGet: path: "{{ .Values.proxy.external.path }}/alive" port: 8000 initialDelaySeconds: 60 - periodSeconds: 15 - timeoutSeconds: 5 + periodSeconds: 30 + timeoutSeconds: 15 nodeSelector: nomadtype: {{ .Values.app.nomadNodeType }} imagePullSecrets: diff --git a/ops/kubernetes/nomad/templates/nomad-configmap.yml b/ops/kubernetes/nomad/templates/nomad-configmap.yml index f30a0fc2e10e9250e972030b34a1761a93440531..b65ed4622823d577174d796bda6fc071742d0228 100644 --- a/ops/kubernetes/nomad/templates/nomad-configmap.yml +++ b/ops/kubernetes/nomad/templates/nomad-configmap.yml @@ -51,6 +51,7 @@ data: api_port: {{ .Values.proxy.external.port }} api_base_path: "{{ .Values.proxy.external.path }}" api_secret: "{{ .Values.api.secret }}" + api_timeout: "{{ max .Values.proxy.timeout .Values.proxy.editTimeout }}" https: {{ .Values.proxy.external.https }} upload_limit: {{ .Values.api.uploadLimit }} admin_user_id: {{ .Values.keycloak.admin_user_id }} diff --git a/ops/kubernetes/nomad/templates/proxy-deployment.yml b/ops/kubernetes/nomad/templates/proxy-deployment.yml index 71e3a5cfa3ee364d0244138aa064c6f69a6405f7..3b414b29a805c60d727d4c124593b628d7536522 100644 --- a/ops/kubernetes/nomad/templates/proxy-deployment.yml +++ b/ops/kubernetes/nomad/templates/proxy-deployment.yml @@ -163,16 +163,18 @@ spec: name: log livenessProbe: httpGet: - path: "{{ .Values.proxy.external.path }}/gui/index.html" + path: "{{ .Values.proxy.external.path }}/alive" port: 80 initialDelaySeconds: 60 - periodSeconds: 15 + periodSeconds: 60 + timeoutSeconds: {{ .Values.proxy.timeout }} readinessProbe: httpGet: - path: "{{ .Values.proxy.external.path }}/gui/index.html" + path: "{{ .Values.proxy.external.path }}/alive" port: 80 initialDelaySeconds: 60 - periodSeconds: 3 + periodSeconds: 30 + timeoutSeconds: 10 nodeSelector: nomadtype: public volumes: diff --git a/ops/kubernetes/nomad/templates/worker-deployment.yaml b/ops/kubernetes/nomad/templates/worker-deployment.yaml index 4d024d8c59d991b79f48299372fc895051f4494c..ce56a3ea45e0c9d71649d83ac9e2fedefa9c934a 100644 --- a/ops/kubernetes/nomad/templates/worker-deployment.yaml +++ b/ops/kubernetes/nomad/templates/worker-deployment.yaml @@ -82,6 +82,30 @@ spec: name: {{ .Values.keycloak.passwordSecret }} key: password {{ end }} + {{ if .Values.elastic.secret }} + - name: NOMAD_ELASTIC_USERNAME + valueFrom: + secretKeyRef: + name: {{ .Values.elastic.secret }} + key: username + - name: NOMAD_ELASTIC_PASSWORD + valueFrom: + secretKeyRef: + name: {{ .Values.elastic.secret }} + key: password + {{ end }} + {{ if .Values.mongo.secret }} + - name: NOMAD_MONGO_USERNAME + valueFrom: + secretKeyRef: + name: {{ .Values.mongo.secret }} + key: username + - name: NOMAD_MONGO_PASSWORD + valueFrom: + secretKeyRef: + name: {{ .Values.mongo.secret }} + key: password + {{ end }} command: ["python", "-m", "celery", "-A", "nomad.processing", "worker", "-n", "$(NOMAD_CELERY_NODE_NAME)" {{ if .Values.worker.processes }}, "-c", "{{ .Values.worker.processes }}"{{ end }}{{ if .Values.worker.maxTasksPerChild }}, "--max-tasks-per-child", "{{ .Values.worker.maxTasksPerChild }}"{{ end }}] livenessProbe: exec: diff --git a/ops/kubernetes/nomad/values.yaml b/ops/kubernetes/nomad/values.yaml index 2cb475f54b03bece349459a9942dc9dc818b91a1..d61da1d655a14302c110db11dd7ce46c9aa88dc4 100644 --- a/ops/kubernetes/nomad/values.yaml +++ b/ops/kubernetes/nomad/values.yaml @@ -41,7 +41,7 @@ ingress: ## Everything concerning the nomad app app: replicas: 1 - ## Number of uvicorn worker. + ## Number of gunicorn worker. worker: 4 console_loglevel: INFO logstash_loglevel: INFO diff --git a/ops/scripts/process_csv_to_md.py b/ops/scripts/process_csv_to_md.py deleted file mode 100644 index 33795d516ebd3463cc971668040bd911e2d4c024..0000000000000000000000000000000000000000 --- a/ops/scripts/process_csv_to_md.py +++ /dev/null @@ -1,28 +0,0 @@ -import csv -import sys - -with open(sys.argv[1]) as f: - reader = csv.reader(f, delimiter=',') - data = [row for row in reader] - -for row in data[1:]: - if len(row) == 8: - message, n_entries, entry_id, upload_id, n_uploads, mainfile, parser, exc = row[0:8] - if len(row) == 15: - message, n_entries, entry_id, upload_id, mainfile, _, _, _, _, _, parser = row[0:11] - n_uploads = 'n.n.' - exc = None - if 'process failed' in message: - continue - else: - assert False, "Wrong csv format." - - print(f''' -- [ ] ({n_entries} entries/{n_uploads} uploads) *{parser}: {message}* - -example: [upload_id: {upload_id}, entry_id: {entry_id}, mainfile: {mainfile}](https://nomad-lab.eu/prod/v1/gui/entry/entry_id/{entry_id}) - -{"```exc```" if exc else ""} - - -''') diff --git a/ops/tests/loadtest_search.py b/ops/tests/loadtest_search.py index 16aea2040bc3e0add17b3d6922c8430c69afbda9..57c73dd4a653b6c09084ddeb80965430fd69f601 100644 --- a/ops/tests/loadtest_search.py +++ b/ops/tests/loadtest_search.py @@ -53,8 +53,8 @@ query_params = [ 'page=1&per_page=10&order_by=upload_create_time&order=-1&domain=dft&owner=public&atoms=Co&statistics=atoms&exclude=atoms,only_atoms,dft.files,quantities,optimade,dft.labels,dft.geometries', 'page=1&per_page=10&order_by=upload_create_time&order=-1&domain=dft&owner=public&statistics=dft.labels_springer_compound_class&statistics=dft.system&statistics=dft.crystal_system&statistics=dft.compound_type&exclude=atoms,only_atoms,dft.files,quantities,optimade,dft.labels,dft.geometries', 'page=1&per_page=10&order_by=upload_create_time&order=-1&domain=dft&owner=public&statistics=dft.code_name&statistics=dft.basis_set&statistics=dft.xc_functional&exclude=atoms,only_atoms,dft.files,quantities,optimade,dft.labels,dft.geometries', - 'page=1&per_page=10&order_by=upload_create_time&order=-1&domain=dft&owner=public&statistics=dft.searchable_quantities&statistics=dft.labels_springer_classification&statistics=dft.workflow.workflow_type&exclude=atoms,only_atoms,dft.files,quantities,optimade,dft.labels,dft.geometries', - 'page=1&per_page=10&order_by=upload_create_time&order=-1&domain=dft&owner=public&statistics=dft.searchable_quantities&statistics=dft.labels_springer_classification&statistics=dft.workflow.workflow_type&exclude=atoms,only_atoms,dft.files,quantities,optimade,dft.labels,dft.geometries&datasets_grouped=true', + 'page=1&per_page=10&order_by=upload_create_time&order=-1&domain=dft&owner=public&statistics=dft.search_quantities&statistics=dft.labels_springer_classification&statistics=dft.workflow.workflow_type&exclude=atoms,only_atoms,dft.files,quantities,optimade,dft.labels,dft.geometries', + 'page=1&per_page=10&order_by=upload_create_time&order=-1&domain=dft&owner=public&statistics=dft.search_quantities&statistics=dft.labels_springer_classification&statistics=dft.workflow.workflow_type&exclude=atoms,only_atoms,dft.files,quantities,optimade,dft.labels,dft.geometries&datasets_grouped=true', 'page=1&per_page=10&order_by=upload_create_time&order=-1&domain=dft&owner=public&metrics=dft.calculations&statistics=atoms&exclude=atoms,only_atoms,dft.files,quantities,optimade,dft.labels,dft.geometries&datasets_grouped=true' ] diff --git a/pycodestyle.ini b/pycodestyle.ini deleted file mode 100644 index 454c2728173c32c7cc9c210dcaada89ce405c765..0000000000000000000000000000000000000000 --- a/pycodestyle.ini +++ /dev/null @@ -1,2 +0,0 @@ -[pycodestyle] -ignore = E501,E701,E731,W503 diff --git a/pyproject.toml b/pyproject.toml index 0d5baab978bce9f7e17ae0f1b4c31972ec45e54e..9123a77d27b30bb49f4ec4f94b7908d2e843b842 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,6 +12,7 @@ authors = [ dynamic = ["version"] license = { text = "Apache-2.0" } requires-python = ">=3.9" + dependencies = [ 'numpy~=1.22.4', 'nptyping~=1.4.4', @@ -19,7 +20,7 @@ dependencies = [ 'cachetools>=4.2.4', 'docstring-parser>=0.12', 'pint==0.17', - 'orjson==3.6.0', + 'orjson==3.9.4', 'click>=7.1.2', 'requests>=2.27.1', 'pytz>=2022.7.1', @@ -65,7 +66,7 @@ parsing = [ 'quippy-ase==0.9.14' ] infrastructure = [ - 'h5grove>=1.0.0', + 'h5grove[fastapi]==1.3.0', 'optimade[mongo]==0.22.1', 'structlog', 'elasticsearch==7.17.1', @@ -73,7 +74,7 @@ infrastructure = [ 'celery[redis]==5.2.7', 'asgiref~=3.5', 'mongoengine>=0.20', - 'pymongo==3.12.1', + 'pymongo==4.3.3', 'itsdangerous>=2.1.2', 'passlib==1.7.4', 'python-logstash==0.4.6', @@ -104,6 +105,7 @@ infrastructure = [ 'oauthenticator==15.1.0', 'validators==0.18.2', 'joblib>=1.1.0', + 'gunicorn>=21.2.0,<22.0.0', 'importlib-metadata~=4.13.0' # Needed because of https://github.com/python/importlib_metadata/issues/411 ] dev = [ @@ -134,12 +136,27 @@ dev = [ 'mkdocs-macros-plugin==0.6.3', 'aiosmtpd', 'mkdocs-click==0.8.0', - 'mkdocs-redirects==1.2.0' + 'mkdocs-redirects==1.2.0', + 'ruff==0.1.3' ] [project.scripts] nomad = "nomad.cli:run_cli" +[tool.ruff] +include = ["nomad/*.py", "tests/*.py"] +select = [ + "E", # pycodestyle + "W", # pycodestyle +] +ignore = [ + "E501", # Line too long ({width} > {limit} characters) + "E701", # Multiple statements on one line (colon) + "E731", # Do not assign a lambda expression, use a def + "E402" # Module level import not at top of file +] +fixable = ["E", "W"] + [tool.setuptools.packages.find] where = [ ".", @@ -164,3 +181,4 @@ disable_error_code = "import, annotation-unchecked" [tool.setuptools_scm] + diff --git a/requirements-dev.txt b/requirements-dev.txt index 94f31a0bd1565cb2ac6a97802a8b853279a2a253..521770ab6ee90debdf601fac3093758d6d56e5f3 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -9,15 +9,13 @@ alabaster==0.7.12 # via -r requirements.txt, sphinx alembic==1.9.1 # via -r requirements.txt, jupyterhub amqp==5.1.1 # via -r requirements.txt, kombu aniso8601==7.0.0 # via -r requirements.txt, nomad-lab (pyproject.toml) -anyio==3.6.2 # via -r requirements.txt, httpcore, jupyter-server, starlette, watchfiles -appnope==0.1.3 # via -r requirements.txt, ipykernel, ipython -argon2-cffi==21.3.0 # via -r requirements.txt, jupyter-server, nbclassic, notebook -argon2-cffi-bindings==21.2.0 # via -r requirements.txt, argon2-cffi +anyio==3.6.2 # via -r requirements.txt, httpcore, starlette, watchfiles 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, ifes-apt-tc-data-modeling, nomad-lab (pyproject.toml), quippy-ase asgiref==3.6.0 # via -r requirements.txt, nomad-lab (pyproject.toml) asr==0.4.1 # via -r requirements.txt, nomad-lab (pyproject.toml) +asteval==0.9.31 # via -r requirements.txt, lmfit astroid==2.11.7 # via nomad-lab (pyproject.toml), pylint asttokens==2.1.0 # via devtools astunparse==1.6.3 # via -r requirements.txt, mdtraj @@ -25,16 +23,16 @@ async-generator==1.10 # via -r requirements.txt, jupyterhub async-timeout==4.0.2 # via -r requirements.txt, redis atpublic==3.1.1 # via aiosmtpd attrs==22.2.0 # via -r requirements.txt, aiosmtpd, cattrs, jsonschema, pytest, requests-cache -babel==2.11.0 # via -r requirements.txt, jupyterlab-server, sphinx +babel==2.11.0 # via -r requirements.txt, sphinx backcall==0.2.0 # via -r requirements.txt, ipython bagit==1.8.1 # via -r requirements.txt, nomad-lab (pyproject.toml) basicauth==0.4.1 # via -r requirements.txt, nomad-lab (pyproject.toml) bcrypt==3.2.0 # via -r requirements.txt, nomad-lab (pyproject.toml) -beautifulsoup4==4.11.1 # via -r requirements.txt, bs4, nbconvert +beautifulsoup4==4.11.1 # via -r requirements.txt, bs4 billiard==3.6.4.0 # via -r requirements.txt, celery biopython==1.80 # via -r requirements.txt, mdanalysis bitarray==2.3.5 # via -r requirements.txt, nomad-lab (pyproject.toml) -bleach==5.0.1 # via -r requirements.txt, nbconvert, readme-renderer +bleach==5.0.1 # via readme-renderer bs4==0.0.1 # via -r requirements.txt, nomad-lab (pyproject.toml) build==0.9.0 # via nomad-lab (pyproject.toml), pip-tools cachetools==4.2.4 # via -r requirements.txt, nomad-lab (pyproject.toml) @@ -42,7 +40,7 @@ cattrs==22.2.0 # via -r requirements.txt, requests-cache celery[redis]==5.2.7 # via -r requirements.txt, nomad-lab (pyproject.toml) certifi==2022.12.7 # via -r requirements.txt, elasticsearch, httpcore, httpx, requests certipy==0.1.3 # via -r requirements.txt, jupyterhub -cffi==1.15.1 # via -r requirements.txt, argon2-cffi-bindings, bcrypt, cryptography +cffi==1.15.1 # via -r requirements.txt, bcrypt, cryptography cftime==1.6.2 # via -r requirements.txt, netcdf4 charset-normalizer==2.0.12 # via -r requirements.txt, requests click==8.1.3 # via -r requirements.txt, asr, celery, click-didyoumean, click-plugins, click-repl, flask, mkdocs, mkdocs-click, nomad-lab (pyproject.toml), pip-tools, uvicorn @@ -51,17 +49,19 @@ click-plugins==1.1.1 # via -r requirements.txt, celery click-repl==0.2.0 # via -r requirements.txt, celery cloudpickle==2.2.0 # via -r requirements.txt, dask colorama==0.4.6 # via twine +comm==0.1.4 # via -r requirements.txt, ipywidgets commonmark==0.9.1 # via -r requirements.txt, recommonmark coverage==6.5.0 # via pytest-cov -cryptography==39.0.0 # via -r requirements.txt, nomad-lab (pyproject.toml), pyjwt, pyopenssl, rfc3161ng +cryptography==39.0.0 # via -r requirements.txt, nomad-lab (pyproject.toml), pyjwt, pyopenssl, rfc3161ng, secretstorage cycler==0.11.0 # via -r requirements.txt, matplotlib -dask[array]==2022.2.0 # via -r requirements.txt, hyperspy +dask[array]==2022.2.0 # via -r requirements.txt, hyperspy, kikuchipy, orix, pyxem debugpy==1.6.5 # 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 devtools==0.8.0 # via nomad-lab (pyproject.toml) +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.6 # via -r requirements.txt, hyperspy, pylint -dnspython==2.2.1 # via -r requirements.txt, email-validator +dnspython==2.2.1 # via -r requirements.txt, email-validator, pymongo docker==6.0.1 # via -r requirements.txt, dockerspawner dockerspawner==12.1.0 # via -r requirements.txt, nomad-lab (pyproject.toml) docstring-parser==0.12 # via -r requirements.txt, nomad-lab (pyproject.toml) @@ -79,12 +79,12 @@ exceptiongroup==1.1.1 # via -r requirements.txt, cattrs execnet==1.9.0 # via pytest-xdist executing==0.10.0 # via devtools f90wrap==0.2.13 # via -r requirements.txt, quippy-ase -fastapi==0.92.0 # via -r requirements.txt, nomad-lab (pyproject.toml) +fabio==2023.6.0 # via -r requirements.txt, pyfai, silx +fastapi==0.92.0 # via -r requirements.txt, h5grove, nomad-lab (pyproject.toml) fasteners==0.18 # via -r requirements.txt, mdanalysis, zarr -fastjsonschema==2.16.2 # via -r requirements.txt, nbformat filelock==3.3.1 # via -r requirements.txt, nomad-lab (pyproject.toml) flask==2.2.2 # via -r requirements.txt, asr -flatdict==4.0.1 # via -r requirements.txt, nexusutils (dependencies/parsers/nexus/pyproject.toml) +flatdict==4.0.1 # via -r requirements.txt, pynxtools (dependencies/parsers/nexus/pyproject.toml) fonttools==4.38.0 # via -r requirements.txt, matplotlib fqdn==1.5.1 # via -r requirements.txt, jsonschema fsspec==2022.11.0 # via -r requirements.txt, dask, hyperspy @@ -95,67 +95,67 @@ gitpython==3.1.24 # via -r requirements.txt, nomad-lab (pyproject.toml) greenlet==2.0.1 # via -r requirements.txt, sqlalchemy griddataformats==0.7.0 # via -r requirements.txt, mdanalysis gsd==2.7.0 # via -r requirements.txt, mdanalysis +gunicorn==21.2.0 # via -r requirements.txt, nomad-lab (pyproject.toml) h11==0.14.0 # via -r requirements.txt, httpcore, uvicorn -h5grove==1.2.0 # via -r requirements.txt, jupyterlab-h5web, nomad-lab (pyproject.toml) -h5py==3.6.0 # via -r requirements.txt, h5grove, hyperspy, ifes-apt-tc-data-modeling, jupyterlab-h5web, nomad-lab (pyproject.toml), phonopy, pyscf +h5grove[fastapi]==1.3.0 # via -r requirements.txt, nomad-lab (pyproject.toml) +h5py==3.6.0 # via -r requirements.txt, h5grove, hyperspy, ifes-apt-tc-data-modeling, kikuchipy, nionswift, nomad-lab (pyproject.toml), orix, phonopy, pyfai, silx hjson==3.0.2 # via -r requirements.txt, nomad-lab (pyproject.toml) html5lib==1.1 # via -r requirements.txt, nomad-lab (pyproject.toml) httpcore==0.16.3 # via -r requirements.txt, httpx httptools==0.5.0 # via -r requirements.txt, uvicorn httpx==0.23.3 # via -r requirements.txt, nomad-lab (pyproject.toml) -hyperspy==1.7.3 # via -r requirements.txt, nexusutils (dependencies/parsers/nexus/pyproject.toml) +hyperspy==1.7.5 # via -r requirements.txt, kikuchipy, pynxtools (dependencies/parsers/nexus/pyproject.toml), pyxem idna==3.4 # via -r requirements.txt, anyio, email-validator, jsonschema, requests, rfc3986 -ifes-apt-tc-data-modeling==0.0.6 # via -r requirements.txt, nexusutils (dependencies/parsers/nexus/pyproject.toml) -imageio==2.24.0 # via -r requirements.txt, hyperspy, scikit-image +ifes-apt-tc-data-modeling==0.0.9 # via -r requirements.txt, pynxtools (dependencies/parsers/nexus/pyproject.toml) +imageio==2.24.0 # via -r requirements.txt, hyperspy, kikuchipy, nionswift, nionswift-io, nionui, scikit-image imagesize==1.4.1 # via -r requirements.txt, sphinx -importlib-metadata==4.13.0 # via -r requirements.txt, flask, hyperspy, jupyterlab-server, keyring, markdown, mkdocs, nbconvert, nomad-lab (pyproject.toml), sphinx, twine +importlib-metadata==4.13.0 # via -r requirements.txt, flask, hyperspy, keyring, markdown, mkdocs, nomad-lab (pyproject.toml), sphinx, twine inflection==0.5.1 # via -r requirements.txt, nomad-lab (pyproject.toml) -ipykernel==6.16.2 # via -r requirements.txt, ipyparallel, nbclassic, notebook +ipykernel==6.16.2 # via -r requirements.txt, ipyparallel ipyparallel==8.4.1 # via -r requirements.txt, hyperspy -ipython==7.34.0 # via -r requirements.txt, hyperspy, ipykernel, ipyparallel, jupyterlab -ipython-genutils==0.2.0 # via -r requirements.txt, nbclassic, notebook +ipython==7.34.0 # via -r requirements.txt, hyperspy, ipykernel, ipyparallel, ipywidgets +ipywidgets==8.1.1 # via -r requirements.txt, pyxem isodate==0.6.1 # via -r requirements.txt, rdflib isoduration==20.11.0 # via -r requirements.txt, jsonschema isort==4.3.21 # via pylint itsdangerous==2.1.2 # via -r requirements.txt, flask, nomad-lab (pyproject.toml) jaraco-classes==3.2.3 # via keyring jedi==0.18.2 # via -r requirements.txt, ipython -jinja2==3.0.3 # via -r requirements.txt, flask, hyperspy, jupyter-server, jupyterhub, jupyterlab, jupyterlab-server, mkdocs, mkdocs-macros-plugin, mkdocs-material, nbclassic, nbconvert, notebook, sphinx +jeepney==0.8.0 # via keyring, secretstorage +jinja2==3.0.3 # via -r requirements.txt, flask, hyperspy, jupyterhub, mkdocs, mkdocs-macros-plugin, mkdocs-material, sphinx jmespath==0.10.0 # via -r requirements.txt, nomad-lab (pyproject.toml) joblib==1.1.0 # via -r requirements.txt, mdanalysis, nomad-lab (pyproject.toml), scikit-learn -json5==0.9.11 # via -r requirements.txt, jupyterlab-server jsonpointer==2.3 # via -r requirements.txt, jsonschema -jsonschema[format]==4.17.3 # via -r requirements.txt, jupyter-telemetry, jupyterlab-server, nbformat, nomad-lab (pyproject.toml), oauthenticator -jupyter-client==7.4.8 # via -r requirements.txt, ipykernel, ipyparallel, jupyter-server, nbclassic, nbclient, notebook -jupyter-core==4.12.0 # via -r requirements.txt, jupyter-client, jupyter-server, jupyterlab, nbclassic, nbclient, nbconvert, nbformat, notebook -jupyter-server==1.23.4 # via -r requirements.txt, jupyterlab, jupyterlab-h5web, jupyterlab-server, nbclassic, notebook-shim +jsonschema[format]==4.17.3 # via -r requirements.txt, jupyter-telemetry, nomad-lab (pyproject.toml), oauthenticator +jupyter-client==7.4.8 # via -r requirements.txt, ipykernel, ipyparallel +jupyter-core==4.12.0 # via -r requirements.txt, jupyter-client jupyter-telemetry==0.1.0 # via -r requirements.txt, jupyterhub jupyterhub==1.4.2 # via -r requirements.txt, dockerspawner, nomad-lab (pyproject.toml), oauthenticator -jupyterlab==3.5.3 # via -r requirements.txt, ifes-apt-tc-data-modeling, nexusutils (dependencies/parsers/nexus/pyproject.toml) -jupyterlab-h5web==7.0.0 # via -r requirements.txt, ifes-apt-tc-data-modeling, nexusutils (dependencies/parsers/nexus/pyproject.toml) -jupyterlab-pygments==0.2.2 # via -r requirements.txt, nbconvert -jupyterlab-server==2.21.0 # via -r requirements.txt, jupyterlab +jupyterlab-widgets==3.0.9 # via -r requirements.txt, ipywidgets keyring==23.11.0 # via twine +kikuchipy==0.8.7 # via -r requirements.txt, pynxtools (dependencies/parsers/nexus/pyproject.toml) kiwisolver==1.4.4 # via -r requirements.txt, matplotlib kombu==5.2.4 # via -r requirements.txt, celery -lark==1.1.5 # via -r requirements.txt, nexusutils (dependencies/parsers/nexus/pyproject.toml), optimade +lark==1.1.5 # via -r requirements.txt, optimade, pynxtools (dependencies/parsers/nexus/pyproject.toml) latexcodec==2.0.1 # via -r requirements.txt, pybtex lazy-object-proxy==1.9.0 # via astroid llvmlite==0.39.1 # via -r requirements.txt, numba +lmfit==1.2.2 # via -r requirements.txt, pyxem locket==1.0.0 # via -r requirements.txt, partd lxml==4.7.1 # via -r requirements.txt, nomad-lab (pyproject.toml) 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-click, mkdocs-material, pymdown-extensions -markupsafe==2.1.1 # via -r requirements.txt, jinja2, mako, nbconvert, nomad-lab (pyproject.toml), werkzeug -matplotlib==3.5.3 # via -r requirements.txt, ase, asr, hyperspy, mdanalysis, phonopy, pymatgen, radioactivedecay +markupsafe==2.1.1 # via -r requirements.txt, jinja2, mako, nomad-lab (pyproject.toml), werkzeug +matplotlib==3.5.3 # via -r requirements.txt, ase, asr, diffsims, hyperspy, kikuchipy, matplotlib-scalebar, mdanalysis, orix, phonopy, pyfai, pymatgen, pyxem, radioactivedecay matplotlib-inline==0.1.6 # via -r requirements.txt, ipykernel, ipython +matplotlib-scalebar==0.8.1 # via -r requirements.txt, orix mccabe==0.6.1 # via pylint mdanalysis==2.5.0 # via -r requirements.txt, nomad-lab (pyproject.toml) mdtraj==1.9.6 # via -r requirements.txt, nomad-lab (pyproject.toml) memoization==0.4.0 # via -r requirements.txt, nomad-lab (pyproject.toml) mergedeep==1.3.4 # via mkdocs -mistune==2.0.4 # via -r requirements.txt, m2r, nbconvert +mistune==2.0.4 # via -r requirements.txt, m2r mkdocs==1.2.3 # via mkdocs-macros-plugin, mkdocs-material, mkdocs-redirects, nomad-lab (pyproject.toml) mkdocs-click==0.8.0 # via nomad-lab (pyproject.toml) mkdocs-macros-plugin==0.6.3 # via nomad-lab (pyproject.toml) @@ -171,34 +171,35 @@ mp-api==0.30.10 # via -r requirements.txt, pymatgen mpmath==1.2.1 # via -r requirements.txt, sympy mrcfile==1.4.3 # via -r requirements.txt, griddataformats msgpack==1.0.4 # via -r requirements.txt, mmtf-python, mp-api, nomad-lab (pyproject.toml) -mypy==1.0.1 # via nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml) +mypy==1.0.1 # via nomad-lab (pyproject.toml), pynxtools (dependencies/parsers/nexus/pyproject.toml) mypy-extensions==0.4.3 # via mypy names==0.3.0 # via nomad-lab (pyproject.toml) +nanonispy @ git+https://github.com/ramav87/nanonispy.git@a0da87c58482d29624a2bf5deecb763dd1274212 # via -r requirements.txt, pynxtools (dependencies/parsers/nexus/pyproject.toml) natsort==8.2.0 # via -r requirements.txt, hyperspy -nbclassic==0.5.3 # via -r requirements.txt, jupyterlab, notebook -nbclient==0.7.2 # via -r requirements.txt, nbconvert -nbconvert==7.2.7 # via -r requirements.txt, jupyter-server, nbclassic, notebook -nbformat==5.7.3 # via -r requirements.txt, jupyter-server, nbclassic, nbclient, nbconvert, notebook -nest-asyncio==1.5.6 # via -r requirements.txt, ipykernel, jupyter-client, nbclassic, notebook +nest-asyncio==1.5.6 # via -r requirements.txt, ipykernel, jupyter-client netcdf4==1.5.4 # via -r requirements.txt, nomad-lab (pyproject.toml) networkx==2.6.3 # via -r requirements.txt, matid (dependencies/matid/pyproject.toml), mdanalysis, pymatgen, radioactivedecay, scikit-image -notebook==6.5.3 # via -r requirements.txt, jupyterlab -notebook-shim==0.2.2 # via -r requirements.txt, nbclassic +niondata==0.15.5 # via -r requirements.txt, nionswift, nionswift-io +nionswift==0.16.8 # via -r requirements.txt, pynxtools (dependencies/parsers/nexus/pyproject.toml) +nionswift-io==0.15.1 # via -r requirements.txt, nionswift +nionui==0.6.11 # via -r requirements.txt, nionswift +nionutils==0.4.8 # via -r requirements.txt, niondata, nionswift, nionswift-io, nionui nptyping==1.4.4 # via -r requirements.txt, nomad-lab (pyproject.toml) -numba==0.56.4 # via -r requirements.txt, hyperspy, sparse +numba==0.56.4 # via -r requirements.txt, diffsims, hyperspy, kikuchipy, orix, pyxem, sparse numcodecs==0.10.2 # via -r requirements.txt, zarr -numexpr==2.8.4 # via -r requirements.txt, hyperspy -numpy==1.22.4 # via -r requirements.txt, ase, biopython, cftime, dask, f90wrap, griddataformats, gsd, h5grove, h5py, hyperspy, ifes-apt-tc-data-modeling, imageio, matplotlib, mdanalysis, mdtraj, mrcfile, netcdf4, nomad-lab (pyproject.toml), nptyping, numba, numcodecs, numexpr, pandas, phonopy, pymatgen, pyscf, pywavelets, quippy-ase, radioactivedecay, scikit-image, scikit-learn, scipy, sparse, spglib, tifffile, xarray, zarr +numexpr==2.8.4 # via -r requirements.txt, hyperspy, pyfai +numpy==1.22.4 # via -r requirements.txt, ase, biopython, cftime, dask, diffsims, f90wrap, fabio, griddataformats, gsd, h5grove, h5py, hyperspy, ifes-apt-tc-data-modeling, imageio, kikuchipy, lmfit, matplotlib, mdanalysis, mdtraj, mrcfile, nanonispy, netcdf4, niondata, nionswift, nionswift-io, nionui, nomad-lab (pyproject.toml), nptyping, numba, numcodecs, numexpr, numpy-quaternion, orix, pandas, phonopy, pyfai, pymatgen, pywavelets, pyxem, quippy-ase, radioactivedecay, scikit-image, scikit-learn, scipy, silx, sparse, spglib, tifffile, xarray, zarr +numpy-quaternion==2022.4.3 # via -r requirements.txt, orix oauthenticator==15.1.0 # via -r requirements.txt, nomad-lab (pyproject.toml) oauthlib==3.2.2 # via -r requirements.txt, jupyterhub openpyxl==3.1.2 # via -r requirements.txt, nomad-lab (pyproject.toml) optimade[mongo]==0.22.1 # via -r requirements.txt, nomad-lab (pyproject.toml) -orjson==3.6.0 # via -r requirements.txt, h5grove, nomad-lab (pyproject.toml) -packaging==23.0 # via -r requirements.txt, build, dask, docker, hyperspy, ipykernel, jupyter-server, jupyterlab, jupyterlab-server, matplotlib, mdanalysis, mkdocs, mongomock, nbconvert, pint, pytest, scikit-image, sphinx, xarray +orix==0.11.1 # via -r requirements.txt, diffsims, kikuchipy, pyxem +orjson==3.9.4 # via -r requirements.txt, h5grove, nomad-lab (pyproject.toml) +packaging==23.0 # via -r requirements.txt, build, dask, docker, gunicorn, hyperspy, ipykernel, matplotlib, mdanalysis, mkdocs, mongomock, pint, pooch, pytest, scikit-image, sphinx palettable==3.3.0 # via -r requirements.txt, pymatgen pamela==1.0.0 # via -r requirements.txt, jupyterhub pandas==1.3.5 # via -r requirements.txt, ifes-apt-tc-data-modeling, nomad-lab (pyproject.toml), panedr, pymatgen, xarray -pandocfilters==1.5.0 # via -r requirements.txt, nbconvert panedr==0.2 # via -r requirements.txt, nomad-lab (pyproject.toml) parmed==3.0.0 # via -r requirements.txt, nomad-lab (pyproject.toml) parso==0.8.3 # via -r requirements.txt, jedi @@ -208,41 +209,43 @@ pep517==0.13.0 # via build pexpect==4.8.0 # via -r requirements.txt, ipython phonopy==2.11.0 # via -r requirements.txt, asr, nomad-lab (pyproject.toml) pickleshare==0.7.5 # via -r requirements.txt, ipython -pillow==9.4.0 # via -r requirements.txt, imageio, matplotlib, scikit-image +pillow==9.4.0 # via -r requirements.txt, imageio, matplotlib, nionswift, scikit-image pint==0.17 # via -r requirements.txt, hyperspy, nomad-lab (pyproject.toml) -pip-tools==6.13.0 # via nomad-lab (pyproject.toml) +pip-tools==6.13.0 # via nomad-lab (pyproject.toml), pynxtools (dependencies/parsers/nexus/pyproject.toml) pkginfo==1.8.3 # via twine -platformdirs==3.1.1 # via -r requirements.txt, pylint, requests-cache +platformdirs==3.1.1 # via -r requirements.txt, pooch, pylint, requests-cache plotly==5.11.0 # via -r requirements.txt, asr, pymatgen pluggy==0.13.1 # via pytest +pooch==1.7.0 # via -r requirements.txt, kikuchipy, orix prettytable==3.6.0 # via -r requirements.txt, hyperspy -prometheus-client==0.15.0 # via -r requirements.txt, jupyter-server, jupyterhub, nbclassic, notebook +prometheus-client==0.15.0 # via -r requirements.txt, jupyterhub prompt-toolkit==3.0.36 # via -r requirements.txt, click-repl, ipython -psutil==5.9.4 # via -r requirements.txt, ipykernel, ipyparallel -ptyprocess==0.7.0 # via -r requirements.txt, pexpect, terminado +psutil==5.9.4 # via -r requirements.txt, diffsims, ipykernel, ipyparallel, pyxem +ptyprocess==0.7.0 # via -r requirements.txt, pexpect py==1.11.0 # via pytest, pytest-forked pyasn1==0.4.8 # via -r requirements.txt, pyasn1-modules, python-jose, rfc3161ng, rsa pyasn1-modules==0.2.8 # via -r requirements.txt, rfc3161ng pybtex==0.24.0 # via -r requirements.txt, emmet-core, pymatgen -pycodestyle==2.8.0 # via nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml) +pycifrw==4.4.5 # via -r requirements.txt, diffpy-structure +pycodestyle==2.8.0 # via nomad-lab (pyproject.toml), pynxtools (dependencies/parsers/nexus/pyproject.toml) pycparser==2.21 # via -r requirements.txt, cffi pydantic==1.10.9 # via -r requirements.txt, emmet-core, fastapi, nomad-lab (pyproject.toml), optimade -pygments==2.14.0 # via -r requirements.txt, ipython, mkdocs-material, nbconvert, readme-renderer, sphinx +pyfai==2023.9.0 # via -r requirements.txt, pyxem +pygments==2.14.0 # via -r requirements.txt, ipython, mkdocs-material, readme-renderer, sphinx pyjwt[crypto]==2.6.0 # via -r requirements.txt, nomad-lab (pyproject.toml) -pylint==2.13.9 # via nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml), pylint-mongoengine, pylint-plugin-utils +pylint==2.13.9 # via nomad-lab (pyproject.toml), pylint-mongoengine, pylint-plugin-utils, pynxtools (dependencies/parsers/nexus/pyproject.toml) pylint-mongoengine==0.4.0 # via nomad-lab (pyproject.toml) pylint-plugin-utils==0.7 # via nomad-lab (pyproject.toml), pylint-mongoengine pymatgen==2023.2.28 # via -r requirements.txt, asr, emmet-core, mp-api, nomad-lab (pyproject.toml) pymdown-extensions==9.7 # via mkdocs-material -pymongo==3.12.1 # via -r requirements.txt, mongoengine, nomad-lab (pyproject.toml), optimade +pymongo==4.3.3 # via -r requirements.txt, mongoengine, nomad-lab (pyproject.toml), optimade pyopenssl==23.0.0 # via -r requirements.txt, certipy pyparsing==3.0.9 # via -r requirements.txt, matplotlib, mdtraj, rdflib pyrsistent==0.19.3 # via -r requirements.txt, jsonschema -pyscf==2.0.1 ; sys_platform == "darwin" # via -r requirements.txt, electronicparsers (dependencies/parsers/electronic/pyproject.toml) -pytest==5.4.3 # via nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml), pytest-cov, pytest-forked, pytest-timeout, pytest-xdist -pytest-cov==2.7.1 # via nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml) +pytest==5.4.3 # via nomad-lab (pyproject.toml), pynxtools (dependencies/parsers/nexus/pyproject.toml), pytest-cov, pytest-forked, pytest-timeout, pytest-xdist +pytest-cov==2.7.1 # via nomad-lab (pyproject.toml), pynxtools (dependencies/parsers/nexus/pyproject.toml) pytest-forked==1.6.0 # via pytest-xdist -pytest-timeout==1.4.2 # via nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml) +pytest-timeout==1.4.2 # via nomad-lab (pyproject.toml), pynxtools (dependencies/parsers/nexus/pyproject.toml) pytest-xdist==1.34.0 # via nomad-lab (pyproject.toml) python-dateutil==2.8.2 # via -r requirements.txt, arrow, elasticsearch-dsl, ghp-import, hyperspy, ipyparallel, jupyter-client, jupyterhub, matplotlib, mkdocs-macros-plugin, pandas, rfc3161ng python-dotenv==0.21.0 # via -r requirements.txt, uvicorn @@ -253,20 +256,22 @@ python-keycloak==0.26.1 # 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.5 # via -r requirements.txt, nomad-lab (pyproject.toml) -pytz==2022.7.1 # via -r requirements.txt, babel, celery, nomad-lab (pyproject.toml), pandas +pytz==2022.7.1 # via -r requirements.txt, babel, celery, nionswift, nomad-lab (pyproject.toml), pandas +pytz-deprecation-shim==0.1.0.post0 # via -r requirements.txt, tzlocal pywavelets==1.3.0 # via -r requirements.txt, scikit-image -pyyaml==6.0 # via -r requirements.txt, dask, hyperspy, mkdocs, mkdocs-macros-plugin, nomad-lab (pyproject.toml), phonopy, pybtex, pyyaml-env-tag, uvicorn +pyxem==0.15.1 # via -r requirements.txt, pynxtools (dependencies/parsers/nexus/pyproject.toml) +pyyaml==6.0 # via -r requirements.txt, dask, hyperspy, kikuchipy, mkdocs, mkdocs-macros-plugin, nomad-lab (pyproject.toml), phonopy, pybtex, pyyaml-env-tag, uvicorn pyyaml-env-tag==0.1 # via mkdocs pyzeo==0.1.4 # via -r requirements.txt, nomad-lab (pyproject.toml) -pyzmq==25.0.0 # via -r requirements.txt, ipykernel, ipyparallel, jupyter-client, jupyter-server, nbclassic, notebook +pyzmq==25.0.0 # via -r requirements.txt, ipykernel, ipyparallel, jupyter-client quippy-ase==0.9.14 # via -r requirements.txt, nomad-lab (pyproject.toml) radioactivedecay==0.4.17 # via -r requirements.txt, ifes-apt-tc-data-modeling rdflib==5.0.0 # via -r requirements.txt, nomad-lab (pyproject.toml) readme-renderer==37.3 # via twine recommonmark==0.7.1 # via -r requirements.txt, nomad-lab (pyproject.toml) redis==4.4.2 # via -r requirements.txt, celery -requests==2.28.2 # via -r requirements.txt, docker, hyperspy, jupyterhub, jupyterlab-server, mp-api, nomad-lab (pyproject.toml), oauthenticator, optimade, pymatgen, python-gitlab, python-keycloak, requests-cache, requests-toolbelt, rfc3161ng, sphinx, twine -requests-cache==1.0.1 # via -r requirements.txt, nexusutils (dependencies/parsers/nexus/pyproject.toml) +requests==2.28.2 # via -r requirements.txt, docker, hyperspy, jupyterhub, mp-api, nomad-lab (pyproject.toml), oauthenticator, optimade, pooch, pymatgen, python-gitlab, python-keycloak, requests-cache, requests-toolbelt, rfc3161ng, sphinx, twine +requests-cache==1.0.1 # via -r requirements.txt, pynxtools (dependencies/parsers/nexus/pyproject.toml) requests-toolbelt==0.10.1 # via python-gitlab, twine rfc3161ng==2.1.3 # via -r requirements.txt, nomad-lab (pyproject.toml) rfc3339-validator==0.1.4 # via -r requirements.txt, jsonschema @@ -276,13 +281,15 @@ rope==0.21.0 # via nomad-lab (pyproject.toml) rsa==4.9 # via -r requirements.txt, python-jose ruamel-yaml==0.17.21 # via -r requirements.txt, jupyter-telemetry, oauthenticator, pymatgen ruamel-yaml-clib==0.2.7 # via -r requirements.txt, ruamel-yaml +ruff==0.1.0 # via nomad-lab (pyproject.toml) runstats==2.0.0 # via -r requirements.txt, nomad-lab (pyproject.toml) -scikit-image==0.19.3 # via -r requirements.txt, hyperspy -scikit-learn==1.0.2 # via -r requirements.txt, nomad-lab (pyproject.toml) -scipy==1.7.1 # via -r requirements.txt, ase, griddataformats, hyperspy, mdanalysis, mdtraj, nomad-lab (pyproject.toml), pymatgen, pyscf, radioactivedecay, scikit-image, scikit-learn, sparse -send2trash==1.8.0 # via -r requirements.txt, jupyter-server, nbclassic, notebook +scikit-image==0.19.3 # via -r requirements.txt, hyperspy, kikuchipy, pyxem +scikit-learn==1.0.2 # via -r requirements.txt, kikuchipy, nomad-lab (pyproject.toml), pyxem +scipy==1.7.1 # via -r requirements.txt, ase, diffsims, griddataformats, hyperspy, kikuchipy, lmfit, mdanalysis, mdtraj, niondata, nionswift, nomad-lab (pyproject.toml), orix, pyfai, pymatgen, pyxem, radioactivedecay, scikit-image, scikit-learn, sparse +secretstorage==3.3.3 # via keyring sentinels==1.0.0 # via -r requirements.txt, mongomock -six==1.16.0 # via -r requirements.txt, asttokens, astunparse, basicauth, bcrypt, bleach, click-repl, ecdsa, elasticsearch-dsl, griddataformats, html5lib, isodate, latexcodec, pybtex, pytest-xdist, python-dateutil, python-multipart, rdflib, rfc3339-validator, url-normalize, validators +silx==1.1.2 # via -r requirements.txt, pyfai +six==1.16.0 # via -r requirements.txt, asttokens, astunparse, basicauth, bcrypt, bleach, click-repl, diffpy-structure, ecdsa, elasticsearch-dsl, griddataformats, html5lib, isodate, latexcodec, pybtex, pytest-xdist, python-dateutil, python-multipart, rdflib, rfc3339-validator, url-normalize, validators 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 @@ -303,31 +310,32 @@ sympy==1.10.1 # via -r requirements.txt, hyperspy, pymatgen, radioac tabulate==0.8.9 # via -r requirements.txt, nomad-lab (pyproject.toml), pymatgen tenacity==8.1.0 # via -r requirements.txt, plotly termcolor==2.1.0 # via mkdocs-macros-plugin -terminado==0.17.1 # via -r requirements.txt, jupyter-server, nbclassic, notebook threadpoolctl==3.1.0 # via -r requirements.txt, mdanalysis, scikit-learn tifffile==2021.11.2 # via -r requirements.txt, h5grove, hyperspy, scikit-image -tinycss2==1.2.1 # via -r requirements.txt, nbconvert -tomli==2.0.1 # via -r requirements.txt, build, jupyterlab, mypy, pep517, pylint +tomli==2.0.1 # via build, mypy, pep517, pylint toolz==0.12.0 # via -r requirements.txt, dask, hyperspy, partd toposort==1.9 # via -r requirements.txt, nomad-lab (pyproject.toml) -tornado==6.2 # via -r requirements.txt, ipykernel, ipyparallel, jupyter-client, jupyter-server, jupyterhub, jupyterlab, nbclassic, notebook, terminado -tqdm==4.64.1 # via -r requirements.txt, hyperspy, ipyparallel, mdanalysis, pymatgen, twine -traitlets==5.8.1 # via -r requirements.txt, ipykernel, ipyparallel, ipython, jupyter-client, jupyter-core, jupyter-server, jupyter-telemetry, jupyterhub, matplotlib-inline, nbclassic, nbclient, nbconvert, nbformat, notebook +tornado==6.2 # via -r requirements.txt, ipykernel, ipyparallel, jupyter-client, jupyterhub +tqdm==4.64.1 # via -r requirements.txt, diffsims, hyperspy, ipyparallel, kikuchipy, mdanalysis, orix, pymatgen, twine +traitlets==5.8.1 # via -r requirements.txt, comm, ipykernel, ipyparallel, ipython, ipywidgets, jupyter-client, jupyter-core, jupyter-telemetry, jupyterhub, matplotlib-inline traits==6.4.1 # via -r requirements.txt, hyperspy +transforms3d==0.4.1 # via -r requirements.txt, diffsims, pyxem twine==3.4.2 # via nomad-lab (pyproject.toml) typed-ast==1.4.2 # via nomad-lab (pyproject.toml) -types-pytz==2022.7.0.0 # via nexusutils (dependencies/parsers/nexus/pyproject.toml) -types-pyyaml==6.0.12.1 # via nexusutils (dependencies/parsers/nexus/pyproject.toml) -types-requests==2.28.11.16 # via nexusutils (dependencies/parsers/nexus/pyproject.toml) +types-pytz==2022.7.0.0 # via pynxtools (dependencies/parsers/nexus/pyproject.toml) +types-pyyaml==6.0.12.1 # via pynxtools (dependencies/parsers/nexus/pyproject.toml) +types-requests==2.28.11.16 # via pynxtools (dependencies/parsers/nexus/pyproject.toml) types-urllib3==1.26.25.8 # via types-requests typing-extensions==4.4.0 # via -r requirements.txt, astroid, emmet-core, gitpython, mp-api, mypy, numcodecs, pydantic, pylint, starlette typish==1.9.3 # via -r requirements.txt, nptyping -uncertainties==3.1.7 # via -r requirements.txt, pymatgen +tzdata==2023.3 # via -r requirements.txt, pytz-deprecation-shim +tzlocal==4.3 # via -r requirements.txt, nionswift, pynxtools (dependencies/parsers/nexus/pyproject.toml) +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.2.0 # via -r requirements.txt, jsonschema url-normalize==1.4.3 # via -r requirements.txt, requests-cache urllib3==1.26.14 # via -r requirements.txt, docker, elasticsearch, requests, requests-cache -uvicorn[standard]==0.20.0 # via -r requirements.txt, nomad-lab (pyproject.toml) +uvicorn[standard]==0.20.0 # via -r requirements.txt, h5grove, nomad-lab (pyproject.toml) uvloop==0.17.0 # via -r requirements.txt, uvicorn validators==0.18.2 # via -r requirements.txt, nomad-lab (pyproject.toml) vine==5.0.0 # via -r requirements.txt, amqp, celery, kombu @@ -335,14 +343,16 @@ watchdog==2.1.9 # via mkdocs watchfiles==0.18.1 # via -r requirements.txt, uvicorn wcwidth==0.2.5 # via -r requirements.txt, prettytable, prompt-toolkit, pytest webcolors==1.12 # via -r requirements.txt, jsonschema -webencodings==0.5.1 # via -r requirements.txt, bleach, html5lib, tinycss2 -websocket-client==1.4.2 # via -r requirements.txt, docker, jupyter-server +webencodings==0.5.1 # via -r requirements.txt, bleach, html5lib +websocket-client==1.4.2 # via -r requirements.txt, docker websockets==10.4 # via -r requirements.txt, uvicorn werkzeug==2.2.2 # via -r requirements.txt, flask wheel==0.38.4 # via -r requirements.txt, astunparse, pip-tools +widgetsnbextension==4.0.9 # via -r requirements.txt, ipywidgets wrapt==1.12.1 # via -r requirements.txt, astroid, nomad-lab (pyproject.toml) -xarray==2023.1.0 # via -r requirements.txt, nomad-lab (pyproject.toml) +xarray==0.20.2 # via -r requirements.txt, nomad-lab (pyproject.toml) zarr==2.12.0 # via -r requirements.txt, hyperspy +zipfile37==0.1.3 # via -r requirements.txt, pynxtools (dependencies/parsers/nexus/pyproject.toml) zipp==3.11.0 # via -r requirements.txt, importlib-metadata zipstream-new==1.1.5 # via -r requirements.txt, nomad-lab (pyproject.toml) diff --git a/requirements.txt b/requirements.txt index d46fdc48167d09eee6e9110afcc575ce18626571..2dfeb83d62a03485cdf97ba2136bb77e5d2db2f8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,58 +2,57 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --annotation-style=line --config=pyproject.toml --extra=infrastructure --extra=parsing --output-file=requirements.txt --resolver=backtracking dependencies/matid/pyproject.toml dependencies/nomad-dos-fingerprints/pyproject.toml dependencies/parsers/atomistic/pyproject.toml dependencies/parsers/database/pyproject.toml dependencies/parsers/eelsdb/pyproject.toml dependencies/parsers/electronic/pyproject.toml dependencies/parsers/nexus/pyproject.toml dependencies/parsers/workflow/pyproject.toml pyproject.toml +# pip-compile --annotation-style=line --extra=infrastructure --extra=parsing --output-file=requirements.txt --resolver=backtracking dependencies/matid/pyproject.toml dependencies/nomad-dos-fingerprints/pyproject.toml dependencies/parsers/atomistic/pyproject.toml dependencies/parsers/database/pyproject.toml dependencies/parsers/eelsdb/pyproject.toml dependencies/parsers/electronic/pyproject.toml dependencies/parsers/nexus/pyproject.toml dependencies/parsers/workflow/pyproject.toml pyproject.toml # alabaster==0.7.12 # via sphinx alembic==1.9.1 # via jupyterhub amqp==5.1.1 # via kombu aniso8601==7.0.0 # via nomad-lab (pyproject.toml) -anyio==3.6.2 # via httpcore, jupyter-server, starlette, watchfiles -appnope==0.1.3 # via ipykernel, ipython -argon2-cffi==21.3.0 # via jupyter-server, nbclassic, notebook -argon2-cffi-bindings==21.2.0 # via argon2-cffi +anyio==3.6.2 # via httpcore, starlette, watchfiles arrow==1.2.3 # via isoduration asciitree==0.3.3 # via zarr ase==3.19.0 # via asr, ifes-apt-tc-data-modeling, matid (dependencies/matid/pyproject.toml), nomad-lab (pyproject.toml), quippy-ase asgiref==3.6.0 # via nomad-lab (pyproject.toml) asr==0.4.1 # via nomad-lab (pyproject.toml), workflowparsers (dependencies/parsers/workflow/pyproject.toml) +asteval==0.9.31 # via lmfit astunparse==1.6.3 # via mdtraj async-generator==1.10 # via jupyterhub async-timeout==4.0.2 # via redis attrs==22.2.0 # via cattrs, jsonschema, requests-cache -babel==2.11.0 # via jupyterlab-server, sphinx +babel==2.11.0 # via sphinx backcall==0.2.0 # via ipython bagit==1.8.1 # via nomad-lab (pyproject.toml) basicauth==0.4.1 # via nomad-lab (pyproject.toml) bcrypt==3.2.0 # via nomad-lab (pyproject.toml) -beautifulsoup4==4.11.1 # via bs4, nbconvert +beautifulsoup4==4.11.1 # via bs4 billiard==3.6.4.0 # via celery biopython==1.80 # via mdanalysis bitarray==2.3.5 # via nomad-dos-fingerprints (dependencies/nomad-dos-fingerprints/pyproject.toml), nomad-lab (pyproject.toml) -bleach==5.0.1 # via nbconvert bs4==0.0.1 # via nomad-lab (pyproject.toml) cachetools==4.2.4 # via nomad-lab (pyproject.toml) cattrs==22.2.0 # via requests-cache celery[redis]==5.2.7 # via nomad-lab (pyproject.toml) certifi==2022.12.7 # via elasticsearch, httpcore, httpx, requests certipy==0.1.3 # via jupyterhub -cffi==1.15.1 # via argon2-cffi-bindings, bcrypt, cryptography +cffi==1.15.1 # via bcrypt, cryptography cftime==1.6.2 # via netcdf4 charset-normalizer==2.0.12 # via requests -click==8.1.3 # via asr, celery, click-didyoumean, click-plugins, click-repl, flask, nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml), uvicorn +click==8.1.3 # via asr, celery, click-didyoumean, click-plugins, click-repl, flask, nomad-lab (pyproject.toml), pynxtools (dependencies/parsers/nexus/pyproject.toml), uvicorn click-didyoumean==0.3.0 # via celery click-plugins==1.1.1 # via celery click-repl==0.2.0 # via celery cloudpickle==2.2.0 # via dask +comm==0.1.4 # via ipywidgets commonmark==0.9.1 # via recommonmark cryptography==39.0.0 # via nomad-lab (pyproject.toml), pyjwt, pyopenssl, rfc3161ng cycler==0.11.0 # via matplotlib -dask[array]==2022.2.0 # via hyperspy +dask[array]==2022.2.0 # via hyperspy, kikuchipy, orix, pyxem debugpy==1.6.5 # via ipykernel decorator==5.1.1 # via ipyparallel, ipython, validators -defusedxml==0.7.1 # via nbconvert +diffpy-structure==3.1.0 # via diffsims, kikuchipy, orix +diffsims==0.5.2 # via kikuchipy, pyxem dill==0.3.6 # via hyperspy -dnspython==2.2.1 # via email-validator +dnspython==2.2.1 # via email-validator, pymongo docker==6.0.1 # via dockerspawner dockerspawner==12.1.0 # via nomad-lab (pyproject.toml) docstring-parser==0.12 # via nomad-lab (pyproject.toml) @@ -68,75 +67,74 @@ escapism==1.0.1 # via dockerspawner et-xmlfile==1.1.0 # via openpyxl exceptiongroup==1.1.1 # via cattrs f90wrap==0.2.13 # via quippy-ase -fastapi==0.92.0 # via nomad-lab (pyproject.toml) +fabio==2023.6.0 # via pyfai, silx +fastapi==0.92.0 # via h5grove, nomad-lab (pyproject.toml) fasteners==0.18 # via mdanalysis, zarr -fastjsonschema==2.16.2 # via nbformat filelock==3.3.1 # via nomad-lab (pyproject.toml) flask==2.2.2 # via asr -flatdict==4.0.1 # via nexusutils (dependencies/parsers/nexus/pyproject.toml) +flatdict==4.0.1 # via pynxtools (dependencies/parsers/nexus/pyproject.toml) fonttools==4.38.0 # via matplotlib fqdn==1.5.1 # via jsonschema fsspec==2022.11.0 # via dask, hyperspy future==0.18.2 # via uncertainties gitdb==4.0.10 # via gitpython -gitpython==3.1.24 # via nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml) +gitpython==3.1.24 # via nomad-lab (pyproject.toml), pynxtools (dependencies/parsers/nexus/pyproject.toml) greenlet==2.0.1 # via sqlalchemy griddataformats==0.7.0 # via mdanalysis gsd==2.7.0 # via mdanalysis +gunicorn==21.2.0 # via nomad-lab (pyproject.toml) h11==0.14.0 # via httpcore, uvicorn -h5grove==1.2.0 # via jupyterlab-h5web, nomad-lab (pyproject.toml) -h5py==3.6.0 # via electronicparsers (dependencies/parsers/electronic/pyproject.toml), h5grove, hyperspy, ifes-apt-tc-data-modeling, jupyterlab-h5web, nomad-lab (pyproject.toml), phonopy, pyscf +h5grove[fastapi]==1.3.0 # via nomad-lab (pyproject.toml) +h5py==3.6.0 # via electronicparsers (dependencies/parsers/electronic/pyproject.toml), h5grove, hyperspy, ifes-apt-tc-data-modeling, kikuchipy, nionswift, nomad-lab (pyproject.toml), orix, phonopy, pyfai, silx hjson==3.0.2 # via nomad-lab (pyproject.toml) html5lib==1.1 # via nomad-lab (pyproject.toml) httpcore==0.16.3 # via httpx httptools==0.5.0 # via uvicorn httpx==0.23.3 # via nomad-lab (pyproject.toml) -hyperspy==1.7.3 # via nexusutils (dependencies/parsers/nexus/pyproject.toml) +hyperspy==1.7.5 # via kikuchipy, pynxtools (dependencies/parsers/nexus/pyproject.toml), pyxem idna==3.4 # via anyio, email-validator, jsonschema, requests, rfc3986 -ifes-apt-tc-data-modeling==0.0.6 # via nexusutils (dependencies/parsers/nexus/pyproject.toml) -imageio==2.24.0 # via hyperspy, scikit-image +ifes-apt-tc-data-modeling==0.0.9 # via pynxtools (dependencies/parsers/nexus/pyproject.toml) +imageio==2.24.0 # via hyperspy, kikuchipy, nionswift, nionswift-io, nionui, scikit-image imagesize==1.4.1 # via sphinx -importlib-metadata==4.13.0 # via flask, hyperspy, jupyterlab-server, nbconvert, nomad-lab (pyproject.toml), sphinx +importlib-metadata==4.13.0 # via flask, hyperspy, nomad-lab (pyproject.toml), sphinx inflection==0.5.1 # via nomad-lab (pyproject.toml) -ipykernel==6.16.2 # via ipyparallel, nbclassic, notebook +ipykernel==6.16.2 # via ipyparallel ipyparallel==8.4.1 # via hyperspy -ipython==7.34.0 # via hyperspy, ipykernel, ipyparallel, jupyterlab -ipython-genutils==0.2.0 # via nbclassic, notebook +ipython==7.34.0 # via hyperspy, ipykernel, ipyparallel, ipywidgets +ipywidgets==8.1.1 # via pyxem isodate==0.6.1 # via rdflib isoduration==20.11.0 # via jsonschema itsdangerous==2.1.2 # via flask, nomad-lab (pyproject.toml) jedi==0.18.2 # via ipython -jinja2==3.0.3 # via flask, hyperspy, jupyter-server, jupyterhub, jupyterlab, jupyterlab-server, nbclassic, nbconvert, notebook, sphinx +jinja2==3.0.3 # via flask, hyperspy, jupyterhub, sphinx jmespath==0.10.0 # via nomad-lab (pyproject.toml) joblib==1.1.0 # via mdanalysis, nomad-lab (pyproject.toml), scikit-learn -json5==0.9.11 # via jupyterlab-server jsonpointer==2.3 # via jsonschema -jsonschema[format]==4.17.3 # via jupyter-telemetry, jupyterlab-server, nbformat, nomad-lab (pyproject.toml), oauthenticator -jupyter-client==7.4.8 # via ipykernel, ipyparallel, jupyter-server, nbclassic, nbclient, notebook -jupyter-core==4.12.0 # via jupyter-client, jupyter-server, jupyterlab, nbclassic, nbclient, nbconvert, nbformat, notebook -jupyter-server==1.23.4 # via jupyterlab, jupyterlab-h5web, jupyterlab-server, nbclassic, notebook-shim +jsonschema[format]==4.17.3 # via jupyter-telemetry, nomad-lab (pyproject.toml), oauthenticator +jupyter-client==7.4.8 # via ipykernel, ipyparallel +jupyter-core==4.12.0 # via jupyter-client jupyter-telemetry==0.1.0 # via jupyterhub jupyterhub==1.4.2 # via dockerspawner, nomad-lab (pyproject.toml), oauthenticator -jupyterlab==3.5.3 # via ifes-apt-tc-data-modeling, nexusutils (dependencies/parsers/nexus/pyproject.toml) -jupyterlab-h5web==7.0.0 # via ifes-apt-tc-data-modeling, nexusutils (dependencies/parsers/nexus/pyproject.toml) -jupyterlab-pygments==0.2.2 # via nbconvert -jupyterlab-server==2.21.0 # via jupyterlab +jupyterlab-widgets==3.0.9 # via ipywidgets +kikuchipy==0.8.7 # via pynxtools (dependencies/parsers/nexus/pyproject.toml) kiwisolver==1.4.4 # via matplotlib kombu==5.2.4 # via celery -lark==1.1.5 # via nexusutils (dependencies/parsers/nexus/pyproject.toml), optimade +lark==1.1.5 # via optimade, pynxtools (dependencies/parsers/nexus/pyproject.toml) latexcodec==2.0.1 # via pybtex llvmlite==0.39.1 # via numba +lmfit==1.2.2 # via pyxem locket==1.0.0 # via partd lxml==4.7.1 # via atomisticparsers (dependencies/parsers/atomistic/pyproject.toml), nomad-lab (pyproject.toml) m2r==0.2.1 # via nomad-lab (pyproject.toml) mako==1.2.4 # via alembic -markupsafe==2.1.1 # via jinja2, mako, nbconvert, werkzeug -matplotlib==3.5.3 # via ase, asr, hyperspy, mdanalysis, phonopy, pymatgen, radioactivedecay +markupsafe==2.1.1 # via jinja2, mako, werkzeug +matplotlib==3.5.3 # via ase, asr, diffsims, hyperspy, kikuchipy, matplotlib-scalebar, mdanalysis, orix, phonopy, pyfai, pymatgen, pyxem, radioactivedecay matplotlib-inline==0.1.6 # via ipykernel, ipython +matplotlib-scalebar==0.8.1 # via orix mdanalysis==2.5.0 # via atomisticparsers (dependencies/parsers/atomistic/pyproject.toml), nomad-lab (pyproject.toml) mdtraj==1.9.6 # via nomad-lab (pyproject.toml) memoization==0.4.0 # via nomad-lab (pyproject.toml) -mistune==2.0.4 # via m2r, nbconvert +mistune==2.0.4 # via m2r mmtf-python==1.1.3 # via mdanalysis mongoengine==0.25.0 # via nomad-lab (pyproject.toml) mongomock==4.1.2 # via optimade @@ -145,31 +143,32 @@ mp-api==0.30.10 # via pymatgen mpmath==1.2.1 # via sympy mrcfile==1.4.3 # via griddataformats msgpack==1.0.4 # via mmtf-python, mp-api, nomad-lab (pyproject.toml) +nanonispy @ git+https://github.com/ramav87/nanonispy.git@a0da87c58482d29624a2bf5deecb763dd1274212 # via pynxtools (dependencies/parsers/nexus/pyproject.toml) natsort==8.2.0 # via hyperspy -nbclassic==0.5.3 # via jupyterlab, notebook -nbclient==0.7.2 # via nbconvert -nbconvert==7.2.7 # via jupyter-server, nbclassic, notebook -nbformat==5.7.3 # via jupyter-server, nbclassic, nbclient, nbconvert, notebook -nest-asyncio==1.5.6 # via ipykernel, jupyter-client, nbclassic, notebook +nest-asyncio==1.5.6 # via ipykernel, jupyter-client netcdf4==1.5.4 # via electronicparsers (dependencies/parsers/electronic/pyproject.toml), nomad-lab (pyproject.toml) networkx==2.6.3 # via matid (dependencies/matid/pyproject.toml), mdanalysis, pymatgen, radioactivedecay, scikit-image -notebook==6.5.3 # via jupyterlab -notebook-shim==0.2.2 # via nbclassic +niondata==0.15.5 # via nionswift, nionswift-io +nionswift==0.16.8 # via pynxtools (dependencies/parsers/nexus/pyproject.toml) +nionswift-io==0.15.1 # via nionswift +nionui==0.6.11 # via nionswift +nionutils==0.4.8 # via niondata, nionswift, nionswift-io, nionui nptyping==1.4.4 # via nomad-lab (pyproject.toml) -numba==0.56.4 # via hyperspy, sparse +numba==0.56.4 # via diffsims, hyperspy, kikuchipy, orix, pyxem, sparse numcodecs==0.10.2 # via zarr -numexpr==2.8.4 # via hyperspy -numpy==1.22.4 # via ase, biopython, cftime, dask, f90wrap, griddataformats, gsd, h5grove, h5py, hyperspy, ifes-apt-tc-data-modeling, imageio, matid (dependencies/matid/pyproject.toml), matplotlib, mdanalysis, mdtraj, mrcfile, netcdf4, nomad-lab (pyproject.toml), nptyping, numba, numcodecs, numexpr, pandas, phonopy, pymatgen, pyscf, pywavelets, quippy-ase, radioactivedecay, scikit-image, scikit-learn, scipy, sparse, spglib, tifffile, xarray, zarr +numexpr==2.8.4 # via hyperspy, pyfai +numpy==1.22.4 # via ase, biopython, cftime, dask, diffsims, f90wrap, fabio, griddataformats, gsd, h5grove, h5py, hyperspy, ifes-apt-tc-data-modeling, imageio, kikuchipy, lmfit, matid (dependencies/matid/pyproject.toml), matplotlib, mdanalysis, mdtraj, mrcfile, nanonispy, netcdf4, niondata, nionswift, nionswift-io, nionui, nomad-lab (pyproject.toml), nptyping, numba, numcodecs, numexpr, numpy-quaternion, orix, pandas, phonopy, pyfai, pymatgen, pywavelets, pyxem, quippy-ase, radioactivedecay, scikit-image, scikit-learn, scipy, silx, sparse, spglib, tifffile, xarray, zarr +numpy-quaternion==2022.4.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[mongo]==0.22.1 # via nomad-lab (pyproject.toml) -orjson==3.6.0 # via h5grove, nomad-lab (pyproject.toml) -packaging==23.0 # via dask, docker, hyperspy, ipykernel, jupyter-server, jupyterlab, jupyterlab-server, matplotlib, mdanalysis, mongomock, nbconvert, pint, scikit-image, sphinx, xarray +orix==0.11.1 # via diffsims, kikuchipy, pyxem +orjson==3.9.4 # via h5grove, nomad-lab (pyproject.toml) +packaging==23.0 # via dask, docker, gunicorn, hyperspy, ipykernel, matplotlib, mdanalysis, mongomock, pint, pooch, scikit-image, sphinx palettable==3.3.0 # via pymatgen pamela==1.0.0 # via jupyterhub pandas==1.3.5 # via eelsdbconverter (dependencies/parsers/eelsdb/pyproject.toml), ifes-apt-tc-data-modeling, nomad-lab (pyproject.toml), panedr, pymatgen, xarray -pandocfilters==1.5.0 # via nbconvert panedr==0.2 # via atomisticparsers (dependencies/parsers/atomistic/pyproject.toml), nomad-lab (pyproject.toml) parmed==3.0.0 # via nomad-lab (pyproject.toml) parso==0.8.3 # via jedi @@ -178,28 +177,30 @@ passlib==1.7.4 # via nomad-lab (pyproject.toml) pexpect==4.8.0 # via ipython phonopy==2.11.0 # via asr, nomad-lab (pyproject.toml), workflowparsers (dependencies/parsers/workflow/pyproject.toml) pickleshare==0.7.5 # via ipython -pillow==9.4.0 # via imageio, matplotlib, scikit-image +pillow==9.4.0 # via imageio, matplotlib, nionswift, scikit-image pint==0.17 # via hyperspy, nomad-lab (pyproject.toml) -platformdirs==3.1.1 # via requests-cache +platformdirs==3.1.1 # via pooch, requests-cache plotly==5.11.0 # via asr, pymatgen +pooch==1.7.0 # via kikuchipy, orix prettytable==3.6.0 # via hyperspy -prometheus-client==0.15.0 # via jupyter-server, jupyterhub, nbclassic, notebook +prometheus-client==0.15.0 # via jupyterhub prompt-toolkit==3.0.36 # via click-repl, ipython -psutil==5.9.4 # via ipykernel, ipyparallel -ptyprocess==0.7.0 # via pexpect, terminado +psutil==5.9.4 # via diffsims, ipykernel, ipyparallel, pyxem +ptyprocess==0.7.0 # via pexpect pyasn1==0.4.8 # via pyasn1-modules, python-jose, rfc3161ng, rsa pyasn1-modules==0.2.8 # via rfc3161ng pybtex==0.24.0 # via emmet-core, pymatgen +pycifrw==4.4.5 # via diffpy-structure pycparser==2.21 # via cffi pydantic==1.10.9 # via emmet-core, fastapi, nomad-lab (pyproject.toml), optimade -pygments==2.14.0 # via ipython, nbconvert, sphinx +pyfai==2023.9.0 # via pyxem +pygments==2.14.0 # via ipython, sphinx pyjwt[crypto]==2.6.0 # via nomad-lab (pyproject.toml) pymatgen==2023.2.28 # via asr, emmet-core, mp-api, nomad-lab (pyproject.toml) -pymongo==3.12.1 # via mongoengine, nomad-lab (pyproject.toml), optimade +pymongo==4.3.3 # via mongoengine, nomad-lab (pyproject.toml), optimade pyopenssl==23.0.0 # via certipy pyparsing==3.0.9 # via matplotlib, mdtraj, rdflib pyrsistent==0.19.3 # via jsonschema -pyscf==2.0.1 ; sys_platform == "darwin" # via electronicparsers (dependencies/parsers/electronic/pyproject.toml) python-dateutil==2.8.2 # via arrow, elasticsearch-dsl, hyperspy, ipyparallel, jupyter-client, jupyterhub, matplotlib, pandas, rfc3161ng python-dotenv==0.21.0 # via uvicorn python-jose==3.3.0 # via python-keycloak @@ -208,18 +209,20 @@ python-keycloak==0.26.1 # 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.5 # via nomad-lab (pyproject.toml) -pytz==2022.7.1 # via babel, celery, nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml), pandas +pytz==2022.7.1 # via babel, celery, nionswift, nomad-lab (pyproject.toml), pandas, pynxtools (dependencies/parsers/nexus/pyproject.toml) +pytz-deprecation-shim==0.1.0.post0 # via tzlocal pywavelets==1.3.0 # via scikit-image -pyyaml==6.0 # via dask, electronicparsers (dependencies/parsers/electronic/pyproject.toml), hyperspy, nomad-lab (pyproject.toml), phonopy, pybtex, uvicorn +pyxem==0.15.1 # via pynxtools (dependencies/parsers/nexus/pyproject.toml) +pyyaml==6.0 # via dask, electronicparsers (dependencies/parsers/electronic/pyproject.toml), hyperspy, kikuchipy, nomad-lab (pyproject.toml), phonopy, pybtex, uvicorn pyzeo==0.1.4 # via nomad-lab (pyproject.toml) -pyzmq==25.0.0 # via ipykernel, ipyparallel, jupyter-client, jupyter-server, nbclassic, notebook +pyzmq==25.0.0 # via ipykernel, ipyparallel, jupyter-client quippy-ase==0.9.14 # via nomad-lab (pyproject.toml) radioactivedecay==0.4.17 # via ifes-apt-tc-data-modeling rdflib==5.0.0 # via nomad-lab (pyproject.toml) recommonmark==0.7.1 # via nomad-lab (pyproject.toml) redis==4.4.2 # via celery -requests==2.28.2 # via docker, hyperspy, jupyterhub, jupyterlab-server, mp-api, nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml), oauthenticator, optimade, pymatgen, python-keycloak, requests-cache, rfc3161ng, sphinx -requests-cache==1.0.1 # via nexusutils (dependencies/parsers/nexus/pyproject.toml) +requests==2.28.2 # via docker, eelsdbconverter (dependencies/parsers/eelsdb/pyproject.toml), hyperspy, jupyterhub, mp-api, nomad-lab (pyproject.toml), oauthenticator, optimade, pooch, pymatgen, python-keycloak, requests-cache, rfc3161ng, sphinx +requests-cache==1.0.1 # via pynxtools (dependencies/parsers/nexus/pyproject.toml) rfc3161ng==2.1.3 # via nomad-lab (pyproject.toml) rfc3339-validator==0.1.4 # via jsonschema rfc3986[idna2008]==1.5.0 # via httpx @@ -228,12 +231,12 @@ rsa==4.9 # via python-jose ruamel-yaml==0.17.21 # via jupyter-telemetry, oauthenticator, 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==1.0.2 # via matid (dependencies/matid/pyproject.toml), nomad-lab (pyproject.toml) -scipy==1.7.1 # via ase, griddataformats, hyperspy, matid (dependencies/matid/pyproject.toml), mdanalysis, mdtraj, nomad-lab (pyproject.toml), pymatgen, pyscf, radioactivedecay, scikit-image, scikit-learn, sparse -send2trash==1.8.0 # via jupyter-server, nbclassic, notebook +scikit-image==0.19.3 # via hyperspy, kikuchipy, pyxem +scikit-learn==1.0.2 # via kikuchipy, matid (dependencies/matid/pyproject.toml), nomad-lab (pyproject.toml), pyxem +scipy==1.7.1 # via ase, diffsims, griddataformats, hyperspy, kikuchipy, lmfit, matid (dependencies/matid/pyproject.toml), mdanalysis, mdtraj, niondata, nionswift, nomad-lab (pyproject.toml), orix, pyfai, pymatgen, pyxem, radioactivedecay, scikit-image, scikit-learn, sparse sentinels==1.0.0 # via mongomock -six==1.16.0 # via astunparse, basicauth, bcrypt, bleach, click-repl, ecdsa, elasticsearch-dsl, griddataformats, html5lib, isodate, latexcodec, pybtex, python-dateutil, python-multipart, rdflib, rfc3339-validator, url-normalize, validators +silx==1.1.2 # via pyfai +six==1.16.0 # via astunparse, basicauth, bcrypt, click-repl, diffpy-structure, ecdsa, elasticsearch-dsl, griddataformats, html5lib, isodate, latexcodec, pybtex, python-dateutil, python-multipart, rdflib, rfc3339-validator, url-normalize, validators smmap==5.0.0 # via gitdb sniffio==1.3.0 # via anyio, httpcore, httpx snowballstemmer==2.2.0 # via sphinx @@ -253,39 +256,41 @@ structlog==22.3.0 # via nomad-lab (pyproject.toml) sympy==1.10.1 # via hyperspy, pymatgen, radioactivedecay tabulate==0.8.9 # via nomad-lab (pyproject.toml), pymatgen tenacity==8.1.0 # via plotly -terminado==0.17.1 # via jupyter-server, nbclassic, notebook threadpoolctl==3.1.0 # via mdanalysis, scikit-learn tifffile==2021.11.2 # via h5grove, hyperspy, scikit-image -tinycss2==1.2.1 # via nbconvert -tomli==2.0.1 # via jupyterlab toolz==0.12.0 # via dask, hyperspy, partd toposort==1.9 # via nomad-lab (pyproject.toml) -tornado==6.2 # via ipykernel, ipyparallel, jupyter-client, jupyter-server, jupyterhub, jupyterlab, nbclassic, notebook, terminado -tqdm==4.64.1 # via hyperspy, ipyparallel, mdanalysis, pymatgen -traitlets==5.8.1 # via ipykernel, ipyparallel, ipython, jupyter-client, jupyter-core, jupyter-server, jupyter-telemetry, jupyterhub, matplotlib-inline, nbclassic, nbclient, nbconvert, nbformat, notebook +tornado==6.2 # via ipykernel, ipyparallel, jupyter-client, jupyterhub +tqdm==4.64.1 # via diffsims, hyperspy, ipyparallel, kikuchipy, mdanalysis, orix, pymatgen +traitlets==5.8.1 # via comm, ipykernel, ipyparallel, ipython, ipywidgets, jupyter-client, jupyter-core, jupyter-telemetry, jupyterhub, matplotlib-inline traits==6.4.1 # via hyperspy +transforms3d==0.4.1 # via diffsims, pyxem typing-extensions==4.4.0 # via emmet-core, gitpython, mp-api, numcodecs, pydantic, starlette typish==1.9.3 # via nptyping -uncertainties==3.1.7 # via pymatgen +tzdata==2023.3 # via pytz-deprecation-shim +tzlocal==4.3 # via nionswift, pynxtools (dependencies/parsers/nexus/pyproject.toml) +uncertainties==3.1.7 # via lmfit, pymatgen unidecode==1.3.2 # via nomad-lab (pyproject.toml) uri-template==1.2.0 # via jsonschema url-normalize==1.4.3 # via requests-cache urllib3==1.26.14 # via docker, elasticsearch, requests, requests-cache -uvicorn[standard]==0.20.0 # via nomad-lab (pyproject.toml) +uvicorn[standard]==0.20.0 # via h5grove, nomad-lab (pyproject.toml) uvloop==0.17.0 # via uvicorn validators==0.18.2 # via nomad-lab (pyproject.toml) vine==5.0.0 # via amqp, celery, kombu watchfiles==0.18.1 # via uvicorn wcwidth==0.2.5 # via prettytable, prompt-toolkit webcolors==1.12 # via jsonschema -webencodings==0.5.1 # via bleach, html5lib, tinycss2 -websocket-client==1.4.2 # via docker, jupyter-server +webencodings==0.5.1 # via html5lib +websocket-client==1.4.2 # via docker websockets==10.4 # via uvicorn werkzeug==2.2.2 # via flask wheel==0.38.4 # via astunparse +widgetsnbextension==4.0.9 # via ipywidgets wrapt==1.12.1 # via nomad-lab (pyproject.toml) -xarray==2023.1.0 # via nexusutils (dependencies/parsers/nexus/pyproject.toml), nomad-lab (pyproject.toml) +xarray==0.20.2 # via nomad-lab (pyproject.toml), pynxtools (dependencies/parsers/nexus/pyproject.toml) zarr==2.12.0 # via hyperspy +zipfile37==0.1.3 # via pynxtools (dependencies/parsers/nexus/pyproject.toml) zipp==3.11.0 # via importlib-metadata zipstream-new==1.1.5 # via nomad-lab (pyproject.toml) diff --git a/scripts/generate_example_uploads.sh b/scripts/generate_example_uploads.sh index 80134da9e7be3d4601a77c32bc2f3d2328b4b91f..29f9380bc8cc5c5bc402ec5ec0d23f5a1fba5bd4 100755 --- a/scripts/generate_example_uploads.sh +++ b/scripts/generate_example_uploads.sh @@ -18,5 +18,8 @@ zip -r -j uploads/apm.zip apm/* zip -r -j uploads/mpes.zip $REMOTE_TOOLS_PATH/mpes/example/* zip -r -j uploads/ellips.zip $REMOTE_TOOLS_PATH/ellips/example/* zip -r -j uploads/em_spctrscpy.zip em_spctrscpy/* +zip -r -j uploads/em_om.zip em_om/* +zip -r -j uploads/em_nion.zip em_nion/* zip -r -j uploads/iv_temp.zip iv_temp/* zip -r -j uploads/xps.zip $REMOTE_TOOLS_PATH/xps/example/* +zip -r -j uploads/sts.zip $REMOTE_TOOLS_PATH/sts/example/* diff --git a/scripts/run.sh b/scripts/run.sh index d2715b6e7352fa4f829644a07b9d268a3a32f7ef..ca99a7c6e00304b7ff5750044ec2b618a13bb0af 100755 --- a/scripts/run.sh +++ b/scripts/run.sh @@ -1,3 +1,3 @@ #!/bin/bash -python -m nomad.cli admin run app --with-gui --host 0.0.0.0 $@ +python -m nomad.cli admin run app --with-gui --gunicorn --host 0.0.0.0 $@ diff --git a/tests/app/conftest.py b/tests/app/conftest.py index 035d5de7a0608262872e12f901af1376e69e13f5..586fa3b16b29691ee5509ea446bf9a9057027f4f 100644 --- a/tests/app/conftest.py +++ b/tests/app/conftest.py @@ -21,34 +21,43 @@ from fastapi.testclient import TestClient from nomad.app.main import app from nomad.datamodel import User -from nomad.app.v1.routers.auth import generate_upload_token +from nomad.app.v1.routers.auth import generate_upload_token, generate_simple_token -def create_auth_headers(user: User): - return { - 'Authorization': 'Bearer %s' % user.user_id - } +def create_auth_headers(token: str): + return {'Authorization': f'Bearer {token}'} @pytest.fixture(scope='module') def test_user_auth(test_user: User): - return create_auth_headers(test_user) + return create_auth_headers(test_user.user_id) @pytest.fixture(scope='module') def other_test_user_auth(other_test_user: User): - return create_auth_headers(other_test_user) + return create_auth_headers(other_test_user.user_id) @pytest.fixture(scope='module') def admin_user_auth(admin_user: User): - return create_auth_headers(admin_user) + return create_auth_headers(admin_user.user_id) + + +@pytest.fixture(scope='module') +def invalid_user_auth(): + return create_auth_headers("invalid.bearer.token") + + +@pytest.fixture(scope='module') +def app_token_auth(test_user: User): + app_token = generate_simple_token(test_user.user_id, expires_in=3600) + return create_auth_headers(app_token) @pytest.fixture(scope='module') def test_auth_dict( test_user, other_test_user, admin_user, - test_user_auth, other_test_user_auth, admin_user_auth): + test_user_auth, other_test_user_auth, admin_user_auth, invalid_user_auth): ''' Returns a dictionary of the form {user_name: (auth_headers, token)}. The key 'invalid' contains an example of invalid credentials, and the key None contains (None, None). @@ -57,7 +66,7 @@ def test_auth_dict( 'test_user': (test_user_auth, generate_upload_token(test_user)), 'other_test_user': (other_test_user_auth, generate_upload_token(other_test_user)), 'admin_user': (admin_user_auth, generate_upload_token(admin_user)), - 'invalid': ({'Authorization': 'Bearer JUST-MADE-IT-UP'}, 'invalid.token'), + 'invalid': (invalid_user_auth, 'invalid.upload.token'), None: (None, None)} diff --git a/tests/app/test_app.py b/tests/app/test_app.py index 76556cb6e8cb31cba0ba3a7fcee2f7a7a6672175..80f16d43cd4b3725d1add7917a419998be133d3e 100644 --- a/tests/app/test_app.py +++ b/tests/app/test_app.py @@ -18,6 +18,8 @@ import pytest +from nomad import config + def test_alive(client): rv = client.get('/alive') @@ -27,13 +29,37 @@ def test_alive(client): def test_docs(client): rv = client.get('/docs/index.html') assert rv.status_code == 200 - assert 'no-cache, no-store, must-revalidate' in rv.headers['Cache-Control'] - rv = client.get('/docs/oasis.html') + assert f'max-age={config.services.html_resource_http_max_age}, must-revalidate' in rv.headers['Cache-Control'] + assert 'Etag' in rv.headers + + rv = client.get('/docs/assets/favicon.png') assert rv.status_code == 200 - assert 'Cache-Control' not in rv.headers + assert f'max-age={config.services.image_resource_http_max_age}, must-revalidate' in rv.headers['Cache-Control'] + assert 'Etag' in rv.headers + + etag = rv.headers['Etag'] + rv = client.get('/docs/assets/favicon.png', headers={'If-None-Match': etag}) + assert rv.status_code == 304 + rv = client.get('/docs/assets/favicon.png', headers={'If-None-Match': f'W/{etag}'}) + assert rv.status_code == 304 @pytest.mark.parametrize('path', ['env.js', 'artifacts.js']) -def test_gui(client, path): +def test_gui(client, path, monkeypatch): + monkeypatch.setattr('nomad.app.main.GuiFiles.gui_env_data', 'env.js') + monkeypatch.setattr('nomad.app.main.GuiFiles.gui_artifacts_data', 'artifacts.js') + monkeypatch.setattr('nomad.app.main.GuiFiles.gui_data_etag', 'etag') + rv = client.get(f'/gui/{path}') assert rv.status_code == 200 + assert rv.text == path + assert rv.headers.get('Etag') == '"etag"' + + rv = client.get(f'/gui/{path}', headers={'if-none-match': 'etag'}) + assert rv.status_code == 304 + + rv = client.get(f'/gui/{path}', headers={'if-none-match': 'W/"etag"'}) + assert rv.status_code == 304 + + rv = client.get(f'/gui/{path}', headers={'if-none-match': 'different-etag'}) + assert rv.status_code == 200 diff --git a/tests/app/test_optimade.py b/tests/app/test_optimade.py index cbb166cdaa33f13dc91ea0bfe3ed8737b3a5f02f..d08b29a27aa26be982d429edf1685c3bd3130844 100644 --- a/tests/app/test_optimade.py +++ b/tests/app/test_optimade.py @@ -36,7 +36,7 @@ def test_get_entry(published: Upload): assert data['metadata']['optimade'] is not None search_result = search(owner='all', query=dict(entry_id=entry_id)).data[0] - assert 'optimade.chemical_formula_hill' in utils.flat(search_result) + assert 'optimade.chemical_formula_hill' in utils.flatten_dict(search_result) def test_no_optimade(mongo, elastic, raw_files, client, test_user): diff --git a/tests/app/v1/routers/common.py b/tests/app/v1/routers/common.py index 54c6dfde2bb3a95dd35f918ce3f752333a8e735a..c7b22e15ae694ae625fcd4f32f0ec8d7386d933a 100644 --- a/tests/app/v1/routers/common.py +++ b/tests/app/v1/routers/common.py @@ -17,20 +17,27 @@ # import pytest -from typing import Set +from typing import Set, Literal, Optional, List, Any +import json import re from devtools import debug from urllib.parse import urlencode -from nomad.datamodel import results from nomad.utils import deep_get +from nomad.datamodel import results + from tests.utils import assert_at_least, assert_url_query_args +n_code_names = results.Simulation.program_name.a_elasticsearch[0].default_aggregation_size + def post_query_test_parameters( entity_id: str, total: int, material_prefix: str, entry_prefix: str): + '''Convenience function for constructing POST query test parameters. + Returns: List of pytest parameters for testing queries. + ''' elements = f'{material_prefix}elements' program_name = f'{entry_prefix}results.method.simulation.program_name' method = f'{entry_prefix}results.method' @@ -54,6 +61,7 @@ def post_query_test_parameters( pytest.param({entity_id: {'missspelled': 'id_01'}}, 422, -1, id='not-op'), pytest.param({f'{entity_id}:lt': ['id_01']}, 422, -1, id='gt-shortlist'), pytest.param({f'{entity_id}:misspelled': 'id_01'}, 422, -1, id='not-op-short'), + pytest.param({'or': [{entity_id: 'id_01'}, {entity_id: 'id_02'}]}, 200, 2, id='or'), pytest.param({'or': {entity_id: 'id_01', program_name: 'VASP'}}, 422, -1, id='or-not-list'), pytest.param({'and': [{entity_id: 'id_01'}, {entity_id: 'id_02'}]}, 200, 0, id='and'), @@ -74,38 +82,64 @@ def post_query_test_parameters( def get_query_test_parameters( - entity_id: str, total: int, material_prefix: str, entry_prefix: str): - - elements = f'{material_prefix}elements' - n_elements = f'{material_prefix}n_elements' - upload_create_time = f'{entry_prefix}upload_create_time' - + str: dict, + int: dict, + date: dict, + subsection: dict, + total: int +) -> List[Any]: + '''Convenience function for constructing GET query test parameters. + + Args: + str: Contains name and values for a string quantity. + int: Contains name and values for an int quantity. + date: Contains name for a date quantity. + nested_str: Contains name and values for a nested string quantity. + + Returns: List of pytest parameters for testing queries. + ''' return [ + # Empty pytest.param({}, 200, total, id='empty'), - pytest.param({entity_id: 'id_01'}, 200, 1, id='match'), - pytest.param({'mispelled': 'id_01'}, 200, total, id='not-quantity'), - pytest.param({entity_id: ['id_01', 'id_02']}, 200, 2, id='match-many-or'), - pytest.param({elements: ['H', 'O']}, 200, total, id='match-list-many-and-1'), - pytest.param({elements: ['H', 'O', 'Zn']}, 200, 0, id='match-list-many-and-2'), - pytest.param({n_elements: 2}, 200, total, id='match-int'), - pytest.param({n_elements + '__gt': 2}, 200, 0, id='gt-int'), - pytest.param({f'{entity_id}__any': ['id_01', 'id_02']}, 200, 2, id='any'), - pytest.param({f'{entity_id}__any': 'id_01'}, 200, 1, id='any-not-list'), - pytest.param({f'{entity_id}__gt': 'id_01'}, 200, total - 1, id='gt'), - pytest.param({f'{entity_id}__gt': ['id_01', 'id_02']}, 422, -1, id='gt-list'), - pytest.param({f'{entity_id}__missspelled': 'id_01'}, 422, -1, id='not-op-1'), - pytest.param({n_elements + '__missspelled': 2}, 422, -1, id='not-op-2'), - pytest.param({'q': f'{entity_id}__id_01'}, 200, 1, id='q-match'), - pytest.param({'q': 'missspelled__id_01'}, 422, -1, id='q-bad-quantity'), + + # Errors + pytest.param({'mispelled': 'no-value'}, 200, total, id='not-quantity'), + + # Match str + pytest.param({str['name']: str['values'][0]}, 200, str['total'], id='str-match'), + pytest.param({str['name'] + '__any': str['values']}, 200, str['total_any'], id='str-match-many-any'), + pytest.param({f'{str["name"]}__any': str['values'][0]}, 200, str['total'], id='str-any-not-list'), + pytest.param({str['name'] + '__all': str['values']}, 200, str['total_all'], id='str-match-many-all'), + pytest.param({f'{str["name"]}__missspelled': 'id_01'}, 422, -1, id='str-not-op'), + pytest.param({f'{str["name"]}__gt': str['values'][0]}, 200, str['total_gt'], id='str-gt'), + pytest.param({f'{str["name"]}__gt': str['values']}, 422, -1, id='str-gt-list'), + + # Match int + pytest.param({int["name"]: int['values'][0]}, 200, int['total'], id='int-match'), + pytest.param({int['name'] + '__any': int['values']}, 200, int['total_any'], id='int-match-many-any'), + pytest.param({int['name'] + '__all': int['values']}, 200, int['total_all'], id='int-match-many-all'), + pytest.param({int["name"] + '__gt': int['values'][0]}, 200, int['total_gt'], id='int-gt'), + pytest.param({int["name"] + '__missspelled': 2}, 422, -1, id='int-not-op-2'), + + # Date + pytest.param({date["name"] + '__gt': '1970-01-01'}, 200, date['total'], id='date-gt'), + + # Q query + pytest.param({'q': f'{date["name"]}__gt__1970-01-01'}, 200, date['total'], id='q-date-gt'), + pytest.param({'q': [f'{str["name"]}__all__{str["values"][0]}', f'{str["name"]}__all__{str["values"][1]}']}, 200, str['total_all'], id='q-str-all-1'), + pytest.param({'q': [f'{str["name"]}__all__{str["values"][0]}', f'{str["name"]}__all__notpresent']}, 200, 0, id='q-str-all-2'), + pytest.param({'q': f'{str["name"]}__{str["values"][0]}'}, 200, str['total'], id='q-str-match'), + pytest.param({'q': f'{int["name"]}__{int["values"][0]}'}, 200, int['total'], id='q-int-match'), + pytest.param({'q': f'{int["name"]}__gt__{int["values"][0]}'}, 200, int['total_gt'], id='q-int-gt'), pytest.param({'q': 'bad_encoded'}, 422, -1, id='q-bad-encode'), - pytest.param({'q': f'{n_elements}__2'}, 200, total, id='q-match-int'), - pytest.param({'q': f'{n_elements}__gt__2'}, 200, 0, id='q-gt'), - pytest.param({'q': f'{entry_prefix}upload_create_time__gt__2014-01-01'}, 200, total, id='datetime'), - pytest.param({'q': [elements + '__all__H', elements + '__all__O']}, 200, total, id='q-all'), - pytest.param({'q': [elements + '__all__H', elements + '__all__X']}, 200, 0, id='q-all'), - pytest.param({'q': f'{upload_create_time}__gt__1970-01-01'}, 200, total, id='date'), - pytest.param({'json_query': f'{{"{elements}": ["H", "O"]}}'}, 200, total, id='json_query'), - pytest.param({'json_query': f'{{"{elements}": ["H", "O"}}'}, 422, 0, id='invalid-json_query') + pytest.param({'q': 'missspelled__id_01'}, 422, -1, id='q-bad-quantity'), + + # JSON + pytest.param({'json_query': f'{{"{str["name"]}:any": {json.dumps(str["values"])}}}'}, 200, str['total_any'], id='json_query'), + pytest.param({'json_query': f'{{"{str["name"]}": ["H", "O"}}'}, 422, 0, id='invalid-json_query'), + + # Search subsection + pytest.param({subsection['name']: subsection['values'][0]}, 200, subsection['total'], id='subsection-match'), ] @@ -169,7 +203,9 @@ def pagination_test_parameters(elements: str, n_elements: str, crystal_system: s ] -def quantity(name, resource): +def get_quantity(name: str, resource: Literal["entries", "materials"]) -> str: + '''Used to map a quantity name to the correct ES path based on the resource. + ''' material_prefix = 'results.material.' if name.startswith(material_prefix) and resource == 'materials': name = name[len(material_prefix):] @@ -178,179 +214,130 @@ def quantity(name, resource): return name -def aggregation_test_parameters(entity_id: str, resource: str, total: int): - n_code_names = results.Simulation.program_name.a_elasticsearch[0].default_aggregation_size - - return [ - pytest.param( - {'statistics': { - 'metrics': ['n_entries', 'n_materials', 'n_uploads', 'n_calculations'] - }}, - 3, 3, 200, 'test_user', id='statistics' - ), - pytest.param( - {'terms': {'quantity': quantity('upload_id', resource)}}, - 8, 8, 200, 'test_user', id='default'), - pytest.param( - { - 'terms': { - 'quantity': quantity('upload_id', resource), - 'pagination': {'order_by': quantity('main_author.user_id', resource)} - } - }, - 8, 8, 200, 'test_user', id='order-str'), - pytest.param( - { - 'terms': { - 'quantity': quantity('upload_id', resource), - 'pagination': {'order_by': quantity('upload_create_time', resource)} - } - }, - 8, 8, 200, 'test_user', id='order-date'), - pytest.param( - { - 'terms': { - 'quantity': quantity('upload_id', resource), - 'pagination': {'order_by': quantity('results.properties.n_calculations', resource)} - } - }, - 8, 8, 200, 'test_user', id='order-int'), - pytest.param( - {'terms': {'quantity': quantity('results.material.symmetry.structure_name', resource)}}, - 0, 0, 200, 'test_user', id='no-results'), - pytest.param( - { - 'terms': { - 'quantity': quantity('upload_id', resource), - 'pagination': {'page_after_value': 'id_published'} - } - }, - 8, 3, 200, 'test_user', id='after'), - pytest.param( - { - 'terms': { - 'quantity': quantity('upload_id', resource), - 'pagination': { - 'order_by': quantity('main_author.name', resource), - 'page_after_value': 'Sheldon Cooper:id_published' - } - } - }, - 8, 3, 200, 'test_user', id='after-order'), - pytest.param( - {'terms': {'quantity': quantity('upload_id', resource), 'entries': {'size': 10}}}, - 8, 8, 200, 'test_user', id='entries'), - pytest.param( - {'terms': {'quantity': quantity('upload_id', resource), 'entries': {'size': 1}}}, - 8, 8, 200, 'test_user', id='entries-size'), - pytest.param( - {'terms': {'quantity': quantity('upload_id', resource), 'entries': {'size': 0}}}, - -1, -1, 422, 'test_user', id='bad-entries'), - pytest.param( - { - 'terms': { - 'quantity': quantity('upload_id', resource), - 'entries': { - 'size': 10, - 'required': { - 'include': [quantity('entry_id', resource), quantity('main_author.*', resource)] - } - } - } - }, - 8, 8, 200, 'test_user', id='entries-include'), - pytest.param( - {'terms': {'quantity': quantity('results.method.simulation.program_name', resource)}}, - n_code_names, n_code_names, 200, None, id='fixed-values'), - pytest.param( - {'terms': {'quantity': quantity('results.method.simulation.program_name', resource), 'metrics': ['n_uploads']}}, - n_code_names, n_code_names, 200, None, id='metrics'), - pytest.param( - {'terms': {'quantity': quantity('results.method.simulation.program_name', resource), 'metrics': ['does not exist']}}, - -1, -1, 422, None, id='bad-metric'), - pytest.param( - {'terms': {'quantity': entity_id, 'size': 1000}}, - total, total, 200, None, id='size-to-large'), - pytest.param( - {'terms': {'quantity': entity_id, 'size': 5}}, - total, 5, 200, None, id='size'), - pytest.param( - {'terms': {'quantity': entity_id, 'size': -1}}, - -1, -1, 422, None, id='bad-size-1'), - pytest.param( - {'terms': {'quantity': entity_id, 'size': 0}}, - -1, -1, 422, None, id='bad-size-2'), - pytest.param( - {'terms': {'quantity': entity_id}}, - total, 10 if total > 10 else total, 200, None, id='size-default'), - pytest.param( - { - 'terms': { - 'quantity': quantity('upload_id', resource), - 'pagination': {'order': 'asc'} - } - }, - 8, 8, 200, 'test_user', id='order-direction'), - pytest.param( - {'terms': {'quantity': 'does not exist'}}, - -1, -1, 422, None, id='bad-quantity'), - pytest.param( - {'date_histogram': {'quantity': quantity('upload_create_time', resource)}}, - 1, 1, 200, 'test-user', id='date-histogram' - ), - pytest.param( - {'date_histogram': {'quantity': quantity('upload_create_time', resource), 'metrics': ['n_uploads']}}, - 1, 1, 200, 'test-user', id='date-histogram-metrics' - ), - pytest.param( - {'date_histogram': {'quantity': quantity('upload_create_time', resource), 'interval': '1s'}}, - 1, 1, 200, 'test-user', id='date-histogram-interval' - ), - pytest.param( - {'date_histogram': {'quantity': quantity('upload_id', resource)}}, - -1, -1, 422, 'test-user', id='date-histogram-no-date' - ), - pytest.param( - {'date_histogram': {'quantity': quantity('upload_id', resource), 'interval': '1xy'}}, - -1, -1, 422, 'test-user', id='date-histogram-bad-interval' - ), - pytest.param( - {'histogram': {'quantity': quantity('results.properties.n_calculations', resource), 'interval': 1}}, - 1, 1, 200, None, id='histogram-interval' - ), - pytest.param( - {'histogram': {'quantity': quantity('results.properties.n_calculations', resource), 'interval': 1, 'metrics': ['n_uploads']}}, - 1, 1, 200, None, id='histogram-metric' - ), - pytest.param( - {'histogram': {'quantity': quantity('upload_create_time', resource), 'buckets': 10}}, - 1, 1, 200, 'test-user', id='histogram-buckets' - ), - pytest.param( - {'histogram': {'quantity': quantity('results.properties.n_calculations', resource)}}, - -1, -1, 422, None, id='histogram-no-interval-or-buckets' - ), - pytest.param( - {'histogram': {'quantity': quantity('upload_id', resource)}}, - -1, -1, 422, None, id='histogram-no-number' - ), - pytest.param( - {'min_max': {'quantity': quantity('results.properties.n_calculations', resource)}}, - 1, 1, 200, None, id='min-max' - ), - pytest.param( - {'min_max': {'quantity': quantity('upload_id', resource)}}, - -1, -1, 422, None, id='min-max-no-number' - ), +def aggregation_test_parameters( + str: dict, + enum: dict, + bool: dict, + int: dict, + pagination: dict, + pagination_order_by: Optional[dict], + histogram_int: dict, + histogram_date: dict, + include: dict, + metrics: dict, + empty: dict, + fixed: Optional[dict]) -> List[Any]: + '''Convenience function for constructing aggregation tests. + + Args: + str: Contains name, total, and size for a string quantity. + enum: Contains name, total, and size for an enum quantity. + bool: Contains name, total, and size for a bool quantity. + int: Contains name, total, and size for an int quantity. + pagination: Contains name, total, size, page_after_value, page_after_value_tiebreaker and page_after_value_size for a quantity that should be paginated. + pagination_order_by: Contains name_str, name_date, name_int for testing pagination by different field types. + histogram_int: Contains name, interval, interval_size, buckets and bucket_size for testing int histogram. + histogram_date: Contains name, default_size, interval and interval_size for testing date histogram. + histogram_date: Contains name, default_size, interval and interval_size for testing date histogram. + include: Contains name, include, total and size for testing include. + metrics: Contains name, total and size for testing metrics. + empty: Contains name for testing quantity that should not contain results. + fixed: Contains name, total and size for testing quantity with fixed number or returned terms. + + Returns: List of pytest parameters for testing aggregation calls. + ''' + default_size = 10 + default_name = str['name'] + default_total = str['total'] + section_path = str['name'].rsplit('.', 1)[0] + '.*' + + tests = [ + # Terms + pytest.param({'terms': {'quantity': str['name']}}, str['total'], min(str['size'], default_size), 200, 'test_user', id='terms-str'), + pytest.param({'terms': {'quantity': enum['name']}}, enum['total'], min(enum['size'], default_size), 200, 'test_user', id='terms-enum'), + pytest.param({'terms': {'quantity': bool['name']}}, bool['total'], min(bool['size'], default_size), 200, 'test_user', id='terms-bool'), + pytest.param({'terms': {'quantity': empty['name']}}, 0, 0, 200, 'test_user', id='no-results'), + pytest.param({'terms': {'quantity': default_name, 'entries': {'size': 10}}}, default_total, min(default_total, default_size), 200, 'test_user', id='entries'), + pytest.param({'terms': {'quantity': default_name, 'entries': {'size': 1}}}, default_total, min(default_total, default_size), 200, 'test_user', id='entries-size'), + pytest.param({'terms': {'quantity': default_name, 'entries': {'size': 0}}}, -1, -1, 422, 'test_user', id='bad-entries'), + pytest.param({'terms': {'quantity': default_name, 'entries': {'size': 10, 'required': {'include': [default_name, section_path]}}}}, str['total'], min(str['size'], default_size), 200, 'test_user', id='entries-include'), + pytest.param({'terms': {'quantity': default_name, 'entries': {'size': 10, 'required': {'exclude': ['files', 'mainfile*']}}}}, str['total'], min(str['size'], default_size), 200, 'test_user', id='entries-exclude'), + pytest.param({'terms': {'quantity': default_name, 'size': default_total - 1}}, default_total, default_total - 1, 200, None, id='size'), + pytest.param({'terms': {'quantity': default_name, 'size': 1000}}, default_total, default_total, 200, None, id='size-too-large'), + pytest.param({'terms': {'quantity': default_name}}, default_total, default_size, 200, None, id='size-default'), + pytest.param({'terms': {'quantity': default_name, 'size': -1}}, -1, -1, 422, None, id='bad-size-1'), + pytest.param({'terms': {'quantity': default_name, 'size': 0}}, -1, -1, 422, None, id='bad-size-2'), + pytest.param({'terms': {'quantity': 'does not exist'}}, -1, -1, 422, None, id='bad-quantity'), + pytest.param({'terms': {'quantity': pagination['name'], 'pagination': {'order': 'asc'}}}, pagination['total'], min(pagination['size'], default_size), 200, 'test_user', id='order-direction'), + pytest.param({'terms': {'quantity': pagination['name'], 'pagination': {'page_after_value': pagination['page_after_value']}}}, pagination['total'], pagination['page_after_value_size'], 200, 'test_user', id='after'), + pytest.param({'terms': {'quantity': metrics['name'], 'metrics': ['n_uploads']}}, metrics['total'], metrics['size'], 200, None, id='metrics'), + pytest.param({'terms': {'quantity': metrics['name'], 'metrics': ['does not exist']}}, -1, -1, 422, None, id='bad-metric'), + pytest.param({'terms': {'quantity': include['name'], 'include': include['include']}}, include['total'], include['size'], 200, None, id='terms-include'), + pytest.param({'terms': {'quantity': include['name'], 'include': '.*_0.*'}}, -1, -1, 422, None, id='terms-bad-include'), + # Date histogram + pytest.param({'date_histogram': {'quantity': histogram_date['name']}}, histogram_date['default_size'], histogram_date['default_size'], 200, 'test-user', id='date-histogram-default'), + pytest.param({'date_histogram': {'quantity': histogram_date['name'], 'interval': histogram_date['interval']}}, histogram_date['interval_size'], histogram_date['interval_size'], 200, 'test-user', id='date-histogram-interval'), + pytest.param({'date_histogram': {'quantity': histogram_date['name'], 'interval': histogram_date['interval'], 'metrics': ['n_uploads']}}, histogram_date['interval_size'], histogram_date['interval_size'], 200, 'test-user', id='date-histogram-metrics'), + pytest.param({'date_histogram': {'quantity': str['name']}}, -1, -1, 422, 'test-user', id='date-histogram-no-date'), + pytest.param({'date_histogram': {'quantity': histogram_date['name'], 'interval': '1xy'}}, -1, -1, 400, 'test-user', id='date-histogram-bad-interval'), + # Int histogram + pytest.param({'histogram': {'quantity': histogram_int['name'], 'interval': histogram_int['interval']}}, histogram_int['interval_size'], histogram_int['interval_size'], 200, None, id='histogram-interval'), + pytest.param({'histogram': {'quantity': histogram_int['name'], 'buckets': histogram_int['buckets']}}, histogram_int['bucket_size'], histogram_int['bucket_size'], 200, 'test-user', id='histogram-buckets'), + pytest.param({'histogram': {'quantity': histogram_int['name'], 'interval': histogram_int['interval'], 'metrics': ['n_uploads']}}, histogram_int['interval_size'], histogram_int['interval_size'], 200, None, id='histogram-metric'), + pytest.param({'histogram': {'quantity': histogram_int['name']}}, -1, -1, 422, None, id='histogram-no-interval-or-buckets'), + pytest.param({'histogram': {'quantity': str['name']}}, -1, -1, 422, None, id='histogram-no-number'), + # Min-max + pytest.param({'min_max': {'quantity': int['name']}}, 1, 1, 200, None, id='min-max'), + pytest.param({'min_max': {'quantity': str['name']}}, -1, -1, 422, None, id='min-max-no-number'), ] - -def aggregation_exclude_from_search_test_parameters(resource: str, total_per_entity: int, total: int): - entry_id = quantity('entry_id', resource) - upload_id = quantity('upload_id', resource) - program_name = quantity('results.method.simulation.program_name', resource) - n_elements = quantity('results.material.n_elements', resource) - band_gap = quantity('results.properties.electronic.band_structure_electronic.band_gap.value', resource) + # Optional tests for terms aggregation for fields with fixed number of return values + if fixed: + tests += [ + pytest.param({'terms': {'quantity': fixed['name']}}, fixed['total'], fixed['size'], 200, None, id='fixed-values') + ] + # Optional tests for using order_by in pagination + if pagination_order_by: + tests += [ + pytest.param({'terms': {'quantity': pagination['name'], 'pagination': {'order_by': pagination_order_by['name_str']}}}, pagination['total'], min(pagination['size'], default_size), 200, 'test_user', id='order-str'), + pytest.param({'terms': {'quantity': pagination['name'], 'pagination': {'order_by': pagination_order_by['name_date']}}}, pagination['total'], min(pagination['size'], default_size), 200, 'test_user', id='order-date'), + pytest.param({'terms': {'quantity': pagination['name'], 'pagination': {'order_by': pagination_order_by['name_int']}}}, pagination['total'], min(pagination['size'], default_size), 200, 'test_user', id='order-int'), + pytest.param({'terms': {'quantity': pagination['name'], 'pagination': {'order_by': pagination_order_by['name_str'], 'page_after_value': pagination['page_after_value_tiebreaker']}}}, pagination['total'], pagination['page_after_value_size'], 200, 'test_user', id='after-order'), + ] + + return tests + + +def aggregation_test_parameters_default(resource: Literal["entries", "materials"]): + '''Convenience function for constructing default aggregation tests. + + Args: + resource: The targeted resource, either 'entries' or 'materials'. + + Returns: List of pytest parameters for testing aggregation calls. + ''' + return aggregation_test_parameters( + str={'name': get_quantity('entry_id', resource), 'total': 23, 'size': 32}, + empty={'name': get_quantity('results.material.symmetry.structure_name', resource)}, + enum={'name': get_quantity('results.material.dimensionality', resource), 'total': 1, 'size': 1}, + bool={'name': get_quantity('results.properties.electronic.dos_electronic.spin_polarized', resource), 'total': 2, 'size': 2}, + int={'name': get_quantity('results.properties.n_calculations', resource)}, + pagination={'name': get_quantity('upload_id', resource), 'total': 8, 'size': 8, 'page_after_value': 'id_published', 'page_after_value_tiebreaker': 'Sheldon Cooper:id_published', 'page_after_value_size': 3}, + histogram_int={'name': get_quantity('results.properties.n_calculations', resource), 'interval': 1, 'buckets': 10, 'interval_size': 1, 'bucket_size': 1}, + histogram_date={'name': get_quantity('upload_create_time', resource), 'interval': '1s', 'interval_size': 1, 'default_size': 1}, + include={'name': get_quantity('entry_id', resource), 'include': '_0', 'total': 9, 'size': 9}, + metrics={'name': get_quantity('results.method.simulation.program_name', resource), 'total': n_code_names, 'size': n_code_names}, + fixed={'name': get_quantity('results.method.simulation.program_name', resource), 'total': n_code_names, 'size': n_code_names}, + pagination_order_by={'name_str': get_quantity('main_author.name', resource), 'name_int': get_quantity('results.properties.n_calculations', resource), 'name_date': get_quantity('upload_create_time', resource)} + ) + + +def aggregation_exclude_from_search_test_parameters(resource: Literal["entries", "materials"], total_per_entity: int, total: int): + entry_id = get_quantity('entry_id', resource) + upload_id = get_quantity('upload_id', resource) + program_name = get_quantity('results.method.simulation.program_name', resource) + n_elements = get_quantity('results.material.n_elements', resource) + band_gap = get_quantity('results.properties.electronic.band_structure_electronic.band_gap.value', resource) def make_aggs(aggs): """Given a list of aggregation definitions, returns the API-compatible @@ -713,6 +700,63 @@ def assert_aggregations( assert_required(entry, agg['entries']['required'], default_key=default_key) +def assert_query_response(client, test_method, query, total, status_code): + '''Checks that the query response is as expected.''' + response_json = test_method( + client, query=query, status_code=status_code, total=total, http_method='get') + + if response_json is None: + return + + if 'pagination' not in response_json: + return + + response = client.get('entries?%s' % urlencode(query, doseq=True)) + + response_json = assert_metadata_response(response, status_code=status_code) + + if response_json is None: + return + + pagination = response_json['pagination'] + assert pagination['total'] == total + assert pagination['page_size'] == 10 + assert pagination['order_by'] == 'entry_id' + assert pagination['order'] == 'asc' + assert ('next_page_after_value' in pagination) == (total > 10) + + +def assert_aggregation_response(client, test_user_auth, aggregation, total, size, status_code, user, resource: Literal["entries", "materials"]): + '''Checks that the aggregation response is as expected.''' + headers = {} + if user == 'test_user': + headers = test_user_auth + + agg_id = 'test_agg_name' + aggregations = {agg_id: aggregation} + if resource == 'entries': + default_key = 'entry_id' + metadata_test = perform_entries_metadata_test + elif resource == 'materials': + default_key = 'material_id' + metadata_test = perform_materials_metadata_test + + response_json = metadata_test( + client, headers=headers, owner='visible', aggregations=aggregations, + pagination=dict(page_size=0), + status_code=status_code, http_method='post') + + print(json.dumps(response_json, indent=2)) + + if response_json is None: + return + + for aggregation_obj in aggregation.values(): + assert_aggregations( + response_json, agg_id, aggregation_obj, total=total, size=size, + default_key=default_key) + + def assert_pagination(pagination, pagination_response, data, order_by=None, order=None, is_get=True): assert_at_least(pagination, pagination_response) assert len(data) <= pagination_response['page_size'] @@ -797,6 +841,16 @@ def perform_metadata_test( return response_json +def perform_entries_metadata_test(*args, **kwargs): + kwargs.update(endpoint='entries') + return perform_metadata_test(*args, **kwargs) + + +def perform_materials_metadata_test(*args, **kwargs): + kwargs.update(endpoint='materials') + return perform_metadata_test(*args, **kwargs) + + def perform_owner_test( client, test_user_auth, other_test_user_auth, admin_user_auth, owner, user, status_code, total, http_method, test_method): @@ -816,13 +870,8 @@ def perform_owner_test( http_method=http_method) -def perform_quantity_search_test(quantity, resource, search, result, client): - if resource == "materials": - if quantity.startswith("results.material"): - quantity = quantity[len("results.material."):] - else: - quantity = f"entries.{quantity}" - +def perform_quantity_search_test(name, resource: Literal["entries", "materials"], search, result, client): + quantity = get_quantity(name, resource) body = {"query": {f"{quantity}": search}} response = client.post(f"{resource}/query", json=body, headers={}) assert_response(response, 200) diff --git a/tests/app/v1/routers/test_auth.py b/tests/app/v1/routers/test_auth.py index b82a2f73261eeba55e678bdfe8aeb8fa549a000e..f7a5b4f47fff67b100d16df149d6b4c640678119 100644 --- a/tests/app/v1/routers/test_auth.py +++ b/tests/app/v1/routers/test_auth.py @@ -46,3 +46,30 @@ def test_get_signature_token(client, test_user_auth): response = client.get('auth/signature_token', headers=test_user_auth) assert response.status_code == 200 assert response.json().get('signature_token') is not None + + +def test_get_signature_token_unauthorized(client, invalid_user_auth): + response = client.get('auth/signature_token', headers=None) + assert response.status_code == 401 + response = client.get('auth/signature_token', headers=invalid_user_auth) + assert response.status_code == 401 + + +@pytest.mark.parametrize( + 'expires_in, status_code', + [(0, 422), (30 * 60, 200), (2 * 60 * 60, 200), (31 * 24 * 60 * 60, 422), (None, 422)]) +def test_get_app_token(client, test_user_auth, expires_in, status_code): + response = client.get( + 'auth/app_token', headers=test_user_auth, params={'expires_in': expires_in}) + assert response.status_code == status_code + if status_code == 200: + assert response.json().get('app_token') is not None + + +def test_get_app_token_unauthorized(client, invalid_user_auth): + response = client.get('auth/app_token', headers=None, + params={'expires_in': 60}) + assert response.status_code == 401 + response = client.get('auth/app_token', headers=invalid_user_auth, + params={'expires_in': 60}) + assert response.status_code == 401 diff --git a/tests/app/v1/routers/test_entries.py b/tests/app/v1/routers/test_entries.py index d19b9171983f4c923432f4fcd6dd43b85a517c76..85c059034137fab21b8b9fb3ba53aad1f7645a36 100644 --- a/tests/app/v1/routers/test_entries.py +++ b/tests/app/v1/routers/test_entries.py @@ -22,19 +22,19 @@ import zipfile import io import json -from nomad.datamodel import results -from nomad.metainfo.elasticsearch_extension import entry_type +from nomad.metainfo.elasticsearch_extension import entry_type, schema_separator from nomad.utils.exampledata import ExampleData from tests.test_files import example_mainfile_contents, append_raw_files # pylint: disable=unused-import +from tests.config import python_schema_name from .common import ( - aggregation_exclude_from_search_test_parameters, assert_response, assert_base_metadata_response, + aggregation_exclude_from_search_test_parameters, assert_response, assert_base_metadata_response, assert_query_response, assert_metadata_response, assert_required, assert_aggregations, assert_pagination, assert_browser_download_headers, - perform_metadata_test, post_query_test_parameters, get_query_test_parameters, - perform_owner_test, owner_test_parameters, pagination_test_parameters, - aggregation_test_parameters) -from tests.conftest import example_data # pylint: disable=unused-import + post_query_test_parameters, get_query_test_parameters, + perform_owner_test, owner_test_parameters, pagination_test_parameters, aggregation_test_parameters, + aggregation_test_parameters_default, assert_aggregation_response, perform_entries_metadata_test) +from tests.conftest import example_data, example_data_schema_python # pylint: disable=unused-import ''' These are the tests for all API operations below ``entries``. The tests are organized @@ -47,16 +47,11 @@ to assert for certain aspects in the responses. ''' -def perform_entries_metadata_test(*args, **kwargs): - kwargs.update(endpoint='entries') - return perform_metadata_test(*args, **kwargs) - - def perform_entries_raw_test( client, headers={}, query={}, owner=None, files={}, total=-1, files_per_entry=5, status_code=200, http_method='get'): - if type(total) == int: + if isinstance(total, int): total_entries = total_mainfiles = total else: total_entries, total_mainfiles = total @@ -317,7 +312,6 @@ def assert_archive(archive, required=None): assert key in archive -n_code_names = results.Simulation.program_name.a_elasticsearch[0].default_aggregation_size program_name = 'results.method.simulation.program_name' @@ -328,7 +322,7 @@ def test_entries_all_metrics(client, example_data): 'quantity': quantity, 'metrics': [metric for metric in entry_type.metrics] } } - for quantity in entry_type.quantities if entry_type.quantities[quantity].aggregatable} + for quantity in entry_type.quantities if entry_type.quantities[quantity].annotation.aggregatable} response_json = perform_entries_metadata_test( client, aggregations=aggregations, status_code=200, http_method='post') for name, agg in aggregations.items(): @@ -337,44 +331,33 @@ def test_entries_all_metrics(client, example_data): @pytest.mark.parametrize( 'aggregation, total, size, status_code, user', - aggregation_test_parameters(entity_id='entry_id', resource='entries', total=23) + [ - pytest.param( - { - 'terms': { - 'quantity': 'upload_id', - 'entries': { - 'size': 10, - 'required': {'exclude': ['files', 'mainfile*']} - } - } - }, - 8, 8, 200, 'test_user', id='entries-exclude'), - pytest.param( - {'terms': {'quantity': 'entry_id', 'include': '_0'}}, - 9, 9, 200, None, id='filter'), - pytest.param( - {'terms': {'quantity': 'entry_id', 'include': '.*_0.*'}}, - -1, -1, 422, None, id='bad-filter') - ]) + aggregation_test_parameters_default('entries')) def test_entries_aggregations(client, example_data, test_user_auth, aggregation, total, size, status_code, user): - headers = {} - if user == 'test_user': - headers = test_user_auth - - aggregations = {'test_agg_name': aggregation} + '''Tests aggregation calls for regular statically mapped quantities.''' + assert_aggregation_response(client, test_user_auth, aggregation, total, size, status_code, user, resource='entries') - response_json = perform_entries_metadata_test( - client, headers=headers, owner='visible', aggregations=aggregations, - pagination=dict(page_size=0), - status_code=status_code, http_method='post') - - if response_json is None: - return - for aggregation_obj in aggregation.values(): - assert_aggregations( - response_json, 'test_agg_name', aggregation_obj, total=total, size=size, - default_key='entry_id') +@pytest.mark.parametrize( + 'aggregation, total, size, status_code, user', + aggregation_test_parameters( + str={'name': f'data.name{schema_separator}{python_schema_name}', 'total': 15, 'size': 10}, + empty={'name': f'data.empty{schema_separator}{python_schema_name}'}, + enum={'name': f'data.message{schema_separator}{python_schema_name}', 'total': 2, 'size': 2}, + bool={'name': f'data.valid{schema_separator}{python_schema_name}', 'total': 2, 'size': 2}, + int={'name': f'data.count{schema_separator}{python_schema_name}'}, + pagination={'name': f'data.name{schema_separator}{python_schema_name}', 'total': 15, 'size': 10, 'page_after_value': 'test5', 'page_after_value_tiebreaker': 'Sheldon Cooper:test5', 'page_after_value_size': 4}, + pagination_order_by=None, + histogram_int={'name': f'data.count{schema_separator}{python_schema_name}', 'interval': 1, 'buckets': 10, 'interval_size': 15, 'bucket_size': 8}, + histogram_date={'name': f'data.timestamp{schema_separator}{python_schema_name}', 'interval': '1s', 'interval_size': 1, 'default_size': 1}, + include={'name': f'data.name{schema_separator}{python_schema_name}', 'include': 'test5', 'total': 1, 'size': 1}, + metrics={'name': f'data.name{schema_separator}{python_schema_name}', 'total': 15, 'size': 10}, + fixed=None, + )) +def test_entries_aggregations_dynamic(plugin_schema, client, example_data_schema_python, test_user_auth, aggregation, total, size, status_code, user): + '''Tests aggregation calls for dynamically mapped quantities (quantities stored in + search_quantities). + ''' + assert_aggregation_response(client, test_user_auth, aggregation, total, size, status_code, user, resource='entries') @pytest.mark.parametrize( @@ -731,38 +714,40 @@ def test_entries_post_query(client, example_data, query, status_code, total, tes assert ('next_page_after_value' in pagination) == (total > 10) -@pytest.mark.parametrize('query, status_code, total', get_query_test_parameters( - 'entry_id', total=23, material_prefix='results.material.', entry_prefix='') + [ - pytest.param({'q': 'domain__dft'}, 200, 23, id='enum')]) +@pytest.mark.parametrize( + 'query, status_code, total', + get_query_test_parameters( + str={'name': 'entry_id', 'values': ['id_01', 'id_02'], 'total': 1, 'total_any': 2, 'total_all': 0, 'total_gt': 22}, + int={'name': 'results.material.n_elements', 'values': [2, 1], 'total': 23, 'total_any': 23, 'total_all': 0, 'total_gt': 0}, + date={'name': 'upload_create_time', 'total': 23}, + subsection={'name': 'results.material.material_id', 'values': ['id_01'], 'total': 3}, + total=23 + ) + [pytest.param({'q': 'domain__dft'}, 200, 23, id='enum')] +) @pytest.mark.parametrize('test_method', [ pytest.param(perform_entries_metadata_test, id='metadata'), pytest.param(perform_entries_raw_test, id='raw'), pytest.param(perform_entries_rawdir_test, id='rawdir'), pytest.param(perform_entries_archive_test, id='archive'), - pytest.param(perform_entries_archive_download_test, id='archive-download')]) + pytest.param(perform_entries_archive_download_test, id='archive-download') +]) def test_entries_get_query(client, example_data, query, status_code, total, test_method): - response_json = test_method( - client, query=query, status_code=status_code, total=total, http_method='get') - - if response_json is None: - return - - if 'pagination' not in response_json: - return + assert_query_response(client, test_method, query, total, status_code) - response = client.get('entries?%s' % urlencode(query, doseq=True)) - response_json = assert_metadata_response(response, status_code=status_code) - - if response_json is None: - return - - pagination = response_json['pagination'] - assert pagination['total'] == total - assert pagination['page_size'] == 10 - assert pagination['order_by'] == 'entry_id' - assert pagination['order'] == 'asc' - assert ('next_page_after_value' in pagination) == (total > 10) +@pytest.mark.parametrize( + 'query, status_code, total', + get_query_test_parameters( + str={'name': f'data.name{schema_separator}{python_schema_name}', 'values': ['test1', 'test2'], 'total': 1, 'total_any': 2, 'total_all': 0, 'total_gt': 13}, + int={'name': f'data.count{schema_separator}{python_schema_name}', 'values': [1, 2], 'total': 1, 'total_any': 2, 'total_all': 0, 'total_gt': 13}, + date={'name': f'data.timestamp{schema_separator}{python_schema_name}', 'total': 15}, + subsection={'name': f'data.child.name{schema_separator}{python_schema_name}', 'values': ['test_child1'], 'total': 1}, + total=38 # Note that this includes also the data coming from the fixture 'example_data' which has a bigger scope + ) +) +@pytest.mark.parametrize('test_method', [pytest.param(perform_entries_metadata_test, id='metadata')]) +def test_entries_get_query_dynamic(plugin_schema, client, example_data_schema_python, query, status_code, total, test_method): + assert_query_response(client, test_method, query, total, status_code) @pytest.mark.parametrize( diff --git a/tests/app/v1/routers/test_graph.py b/tests/app/v1/routers/test_graph.py index 934e4433ec432445c5b837dbc4271c8d7b6d40eb..6f85d69f224bf8cdc1a12d190dd5c3e552850c59 100644 --- a/tests/app/v1/routers/test_graph.py +++ b/tests/app/v1/routers/test_graph.py @@ -18,7 +18,7 @@ import pytest -from nomad.archive.query_reader import EntryReader +from nomad.graph.graph_reader import EntryReader, Token from nomad.datamodel import EntryArchive from nomad.utils.exampledata import ExampleData from tests.archive.test_archive import assert_dict @@ -41,7 +41,22 @@ def assert_path_exists(path, response): raise KeyError -# @pytest.mark.skip +def test_graph_query_random(client, test_auth_dict, example_data): + user_auth, _ = test_auth_dict['test_user'] + response = client.post( + 'graph/raw_query', + json={Token.UPLOADS: { + 'id_embargo': { + Token.RAW: {'test_content': {'id_embargo_1': {'m_request': {'directive': 'plain'}}}}, + Token.ENTRIES: {'id_embargo_1': { + 'mainfile': {'m_request': {'directive': 'plain'}}}}, + }, + }}, + headers={'Accept': 'application/json'} | (user_auth if user_auth else {})) + + print(response.json()) + + @pytest.mark.parametrize('upload_id,entry_id,user,status_code', [ pytest.param('id_embargo', 'id_embargo_1', 'test_user', 200, id='ok'), pytest.param('id_child_entries', 'id_child_entries_child1', 'test_user', 200, id='child-entry'), @@ -59,9 +74,9 @@ def test_graph_query( user_auth, _ = test_auth_dict[user] response = client.post( 'graph/query', - json={'m_uploads': {upload_id: {'m_entries': {entry_id: '*'}}}}, + json={Token.UPLOADS: {upload_id: {Token.ENTRIES: {entry_id: '*'}}}}, headers={'Accept': 'application/json'} | (user_auth if user_auth else {})) - target_path = ('m_response', 'm_uploads', upload_id, 'm_entries', entry_id) + target_path = (Token.UPLOADS, upload_id, Token.ENTRIES, entry_id) if 200 == status_code: assert_path_exists(target_path, response.json()) elif 401 == status_code: @@ -71,7 +86,6 @@ def test_graph_query( assert_path_exists(target_path, response.json()) -# @pytest.mark.skip @pytest.mark.parametrize('required,status_code', [ pytest.param('*', 200, id='full'), pytest.param({'metadata': '*'}, 200, id='partial'), @@ -80,21 +94,25 @@ def test_graph_query( pytest.param({'DOESNOTEXIST': '*'}, 422, id='bad-required-3') ]) def test_graph_archive_query(client, example_data, required, status_code, test_user_auth): - response = client.post('graph/archive/query', headers=test_user_auth, json={'required': required}) + response = client.post('graph/archive/query', headers=test_user_auth, json={ + 'owner': 'user', 'required': required}) + + json_response = response.json() - json_response = response.json()['m_response'] + m_response = json_response['search'].pop('m_response', None) - assert json_response['pagination']['total'] == 32 + assert m_response['pagination']['total'] == 32 - for key, value in json_response['m_entries'].items(): + for key, value in json_response[Token.SEARCH].items(): + value = value[Token.ENTRIES] if key == 'id_02': # since id_02 is missing (see example_data) assert 'm_errors' in value elif status_code != 200: # nonexistent required field - assert 'm_errors' in value['m_archive'] + assert 'm_errors' in value[Token.ARCHIVE] else: - archive = value['m_archive'] + archive = value[Token.ARCHIVE] if required == '*': for item in ['metadata', 'run']: assert item in archive @@ -196,7 +214,18 @@ def example_archive(): return archive -# @pytest.mark.skip +@pytest.fixture(scope='function') +def example_upload(example_archive, test_user, mongo_function, elastic_function): + data = ExampleData(main_author=test_user) + data.create_upload(upload_id='test_id', upload_name='name_published', published=True) + data.create_entry(upload_id='test_id', entry_id='test_id', entry_archive=example_archive) + data.save(with_files=True, with_es=True, with_mongo=True) + + yield data + + data.delete() + + @pytest.mark.parametrize('kwargs', [ pytest.param( dict( @@ -295,7 +324,7 @@ def example_archive(): pytest.param( dict( pagination={'order_by': 'upload_id'}, - expected_status_code=400 + expected_status_code=422 ), id='pag-invalid-order_by') ]) def test_get_uploads_graph(client, test_auth_dict, example_data, kwargs): @@ -306,16 +335,16 @@ def test_get_uploads_graph(client, test_auth_dict, example_data, kwargs): expected_upload_ids = kwargs.get('expected_upload_ids', None) user_auth, _ = test_auth_dict[user] - query_body = {'m_uploads': {'m_request': {}}} + query_body = {Token.UPLOADS: {'m_request': {}}} if query_params is None and pagination is None: # noinspection PyTypedDict - query_body['m_uploads']['m_request'] = '*' + query_body[Token.UPLOADS]['m_request'] = {'directive': '*'} else: if query_params is not None: - query_body['m_uploads']['m_request'].setdefault('query', query_params) + query_body[Token.UPLOADS]['m_request'].setdefault('query', query_params) if pagination is not None: - query_body['m_uploads']['m_request'].setdefault('pagination', pagination) + query_body[Token.UPLOADS]['m_request'].setdefault('pagination', pagination) response = client.post( 'graph/query', @@ -327,15 +356,43 @@ def test_get_uploads_graph(client, test_auth_dict, example_data, kwargs): assert set(a.keys()) == set(b) if expected_status_code == 200: + result[Token.UPLOADS].pop('m_response', None) if expected_upload_ids: - assert_upload_ids(result['m_response']['m_uploads'], expected_upload_ids) + assert_upload_ids(result[Token.UPLOADS], expected_upload_ids) else: - assert 'm_uploads' not in result['m_response'] + assert result[Token.UPLOADS] == {} else: assert response.status_code == expected_status_code -# @pytest.mark.skip +@pytest.mark.parametrize('depth,result', [ + pytest.param(1, {'uploads': {'id_unpublished': {'files': {'m_is': 'Directory', 'test_content': { + 'm_is': 'Directory', 'path': 'test_content', 'size': 0}}}}}, id='depth-1'), + pytest.param(2, {'uploads': {'id_unpublished': {'files': {'m_is': 'Directory', 'test_content': { + 'id_unpublished_1': {'m_is': 'Directory', 'path': 'test_content/id_unpublished_1', 'size': 0}, + 'm_is': 'Directory', 'path': 'test_content', 'size': 0}}}}}, id='depth-2'), + pytest.param(3, {'uploads': {'id_unpublished': {'files': {'m_is': 'Directory', 'test_content': { + 'id_unpublished_1': {'1.aux': { + 'm_is': 'File', 'path': 'test_content/id_unpublished_1/1.aux', 'size': 8}, '2.aux': { + 'm_is': 'File', 'path': 'test_content/id_unpublished_1/2.aux', 'size': 8}, '3.aux': { + 'm_is': 'File', 'path': 'test_content/id_unpublished_1/3.aux', 'size': 8}, '4.aux': { + 'm_is': 'File', 'path': 'test_content/id_unpublished_1/4.aux', 'size': 8}, 'm_is': 'Directory', + 'mainfile.json': {'m_is': 'File', 'path': 'test_content/id_unpublished_1/mainfile.json', 'size': 3231}, + 'path': 'test_content/id_unpublished_1', 'size': 3263}, 'm_is': 'Directory', 'path': 'test_content', + 'size': 3263}}}}}, id='depth-3'), +]) +def test_fs_graph(client, test_auth_dict, example_data, depth, result): + user_auth, _ = test_auth_dict['test_user'] + + response = client.post( + 'graph/query', + json={Token.UPLOADS: {'id_unpublished': {Token.RAW: { + 'm_request': {'directive': 'plain', 'depth': depth, }}}}}, + headers={'Accept': 'application/json'} | (user_auth if user_auth else {})) + + assert response.json() == result + + @pytest.mark.parametrize('required,error', [ pytest.param('include', False, id='include-all'), pytest.param('*', False, id='include-all-alias'), @@ -359,19 +416,14 @@ def test_get_uploads_graph(client, test_auth_dict, example_data, kwargs): 'metadata': {'entry_id': {'doesnotexist': '*'}} }, True, id='not-a-section'), ]) -def test_entry_reader_with_reference(example_archive, required, error, test_user, mongo_function, elastic_function): - data = ExampleData(main_author=test_user) - data.create_upload(upload_id='test_id', upload_name='name_published', published=True) - data.create_entry(upload_id='test_id', entry_id='test_id', entry_archive=example_archive) - data.save(with_files=True, with_es=True, with_mongo=True) - - with EntryReader({'m_archive': required}, user=test_user) as reader: +def test_entry_reader_with_reference(example_archive, required, error, test_user, example_upload): + with EntryReader({Token.ARCHIVE: required}, user=test_user) as reader: results = reader.read('test_id') if error: - assert 'm_errors' in results['m_archive'] + assert 'm_errors' in results[Token.ARCHIVE] elif required in ('include', '*'): - assert_dict(example_archive.m_to_dict(), results['m_archive']) + assert_dict(example_archive.m_to_dict(), results[Token.ARCHIVE]) else: full_archive = example_archive.m_to_dict() assert isinstance(required, dict) @@ -409,6 +461,38 @@ def test_entry_reader_with_reference(example_archive, required, error, test_user else: assert_equal(a_child, b_child) - _walk(full_archive, results['m_archive'], required) + _walk(full_archive, results[Token.ARCHIVE], required) + + +@pytest.mark.parametrize('required,result', [ + pytest.param({ + "run[0]": { + "m_request": { + "directive": "plain", + "include": ['c*'] + } + } + }, {'run': [{'calculation': [{ + 'energy': {'total': {'value': 0.1}}, 'system_ref': '/run/0/system/1'}, { + 'dos_electronic': [{'energies': [0.0, 0.1]}], 'energy': {'total': {'value': 0.2}}, + 'system_ref': '/run/0/system/1'}, { + 'energy': {'total': {'value': 0.1}}, 'system_ref': '/run/0/system/1'}]}]}, id='include-pattern'), +]) +def test_graph_query_archive_functionality(client, test_auth_dict, example_upload, required, result): + user_auth, _ = test_auth_dict['test_user'] + response = client.post( + 'graph/query', + json={ + "uploads": { + "test_id": { + "entries": { + "test_id": { + "archive": required + } + } + } + } + }, + headers={'Accept': 'application/json'} | (user_auth if user_auth else {})) - data.delete() + assert response.json()['uploads']['test_id']['entries']['test_id']['archive'] == result diff --git a/tests/app/v1/routers/test_materials.py b/tests/app/v1/routers/test_materials.py index 710ad2f6f864bb1c4ba5535a231782a2db15649b..487413dca885523f23b8fd9ded5c71e2187a342e 100644 --- a/tests/app/v1/routers/test_materials.py +++ b/tests/app/v1/routers/test_materials.py @@ -20,14 +20,15 @@ import pytest from urllib.parse import urlencode from nomad.metainfo.elasticsearch_extension import material_entry_type +from nomad.datamodel import results from tests.test_files import example_mainfile_contents # pylint: disable=unused-import from .common import ( - aggregation_exclude_from_search_test_parameters, assert_pagination, assert_metadata_response, assert_required, assert_aggregations, + aggregation_exclude_from_search_test_parameters, assert_pagination, assert_metadata_response, assert_required, perform_metadata_test, perform_owner_test, owner_test_parameters, post_query_test_parameters, get_query_test_parameters, pagination_test_parameters, - aggregation_test_parameters) + aggregation_test_parameters_default, assert_aggregation_response) from tests.conftest import example_data # pylint: disable=unused-import ''' @@ -47,37 +48,14 @@ def perform_materials_metadata_test(*args, **kwargs): program_name = 'entries.results.method.simulation.program_name' +n_code_names = results.Simulation.program_name.a_elasticsearch[0].default_aggregation_size @pytest.mark.parametrize( 'aggregation, total, size, status_code, user', - aggregation_test_parameters( - entity_id='material_id', resource='materials', total=6 - )) + aggregation_test_parameters_default('materials')) def test_materials_aggregations(client, example_data, test_user_auth, aggregation, total, size, status_code, user): - headers = {} - if user == 'test_user': - headers = test_user_auth - - aggregations = {'test_agg_name': aggregation} - - response_json = perform_materials_metadata_test( - client, headers=headers, owner='visible', aggregations=aggregations, - pagination=dict(page_size=0), - status_code=status_code, http_method='post') - - if response_json is None: - return - - for aggregation_obj in aggregation.values(): - assert_aggregations( - response_json, 'test_agg_name', aggregation_obj, total=total, size=size, - default_key='material_id') - - # make sure that (nested) terms aggregation produce sensible counts - if 'terms' in aggregation: - for bucket in response_json['aggregations']['test_agg_name']['terms']['data']: - assert bucket['count'] <= 6 # the total number of materials, counting entries we would surpass this + assert_aggregation_response(client, test_user_auth, aggregation, total, size, status_code, user, resource='materials') @pytest.mark.parametrize( @@ -187,8 +165,16 @@ def test_materials_post_query(client, example_data, query, status_code, total): assert ('next_page_after_value' in pagination) == (total > 10) -@pytest.mark.parametrize('query, status_code, total', get_query_test_parameters( - 'material_id', total=6, material_prefix='', entry_prefix='entries.')) +@pytest.mark.parametrize( + 'query, status_code, total', + get_query_test_parameters( + str={'name': 'material_id', 'values': ['id_01', 'id_02'], 'total': 1, 'total_any': 2, 'total_all': 0, 'total_gt': 5}, + int={'name': 'n_elements', 'values': [2, 1], 'total': 6, 'total_any': 6, 'total_all': 0, 'total_gt': 0}, + date={'name': 'entries.upload_create_time', 'total': 6}, + subsection={'name': 'symmetry.crystal_system', 'values': ['cubic'], 'total': 6}, + total=6 + ) +) def test_materials_get_query(client, example_data, query, status_code, total): assert 'entries.upload_create_time' in material_entry_type.quantities diff --git a/tests/app/v1/routers/test_uploads.py b/tests/app/v1/routers/test_uploads.py index 047911940719ebc99b2f6d4bf6c8746d94844e9c..18783394abb1575b65c858a856923ce1a526ec2e 100644 --- a/tests/app/v1/routers/test_uploads.py +++ b/tests/app/v1/routers/test_uploads.py @@ -69,7 +69,7 @@ def perform_post_put_file( client, action, url, mode, file_paths, user_auth=None, token=None, accept='application/json', **query_args): ''' Posts or puts a file. ''' - if type(file_paths) == str: + if isinstance(file_paths, str): file_paths = [file_paths] headers = {'Accept': accept} if user_auth: @@ -135,7 +135,7 @@ def assert_file_upload_and_processing( the results. ''' source_paths = source_paths or [] - if type(source_paths) == str: + if isinstance(source_paths, str): source_paths = [source_paths] user_auth, token = test_auth_dict[user] # Use either token or bearer token for the post operation (never both) @@ -199,7 +199,7 @@ def assert_expected_mainfiles(upload_id, expected_mainfiles): entries = [e.mainfile for e in Entry.objects(upload_id=upload_id)] assert set(entries) == set(expected_mainfiles), 'Wrong entries found' for entry in Entry.objects(upload_id=upload_id): - if type(expected_mainfiles) != dict or expected_mainfiles[entry.mainfile]: + if not isinstance(expected_mainfiles, dict) or expected_mainfiles[entry.mainfile]: assert entry.process_status == ProcessStatus.SUCCESS else: assert entry.process_status == ProcessStatus.FAILURE @@ -239,7 +239,7 @@ def assert_upload_does_not_exist(client, upload_id: str, user_auth): mongo_db = infrastructure.mongo_client[config.mongo.db_name] mongo_collection = mongo_db['archive'] - assert mongo_collection.find({}).count() == 0 + assert mongo_collection.count_documents({}) == 0 upload_files = UploadFiles.get(upload_id) assert upload_files is None or isinstance(upload_files, PublicUploadFiles) @@ -388,7 +388,7 @@ def get_upload_entries_metadata(entries: List[Dict[str, Any]]) -> Iterable[Entry ), id='invalid-credentials'), pytest.param( dict( - query_params={'is_processing': True}, + query_params={'is_processing': True, 'roles': 'main_author'}, expected_upload_ids=['id_processing'], ), id='filter-is_processing-True'), pytest.param( @@ -472,7 +472,32 @@ def get_upload_entries_metadata(entries: List[Dict[str, Any]]) -> Iterable[Entry dict( query_params={'order_by': 'upload_id'}, expected_status_code=422 - ), id='pag-invalid-order_by')]) + ), id='pag-invalid-order_by'), + pytest.param( + dict( + user='other_test_user', + query_params={'roles': 'coauthor'}, + expected_pagination={'total': 2} + ), id='roles-coauthor'), + pytest.param( + dict( + user='other_test_user', + query_params={'roles': 'reviewer'}, + expected_pagination={'total': 2} + ), id='roles-reviewer'), + pytest.param( + dict( + user='test_user', + query_params={'roles': 'main_author'}, + expected_pagination={'total': 10} + ), id='roles-main-author'), + pytest.param( + dict( + user='other_test_user', + query_params={'roles': ['reviewer', 'coauthor']}, + expected_pagination={'total': 4} + ), id='roles-multiple') +]) def test_get_uploads( client, mongo_module, test_auth_dict, example_data, kwargs): ''' Makes a get request to uploads in various different ways. ''' @@ -833,13 +858,13 @@ def test_get_upload_raw_path( if mime_type == 'application/zip': if expected_content: with zipfile.ZipFile(io.BytesIO(response.content)) as zip_file: - if type(expected_content) == str: + if isinstance(expected_content, str): # Single file - check content with zip_file.open(os.path.basename(path), 'r') as f: file_content = f.read() assert expected_content.encode() in file_content else: - assert type(expected_content) == list + assert isinstance(expected_content, list) # Directory - check content zip_paths = zip_file.namelist() # Check: only root elements specified in expected_content are allowed @@ -1160,7 +1185,7 @@ def test_put_upload_raw_path( action = 'PUT' url = f'uploads/{upload_id}/raw/{target_path}' published = False - all_entries_should_succeed = not (type(expected_mainfiles) == dict and False in expected_mainfiles.values()) + all_entries_should_succeed = not (isinstance(expected_mainfiles, dict) and False in expected_mainfiles.values()) expected_process_status = ProcessStatus.SUCCESS if 'wait_for_processing' in query_args else None response, _ = assert_file_upload_and_processing( @@ -1508,7 +1533,7 @@ def test_post_upload( ''' Posts an upload, with different arguments. ''' - if type(source_paths) == str: + if isinstance(source_paths, str): source_paths = [source_paths] if test_limit: monkeypatch.setattr('nomad.config.services.upload_limit', 0) diff --git a/tests/app/v1/routers/test_users.py b/tests/app/v1/routers/test_users.py index 092ea1379942982d40e97f93571419efa2058f47..499fd4afded13532e59f52878d690a67504688f6 100644 --- a/tests/app/v1/routers/test_users.py +++ b/tests/app/v1/routers/test_users.py @@ -18,7 +18,8 @@ # import pytest -from tests.conftest import test_users as conf_test_users, test_user_uuid as conf_test_user_uuid +from tests.conftest import (test_users as conf_test_users, + test_user_uuid as conf_test_user_uuid) def assert_user(user, expected_user): @@ -27,9 +28,11 @@ def assert_user(user, expected_user): assert 'email' not in user -def test_me(client, test_user_auth): +def test_me(client, test_user_auth, app_token_auth): response = client.get('users/me', headers=test_user_auth) assert response.status_code == 200 + response = client.get('users/me', headers=app_token_auth) + assert response.status_code == 200 def test_me_auth_required(client): @@ -92,7 +95,7 @@ def test_users(client, args, expected_status_code, expected_content): assert_user(user, expected_content) if user_id: - if type(user_id) != list: + if not isinstance(user_id, list): rv = client.get(f'users?user_id={user_id}') assert rv.status_code == expected_status_code if rv.status_code == 200: diff --git a/tests/app/v1/test_models.py b/tests/app/v1/test_models.py new file mode 100644 index 0000000000000000000000000000000000000000..72bbc962fc6f5154884a8fa4a54e1c45b4373366 --- /dev/null +++ b/tests/app/v1/test_models.py @@ -0,0 +1,292 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +from __future__ import annotations +from typing import List +import pytest +from pydantic import BaseModel, Field, ValidationError +import yaml +import sys + +from nomad.utils import strip +from nomad.app.v1.models.graph import GraphRequest +from nomad.app.v1.models.graph.utils import ( + generate_request_model, + mapped +) + + +@pytest.fixture() +def path_ref_prefix(monkeypatch): + monkeypatch.setattr("nomad.app.v1.models.graph.utils.ref_prefix", "#/definitions") + + +def assert_path(data: BaseModel, path: str): + if ':' in path: + path, type_or_value = path.split(':', 1) + failed_message = f"Cannot find {path}." + segments = path.split(".") + current = data + for segment in segments: + if isinstance(current, BaseModel): + value = getattr(current, segment, None) + elif isinstance(current, dict): + value = current.get(segment, None) + else: + value = current + + assert value is not None, f"{failed_message} Key {segment} in {current} does not exist." + + current = value + + if isinstance(current, BaseModel): + type_name = current.__class__.__name__ + assert type_name == type_or_value, f'{failed_message} Wrong type; got {type_name} expected {type_or_value}' + else: + assert str(current) == type_or_value, f'{failed_message} Wrong value; got {str(current)} expected {type_or_value}' + + +def test_module(): + for model_name in ['GraphRequest', 'UploadsRequest', 'UploadRequest', 'UploadsResponse']: + assert hasattr(sys.modules['nomad.app.v1.models.graph.graph_models'], model_name) + + +@pytest.mark.parametrize( + "request_yaml, paths, error_path", + [ + pytest.param( + """ + users: + me: + username: '*' + uploads: + m_request: + query: + upload_name: ['test'] + is_processing: true + is_published: false + pagination: + page_size: 23 + page: 1 + '*': + upload_name: '*' + files: + foo: + bar: + m_is: File + path: '*' + size: '*' + entry: + entry_id: '*' + entries: + '*': + archive: + data: + my_ref: + m_is: MValue + ref_value: + '*': '*' + datasets: + m_request: + query: + dataset_name: 'My dataset' + '*': + doi: '*' + search: + m_request: + owner: visible + query: + results.material.elements: Fe + '*': + entry: + process_status: '*' + '*': '*' + """, + [ + "users.m_children.me.uploads.m_request.query.is_published:False", + "users.m_children.me.uploads.m_request.pagination.page_size:23", + "users.m_children.me.uploads.m_children.*.upload_name:*", + "users.m_children.me.uploads.m_children.*.entries.m_children.*.archive.m_children.data.m_children.my_ref:MValueRequest", + "users.m_children.me.uploads.m_children.*.entries.m_children.*.archive.m_children.data.m_children.my_ref.ref_value.m_children.*:*", + "users.m_children.me.uploads.m_children.*.files.m_children.foo.m_children.bar.entry.entry_id:*", + "users.m_children.me.datasets.m_request.query:DatasetQuery", + "users.m_children.me.datasets.m_children.*.doi:*", + "search.m_children.*.entry.process_status:*", + "search.m_children.*.entry:EntryRequest", + "search.m_children.*.*:*" + ], + None, + id="ok", + ), + pytest.param( + """ + does_not_exist: + """, + [], + "does_not_exist", + id="extra-not-allowed", + ), + pytest.param( + """ + uploads: + '*': + upload_name: 'wrong type' + """, + [], + "uploads.*.upload_name", + id="only-*-allowed-str", + ), + pytest.param( + """ + uploads: + '*': + n_entries: 'wrong type' + """, + [], + "uploads.*.n_entries", + id="only-*-allowed-other", + ), + ], +) +def test_validation(request_yaml: str, paths: List[str], error_path: str): + try: + request = GraphRequest.parse_obj(yaml.safe_load(strip(request_yaml))) + except ValidationError as error: + assert error_path, str(error) + assert len(error.errors()) == 1 + loc = [loc for loc in error.errors()[0]["loc"] if loc != "__root__"] + assert loc == error_path.split(".") + else: + assert ( + not error_path + ), f"Expected validation error in {error_path}, but data passed validation." + export_kwargs = dict( + exclude_unset=True, exclude_defaults=False, exclude_none=False + ) + print(request.json(indent=2, **export_kwargs)) + for path in paths: + assert_path(request, path) + + +def test_mapped(path_ref_prefix): + class MyBase(BaseModel): + p1: str + + class MySource(MyBase): + p2: str = Field("p2", description="docs") + p4: int = 0 + + class MyTarget(mapped(MySource, p2="p3", p4=str)): + p2: int + + target = MyTarget(p1="1", p2=2, p4="p4") + assert target.p1 == "1" + assert target.p2 == 2 + assert target.p3 == "p2" + assert target.p4 == "p4" + assert MyTarget.__fields__["p3"].field_info.description == "docs" + + +class Recursive(BaseModel): + m_children: Recursive + + +def test_recursive_model(path_ref_prefix): + root_model = generate_request_model(Recursive) + + root_schema = root_model.schema() + path_request_schema = root_schema["definitions"]["RecursiveRequest"] + assert ( + path_request_schema["additionalProperties"]["anyOf"][0]["$ref"] + == "#/definitions/RecursiveRequest" + ) + + root_model.parse_obj({"m_children": {"name": {"m_children": {}}}}) + + +def test_request_model(path_ref_prefix): + from nomad.app.v1.models.graph import GraphRequest as root_model + + assert root_model.__module__ == "nomad.app.v1.models.graph.graph_models" + assert root_model.__name__ == "GraphRequest" + + root_schema = root_model.schema() + defs = root_schema["definitions"] + assert "UploadRequest" in defs + assert [ + type["$ref"] + for type in defs["UploadsRequest"]["additionalProperties"]["anyOf"] + if "$ref" in type + ] == [ + "#/definitions/UploadRequest", + "#/definitions/UploadRequestOptions", + ] + assert "required" not in defs["UploadsRequest"] + + root_model.parse_obj( + yaml.safe_load( + strip( + """ + uploads: + m_request: + pagination: + page: 1 + '*': + upload_id: '*' + """ + ) + ) + ) + + +def test_response_model(path_ref_prefix): + from nomad.app.v1.models.graph.graph_models import GraphResponse as root_model + + assert root_model.__module__ == "nomad.app.v1.models.graph.graph_models" + assert root_model.__name__ == "GraphResponse" + + root_schema = root_model.schema() + defs = root_schema["definitions"] + assert "UploadResponse" in defs + assert [ + type["$ref"] + for type in defs["UploadsResponse"]["additionalProperties"]["anyOf"] + if "$ref" in type + ] == [ + f"#/definitions/UploadResponse", + f"#/definitions/UploadResponseOptions", + ] + # assert defs["UploadsResponse"]["required"] == ["m_response"] + + root_model.parse_obj( + yaml.safe_load( + strip( + """ + uploads: + m_response: + query: {} + pagination: + total: 1 + page: 1 + page_offset: 0 + '1': + upload_id: '1' + """ + ) + ) + ) diff --git a/tests/archive/test_storage.py b/tests/archive/test_storage.py index bdd56c0cd432b24bfc444410943124171c1378a4..f677117add7e630ab62e2e50f2ec761afaedf920 100644 --- a/tests/archive/test_storage.py +++ b/tests/archive/test_storage.py @@ -65,6 +65,7 @@ def to_path(container, path): return container +@pytest.mark.skip def test_generate_random_json(monkeypatch, tmp): monkeypatch.setattr('nomad.config.archive.use_new_writer', True) monkeypatch.setattr('nomad.config.archive.read_buffer_size', 4096) diff --git a/tests/config.py b/tests/config.py new file mode 100644 index 0000000000000000000000000000000000000000..fd7c6a3ba96614b75a947a0f538fc1b2a4b2697f --- /dev/null +++ b/tests/config.py @@ -0,0 +1,5 @@ +from nomad.metainfo.elasticsearch_extension import yaml_prefix + +yaml_schema_root = f'{yaml_prefix}-RnxU4MY59m1jtoAC4xcDiFkfy58' +yaml_schema_name = f'{yaml_schema_root}.MySChema' +python_schema_name = 'nomadschemaexample.schema.MySchema' diff --git a/tests/conftest.py b/tests/conftest.py index 88be221f4629a47730c0a260d9959d4ed1890333..b4471ed814eba0027936efb5c1c8074cbe4e7d91 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -16,11 +16,12 @@ # limitations under the License. # from typing import Tuple, List +from pathlib import Path import math import pytest from collections import namedtuple import time -from datetime import datetime +from datetime import datetime, timezone import shutil import os import elasticsearch.exceptions @@ -34,22 +35,26 @@ from fastapi.testclient import TestClient import socketserver from nomad import config +from nomad.config.plugins import Schema, add_plugin, remove_plugin # make sure to disable logstash (the logs can interfere with the testing, especially for logtransfer) config.logstash.enabled = False # noqa: E402 # this must be set *before* the other modules are imported from nomad import infrastructure, processing, utils, datamodel, bundles from nomad.datamodel import User, EntryArchive, OptimadeEntry +from nomad.datamodel.datamodel import SearchableQuantity from nomad.utils import structlogging from nomad.archive import write_archive, read_archive, write_partial_archive_to_mongo, to_json from nomad.processing import ProcessStatus from nomad.app.main import app from nomad.utils.exampledata import ExampleData +from nomad.metainfo.elasticsearch_extension import schema_separator from tests.parsing import test_parsing from tests.normalizing.conftest import run_normalize from tests.processing import test_data as test_processing from tests.test_files import empty_file, example_file_vasp_with_binary from tests.utils import create_template_upload_file, set_upload_entry_metadata, build_url +from tests.config import yaml_schema_name, yaml_schema_root, python_schema_name # Set up pytest to pass control to the debugger on an exception. @@ -856,7 +861,9 @@ def example_data(elastic_module, raw_files_module, mongo_module, test_user, othe entry_id = 'id_%02d' % i material_id = 'id_%02d' % (int(math.floor(i / 4)) + 1) mainfile = 'test_content/subdir/test_entry_%02d/mainfile.json' % i - kwargs = dict(optimade=OptimadeEntry(nelements=2, elements=['H', 'O'])) + kwargs = dict( + optimade=OptimadeEntry(nelements=2, elements=['H', 'O']), + ) if i == 11: mainfile = 'test_content/subdir/test_entry_10/mainfile_11.json' if i == 1: @@ -901,6 +908,184 @@ def example_data(elastic_module, raw_files_module, mongo_module, test_user, othe del(data.archives['id_02']) data.save(with_files=True, with_es=False, with_mongo=False) + # yield + + # # The data is deleted after fixture goes out of scope + # data.delete() + + +@pytest.fixture(scope='function') +def example_data_schema_python(elastic_module, raw_files_module, mongo_module, test_user, normalized): + ''' + Contains entries that store data using a python schema. + ''' + data = ExampleData(main_author=test_user) + upload_id = 'id_plugin_schema_published' + date_value = datetime.now(timezone.utc) + + data.create_upload( + upload_id=upload_id, + upload_name=upload_id, + published=True) + for i in range(0, 15): + data.create_entry( + upload_id=upload_id, + entry_id=f'test_entry_{i}', + mainfile=f'test_content/test.archive{i}.json', + search_quantities=[ + SearchableQuantity( + id=f'data.name{schema_separator}{python_schema_name}', + definition='nomadschemaexample.schema.MySchema.name', + path_archive='data.name', + str_value=f'test{i}' + ), + SearchableQuantity( + id=f'data.valid{schema_separator}{python_schema_name}', + definition='nomadschemaexample.schema.MySchema.valid', + path_archive='data.valid', + bool_value=i % 2 == 0 + ), + SearchableQuantity( + id=f'data.message{schema_separator}{python_schema_name}', + definition='nomadschemaexample.schema.MySchema.message', + path_archive='data.message', + str_value='A' if i % 2 == 0 else 'B' + ), + SearchableQuantity( + id=f'data.frequency{schema_separator}{python_schema_name}', + definition='nomadschemaexample.schema.MySchema.frequency', + path_archive='data.frequency', + float_value=i + 0.5 + ), + SearchableQuantity( + id=f'data.count{schema_separator}{python_schema_name}', + definition='nomadschemaexample.schema.MySchema.count', + path_archive='data.count', + int_value=i + ), + SearchableQuantity( + id=f'data.timestamp{schema_separator}{python_schema_name}', + definition='nomadschemaexample.schema.MySchema.timestamp', + path_archive='data.timestamp', + datetime_value=date_value + ), + SearchableQuantity( + id=f'data.child.name{schema_separator}{python_schema_name}', + definition='nomadschemaexample.schema.MySection.name', + path_archive='data.child.name', + str_value=f'test_child{i}' + ), + SearchableQuantity( + id=f'data.child_repeating.name{schema_separator}{python_schema_name}', + definition='nomadschemaexample.schema.MySection.name', + path_archive='data.child_repeating.0.name', + str_value=f'test_child_repeating{i}' + ), + ] + ) + data.save(with_files=False) + + yield + + # The data is deleted after fixture goes out of scope + data.delete() + + +@pytest.fixture(scope='function') +def example_data_schema_yaml(elastic_module, raw_files, no_warn, raw_files_module, mongo_module, test_user, normalized): + ''' + Contains entries that store data using a python schema. + ''' + data = ExampleData(main_author=test_user) + upload_id = 'id_plugin_schema_published' + date_value = datetime.now(timezone.utc) + + data.create_upload( + upload_id=upload_id, + upload_name=upload_id, + published=True) + for i in range(0, 15): + data.create_entry( + upload_id=upload_id, + entry_id=f'test_entry_{i}', + mainfile=f'test_content/test.archive{i}.json', + search_quantities=[ + SearchableQuantity( + id=f'data.name{schema_separator}{yaml_schema_name}', + definition=f'{yaml_schema_root}/quantities/0', + path_archive='data.name', + str_value=f'test{i}' + ), + SearchableQuantity( + id=f'data.valid{schema_separator}{yaml_schema_name}', + definition=f'{yaml_schema_root}/quantities/1', + path_archive='data.valid', + bool_value=i % 2 == 0 + ), + SearchableQuantity( + id=f'data.message{schema_separator}{yaml_schema_name}', + definition=f'{yaml_schema_root}/quantities/1', + path_archive='data.message', + str_value='A' if i % 2 == 0 else 'B' + ), + SearchableQuantity( + id=f'data.frequency{schema_separator}{yaml_schema_name}', + definition=f'{yaml_schema_root}/quantities/5', + path_archive='data.frequency', + float_value=i + 0.5 + ), + SearchableQuantity( + id=f'data.count{schema_separator}{yaml_schema_name}', + definition=f'{yaml_schema_root}/quantities/4', + path_archive='data.count', + int_value=i + ), + SearchableQuantity( + id=f'data.timestamp{schema_separator}{yaml_schema_name}', + definition=f'{yaml_schema_root}/quantities/1', + path_archive='data.timestamp', + datetime_value=date_value + ), + SearchableQuantity( + id=f'data.child.name{schema_separator}{yaml_schema_name}', + definition=f'{yaml_schema_root}/section_definitions/0/quantities/0', + path_archive='data.child.name', + str_value=f'test_child{i}' + ), + SearchableQuantity( + id=f'data.child_repeating.name{schema_separator}{yaml_schema_name}', + definition=f'{yaml_schema_root}/section_definitions/0/quantities/0', + path_archive='data.child_repeating.0.name', + str_value=f'test_child_repeating{i}' + ), + ] + ) + data.save(with_files=False) + + yield + + # The data is deleted after fixture goes out of scope + data.delete() + + +@pytest.fixture(scope='function') +def plugin_schema(): + '''Fixture for loading a schema plugin into the config. + ''' + plugin_path = str(Path(__file__, '../data/schemas').resolve()) + plugin_name = 'nomadschemaexample' + plugin = Schema( + name=plugin_name, + key=plugin_name, + package_path=plugin_path, + python_package=plugin_name + ) + add_plugin(plugin) + + yield + + remove_plugin(plugin) + @pytest.fixture(scope='function') def example_data_writeable(mongo, test_user, normalized): diff --git a/tests/data/datamodel/metainfo/external_api_mock_response.json b/tests/data/datamodel/metainfo/external_api_mock_response.json new file mode 100644 index 0000000000000000000000000000000000000000..22ed6f551fb0e1338a0d154f42dc2924ba5f9c39 --- /dev/null +++ b/tests/data/datamodel/metainfo/external_api_mock_response.json @@ -0,0 +1,193 @@ +{ + "cas_api_search": { + "count": 1, + "results": [ + { + "rn": "10101-63-0", + "name": "Lead iodide (PbI<sub>2</sub>)", + "image": "<svg width=\"104.52\" viewBox=\"0 0 3484 712\" text-rendering=\"auto\" stroke-width=\"1\" stroke-opacity=\"1\" stroke-miterlimit=\"10\" stroke-linejoin=\"miter\" stroke-linecap=\"square\" stroke-dashoffset=\"0\" stroke-dasharray=\"none\" stroke=\"black\" shape-rendering=\"auto\" image-rendering=\"auto\" height=\"21.36\" font-weight=\"normal\" font-style=\"normal\" font-size=\"12\" font-family=\"'Dialog'\" fill-opacity=\"1\" fill=\"black\" color-rendering=\"auto\" color-interpolation=\"auto\" xmlns=\"http://www.w3.org/2000/svg\"><g><g stroke=\"white\" fill=\"white\"><rect y=\"0\" x=\"0\" width=\"3484\" stroke=\"none\" height=\"712\"/></g><g transform=\"translate(32866,32758)\" text-rendering=\"geometricPrecision\" stroke-width=\"44\" stroke-linejoin=\"round\" stroke-linecap=\"round\"><line y2=\"-32422\" y1=\"-32422\" x2=\"-31376\" x1=\"-32424\" fill=\"none\"/><line y2=\"-32422\" y1=\"-32422\" x2=\"-29648\" x1=\"-30694\" fill=\"none\"/><text y=\"-32242\" xml:space=\"preserve\" x=\"-31338\" stroke=\"none\" font-size=\"433.3333\" font-family=\"sans-serif\">Pb</text><text y=\"-32242\" xml:space=\"preserve\" x=\"-32762\" stroke=\"none\" font-size=\"433.3333\" font-family=\"sans-serif\">I</text><text y=\"-32242\" xml:space=\"preserve\" x=\"-29611\" stroke=\"none\" font-size=\"433.3333\" font-family=\"sans-serif\">I</text></g></g></svg>" + } + ] + }, + "cas_api_details": { + "uri": "substance/pt/10101630", + "rn": "10101-63-0", + "name": "Lead iodide (PbI<sub>2</sub>)", + "image": "<svg width=\"104.52\" viewBox=\"0 0 3484 712\" text-rendering=\"auto\" stroke-width=\"1\" stroke-opacity=\"1\" stroke-miterlimit=\"10\" stroke-linejoin=\"miter\" stroke-linecap=\"square\" stroke-dashoffset=\"0\" stroke-dasharray=\"none\" stroke=\"black\" shape-rendering=\"auto\" image-rendering=\"auto\" height=\"21.36\" font-weight=\"normal\" font-style=\"normal\" font-size=\"12\" font-family=\"'Dialog'\" fill-opacity=\"1\" fill=\"black\" color-rendering=\"auto\" color-interpolation=\"auto\" xmlns=\"http://www.w3.org/2000/svg\"><g><g stroke=\"white\" fill=\"white\"><rect y=\"0\" x=\"0\" width=\"3484\" stroke=\"none\" height=\"712\"/></g><g transform=\"translate(32866,32758)\" text-rendering=\"geometricPrecision\" stroke-width=\"44\" stroke-linejoin=\"round\" stroke-linecap=\"round\"><line y2=\"-32422\" y1=\"-32422\" x2=\"-31376\" x1=\"-32424\" fill=\"none\"/><line y2=\"-32422\" y1=\"-32422\" x2=\"-29648\" x1=\"-30694\" fill=\"none\"/><text y=\"-32242\" xml:space=\"preserve\" x=\"-31338\" stroke=\"none\" font-size=\"433.3333\" font-family=\"sans-serif\">Pb</text><text y=\"-32242\" xml:space=\"preserve\" x=\"-32762\" stroke=\"none\" font-size=\"433.3333\" font-family=\"sans-serif\">I</text><text y=\"-32242\" xml:space=\"preserve\" x=\"-29611\" stroke=\"none\" font-size=\"433.3333\" font-family=\"sans-serif\">I</text></g></g></svg>", + "inchi": "InChI=1S/2HI.Pb/h2*1H;/q;;+2/p-2", + "inchiKey": "InChIKey=RQQRAHKHDFPBMC-UHFFFAOYSA-L", + "smile": "[Pb](I)I", + "canonicalSmile": "I[Pb]I", + "molecularFormula": "I<sub>2</sub>Pb", + "molecularMass": "", + "experimentalProperties": [ + { + "name": "Melting Point", + "property": "402 \u00b0C", + "sourceNumber": 1 + }, + { + "name": "Density", + "property": "6.16 g/cm\u00b3", + "sourceNumber": 1 + } + ], + "propertyCitations": [ + { + "docUri": "", + "sourceNumber": 1, + "source": "Hazardous Substances Data Bank data were obtained from the National Library of Medicine (US)" + } + ], + "synonyms": [ + "Lead iodide (PbI<sub>2</sub>)", + "C.I. 77613", + "Plumbous iodide", + "Lead diiodide", + "Lead iodide", + "Lead(II) iodide", + "Lead diiodide (PbI2)" + ], + "replacedRns": [ + "82669-93-0" + ], + "hasMolfile": true + }, + "pub_chem_api_get_properties": { + "24601": { + "PropertyTable": { + "Properties": [ + { + "CID": 24601, + "MolecularFormula": "CsI", + "CanonicalSMILES": "[I-].[Cs+]", + "IsomericSMILES": "[I-].[Cs+]", + "InChI": "InChI=1S/Cs.HI/h;1H/q+1;/p-1", + "InChIKey": "XQPRBTXUXXVTKB-UHFFFAOYSA-M", + "IUPACName": "cesium;iodide", + "ExactMass": "259.80992", + "Title": "Cesium iodide" + } + ] + } + }, + "24931": { + "PropertyTable": { + "Properties": [ + { + "CID": 24931, + "MolecularFormula": "I2Pb", + "CanonicalSMILES": "I[Pb]I", + "IsomericSMILES": "I[Pb]I", + "InChI": "InChI=1S/2HI.Pb/h2*1H;/q;;+2/p-2", + "InChIKey": "RQQRAHKHDFPBMC-UHFFFAOYSA-L", + "IUPACName": "diiodolead", + "ExactMass": "461.78560", + "Title": "Lead(II) iodide" + } + ] + } + } + }, + "pub_chem_api_get_synonyms": { + "24601": { + "InformationList": { + "Information": [ + { + "CID": 24601, + "Synonym": [ + "CESIUM IODIDE", + "7789-17-5", + "Cesiumiodide", + "Caesium iodide", + "Cesium iodide (CsI)", + "Cesium monoiodide", + "Dicesium diiodide", + "Tricesium triiodide", + "cesium;iodide", + "Cesium iodide (Cs2I2)", + "Cesium iodide (Cs3I3)", + "EINECS 232-145-2", + "MFCD00010962", + "NSC 15199", + "UNII-U1P3GVC56L", + "U1P3GVC56L", + "NSC-15199", + "EC 232-145-2", + "Cs-I", + "Cesium iodide, ultra dry", + "WLN: CS I", + "CESIUM IODIDE [MI]", + "DTXSID3064859", + "XQPRBTXUXXVTKB-UHFFFAOYSA-M", + "NSC15199", + "AKOS015833256", + "AKOS015902666", + "SB66393", + "LS-52804", + "SY023491", + "Cesium iodide, 99.9% Trace metals grade", + "C2205", + "FT-0623568", + "Q50703", + "A839266" + ] + } + ] + } + }, + "24931": { + "InformationList": { + "Information": [ + { + "CID": 24931, + "Synonym": [ + "Lead(II) iodide", + "10101-63-0", + "diiodolead", + "Lead diiodide", + "Plumbous iodide", + "PbI2", + "Lead iodide (PbI2)", + "Plumbum jodatum", + "Blei(II)-iodid", + "UNII-OTL90F2GLT", + "HSDB 636", + "EINECS 233-256-9", + "Lead(II) Iodide [for Perovskite precursor]", + "MFCD00011163", + "Lead(II) Iodide (99.99%, trace metals basis) [for Perovskite precursor]", + "Diiodure de plomb", + "I2Pb", + "LID (CHRIS Code)", + "I2-Pb", + "Lead(II) iodide,99%", + "Lead(II) iodide, 99%", + "NA9188", + "AKOS015833817", + "12684-19-4", + "C.I. 77613", + "CS-0111981", + "FT-0627762", + "H10699", + "EN300-7396592", + "Lead(II) iodide, 99.999% trace metals basis", + "Q408805", + "Lead(II) iodide, 99.999% trace metals basis, perovskite grade", + "Lead(II) iodide, beads, -10 mesh, 99.999% trace metals basis" + ] + } + ] + } + } + }, + "pub_chem_api_search": { + "IdentifierList": { + "CID": [ + 24931, + 9933991, + 22323341 + ] + } + } +} \ No newline at end of file diff --git a/tests/data/datamodel/metainfo/plotly/plotly.schema.archive.yaml b/tests/data/datamodel/metainfo/plotly/plotly.schema.archive.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e26b5410cc5477c8597d0d6f4af8653bad6d3c3d --- /dev/null +++ b/tests/data/datamodel/metainfo/plotly/plotly.schema.archive.yaml @@ -0,0 +1,151 @@ +definitions: + name: 'xxxxx' + sections: + Sample: + base_sections: + - 'nomad.datamodel.data.EntryData' + - 'nomad.datamodel.metainfo.plot.PlotSection' + m_annotations: + plotly_graph_object: + - data: + x: '#xArr' + y: '#xArr' + layout: + title: + text: 'Plot in section level' + xaxis: + title: + text: 'x data' + yaxis: + title: + text: 'y data' + label: 'graph object 1' + - data: + x: '#xArr' + y: '#xArr' + layout: + title: + text: 'Plot in section level' + xaxis: + title: + text: 'x data' + yaxis: + title: + text: 'y data' + label: 'graph object 2' + index: 0 + plotly_express: + method: scatter + x: '#xArr' + y: '#yArr' + label: 'express' + layout: + title: + text: 'Accepted plot title in quantity level' + xaxis: + title: + text: 'accepted x axis' + yaxis: + title: + text: 'accepted y axis' + traces: + - method: scatter + x: '#xArr' + y: '#clr' + title: 'Ignored plot title in multi trace plotly express' + layout: + xaxis: + title: + text: 'ignored x axis' + yaxis: + title: + text: 'ignored y axis' + - method: scatter + x: '#clr' + y: '#xArr' + - method: scatter + x: '#clr' + y: '#yArr' + plotly_subplots: + parameters: + rows: 2 + cols: 2 + label: 'subplot' + index: 1 + layout: + title: + text: 'All plots' + plotly_express: + - method: scatter + x: '#xArr' + y: '#yArr' + title: 'subplot 1' + layout: + xaxis: + title: + text: 'x1 axis' + yaxis: + title: + text: 'y1 axis' + - method: scatter + x: '#xArr' + y: '#clr' + title: 'subplot 2' + layout: + title: + text: 'overwritten subplot 2' + xaxis: + title: + text: 'x2 axis' + yaxis: + title: + text: 'y2 axis' + - method: scatter + x: '#clr' + y: '#xArr' + layout: + xaxis: + title: + text: 'x3 axis' + yaxis: + title: + text: 'y3 axis' + - method: scatter + x: '#clr' + y: '#yArr' + title: 'subplot 4' + layout: + xaxis: + title: + text: 'x4 axis' + yaxis: + title: + text: 'y4 axis' + quantities: + xArr: + type: float + shape: [5] + default: [1, 2, 3, 4, 5] + m_annotations: + eln: + component: NumberEditQuantity + yArr: + type: float + shape: [5] + default: [1, 2, 3, 2, 1] + m_annotations: + eln: + component: NumberEditQuantity + clr: + type: float + shape: [5] + default: [1, 2, 30, 4, 5] + m_annotations: + eln: + component: NumberEditQuantity + +data: + m_def: Sample + xArr: [1.1,2,3,4,5] + yArr: [1.1,2,3,2,1] + clr: [1.1,2,30,4,5] diff --git a/tests/data/datamodel/metainfo/plotly/snapshot.archive.json b/tests/data/datamodel/metainfo/plotly/snapshot.archive.json new file mode 100644 index 0000000000000000000000000000000000000000..1e447cb0d6d80594f8c06a0544f1c3d8483bd323 --- /dev/null +++ b/tests/data/datamodel/metainfo/plotly/snapshot.archive.json @@ -0,0 +1,8 @@ +{ + "figures": [ + {"data": {"x": "#xArr", "y": "#xArr"}, "layout": {"title": {"text": "Plot in section level"}, "xaxis": {"title": {"text": "x data"}}, "yaxis": {"title": {"text": "y data"}}}}, + {"data": {"x": "#xArr", "y": "#xArr"}, "layout": {"title": {"text": "Plot in section level"}, "xaxis": {"title": {"text": "x data"}}, "yaxis": {"title": {"text": "y data"}}}}, + {"data": [{"hovertemplate": "x=%{x}<br>y=%{y}<extra></extra>", "legendgroup": "", "marker": {"color": "#636efa", "symbol": "circle"}, "mode": "markers", "name": "", "orientation": "v", "showlegend": false, "x": [1.1, 2.0, 3.0, 4.0, 5.0], "xaxis": "x", "y": [1.1, 2.0, 3.0, 2.0, 1.0], "yaxis": "y", "type": "scatter"}, {"hovertemplate": "x=%{x}<br>y=%{y}<extra></extra>", "legendgroup": "", "marker": {"color": "#636efa", "symbol": "circle"}, "mode": "markers", "name": "", "orientation": "v", "showlegend": false, "x": [1.1, 2.0, 3.0, 4.0, 5.0], "xaxis": "x", "y": [1.1, 2.0, 30.0, 4.0, 5.0], "yaxis": "y", "type": "scatter"}, {"hovertemplate": "x=%{x}<br>y=%{y}<extra></extra>", "legendgroup": "", "marker": {"color": "#636efa", "symbol": "circle"}, "mode": "markers", "name": "", "orientation": "v", "showlegend": false, "x": [1.1, 2.0, 30.0, 4.0, 5.0], "xaxis": "x", "y": [1.1, 2.0, 3.0, 4.0, 5.0], "yaxis": "y", "type": "scatter"}, {"hovertemplate": "x=%{x}<br>y=%{y}<extra></extra>", "legendgroup": "", "marker": {"color": "#636efa", "symbol": "circle"}, "mode": "markers", "name": "", "orientation": "v", "showlegend": false, "x": [1.1, 2.0, 30.0, 4.0, 5.0], "xaxis": "x", "y": [1.1, 2.0, 3.0, 2.0, 1.0], "yaxis": "y", "type": "scatter"}], "layout": {"template": {"data": {"histogram2dcontour": [{"type": "histogram2dcontour", "colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}], "choropleth": [{"type": "choropleth", "colorbar": {"outlinewidth": 0, "ticks": ""}}], "histogram2d": [{"type": "histogram2d", "colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}], "heatmap": [{"type": "heatmap", "colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}], "heatmapgl": [{"type": "heatmapgl", "colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}], "contourcarpet": [{"type": "contourcarpet", "colorbar": {"outlinewidth": 0, "ticks": ""}}], "contour": [{"type": "contour", "colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}], "surface": [{"type": "surface", "colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}], "mesh3d": [{"type": "mesh3d", "colorbar": {"outlinewidth": 0, "ticks": ""}}], "scatter": [{"fillpattern": {"fillmode": "overlay", "size": 10, "solidity": 0.2}, "type": "scatter"}], "parcoords": [{"type": "parcoords", "line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}}], "scatterpolargl": [{"type": "scatterpolargl", "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}}], "bar": [{"error_x": {"color": "#2a3f5f"}, "error_y": {"color": "#2a3f5f"}, "marker": {"line": {"color": "#E5ECF6", "width": 0.5}, "pattern": {"fillmode": "overlay", "size": 10, "solidity": 0.2}}, "type": "bar"}], "scattergeo": [{"type": "scattergeo", "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}}], "scatterpolar": [{"type": "scatterpolar", "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}}], "histogram": [{"marker": {"pattern": {"fillmode": "overlay", "size": 10, "solidity": 0.2}}, "type": "histogram"}], "scattergl": [{"type": "scattergl", "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}}], "scatter3d": [{"type": "scatter3d", "line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}}], "scattermapbox": [{"type": "scattermapbox", "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}}], "scatterternary": [{"type": "scatterternary", "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}}], "scattercarpet": [{"type": "scattercarpet", "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}}], "carpet": [{"aaxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "baxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "type": "carpet"}], "table": [{"cells": {"fill": {"color": "#EBF0F8"}, "line": {"color": "white"}}, "header": {"fill": {"color": "#C8D4E3"}, "line": {"color": "white"}}, "type": "table"}], "barpolar": [{"marker": {"line": {"color": "#E5ECF6", "width": 0.5}, "pattern": {"fillmode": "overlay", "size": 10, "solidity": 0.2}}, "type": "barpolar"}], "pie": [{"automargin": true, "type": "pie"}]}, "layout": {"autotypenumbers": "strict", "colorway": ["#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52"], "font": {"color": "#2a3f5f"}, "hovermode": "closest", "hoverlabel": {"align": "left"}, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": {"bgcolor": "#E5ECF6", "angularaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "radialaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "ternary": {"bgcolor": "#E5ECF6", "aaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "baxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "caxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "coloraxis": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "colorscale": {"sequential": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "sequentialminus": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "diverging": [[0, "#8e0152"], [0.1, "#c51b7d"], [0.2, "#de77ae"], [0.3, "#f1b6da"], [0.4, "#fde0ef"], [0.5, "#f7f7f7"], [0.6, "#e6f5d0"], [0.7, "#b8e186"], [0.8, "#7fbc41"], [0.9, "#4d9221"], [1, "#276419"]]}, "xaxis": {"gridcolor": "white", "linecolor": "white", "ticks": "", "title": {"standoff": 15}, "zerolinecolor": "white", "automargin": true, "zerolinewidth": 2}, "yaxis": {"gridcolor": "white", "linecolor": "white", "ticks": "", "title": {"standoff": 15}, "zerolinecolor": "white", "automargin": true, "zerolinewidth": 2}, "scene": {"xaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white", "gridwidth": 2}, "yaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white", "gridwidth": 2}, "zaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white", "gridwidth": 2}}, "shapedefaults": {"line": {"color": "#2a3f5f"}}, "annotationdefaults": {"arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1}, "geo": {"bgcolor": "white", "landcolor": "#E5ECF6", "subunitcolor": "white", "showland": true, "showlakes": true, "lakecolor": "white"}, "title": {"x": 0.05}, "mapbox": {"style": "light"}}}, "title": {"text": "Accepted plot title in quantity level"}, "xaxis": {"title": {"text": "accepted x axis"}}, "yaxis": {"title": {"text": "accepted y axis"}}}}, + {"data": [{"hovertemplate": "x=%{x}<br>y=%{y}<extra></extra>", "legendgroup": "", "marker": {"color": "#636efa", "symbol": "circle"}, "mode": "markers", "name": "", "orientation": "v", "showlegend": false, "x": [1.1, 2.0, 3.0, 4.0, 5.0], "xaxis": "x", "y": [1.1, 2.0, 3.0, 2.0, 1.0], "yaxis": "y", "type": "scatter"}, {"hovertemplate": "x=%{x}<br>y=%{y}<extra></extra>", "legendgroup": "", "marker": {"color": "#636efa", "symbol": "circle"}, "mode": "markers", "name": "", "orientation": "v", "showlegend": false, "x": [1.1, 2.0, 3.0, 4.0, 5.0], "xaxis": "x2", "y": [1.1, 2.0, 30.0, 4.0, 5.0], "yaxis": "y2", "type": "scatter"}, {"hovertemplate": "x=%{x}<br>y=%{y}<extra></extra>", "legendgroup": "", "marker": {"color": "#636efa", "symbol": "circle"}, "mode": "markers", "name": "", "orientation": "v", "showlegend": false, "x": [1.1, 2.0, 30.0, 4.0, 5.0], "xaxis": "x3", "y": [1.1, 2.0, 3.0, 4.0, 5.0], "yaxis": "y3", "type": "scatter"}, {"hovertemplate": "x=%{x}<br>y=%{y}<extra></extra>", "legendgroup": "", "marker": {"color": "#636efa", "symbol": "circle"}, "mode": "markers", "name": "", "orientation": "v", "showlegend": false, "x": [1.1, 2.0, 30.0, 4.0, 5.0], "xaxis": "x4", "y": [1.1, 2.0, 3.0, 2.0, 1.0], "yaxis": "y4", "type": "scatter"}], "layout": {"template": {"data": {"histogram2dcontour": [{"type": "histogram2dcontour", "colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}], "choropleth": [{"type": "choropleth", "colorbar": {"outlinewidth": 0, "ticks": ""}}], "histogram2d": [{"type": "histogram2d", "colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}], "heatmap": [{"type": "heatmap", "colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}], "heatmapgl": [{"type": "heatmapgl", "colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}], "contourcarpet": [{"type": "contourcarpet", "colorbar": {"outlinewidth": 0, "ticks": ""}}], "contour": [{"type": "contour", "colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}], "surface": [{"type": "surface", "colorbar": {"outlinewidth": 0, "ticks": ""}, "colorscale": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]]}], "mesh3d": [{"type": "mesh3d", "colorbar": {"outlinewidth": 0, "ticks": ""}}], "scatter": [{"fillpattern": {"fillmode": "overlay", "size": 10, "solidity": 0.2}, "type": "scatter"}], "parcoords": [{"type": "parcoords", "line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}}], "scatterpolargl": [{"type": "scatterpolargl", "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}}], "bar": [{"error_x": {"color": "#2a3f5f"}, "error_y": {"color": "#2a3f5f"}, "marker": {"line": {"color": "#E5ECF6", "width": 0.5}, "pattern": {"fillmode": "overlay", "size": 10, "solidity": 0.2}}, "type": "bar"}], "scattergeo": [{"type": "scattergeo", "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}}], "scatterpolar": [{"type": "scatterpolar", "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}}], "histogram": [{"marker": {"pattern": {"fillmode": "overlay", "size": 10, "solidity": 0.2}}, "type": "histogram"}], "scattergl": [{"type": "scattergl", "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}}], "scatter3d": [{"type": "scatter3d", "line": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}}], "scattermapbox": [{"type": "scattermapbox", "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}}], "scatterternary": [{"type": "scatterternary", "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}}], "scattercarpet": [{"type": "scattercarpet", "marker": {"colorbar": {"outlinewidth": 0, "ticks": ""}}}], "carpet": [{"aaxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "baxis": {"endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f"}, "type": "carpet"}], "table": [{"cells": {"fill": {"color": "#EBF0F8"}, "line": {"color": "white"}}, "header": {"fill": {"color": "#C8D4E3"}, "line": {"color": "white"}}, "type": "table"}], "barpolar": [{"marker": {"line": {"color": "#E5ECF6", "width": 0.5}, "pattern": {"fillmode": "overlay", "size": 10, "solidity": 0.2}}, "type": "barpolar"}], "pie": [{"automargin": true, "type": "pie"}]}, "layout": {"autotypenumbers": "strict", "colorway": ["#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52"], "font": {"color": "#2a3f5f"}, "hovermode": "closest", "hoverlabel": {"align": "left"}, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": {"bgcolor": "#E5ECF6", "angularaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "radialaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "ternary": {"bgcolor": "#E5ECF6", "aaxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "baxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}, "caxis": {"gridcolor": "white", "linecolor": "white", "ticks": ""}}, "coloraxis": {"colorbar": {"outlinewidth": 0, "ticks": ""}}, "colorscale": {"sequential": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "sequentialminus": [[0.0, "#0d0887"], [0.1111111111111111, "#46039f"], [0.2222222222222222, "#7201a8"], [0.3333333333333333, "#9c179e"], [0.4444444444444444, "#bd3786"], [0.5555555555555556, "#d8576b"], [0.6666666666666666, "#ed7953"], [0.7777777777777778, "#fb9f3a"], [0.8888888888888888, "#fdca26"], [1.0, "#f0f921"]], "diverging": [[0, "#8e0152"], [0.1, "#c51b7d"], [0.2, "#de77ae"], [0.3, "#f1b6da"], [0.4, "#fde0ef"], [0.5, "#f7f7f7"], [0.6, "#e6f5d0"], [0.7, "#b8e186"], [0.8, "#7fbc41"], [0.9, "#4d9221"], [1, "#276419"]]}, "xaxis": {"gridcolor": "white", "linecolor": "white", "ticks": "", "title": {"standoff": 15}, "zerolinecolor": "white", "automargin": true, "zerolinewidth": 2}, "yaxis": {"gridcolor": "white", "linecolor": "white", "ticks": "", "title": {"standoff": 15}, "zerolinecolor": "white", "automargin": true, "zerolinewidth": 2}, "scene": {"xaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white", "gridwidth": 2}, "yaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white", "gridwidth": 2}, "zaxis": {"backgroundcolor": "#E5ECF6", "gridcolor": "white", "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white", "gridwidth": 2}}, "shapedefaults": {"line": {"color": "#2a3f5f"}}, "annotationdefaults": {"arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1}, "geo": {"bgcolor": "white", "landcolor": "#E5ECF6", "subunitcolor": "white", "showland": true, "showlakes": true, "lakecolor": "white"}, "title": {"x": 0.05}, "mapbox": {"style": "light"}}}, "xaxis": {"anchor": "y", "domain": [0.0, 0.45], "title": {"text": "x1 axis"}}, "yaxis": {"anchor": "x", "domain": [0.625, 1.0], "title": {"text": "y1 axis"}}, "xaxis2": {"anchor": "y2", "domain": [0.55, 1.0], "title": {"text": "x2 axis"}}, "yaxis2": {"anchor": "x2", "domain": [0.625, 1.0], "title": {"text": "y2 axis"}}, "xaxis3": {"anchor": "y3", "domain": [0.0, 0.45], "title": {"text": "x3 axis"}}, "yaxis3": {"anchor": "x3", "domain": [0.0, 0.375], "title": {"text": "y3 axis"}}, "xaxis4": {"anchor": "y4", "domain": [0.55, 1.0], "title": {"text": "x4 axis"}}, "yaxis4": {"anchor": "x4", "domain": [0.0, 0.375], "title": {"text": "y4 axis"}}, "annotations": [{"font": {"size": 16}, "showarrow": false, "text": "overwritten subplot 2", "x": 0.775, "xanchor": "center", "xref": "paper", "y": 1.0, "yanchor": "bottom", "yref": "paper"}], "title": {"text": "All plots"}}} + ] +} \ No newline at end of file diff --git a/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/.NPdAg_vasprun.xml.swp b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/.NPdAg_vasprun.xml.swp new file mode 100644 index 0000000000000000000000000000000000000000..7d794c4264aef7c33e7a4c66c494b28b5629de38 Binary files /dev/null and b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/.NPdAg_vasprun.xml.swp differ diff --git a/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/N/vasprun.xml b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/N/vasprun.xml new file mode 100644 index 0000000000000000000000000000000000000000..b3b1c515bef7ca349f23df5481779bebe2bc099a --- /dev/null +++ b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/N/vasprun.xml @@ -0,0 +1,1587 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<modeling> + <generator> + <i name="program" type="string">vasp </i> + <i name="version" type="string">5.4.4.18Apr17-6-g9f103f2a35 </i> + <i name="subversion" type="string">(build Jul 30 2020 14:31:59) complex parallel </i> + <i name="platform" type="string">LinuxIFC </i> + <i name="date" type="string">2022 10 17 </i> + <i name="time" type="string">23:38:27 </i> + </generator> + <incar> + <i type="int" name="ISTART"> 0</i> + <i type="string" name="PREC">accurate</i> + <i type="string" name="ALGO"> Fast</i> + <i type="int" name="ISPIN"> 2</i> + <i type="int" name="ICHARG"> 2</i> + <i type="int" name="IBRION"> 2</i> + <i name="EDIFF"> 0.00000100</i> + <i name="EDIFFG"> -0.02000000</i> + <i type="int" name="NSW"> 60</i> + <i type="int" name="ISIF"> 2</i> + <i name="ENCUT"> 400.00000000</i> + <i name="POTIM"> 0.10000000</i> + <i type="string" name="LREAL"> AUTO</i> + <i type="int" name="ISMEAR"> 0</i> + <i name="SIGMA"> 0.01000000</i> + <i type="logical" name="LWAVE"> F </i> + <i type="logical" name="LCHARG"> F </i> + <i type="logical" name="LASPH"> T </i> + <v type="int" name="KPOINT_BSE"> -1 0 0 0</v> + <i type="string" name="GGA"> RP</i> + <i type="logical" name="LDIPOL"> T </i> + <i type="int" name="IDIPOL"> 3</i> + <v name="DIPOL"> 0.50000000 0.50000000 0.50000000</v> + <i type="logical" name="LASPH"> T </i> + </incar> + <structure name="primitive_cell" > + <crystal> + <varray name="basis" > + <v> 15.00000000 15.00300000 0.00000000 </v> + <v> 0.00000000 15.02000000 15.00000000 </v> + <v> 15.01000000 0.00000000 15.15034000 </v> + </varray> + <i name="volume"> 6791.29705200 </i> + <varray name="rec_basis" > + <v> 0.03350731 0.03315272 -0.03319693 </v> + <v> -0.03346939 0.03346269 0.03315936 </v> + <v> 0.03313726 -0.03313064 0.03317481 </v> + </varray> + </crystal> + <varray name="positions" > + <v> -0.49999938 -0.49999904 -0.49071110 </v> + </varray> + </structure> + <varray name="primitive_index" > + <v type="int" > 1 </v> + </varray> + <kpoints> + <generation param="Monkhorst-Pack"> + <v type="int" name="divisions"> 1 1 1 </v> + <v name="usershift"> 0.00000000 0.00000000 0.00000000 </v> + <v name="genvec1"> 1.00000000 0.00000000 0.00000000 </v> + <v name="genvec2"> 0.00000000 1.00000000 0.00000000 </v> + <v name="genvec3"> 0.00000000 -0.00000000 1.00000000 </v> + <v name="shift"> 0.00000000 0.00000000 0.00000000 </v> + </generation> + <varray name="kpointlist" > + <v> 0.00000000 0.00000000 0.00000000 </v> + </varray> + <varray name="weights" > + <v> 1.00000000 </v> + </varray> + </kpoints> + <parameters> + <separator name="general" > + <i type="string" name="SYSTEM">unknown system</i> + <i type="logical" name="LCOMPAT"> F </i> + </separator> + <separator name="electronic" > + <i type="string" name="PREC">accura</i> + <i name="ENMAX"> 400.00000000</i> + <i name="ENAUG"> 627.11200000</i> + <i name="EDIFF"> 0.00000100</i> + <i type="int" name="IALGO"> 68</i> + <i type="int" name="IWAVPR"> 11</i> + <i type="int" name="NBANDS"> 10</i> + <i name="NELECT"> 5.00000000</i> + <i type="int" name="TURBO"> 0</i> + <i type="int" name="IRESTART"> 0</i> + <i type="int" name="NREBOOT"> 0</i> + <i type="int" name="NMIN"> 0</i> + <i name="EREF"> 0.00000000</i> + <separator name="electronic smearing" > + <i type="int" name="ISMEAR"> 0</i> + <i name="SIGMA"> 0.01000000</i> + <i name="KSPACING"> 0.50000000</i> + <i type="logical" name="KGAMMA"> T </i> + </separator> + <separator name="electronic projectors" > + <i type="logical" name="LREAL"> T </i> + <v name="ROPT"> -0.00025000</v> + <i type="int" name="LMAXPAW"> -100</i> + <i type="int" name="LMAXMIX"> 2</i> + <i type="logical" name="NLSPLINE"> F </i> + </separator> + <separator name="electronic startup" > + <i type="int" name="ISTART"> 0</i> + <i type="int" name="ICHARG"> 2</i> + <i type="int" name="INIWAV"> 1</i> + </separator> + <separator name="electronic spin" > + <i type="int" name="ISPIN"> 2</i> + <i type="logical" name="LNONCOLLINEAR"> F </i> + <v name="MAGMOM"> 1.00000000</v> + <i name="NUPDOWN"> -1.00000000</i> + <i type="logical" name="LSORBIT"> F </i> + <v name="SAXIS"> 0.00000000 0.00000000 1.00000000</v> + <i type="logical" name="LSPIRAL"> F </i> + <v name="QSPIRAL"> 0.00000000 0.00000000 0.00000000</v> + <i type="logical" name="LZEROZ"> F </i> + </separator> + <separator name="electronic exchange-correlation" > + <i type="logical" name="LASPH"> T </i> + <i type="logical" name="LMETAGGA"> F </i> + </separator> + <separator name="electronic convergence" > + <i type="int" name="NELM"> 60</i> + <i type="int" name="NELMDL"> -5</i> + <i type="int" name="NELMIN"> 2</i> + <i name="ENINI"> 400.00000000</i> + <separator name="electronic convergence detail" > + <i type="logical" name="LDIAG"> T </i> + <i type="logical" name="LSUBROT"> F </i> + <i name="WEIMIN"> 0.00100000</i> + <i name="EBREAK"> 0.00000002</i> + <i name="DEPER"> 0.30000000</i> + <i type="int" name="NRMM"> 4</i> + <i name="TIME"> 0.40000000</i> + </separator> + </separator> + <separator name="electronic mixer" > + <i name="AMIX"> 0.40000000</i> + <i name="BMIX"> 1.00000000</i> + <i name="AMIN"> 0.10000000</i> + <i name="AMIX_MAG"> 1.60000000</i> + <i name="BMIX_MAG"> 1.00000000</i> + <separator name="electronic mixer details" > + <i type="int" name="IMIX"> 4</i> + <i type="logical" name="MIXFIRST"> F </i> + <i type="int" name="MAXMIX"> -45</i> + <i name="WC"> 100.00000000</i> + <i type="int" name="INIMIX"> 1</i> + <i type="int" name="MIXPRE"> 1</i> + <i type="int" name="MREMOVE"> 5</i> + </separator> + </separator> + <separator name="electronic dipolcorrection" > + <i type="logical" name="LDIPOL"> T </i> + <i type="logical" name="LMONO"> F </i> + <i type="int" name="IDIPOL"> 3</i> + <i name="EPSILON"> 1.00000000</i> + <v name="DIPOL"> 0.50000000 0.50000000 0.50000000</v> + <i name="EFIELD"> 0.00000000</i> + </separator> + </separator> + <separator name="grids" > + <i type="int" name="NGX"> 140</i> + <i type="int" name="NGY"> 140</i> + <i type="int" name="NGZ"> 140</i> + <i type="int" name="NGXF"> 280</i> + <i type="int" name="NGYF"> 280</i> + <i type="int" name="NGZF"> 280</i> + <i type="logical" name="ADDGRID"> F </i> + </separator> + <separator name="ionic" > + <i type="int" name="NSW"> 60</i> + <i type="int" name="IBRION"> 2</i> + <i type="int" name="MDALGO"> 0</i> + <i type="int" name="ISIF"> 2</i> + <i name="PSTRESS"> 0.00000000</i> + <i name="EDIFFG"> -0.02000000</i> + <i type="int" name="NFREE"> 1</i> + <i name="POTIM"> 0.10000000</i> + <i name="SMASS"> -3.00000000</i> + <i name="SCALEE"> 1.00000000</i> + </separator> + <separator name="ionic md" > + <i name="TEBEG"> 0.00010000</i> + <i name="TEEND"> 0.00010000</i> + <i type="int" name="NBLOCK"> 1</i> + <i type="int" name="KBLOCK"> 60</i> + <i type="int" name="NPACO"> 256</i> + <i name="APACO"> 16.00000000</i> + </separator> + <separator name="symmetry" > + <i type="int" name="ISYM"> 2</i> + <i name="SYMPREC"> 0.00001000</i> + </separator> + <separator name="dos" > + <i type="int" name="LORBIT"> 0</i> + <v name="RWIGS"> -1.00000000</v> + <i type="int" name="NEDOS"> 301</i> + <i name="EMIN"> 10.00000000</i> + <i name="EMAX"> -10.00000000</i> + <i name="EFERMI"> 0.00000000</i> + </separator> + <separator name="writing" > + <i type="int" name="NWRITE"> 2</i> + <i type="logical" name="LWAVE"> F </i> + <i type="logical" name="LDOWNSAMPLE"> F </i> + <i type="logical" name="LCHARG"> F </i> + <i type="logical" name="LPARD"> F </i> + <i type="logical" name="LVTOT"> F </i> + <i type="logical" name="LVHAR"> F </i> + <i type="logical" name="LELF"> F </i> + <i type="logical" name="LOPTICS"> F </i> + <v name="STM"> 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000</v> + </separator> + <separator name="performance" > + <i type="int" name="NPAR"> 5</i> + <i type="int" name="NSIM"> 4</i> + <i type="int" name="NBLK"> -1</i> + <i type="logical" name="LPLANE"> T </i> + <i type="logical" name="LSCALAPACK"> T </i> + <i type="logical" name="LSCAAWARE"> F </i> + <i type="logical" name="LSCALU"> F </i> + <i type="logical" name="LASYNC"> F </i> + <i type="logical" name="LORBITALREAL"> F </i> + </separator> + <separator name="miscellaneous" > + <i type="int" name="IDIOT"> 3</i> + <i type="int" name="ISPECIAL"> 0</i> + <i type="logical" name="LMUSIC"> F </i> + <v name="POMASS"> 14.00100000</v> + <v name="DARWINR"> 0.00000000</v> + <v name="DARWINV"> 1.00000000</v> + <i type="logical" name="LCORR"> T </i> + </separator> + <i type="logical" name="GGA_COMPAT"> T </i> + <i type="logical" name="LBERRY"> F </i> + <i type="int" name="ICORELEVEL"> 0</i> + <i type="logical" name="LDAU"> F </i> + <i type="int" name="I_CONSTRAINED_M"> 0</i> + <separator name="electronic exchange-correlation" > + <i type="string" name="GGA">RP</i> + <i type="int" name="VOSKOWN"> 0</i> + <i type="logical" name="LHFCALC"> F </i> + <i type="string" name="PRECFOCK"></i> + <i type="logical" name="LSYMGRAD"> F </i> + <i type="logical" name="LHFONE"> F </i> + <i type="logical" name="LRHFCALC"> F </i> + <i type="logical" name="LTHOMAS"> F </i> + <i type="logical" name="LMODELHF"> F </i> + <i name="ENCUT4O"> -1.00000000</i> + <i type="int" name="EXXOEP"> 0</i> + <i type="int" name="FOURORBIT"> 0</i> + <i name="AEXX"> 0.00000000</i> + <i name="HFALPHA"> 0.00000000</i> + <i name="MCALPHA"> 0.00000000</i> + <i name="ALDAX"> 1.00000000</i> + <i name="AGGAX"> 1.00000000</i> + <i name="ALDAC"> 1.00000000</i> + <i name="AGGAC"> 1.00000000</i> + <i type="int" name="NKREDX"> 1</i> + <i type="int" name="NKREDY"> 1</i> + <i type="int" name="NKREDZ"> 1</i> + <i type="logical" name="SHIFTRED"> F </i> + <i type="logical" name="ODDONLY"> F </i> + <i type="logical" name="EVENONLY"> F </i> + <i type="int" name="LMAXFOCK"> 0</i> + <i type="int" name="NMAXFOCKAE"> 0</i> + <i type="logical" name="LFOCKAEDFT"> F </i> + <i name="HFSCREEN"> 0.00000000</i> + <i name="HFSCREENC"> 0.00000000</i> + <i type="int" name="NBANDSGWLOW"> 0</i> + </separator> + <separator name="vdW DFT" > + <i type="logical" name="LUSE_VDW"> F </i> + <i name="Zab_VDW"> -0.84910000</i> + <i name="PARAM1"> 0.12340000</i> + <i name="PARAM2"> 1.00000000</i> + <i name="PARAM3"> 0.00000000</i> + </separator> + <separator name="model GW" > + <i type="int" name="MODEL_GW"> 0</i> + <i name="MODEL_EPS0"> 4074.77823120</i> + <i name="MODEL_ALPHA"> 1.00000000</i> + </separator> + <separator name="linear response parameters" > + <i type="logical" name="LEPSILON"> F </i> + <i type="logical" name="LRPA"> F </i> + <i type="logical" name="LNABLA"> F </i> + <i type="logical" name="LVEL"> F </i> + <i type="int" name="KINTER"> 0</i> + <i name="CSHIFT"> 0.10000000</i> + <i name="OMEGAMAX"> -1.00000000</i> + <i name="DEG_THRESHOLD"> 0.00200000</i> + <i name="RTIME"> -0.10000000</i> + <i name="WPLASMAI"> 0.00000000</i> + <v name="DFIELD"> 0.00000000 0.00000000 0.00000000</v> + <v name="WPLASMA"> 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000</v> + </separator> + <separator name="orbital magnetization" > + <i type="logical" name="NUCIND"> F </i> + <v name="MAGPOS"> 0.00000000 0.00000000 0.00000000</v> + <i type="logical" name="LNICSALL"> T </i> + <i type="logical" name="ORBITALMAG"> F </i> + <i type="logical" name="LMAGBLOCH"> F </i> + <i type="logical" name="LCHIMAG"> F </i> + <i type="logical" name="LGAUGE"> T </i> + <i type="int" name="MAGATOM"> 0</i> + <v name="MAGDIPOL"> 0.00000000 0.00000000 0.00000000</v> + <v name="AVECCONST"> 0.00000000 0.00000000 0.00000000</v> + </separator> + <separator name="response functions" > + <i type="logical" name="LADDER"> F </i> + <i type="logical" name="LRPAFORCE"> F </i> + <i type="logical" name="LFXC"> F </i> + <i type="logical" name="LHARTREE"> T </i> + <i type="int" name="IBSE"> 0</i> + <v type="int" name="KPOINT"> -1 0 0 0</v> + <i type="logical" name="LTCTE"> F </i> + <i type="logical" name="LTETE"> F </i> + <i type="logical" name="LTRIPLET"> F </i> + <i type="logical" name="LFXCEPS"> F </i> + <i type="logical" name="LFXHEG"> F </i> + <i type="int" name="NATURALO"> 2</i> + <i type="logical" name="L2ORDER"> F </i> + <i type="logical" name="LMP2LT"> F </i> + <i type="logical" name="LUSEW"> F </i> + <i name="ENCUTGW"> -2.00000000</i> + <i name="ENCUTGWSOFT"> -2.00000000</i> + <i name="ENCUTLF"> -1.00000000</i> + <i type="int" name="LMAXMP2"> -1</i> + <i name="SCISSOR"> 0.00000000</i> + <i type="int" name="NOMEGA"> 0</i> + <i type="int" name="NOMEGAR"> 0</i> + <i type="int" name="NBANDSGW"> -1</i> + <i type="int" name="NBANDSO"> -1</i> + <i type="int" name="NBANDSV"> -1</i> + <i type="int" name="NELM"> 1</i> + <i type="int" name="NELMHF"> 1</i> + <i type="int" name="DIM"> 3</i> + <i type="int" name="ANTIRES"> 0</i> + <i name="OMEGAMAX"> -30.00000000</i> + <i name="OMEGAMIN"> -30.00000000</i> + <i name="OMEGATL"> -200.00000000</i> + <i type="int" name="OMEGAGRID"> 140</i> + <i name="CSHIFT"> -0.10000000</i> + <i type="logical" name="SELFENERGY"> F </i> + <i type="logical" name="LSPECTRAL"> F </i> + <i type="logical" name="LSPECTRALGW"> F </i> + <i type="logical" name="LSINGLES"> F </i> + <i type="logical" name="LFERMIGW"> F </i> + <i type="logical" name="ODDONLYGW"> F </i> + <i type="logical" name="EVENONLYGW"> F </i> + <i type="int" name="NKREDLFX"> 1</i> + <i type="int" name="NKREDLFY"> 1</i> + <i type="int" name="NKREDLFZ"> 1</i> + <i type="int" name="MAXMEM"> 2800</i> + <i type="int" name="TELESCOPE"> 0</i> + <i type="int" name="TAUPAR"> 1</i> + <i type="int" name="OMEGAPAR"> -1</i> + <i name="LAMBDA"> 1.00000000</i> + </separator> + <separator name="External order field" > + <i name="OFIELD_KAPPA"> 0.00000000</i> + <v name="OFIELD_K"> 0.00000000 0.00000000 0.00000000</v> + <i name="OFIELD_Q6_NEAR"> 0.00000000</i> + <i name="OFIELD_Q6_FAR"> 0.00000000</i> + <i name="OFIELD_A"> 0.00000000</i> + </separator> + </parameters> + <atominfo> + <atoms> 1 </atoms> + <types> 1 </types> + <array name="atoms" > + <dimension dim="1">ion</dimension> + <field type="string">element</field> + <field type="int">atomtype</field> + <set> + <rc><c>N </c><c> 1</c></rc> + </set> + </array> + <array name="atomtypes" > + <dimension dim="1">type</dimension> + <field type="int">atomspertype</field> + <field type="string">element</field> + <field>mass</field> + <field>valence</field> + <field type="string">pseudopotential</field> + <set> + <rc><c> 1</c><c>N </c><c> 14.00100000</c><c> 5.00000000</c><c> PAW_PBE N 08Apr2002 </c></rc> + </set> + </array> + </atominfo> + <structure name="initialpos" > + <crystal> + <varray name="basis" > + <v> 15.00000000 15.00300000 0.00000000 </v> + <v> 0.00000000 15.02000000 15.00000000 </v> + <v> 15.01000000 0.00000000 15.15034000 </v> + </varray> + <i name="volume"> 6791.29705200 </i> + <varray name="rec_basis" > + <v> 0.03350731 0.03315272 -0.03319693 </v> + <v> -0.03346939 0.03346269 0.03315936 </v> + <v> 0.03313726 -0.03313064 0.03317481 </v> + </varray> + </crystal> + <varray name="positions" > + <v> 0.50000062 0.50000096 0.50928890 </v> + </varray> + </structure> + <calculation> + <scstep> + <time name="dav"> 0.28 0.30</time> + <time name="total"> 0.96 0.99</time> + <dipole> + <v name="dipole"> -0.00000028 0.00000000 -0.00000028 </v> + <i name="Tr[quadrupol]"> -1124.75778114 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 0.01586530 </i> + <i name="ewald"> -27.45274585 </i> + <i name="hartreedc"> -195.14929240 </i> + <i name="XCdc"> 17.46887415 </i> + <i name="pawpsdc"> 205.05726297 </i> + <i name="pawaedc"> -206.12097309 </i> + <i name="eentropy"> -0.00000000 </i> + <i name="bandstr"> -27.46751480 </i> + <i name="atom"> 264.50327051 </i> + <i name="e_fr_energy"> 30.85474679 </i> + <i name="e_wo_entrp"> 30.85474679 </i> + <i name="e_0_energy"> 30.85474679 </i> + </energy> + </scstep> + <scstep> + <time name="dav"> 0.32 0.32</time> + <time name="total"> 0.32 0.32</time> + <dipole> + <v name="dipole"> -0.00000028 0.00000000 -0.00000028 </v> + <i name="Tr[quadrupol]"> -1124.75778114 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> 10.02349778 </i> + <i name="e_wo_entrp"> 10.02349778 </i> + <i name="e_0_energy"> 10.02349778 </i> + </energy> + </scstep> + <scstep> + <time name="dav"> 0.25 0.25</time> + <time name="total"> 0.25 0.25</time> + <dipole> + <v name="dipole"> -0.00000028 0.00000000 -0.00000028 </v> + <i name="Tr[quadrupol]"> -1124.75778114 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -0.66043833 </i> + <i name="e_wo_entrp"> -0.66043833 </i> + <i name="e_0_energy"> -0.66043833 </i> + </energy> + </scstep> + <scstep> + <time name="dav"> 0.18 0.19</time> + <time name="total"> 0.18 0.19</time> + <dipole> + <v name="dipole"> -0.00000028 0.00000000 -0.00000028 </v> + <i name="Tr[quadrupol]"> -1124.75778114 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -1.71548005 </i> + <i name="e_wo_entrp"> -1.71548005 </i> + <i name="e_0_energy"> -1.71548005 </i> + </energy> + </scstep> + <scstep> + <time name="dav"> 0.32 0.33</time> + <time name="total"> 0.93 0.93</time> + <dipole> + <v name="dipole"> -0.00000028 0.00000000 -0.00000028 </v> + <i name="Tr[quadrupol]"> -1124.75778114 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -1.72870070 </i> + <i name="e_wo_entrp"> -1.72870070 </i> + <i name="e_0_energy"> -1.72870070 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.05 0.06</time> + <time name="diis"> 0.17 0.17</time> + <time name="orth"> 0.00 0.00</time> + <time name="total"> 1.49 1.51</time> + <dipole> + <v name="dipole"> 0.00002621 0.00000000 0.00002645 </v> + <i name="Tr[quadrupol]"> -1124.76184653 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> 1.67148460 </i> + <i name="e_wo_entrp"> 1.67148460 </i> + <i name="e_0_energy"> 1.67148460 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.04 0.04</time> + <time name="diis"> 0.16 0.16</time> + <time name="orth"> 0.00 0.00</time> + <time name="total"> 1.45 1.45</time> + <dipole> + <v name="dipole"> 0.00013780 0.00000000 0.00013909 </v> + <i name="Tr[quadrupol]"> -1124.77981666 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -1.14865214 </i> + <i name="e_wo_entrp"> -1.14865214 </i> + <i name="e_0_energy"> -1.14865214 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.04 0.04</time> + <time name="diis"> 0.16 0.16</time> + <time name="orth"> 0.00 0.00</time> + <time name="total"> 1.42 1.43</time> + <dipole> + <v name="dipole"> 0.00022891 0.00000000 0.00023105 </v> + <i name="Tr[quadrupol]"> -1124.79982087 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -2.12120079 </i> + <i name="e_wo_entrp"> -2.12120079 </i> + <i name="e_0_energy"> -2.12120079 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.04 0.04</time> + <time name="diis"> 0.16 0.16</time> + <time name="orth"> 0.00 0.00</time> + <time name="total"> 1.43 1.43</time> + <dipole> + <v name="dipole"> 0.00025746 0.00000000 0.00025987 </v> + <i name="Tr[quadrupol]"> -1124.80894163 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -2.52427220 </i> + <i name="e_wo_entrp"> -2.52427220 </i> + <i name="e_0_energy"> -2.52427220 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.04 0.04</time> + <time name="diis"> 0.16 0.16</time> + <time name="orth"> 0.00 0.00</time> + <time name="total"> 1.44 1.44</time> + <dipole> + <v name="dipole"> 0.00023117 0.00000000 0.00023333 </v> + <i name="Tr[quadrupol]"> -1124.81647273 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -2.79190282 </i> + <i name="e_wo_entrp"> -2.79190282 </i> + <i name="e_0_energy"> -2.79190282 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.04 0.04</time> + <time name="diis"> 0.16 0.16</time> + <time name="orth"> 0.00 0.00</time> + <time name="total"> 1.42 1.43</time> + <dipole> + <v name="dipole"> 0.00019942 0.00000000 0.00020128 </v> + <i name="Tr[quadrupol]"> -1124.82681711 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -2.98919477 </i> + <i name="e_wo_entrp"> -2.98919477 </i> + <i name="e_0_energy"> -2.98919477 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.05 0.05</time> + <time name="diis"> 0.15 0.15</time> + <time name="orth"> 0.00 0.00</time> + <time name="total"> 1.48 1.49</time> + <dipole> + <v name="dipole"> 0.00016847 0.00000000 0.00017005 </v> + <i name="Tr[quadrupol]"> -1124.83246868 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -3.09241500 </i> + <i name="e_wo_entrp"> -3.09241500 </i> + <i name="e_0_energy"> -3.09241500 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.04 0.04</time> + <time name="diis"> 0.16 0.16</time> + <time name="orth"> 0.00 0.00</time> + <time name="total"> 1.49 1.50</time> + <dipole> + <v name="dipole"> 0.00005453 0.00000000 0.00005504 </v> + <i name="Tr[quadrupol]"> -1124.83833352 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -3.12334593 </i> + <i name="e_wo_entrp"> -3.12334593 </i> + <i name="e_0_energy"> -3.12334593 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.04 0.04</time> + <time name="diis"> 0.17 0.17</time> + <time name="orth"> 0.00 0.00</time> + <time name="total"> 1.47 1.47</time> + <dipole> + <v name="dipole"> 0.00001321 0.00000000 0.00001334 </v> + <i name="Tr[quadrupol]"> -1124.83853273 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -3.14479208 </i> + <i name="e_wo_entrp"> -3.14479208 </i> + <i name="e_0_energy"> -3.14479208 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.04 0.04</time> + <time name="diis"> 0.16 0.16</time> + <time name="orth"> 0.00 0.00</time> + <time name="total"> 1.45 1.46</time> + <dipole> + <v name="dipole"> -0.00005841 0.00000000 -0.00005896 </v> + <i name="Tr[quadrupol]"> -1124.83629816 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -3.15158333 </i> + <i name="e_wo_entrp"> -3.15158333 </i> + <i name="e_0_energy"> -3.15158333 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.05 0.05</time> + <time name="diis"> 0.16 0.16</time> + <time name="orth"> 0.00 0.00</time> + <time name="total"> 1.46 1.47</time> + <dipole> + <v name="dipole"> -0.00007796 0.00000000 -0.00007869 </v> + <i name="Tr[quadrupol]"> -1124.83590021 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -3.15356148 </i> + <i name="e_wo_entrp"> -3.15356148 </i> + <i name="e_0_energy"> -3.15356148 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.04 0.04</time> + <time name="diis"> 0.17 0.17</time> + <time name="orth"> 0.00 0.00</time> + <time name="total"> 1.44 1.45</time> + <dipole> + <v name="dipole"> -0.00008681 0.00000000 -0.00008762 </v> + <i name="Tr[quadrupol]"> -1124.83537858 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -3.15476638 </i> + <i name="e_wo_entrp"> -3.15476638 </i> + <i name="e_0_energy"> -3.15476638 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.04 0.04</time> + <time name="diis"> 0.16 0.16</time> + <time name="orth"> 0.00 0.00</time> + <time name="total"> 1.43 1.44</time> + <dipole> + <v name="dipole"> -0.00008804 0.00000000 -0.00008886 </v> + <i name="Tr[quadrupol]"> -1124.83467492 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -3.15572929 </i> + <i name="e_wo_entrp"> -3.15572929 </i> + <i name="e_0_energy"> -3.15572929 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.04 0.04</time> + <time name="diis"> 0.16 0.16</time> + <time name="orth"> 0.00 0.00</time> + <time name="total"> 1.43 1.44</time> + <dipole> + <v name="dipole"> -0.00007832 0.00000000 -0.00007906 </v> + <i name="Tr[quadrupol]"> -1124.83408456 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -3.15612433 </i> + <i name="e_wo_entrp"> -3.15612433 </i> + <i name="e_0_energy"> -3.15612433 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.04 0.04</time> + <time name="diis"> 0.15 0.15</time> + <time name="orth"> 0.00 0.00</time> + <time name="total"> 1.42 1.43</time> + <dipole> + <v name="dipole"> -0.00005824 0.00000000 -0.00005878 </v> + <i name="Tr[quadrupol]"> -1124.83354538 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -3.15621347 </i> + <i name="e_wo_entrp"> -3.15621347 </i> + <i name="e_0_energy"> -3.15621347 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.04 0.04</time> + <time name="diis"> 0.15 0.15</time> + <time name="orth"> 0.00 0.00</time> + <time name="total"> 1.42 1.43</time> + <dipole> + <v name="dipole"> -0.00003981 0.00000000 -0.00004018 </v> + <i name="Tr[quadrupol]"> -1124.83310191 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -3.15627476 </i> + <i name="e_wo_entrp"> -3.15627476 </i> + <i name="e_0_energy"> -3.15627476 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.04 0.04</time> + <time name="diis"> 0.15 0.15</time> + <time name="orth"> 0.00 0.00</time> + <time name="total"> 1.44 1.45</time> + <dipole> + <v name="dipole"> -0.00001972 0.00000000 -0.00001990 </v> + <i name="Tr[quadrupol]"> -1124.83245086 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -3.15633953 </i> + <i name="e_wo_entrp"> -3.15633953 </i> + <i name="e_0_energy"> -3.15633953 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.04 0.04</time> + <time name="diis"> 0.14 0.14</time> + <time name="orth"> 0.00 0.00</time> + <time name="total"> 1.42 1.43</time> + <dipole> + <v name="dipole"> -0.00000933 0.00000000 -0.00000942 </v> + <i name="Tr[quadrupol]"> -1124.83203676 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -3.15634591 </i> + <i name="e_wo_entrp"> -3.15634591 </i> + <i name="e_0_energy"> -3.15634591 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.04 0.04</time> + <time name="diis"> 0.14 0.14</time> + <time name="orth"> 0.00 0.00</time> + <time name="total"> 1.42 1.42</time> + <dipole> + <v name="dipole"> -0.00000099 0.00000000 -0.00000100 </v> + <i name="Tr[quadrupol]"> -1124.83156833 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -3.15635566 </i> + <i name="e_wo_entrp"> -3.15635566 </i> + <i name="e_0_energy"> -3.15635566 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.04 0.04</time> + <time name="diis"> 0.14 0.14</time> + <time name="orth"> 0.00 0.00</time> + <time name="total"> 0.83 0.84</time> + <dipole> + <v name="dipole"> 0.00000464 0.00000000 0.00000468 </v> + <i name="Tr[quadrupol]"> -1124.83115341 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 0.01586530 </i> + <i name="ewald"> -27.45274585 </i> + <i name="hartreedc"> -198.07869002 </i> + <i name="XCdc"> 18.85485699 </i> + <i name="pawpsdc"> 218.56840574 </i> + <i name="pawaedc"> -219.55050148 </i> + <i name="eentropy"> -0.00000000 </i> + <i name="bandstr"> -60.01681780 </i> + <i name="atom"> 264.50327051 </i> + <i name="e_fr_energy"> -3.15635660 </i> + <i name="e_wo_entrp"> -3.15635660 </i> + <i name="e_0_energy"> -3.15635660 </i> + </energy> + </scstep> + <structure> + <crystal> + <varray name="basis" > + <v> 15.00000000 15.00300000 0.00000000 </v> + <v> 0.00000000 15.02000000 15.00000000 </v> + <v> 15.01000000 0.00000000 15.15034000 </v> + </varray> + <i name="volume"> 6791.29705200 </i> + <varray name="rec_basis" > + <v> 0.03350731 0.03315272 -0.03319693 </v> + <v> -0.03346939 0.03346269 0.03315936 </v> + <v> 0.03313726 -0.03313064 0.03317481 </v> + </varray> + </crystal> + <varray name="positions" > + <v> 0.50000062 0.50000096 0.50928890 </v> + </varray> + </structure> + <varray name="forces" > + <v> 0.00000000 -0.00000000 0.00000000 </v> + </varray> + <varray name="stress" > + <v> -0.12802571 -0.00020181 -0.00030063 </v> + <v> -0.00020181 -0.12832472 0.00016303 </v> + <v> -0.00030063 0.00016303 -0.12802337 </v> + </varray> + <energy> + <i name="e_fr_energy"> -3.15635660 </i> + <i name="e_wo_entrp"> -3.15635660 </i> + <i name="e_0_energy"> -0.00000000 </i> + </energy> + <time name="totalsc"> 33.12 33.36</time> + <eigenvalues> + <array> + <dimension dim="1">band</dimension> + <dimension dim="2">kpoint</dimension> + <dimension dim="3">spin</dimension> + <field>eigene</field> + <field>occ</field> + <set> + <set comment="spin 1"> + <set comment="kpoint 1"> + <r> -19.9437 1.0000 </r> + <r> -8.2471 1.0000 </r> + <r> -8.2469 1.0000 </r> + <r> -8.2469 1.0000 </r> + <r> -0.3828 0.0000 </r> + <r> 0.0879 0.0000 </r> + <r> 0.3668 0.0000 </r> + <r> 0.3683 0.0000 </r> + <r> 0.3689 0.0000 </r> + <r> 0.4913 0.0000 </r> + </set> + </set> + <set comment="spin 2"> + <set comment="kpoint 1"> + <r> -15.3322 1.0000 </r> + <r> -4.0766 0.0000 </r> + <r> -4.0765 0.0000 </r> + <r> -4.0765 0.0000 </r> + <r> -0.0366 0.0000 </r> + <r> 0.3714 0.0000 </r> + <r> 0.4791 0.0000 </r> + <r> 0.4812 0.0000 </r> + <r> 0.4831 0.0000 </r> + <r> 0.4930 0.0000 </r> + </set> + </set> + </set> + </array> + </eigenvalues> + <separator name="orbital magnetization" > + <v name="MAGDIPOLOUT"> 0.00000000 0.00000000 0.00000000</v> + </separator> + <dos> + <i name="efermi"> -8.14235243 </i> + <total> + <array> + <dimension dim="1">gridpoints</dimension> + <dimension dim="2">spin</dimension> + <field>energy</field> + <field>total</field> + <field>integrated</field> + <set> + <set comment="spin 1"> + <r> -20.9655 0.0000 0.0000 </r> + <r> -20.8906 0.0000 0.0000 </r> + <r> -20.8156 0.0000 0.0000 </r> + <r> -20.7407 0.0000 0.0000 </r> + <r> -20.6658 0.0000 0.0000 </r> + <r> -20.5908 0.0000 0.0000 </r> + <r> -20.5159 0.0000 0.0000 </r> + <r> -20.4410 0.0000 0.0000 </r> + <r> -20.3660 0.0000 0.0000 </r> + <r> -20.2911 0.0000 0.0000 </r> + <r> -20.2162 0.0000 0.0000 </r> + <r> -20.1412 0.0000 0.0000 </r> + <r> -20.0663 0.0000 0.0000 </r> + <r> -19.9913 0.0000 0.0000 </r> + <r> -19.9164 13.3442 0.9999 </r> + <r> -19.8415 0.0000 1.0000 </r> + <r> -19.7665 0.0000 1.0000 </r> + <r> -19.6916 0.0000 1.0000 </r> + <r> -19.6167 0.0000 1.0000 </r> + <r> -19.5417 0.0000 1.0000 </r> + <r> -19.4668 0.0000 1.0000 </r> + <r> -19.3919 0.0000 1.0000 </r> + <r> -19.3169 0.0000 1.0000 </r> + <r> -19.2420 0.0000 1.0000 </r> + <r> -19.1671 0.0000 1.0000 </r> + <r> -19.0921 0.0000 1.0000 </r> + <r> -19.0172 0.0000 1.0000 </r> + <r> -18.9423 0.0000 1.0000 </r> + <r> -18.8673 0.0000 1.0000 </r> + <r> -18.7924 0.0000 1.0000 </r> + <r> -18.7175 0.0000 1.0000 </r> + <r> -18.6425 0.0000 1.0000 </r> + <r> -18.5676 0.0000 1.0000 </r> + <r> -18.4927 0.0000 1.0000 </r> + <r> -18.4177 0.0000 1.0000 </r> + <r> -18.3428 0.0000 1.0000 </r> + <r> -18.2679 0.0000 1.0000 </r> + <r> -18.1929 0.0000 1.0000 </r> + <r> -18.1180 0.0000 1.0000 </r> + <r> -18.0431 0.0000 1.0000 </r> + <r> -17.9681 0.0000 1.0000 </r> + <r> -17.8932 0.0000 1.0000 </r> + <r> -17.8183 0.0000 1.0000 </r> + <r> -17.7433 0.0000 1.0000 </r> + <r> -17.6684 0.0000 1.0000 </r> + <r> -17.5934 0.0000 1.0000 </r> + <r> -17.5185 0.0000 1.0000 </r> + <r> -17.4436 0.0000 1.0000 </r> + <r> -17.3686 0.0000 1.0000 </r> + <r> -17.2937 0.0000 1.0000 </r> + <r> -17.2188 0.0000 1.0000 </r> + <r> -17.1438 0.0000 1.0000 </r> + <r> -17.0689 0.0000 1.0000 </r> + <r> -16.9940 0.0000 1.0000 </r> + <r> -16.9190 0.0000 1.0000 </r> + <r> -16.8441 0.0000 1.0000 </r> + <r> -16.7692 0.0000 1.0000 </r> + <r> -16.6942 0.0000 1.0000 </r> + <r> -16.6193 0.0000 1.0000 </r> + <r> -16.5444 0.0000 1.0000 </r> + <r> -16.4694 0.0000 1.0000 </r> + <r> -16.3945 0.0000 1.0000 </r> + <r> -16.3196 0.0000 1.0000 </r> + <r> -16.2446 0.0000 1.0000 </r> + <r> -16.1697 0.0000 1.0000 </r> + <r> -16.0948 0.0000 1.0000 </r> + <r> -16.0198 0.0000 1.0000 </r> + <r> -15.9449 0.0000 1.0000 </r> + <r> -15.8700 0.0000 1.0000 </r> + <r> -15.7950 0.0000 1.0000 </r> + <r> -15.7201 0.0000 1.0000 </r> + <r> -15.6452 0.0000 1.0000 </r> + <r> -15.5702 0.0000 1.0000 </r> + <r> -15.4953 0.0000 1.0000 </r> + <r> -15.4204 0.0000 1.0000 </r> + <r> -15.3454 0.0000 1.0000 </r> + <r> -15.2705 0.0000 1.0000 </r> + <r> -15.1955 0.0000 1.0000 </r> + <r> -15.1206 0.0000 1.0000 </r> + <r> -15.0457 0.0000 1.0000 </r> + <r> -14.9707 0.0000 1.0000 </r> + <r> -14.8958 0.0000 1.0000 </r> + <r> -14.8209 0.0000 1.0000 </r> + <r> -14.7459 0.0000 1.0000 </r> + <r> -14.6710 0.0000 1.0000 </r> + <r> -14.5961 0.0000 1.0000 </r> + <r> -14.5211 0.0000 1.0000 </r> + <r> -14.4462 0.0000 1.0000 </r> + <r> -14.3713 0.0000 1.0000 </r> + <r> -14.2963 0.0000 1.0000 </r> + <r> -14.2214 0.0000 1.0000 </r> + <r> -14.1465 0.0000 1.0000 </r> + <r> -14.0715 0.0000 1.0000 </r> + <r> -13.9966 0.0000 1.0000 </r> + <r> -13.9217 0.0000 1.0000 </r> + <r> -13.8467 0.0000 1.0000 </r> + <r> -13.7718 0.0000 1.0000 </r> + <r> -13.6969 0.0000 1.0000 </r> + <r> -13.6219 0.0000 1.0000 </r> + <r> -13.5470 0.0000 1.0000 </r> + <r> -13.4721 0.0000 1.0000 </r> + <r> -13.3971 0.0000 1.0000 </r> + <r> -13.3222 0.0000 1.0000 </r> + <r> -13.2473 0.0000 1.0000 </r> + <r> -13.1723 0.0000 1.0000 </r> + <r> -13.0974 0.0000 1.0000 </r> + <r> -13.0225 0.0000 1.0000 </r> + <r> -12.9475 0.0000 1.0000 </r> + <r> -12.8726 0.0000 1.0000 </r> + <r> -12.7977 0.0000 1.0000 </r> + <r> -12.7227 0.0000 1.0000 </r> + <r> -12.6478 0.0000 1.0000 </r> + <r> -12.5728 0.0000 1.0000 </r> + <r> -12.4979 0.0000 1.0000 </r> + <r> -12.4230 0.0000 1.0000 </r> + <r> -12.3480 0.0000 1.0000 </r> + <r> -12.2731 0.0000 1.0000 </r> + <r> -12.1982 0.0000 1.0000 </r> + <r> -12.1232 0.0000 1.0000 </r> + <r> -12.0483 0.0000 1.0000 </r> + <r> -11.9734 0.0000 1.0000 </r> + <r> -11.8984 0.0000 1.0000 </r> + <r> -11.8235 0.0000 1.0000 </r> + <r> -11.7486 0.0000 1.0000 </r> + <r> -11.6736 0.0000 1.0000 </r> + <r> -11.5987 0.0000 1.0000 </r> + <r> -11.5238 0.0000 1.0000 </r> + <r> -11.4488 0.0000 1.0000 </r> + <r> -11.3739 0.0000 1.0000 </r> + <r> -11.2990 0.0000 1.0000 </r> + <r> -11.2240 0.0000 1.0000 </r> + <r> -11.1491 0.0000 1.0000 </r> + <r> -11.0742 0.0000 1.0000 </r> + <r> -10.9992 0.0000 1.0000 </r> + <r> -10.9243 0.0000 1.0000 </r> + <r> -10.8494 0.0000 1.0000 </r> + <r> -10.7744 0.0000 1.0000 </r> + <r> -10.6995 0.0000 1.0000 </r> + <r> -10.6246 0.0000 1.0000 </r> + <r> -10.5496 0.0000 1.0000 </r> + <r> -10.4747 0.0000 1.0000 </r> + <r> -10.3998 0.0000 1.0000 </r> + <r> -10.3248 0.0000 1.0000 </r> + <r> -10.2499 0.0000 1.0000 </r> + <r> -10.1749 0.0000 1.0000 </r> + <r> -10.1000 0.0000 1.0000 </r> + <r> -10.0251 0.0000 1.0000 </r> + <r> -9.9501 0.0000 1.0000 </r> + <r> -9.8752 0.0000 1.0000 </r> + <r> -9.8003 0.0000 1.0000 </r> + <r> -9.7253 0.0000 1.0000 </r> + <r> -9.6504 0.0000 1.0000 </r> + <r> -9.5755 0.0000 1.0000 </r> + <r> -9.5005 0.0000 1.0000 </r> + <r> -9.4256 0.0000 1.0000 </r> + <r> -9.3507 0.0000 1.0000 </r> + <r> -9.2757 0.0000 1.0000 </r> + <r> -9.2008 0.0000 1.0000 </r> + <r> -9.1259 0.0000 1.0000 </r> + <r> -9.0509 0.0000 1.0000 </r> + <r> -8.9760 0.0000 1.0000 </r> + <r> -8.9011 0.0000 1.0000 </r> + <r> -8.8261 0.0000 1.0000 </r> + <r> -8.7512 0.0000 1.0000 </r> + <r> -8.6763 0.0000 1.0000 </r> + <r> -8.6013 0.0000 1.0000 </r> + <r> -8.5264 0.0000 1.0000 </r> + <r> -8.4515 0.0000 1.0000 </r> + <r> -8.3765 0.0000 1.0000 </r> + <r> -8.3016 0.0000 1.0000 </r> + <r> -8.2267 39.9545 3.9940 </r> + <r> -8.1517 0.0000 4.0000 </r> + <r> -8.0768 0.0000 4.0000 </r> + <r> -8.0019 0.0000 4.0000 </r> + <r> -7.9269 0.0000 4.0000 </r> + <r> -7.8520 0.0000 4.0000 </r> + <r> -7.7770 0.0000 4.0000 </r> + <r> -7.7021 0.0000 4.0000 </r> + <r> -7.6272 0.0000 4.0000 </r> + <r> -7.5522 0.0000 4.0000 </r> + <r> -7.4773 0.0000 4.0000 </r> + <r> -7.4024 0.0000 4.0000 </r> + <r> -7.3274 0.0000 4.0000 </r> + <r> -7.2525 0.0000 4.0000 </r> + <r> -7.1776 0.0000 4.0000 </r> + <r> -7.1026 0.0000 4.0000 </r> + <r> -7.0277 0.0000 4.0000 </r> + <r> -6.9528 0.0000 4.0000 </r> + <r> -6.8778 0.0000 4.0000 </r> + <r> -6.8029 0.0000 4.0000 </r> + <r> -6.7280 0.0000 4.0000 </r> + <r> -6.6530 0.0000 4.0000 </r> + <r> -6.5781 0.0000 4.0000 </r> + <r> -6.5032 0.0000 4.0000 </r> + <r> -6.4282 0.0000 4.0000 </r> + <r> -6.3533 0.0000 4.0000 </r> + <r> -6.2784 0.0000 4.0000 </r> + <r> -6.2034 0.0000 4.0000 </r> + <r> -6.1285 0.0000 4.0000 </r> + <r> -6.0536 0.0000 4.0000 </r> + <r> -5.9786 0.0000 4.0000 </r> + <r> -5.9037 0.0000 4.0000 </r> + <r> -5.8288 0.0000 4.0000 </r> + <r> -5.7538 0.0000 4.0000 </r> + <r> -5.6789 0.0000 4.0000 </r> + <r> -5.6040 0.0000 4.0000 </r> + <r> -5.5290 0.0000 4.0000 </r> + <r> -5.4541 0.0000 4.0000 </r> + <r> -5.3791 0.0000 4.0000 </r> + <r> -5.3042 0.0000 4.0000 </r> + <r> -5.2293 0.0000 4.0000 </r> + <r> -5.1543 0.0000 4.0000 </r> + <r> -5.0794 0.0000 4.0000 </r> + <r> -5.0045 0.0000 4.0000 </r> + <r> -4.9295 0.0000 4.0000 </r> + <r> -4.8546 0.0000 4.0000 </r> + <r> -4.7797 0.0000 4.0000 </r> + <r> -4.7047 0.0000 4.0000 </r> + <r> -4.6298 0.0000 4.0000 </r> + <r> -4.5549 0.0000 4.0000 </r> + <r> -4.4799 0.0000 4.0000 </r> + <r> -4.4050 0.0000 4.0000 </r> + <r> -4.3301 0.0000 4.0000 </r> + <r> -4.2551 0.0000 4.0000 </r> + <r> -4.1802 0.0000 4.0000 </r> + <r> -4.1053 0.0000 4.0000 </r> + <r> -4.0303 0.0000 4.0000 </r> + <r> -3.9554 0.0000 4.0000 </r> + <r> -3.8805 0.0000 4.0000 </r> + <r> -3.8055 0.0000 4.0000 </r> + <r> -3.7306 0.0000 4.0000 </r> + <r> -3.6557 0.0000 4.0000 </r> + <r> -3.5807 0.0000 4.0000 </r> + <r> -3.5058 0.0000 4.0000 </r> + <r> -3.4309 0.0000 4.0000 </r> + <r> -3.3559 0.0000 4.0000 </r> + <r> -3.2810 0.0000 4.0000 </r> + <r> -3.2061 0.0000 4.0000 </r> + <r> -3.1311 0.0000 4.0000 </r> + <r> -3.0562 0.0000 4.0000 </r> + <r> -2.9812 0.0000 4.0000 </r> + <r> -2.9063 0.0000 4.0000 </r> + <r> -2.8314 0.0000 4.0000 </r> + <r> -2.7564 0.0000 4.0000 </r> + <r> -2.6815 0.0000 4.0000 </r> + <r> -2.6066 0.0000 4.0000 </r> + <r> -2.5316 0.0000 4.0000 </r> + <r> -2.4567 0.0000 4.0000 </r> + <r> -2.3818 0.0000 4.0000 </r> + <r> -2.3068 0.0000 4.0000 </r> + <r> -2.2319 0.0000 4.0000 </r> + <r> -2.1570 0.0000 4.0000 </r> + <r> -2.0820 0.0000 4.0000 </r> + <r> -2.0071 0.0000 4.0000 </r> + <r> -1.9322 0.0000 4.0000 </r> + <r> -1.8572 0.0000 4.0000 </r> + <r> -1.7823 0.0000 4.0000 </r> + <r> -1.7074 0.0000 4.0000 </r> + <r> -1.6324 0.0000 4.0000 </r> + <r> -1.5575 0.0000 4.0000 </r> + <r> -1.4826 0.0000 4.0000 </r> + <r> -1.4076 0.0000 4.0000 </r> + <r> -1.3327 0.0000 4.0000 </r> + <r> -1.2578 0.0000 4.0000 </r> + <r> -1.1828 0.0000 4.0000 </r> + <r> -1.1079 0.0000 4.0000 </r> + <r> -1.0330 0.0000 4.0000 </r> + <r> -0.9580 0.0000 4.0000 </r> + <r> -0.8831 0.0000 4.0000 </r> + <r> -0.8082 0.0000 4.0000 </r> + <r> -0.7332 0.0000 4.0000 </r> + <r> -0.6583 0.0000 4.0000 </r> + <r> -0.5833 0.0000 4.0000 </r> + <r> -0.5084 0.0000 4.0000 </r> + <r> -0.4335 0.0000 4.0000 </r> + <r> -0.3585 13.3409 4.9997 </r> + <r> -0.2836 0.0000 5.0000 </r> + <r> -0.2087 0.0000 5.0000 </r> + <r> -0.1337 0.0000 5.0000 </r> + <r> -0.0588 0.0000 5.0000 </r> + <r> 0.0161 0.0000 5.0000 </r> + <r> 0.0911 9.0087 5.6751 </r> + <r> 0.1660 4.3363 6.0000 </r> + <r> 0.2409 0.0000 6.0000 </r> + <r> 0.3159 0.0000 6.0000 </r> + <r> 0.3908 40.0078 8.9980 </r> + <r> 0.4657 0.0020 9.0002 </r> + <r> 0.5407 13.3430 10.0000 </r> + <r> 0.6156 0.0000 10.0000 </r> + <r> 0.6905 0.0000 10.0000 </r> + <r> 0.7655 0.0000 10.0000 </r> + <r> 0.8404 0.0000 10.0000 </r> + <r> 0.9153 0.0000 10.0000 </r> + <r> 0.9903 0.0000 10.0000 </r> + <r> 1.0652 0.0000 10.0000 </r> + <r> 1.1401 0.0000 10.0000 </r> + <r> 1.2151 0.0000 10.0000 </r> + <r> 1.2900 0.0000 10.0000 </r> + <r> 1.3649 0.0000 10.0000 </r> + <r> 1.4399 0.0000 10.0000 </r> + <r> 1.5148 0.0000 10.0000 </r> + </set> + <set comment="spin 2"> + <r> -20.9655 0.0000 0.0000 </r> + <r> -20.8906 0.0000 0.0000 </r> + <r> -20.8156 0.0000 0.0000 </r> + <r> -20.7407 0.0000 0.0000 </r> + <r> -20.6658 0.0000 0.0000 </r> + <r> -20.5908 0.0000 0.0000 </r> + <r> -20.5159 0.0000 0.0000 </r> + <r> -20.4410 0.0000 0.0000 </r> + <r> -20.3660 0.0000 0.0000 </r> + <r> -20.2911 0.0000 0.0000 </r> + <r> -20.2162 0.0000 0.0000 </r> + <r> -20.1412 0.0000 0.0000 </r> + <r> -20.0663 0.0000 0.0000 </r> + <r> -19.9913 0.0000 0.0000 </r> + <r> -19.9164 0.0000 0.0000 </r> + <r> -19.8415 0.0000 0.0000 </r> + <r> -19.7665 0.0000 0.0000 </r> + <r> -19.6916 0.0000 0.0000 </r> + <r> -19.6167 0.0000 0.0000 </r> + <r> -19.5417 0.0000 0.0000 </r> + <r> -19.4668 0.0000 0.0000 </r> + <r> -19.3919 0.0000 0.0000 </r> + <r> -19.3169 0.0000 0.0000 </r> + <r> -19.2420 0.0000 0.0000 </r> + <r> -19.1671 0.0000 0.0000 </r> + <r> -19.0921 0.0000 0.0000 </r> + <r> -19.0172 0.0000 0.0000 </r> + <r> -18.9423 0.0000 0.0000 </r> + <r> -18.8673 0.0000 0.0000 </r> + <r> -18.7924 0.0000 0.0000 </r> + <r> -18.7175 0.0000 0.0000 </r> + <r> -18.6425 0.0000 0.0000 </r> + <r> -18.5676 0.0000 0.0000 </r> + <r> -18.4927 0.0000 0.0000 </r> + <r> -18.4177 0.0000 0.0000 </r> + <r> -18.3428 0.0000 0.0000 </r> + <r> -18.2679 0.0000 0.0000 </r> + <r> -18.1929 0.0000 0.0000 </r> + <r> -18.1180 0.0000 0.0000 </r> + <r> -18.0431 0.0000 0.0000 </r> + <r> -17.9681 0.0000 0.0000 </r> + <r> -17.8932 0.0000 0.0000 </r> + <r> -17.8183 0.0000 0.0000 </r> + <r> -17.7433 0.0000 0.0000 </r> + <r> -17.6684 0.0000 0.0000 </r> + <r> -17.5934 0.0000 0.0000 </r> + <r> -17.5185 0.0000 0.0000 </r> + <r> -17.4436 0.0000 0.0000 </r> + <r> -17.3686 0.0000 0.0000 </r> + <r> -17.2937 0.0000 0.0000 </r> + <r> -17.2188 0.0000 0.0000 </r> + <r> -17.1438 0.0000 0.0000 </r> + <r> -17.0689 0.0000 0.0000 </r> + <r> -16.9940 0.0000 0.0000 </r> + <r> -16.9190 0.0000 0.0000 </r> + <r> -16.8441 0.0000 0.0000 </r> + <r> -16.7692 0.0000 0.0000 </r> + <r> -16.6942 0.0000 0.0000 </r> + <r> -16.6193 0.0000 0.0000 </r> + <r> -16.5444 0.0000 0.0000 </r> + <r> -16.4694 0.0000 0.0000 </r> + <r> -16.3945 0.0000 0.0000 </r> + <r> -16.3196 0.0000 0.0000 </r> + <r> -16.2446 0.0000 0.0000 </r> + <r> -16.1697 0.0000 0.0000 </r> + <r> -16.0948 0.0000 0.0000 </r> + <r> -16.0198 0.0000 0.0000 </r> + <r> -15.9449 0.0000 0.0000 </r> + <r> -15.8700 0.0000 0.0000 </r> + <r> -15.7950 0.0000 0.0000 </r> + <r> -15.7201 0.0000 0.0000 </r> + <r> -15.6452 0.0000 0.0000 </r> + <r> -15.5702 0.0000 0.0000 </r> + <r> -15.4953 0.0000 0.0000 </r> + <r> -15.4204 0.0000 0.0000 </r> + <r> -15.3454 0.4077 0.0306 </r> + <r> -15.2705 12.9373 1.0000 </r> + <r> -15.1955 0.0000 1.0000 </r> + <r> -15.1206 0.0000 1.0000 </r> + <r> -15.0457 0.0000 1.0000 </r> + <r> -14.9707 0.0000 1.0000 </r> + <r> -14.8958 0.0000 1.0000 </r> + <r> -14.8209 0.0000 1.0000 </r> + <r> -14.7459 0.0000 1.0000 </r> + <r> -14.6710 0.0000 1.0000 </r> + <r> -14.5961 0.0000 1.0000 </r> + <r> -14.5211 0.0000 1.0000 </r> + <r> -14.4462 0.0000 1.0000 </r> + <r> -14.3713 0.0000 1.0000 </r> + <r> -14.2963 0.0000 1.0000 </r> + <r> -14.2214 0.0000 1.0000 </r> + <r> -14.1465 0.0000 1.0000 </r> + <r> -14.0715 0.0000 1.0000 </r> + <r> -13.9966 0.0000 1.0000 </r> + <r> -13.9217 0.0000 1.0000 </r> + <r> -13.8467 0.0000 1.0000 </r> + <r> -13.7718 0.0000 1.0000 </r> + <r> -13.6969 0.0000 1.0000 </r> + <r> -13.6219 0.0000 1.0000 </r> + <r> -13.5470 0.0000 1.0000 </r> + <r> -13.4721 0.0000 1.0000 </r> + <r> -13.3971 0.0000 1.0000 </r> + <r> -13.3222 0.0000 1.0000 </r> + <r> -13.2473 0.0000 1.0000 </r> + <r> -13.1723 0.0000 1.0000 </r> + <r> -13.0974 0.0000 1.0000 </r> + <r> -13.0225 0.0000 1.0000 </r> + <r> -12.9475 0.0000 1.0000 </r> + <r> -12.8726 0.0000 1.0000 </r> + <r> -12.7977 0.0000 1.0000 </r> + <r> -12.7227 0.0000 1.0000 </r> + <r> -12.6478 0.0000 1.0000 </r> + <r> -12.5728 0.0000 1.0000 </r> + <r> -12.4979 0.0000 1.0000 </r> + <r> -12.4230 0.0000 1.0000 </r> + <r> -12.3480 0.0000 1.0000 </r> + <r> -12.2731 0.0000 1.0000 </r> + <r> -12.1982 0.0000 1.0000 </r> + <r> -12.1232 0.0000 1.0000 </r> + <r> -12.0483 0.0000 1.0000 </r> + <r> -11.9734 0.0000 1.0000 </r> + <r> -11.8984 0.0000 1.0000 </r> + <r> -11.8235 0.0000 1.0000 </r> + <r> -11.7486 0.0000 1.0000 </r> + <r> -11.6736 0.0000 1.0000 </r> + <r> -11.5987 0.0000 1.0000 </r> + <r> -11.5238 0.0000 1.0000 </r> + <r> -11.4488 0.0000 1.0000 </r> + <r> -11.3739 0.0000 1.0000 </r> + <r> -11.2990 0.0000 1.0000 </r> + <r> -11.2240 0.0000 1.0000 </r> + <r> -11.1491 0.0000 1.0000 </r> + <r> -11.0742 0.0000 1.0000 </r> + <r> -10.9992 0.0000 1.0000 </r> + <r> -10.9243 0.0000 1.0000 </r> + <r> -10.8494 0.0000 1.0000 </r> + <r> -10.7744 0.0000 1.0000 </r> + <r> -10.6995 0.0000 1.0000 </r> + <r> -10.6246 0.0000 1.0000 </r> + <r> -10.5496 0.0000 1.0000 </r> + <r> -10.4747 0.0000 1.0000 </r> + <r> -10.3998 0.0000 1.0000 </r> + <r> -10.3248 0.0000 1.0000 </r> + <r> -10.2499 0.0000 1.0000 </r> + <r> -10.1749 0.0000 1.0000 </r> + <r> -10.1000 0.0000 1.0000 </r> + <r> -10.0251 0.0000 1.0000 </r> + <r> -9.9501 0.0000 1.0000 </r> + <r> -9.8752 0.0000 1.0000 </r> + <r> -9.8003 0.0000 1.0000 </r> + <r> -9.7253 0.0000 1.0000 </r> + <r> -9.6504 0.0000 1.0000 </r> + <r> -9.5755 0.0000 1.0000 </r> + <r> -9.5005 0.0000 1.0000 </r> + <r> -9.4256 0.0000 1.0000 </r> + <r> -9.3507 0.0000 1.0000 </r> + <r> -9.2757 0.0000 1.0000 </r> + <r> -9.2008 0.0000 1.0000 </r> + <r> -9.1259 0.0000 1.0000 </r> + <r> -9.0509 0.0000 1.0000 </r> + <r> -8.9760 0.0000 1.0000 </r> + <r> -8.9011 0.0000 1.0000 </r> + <r> -8.8261 0.0000 1.0000 </r> + <r> -8.7512 0.0000 1.0000 </r> + <r> -8.6763 0.0000 1.0000 </r> + <r> -8.6013 0.0000 1.0000 </r> + <r> -8.5264 0.0000 1.0000 </r> + <r> -8.4515 0.0000 1.0000 </r> + <r> -8.3765 0.0000 1.0000 </r> + <r> -8.3016 0.0000 1.0000 </r> + <r> -8.2267 0.0000 1.0000 </r> + <r> -8.1517 0.0000 1.0000 </r> + <r> -8.0768 0.0000 1.0000 </r> + <r> -8.0019 0.0000 1.0000 </r> + <r> -7.9269 0.0000 1.0000 </r> + <r> -7.8520 0.0000 1.0000 </r> + <r> -7.7770 0.0000 1.0000 </r> + <r> -7.7021 0.0000 1.0000 </r> + <r> -7.6272 0.0000 1.0000 </r> + <r> -7.5522 0.0000 1.0000 </r> + <r> -7.4773 0.0000 1.0000 </r> + <r> -7.4024 0.0000 1.0000 </r> + <r> -7.3274 0.0000 1.0000 </r> + <r> -7.2525 0.0000 1.0000 </r> + <r> -7.1776 0.0000 1.0000 </r> + <r> -7.1026 0.0000 1.0000 </r> + <r> -7.0277 0.0000 1.0000 </r> + <r> -6.9528 0.0000 1.0000 </r> + <r> -6.8778 0.0000 1.0000 </r> + <r> -6.8029 0.0000 1.0000 </r> + <r> -6.7280 0.0000 1.0000 </r> + <r> -6.6530 0.0000 1.0000 </r> + <r> -6.5781 0.0000 1.0000 </r> + <r> -6.5032 0.0000 1.0000 </r> + <r> -6.4282 0.0000 1.0000 </r> + <r> -6.3533 0.0000 1.0000 </r> + <r> -6.2784 0.0000 1.0000 </r> + <r> -6.2034 0.0000 1.0000 </r> + <r> -6.1285 0.0000 1.0000 </r> + <r> -6.0536 0.0000 1.0000 </r> + <r> -5.9786 0.0000 1.0000 </r> + <r> -5.9037 0.0000 1.0000 </r> + <r> -5.8288 0.0000 1.0000 </r> + <r> -5.7538 0.0000 1.0000 </r> + <r> -5.6789 0.0000 1.0000 </r> + <r> -5.6040 0.0000 1.0000 </r> + <r> -5.5290 0.0000 1.0000 </r> + <r> -5.4541 0.0000 1.0000 </r> + <r> -5.3791 0.0000 1.0000 </r> + <r> -5.3042 0.0000 1.0000 </r> + <r> -5.2293 0.0000 1.0000 </r> + <r> -5.1543 0.0000 1.0000 </r> + <r> -5.0794 0.0000 1.0000 </r> + <r> -5.0045 0.0000 1.0000 </r> + <r> -4.9295 0.0000 1.0000 </r> + <r> -4.8546 0.0000 1.0000 </r> + <r> -4.7797 0.0000 1.0000 </r> + <r> -4.7047 0.0000 1.0000 </r> + <r> -4.6298 0.0000 1.0000 </r> + <r> -4.5549 0.0000 1.0000 </r> + <r> -4.4799 0.0000 1.0000 </r> + <r> -4.4050 0.0000 1.0000 </r> + <r> -4.3301 0.0000 1.0000 </r> + <r> -4.2551 0.0000 1.0000 </r> + <r> -4.1802 0.0000 1.0000 </r> + <r> -4.1053 0.0010 1.0001 </r> + <r> -4.0303 40.0340 4.0000 </r> + <r> -3.9554 0.0000 4.0000 </r> + <r> -3.8805 0.0000 4.0000 </r> + <r> -3.8055 0.0000 4.0000 </r> + <r> -3.7306 0.0000 4.0000 </r> + <r> -3.6557 0.0000 4.0000 </r> + <r> -3.5807 0.0000 4.0000 </r> + <r> -3.5058 0.0000 4.0000 </r> + <r> -3.4309 0.0000 4.0000 </r> + <r> -3.3559 0.0000 4.0000 </r> + <r> -3.2810 0.0000 4.0000 </r> + <r> -3.2061 0.0000 4.0000 </r> + <r> -3.1311 0.0000 4.0000 </r> + <r> -3.0562 0.0000 4.0000 </r> + <r> -2.9812 0.0000 4.0000 </r> + <r> -2.9063 0.0000 4.0000 </r> + <r> -2.8314 0.0000 4.0000 </r> + <r> -2.7564 0.0000 4.0000 </r> + <r> -2.6815 0.0000 4.0000 </r> + <r> -2.6066 0.0000 4.0000 </r> + <r> -2.5316 0.0000 4.0000 </r> + <r> -2.4567 0.0000 4.0000 </r> + <r> -2.3818 0.0000 4.0000 </r> + <r> -2.3068 0.0000 4.0000 </r> + <r> -2.2319 0.0000 4.0000 </r> + <r> -2.1570 0.0000 4.0000 </r> + <r> -2.0820 0.0000 4.0000 </r> + <r> -2.0071 0.0000 4.0000 </r> + <r> -1.9322 0.0000 4.0000 </r> + <r> -1.8572 0.0000 4.0000 </r> + <r> -1.7823 0.0000 4.0000 </r> + <r> -1.7074 0.0000 4.0000 </r> + <r> -1.6324 0.0000 4.0000 </r> + <r> -1.5575 0.0000 4.0000 </r> + <r> -1.4826 0.0000 4.0000 </r> + <r> -1.4076 0.0000 4.0000 </r> + <r> -1.3327 0.0000 4.0000 </r> + <r> -1.2578 0.0000 4.0000 </r> + <r> -1.1828 0.0000 4.0000 </r> + <r> -1.1079 0.0000 4.0000 </r> + <r> -1.0330 0.0000 4.0000 </r> + <r> -0.9580 0.0000 4.0000 </r> + <r> -0.8831 0.0000 4.0000 </r> + <r> -0.8082 0.0000 4.0000 </r> + <r> -0.7332 0.0000 4.0000 </r> + <r> -0.6583 0.0000 4.0000 </r> + <r> -0.5833 0.0000 4.0000 </r> + <r> -0.5084 0.0000 4.0000 </r> + <r> -0.4335 0.0000 4.0000 </r> + <r> -0.3585 0.0000 4.0000 </r> + <r> -0.2836 0.0000 4.0000 </r> + <r> -0.2087 0.0000 4.0000 </r> + <r> -0.1337 0.0000 4.0000 </r> + <r> -0.0588 0.0115 4.0009 </r> + <r> 0.0161 13.3335 5.0000 </r> + <r> 0.0911 0.0000 5.0000 </r> + <r> 0.1660 0.0000 5.0000 </r> + <r> 0.2409 0.0000 5.0000 </r> + <r> 0.3159 0.0000 5.0000 </r> + <r> 0.3908 13.3041 5.9969 </r> + <r> 0.4657 0.6840 6.0513 </r> + <r> 0.5407 52.6961 10.0000 </r> + <r> 0.6156 0.0000 10.0000 </r> + <r> 0.6905 0.0000 10.0000 </r> + <r> 0.7655 0.0000 10.0000 </r> + <r> 0.8404 0.0000 10.0000 </r> + <r> 0.9153 0.0000 10.0000 </r> + <r> 0.9903 0.0000 10.0000 </r> + <r> 1.0652 0.0000 10.0000 </r> + <r> 1.1401 0.0000 10.0000 </r> + <r> 1.2151 0.0000 10.0000 </r> + <r> 1.2900 0.0000 10.0000 </r> + <r> 1.3649 0.0000 10.0000 </r> + <r> 1.4399 0.0000 10.0000 </r> + <r> 1.5148 0.0000 10.0000 </r> + </set> + </set> + </array> + </total> + </dos> + </calculation> + <structure name="finalpos" > + <crystal> + <varray name="basis" > + <v> 15.00000000 15.00300000 0.00000000 </v> + <v> 0.00000000 15.02000000 15.00000000 </v> + <v> 15.01000000 0.00000000 15.15034000 </v> + </varray> + <i name="volume"> 6791.29705200 </i> + <varray name="rec_basis" > + <v> 0.03350731 0.03315272 -0.03319693 </v> + <v> -0.03346939 0.03346269 0.03315936 </v> + <v> 0.03313726 -0.03313064 0.03317481 </v> + </varray> + </crystal> + <varray name="positions" > + <v> 0.50000062 0.50000096 0.50928890 </v> + </varray> + </structure> +</modeling> diff --git a/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/NPdAg/vasprun.xml b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/NPdAg/vasprun.xml new file mode 100644 index 0000000000000000000000000000000000000000..3aa5f07f65c873922cb389cab7ae2c0ed2025333 --- /dev/null +++ b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/NPdAg/vasprun.xml @@ -0,0 +1,10276 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<modeling> + <generator> + <i name="program" type="string">vasp </i> + <i name="version" type="string">5.4.4.18Apr17-6-g9f103f2a35 </i> + <i name="subversion" type="string">(build Jul 30 2020 14:31:59) complex parallel </i> + <i name="platform" type="string">LinuxIFC </i> + <i name="date" type="string">2022 10 17 </i> + <i name="time" type="string">14:36:16 </i> + </generator> + <incar> + <i type="int" name="ISTART"> 0</i> + <i type="string" name="PREC">accurate</i> + <i type="string" name="ALGO"> Fast</i> + <i type="int" name="ISPIN"> 2</i> + <i type="int" name="ICHARG"> 1</i> + <i type="int" name="IBRION"> 2</i> + <i name="EDIFF"> 0.00000100</i> + <i name="EDIFFG"> -0.02000000</i> + <i type="int" name="NSW"> 60</i> + <i type="int" name="ISIF"> 2</i> + <i name="ENCUT"> 400.00000000</i> + <i name="POTIM"> 0.10000000</i> + <i type="string" name="LREAL"> AUTO</i> + <i type="int" name="ISMEAR"> 1</i> + <i name="SIGMA"> 0.10000000</i> + <i type="logical" name="LWAVE"> F </i> + <i type="logical" name="LCHARG"> T </i> + <i type="logical" name="LASPH"> T </i> + <v type="int" name="KPOINT_BSE"> -1 0 0 0</v> + <i type="string" name="GGA"> RP</i> + <i type="logical" name="LDIPOL"> T </i> + <i type="int" name="IDIPOL"> 3</i> + <v name="DIPOL"> 0.50000000 0.50000000 0.50000000</v> + <i type="logical" name="LASPH"> T </i> + </incar> + <structure name="primitive_cell" > + <crystal> + <varray name="basis" > + <v> 8.93075865 0.00000000 0.00000000 </v> + <v> 4.46537932 7.73426386 0.00000000 </v> + <v> 0.00000000 0.00000000 24.72257853 </v> + </varray> + <i name="volume"> 1707.65880700 </i> + <varray name="rec_basis" > + <v> 0.11197257 -0.06464739 0.00000000 </v> + <v> 0.00000000 0.12929479 0.00000000 </v> + <v> 0.00000000 0.00000000 0.04044886 </v> + </varray> + </crystal> + <varray name="positions" > + <v> -0.11111111 0.22222222 0.30336641 </v> + <v> -0.44444444 0.22222222 0.30336641 </v> + <v> -0.44444444 -0.44444444 0.30336641 </v> + <v> 0.00000000 0.00000000 0.40168321 </v> + <v> -0.33333333 0.33333333 0.40168321 </v> + <v> -0.11111111 -0.44444444 0.30336641 </v> + <v> -0.11111111 -0.11111111 0.30336641 </v> + <v> 0.22222222 -0.11111111 0.30336641 </v> + <v> 0.22222222 0.22222222 0.30336641 </v> + <v> 0.00000000 0.33333333 0.40168321 </v> + <v> -0.33333333 -0.33333333 0.40168321 </v> + <v> -0.33333333 0.00000000 0.40168321 </v> + <v> 0.33333333 0.00000000 0.40168321 </v> + <v> 0.33333333 0.33333333 0.40168321 </v> + <v> 0.33333333 -0.33333333 0.40168321 </v> + <v> 0.22222222 -0.44444444 0.30336641 </v> + <v> -0.44444444 -0.11111111 0.30336641 </v> + <v> 0.00000000 -0.33333333 0.40168321 </v> + <v> -0.22209562 0.44419123 -0.49961525 </v> + <v> 0.11075049 0.11075049 -0.49943196 </v> + <v> -0.22150099 0.11075049 -0.49943196 </v> + <v> 0.11086166 0.44456917 0.49981223 </v> + <v> 0.44456917 0.44456917 0.49981223 </v> + <v> 0.11075049 -0.22150099 -0.49943196 </v> + <v> 0.44456917 0.11086166 0.49981223 </v> + <v> -0.22209562 -0.22209562 -0.49961525 </v> + <v> 0.44419123 -0.22209562 -0.49961525 </v> + <v> -0.11139329 0.22278658 -0.40076530 </v> + <v> -0.44597862 0.22298931 -0.40206700 </v> + <v> 0.22298931 0.22298931 -0.40206700 </v> + <v> -0.11094396 -0.44452802 -0.40149350 </v> + <v> -0.44452802 -0.44452802 -0.40149350 </v> + <v> 0.22278658 -0.11139329 -0.40076530 </v> + <v> -0.11139329 -0.11139329 -0.40076530 </v> + <v> 0.22298931 -0.44597862 -0.40206700 </v> + <v> -0.44452802 -0.11094396 -0.40149350 </v> + <v> 0.00000000 0.00000000 -0.30264136 </v> + <v> -0.33411606 0.33303373 -0.30253177 </v> + <v> 0.00108233 0.33303373 -0.30253177 </v> + <v> -0.33333333 -0.33333333 -0.30358673 </v> + <v> -0.33411606 0.00108233 -0.30253177 </v> + <v> 0.33303373 0.00108233 -0.30253177 </v> + <v> 0.33333333 0.33333333 -0.30541347 </v> + <v> 0.33303373 -0.33411606 -0.30253177 </v> + <v> 0.00108233 -0.33411606 -0.30253177 </v> + <v> 0.33333333 0.33333333 -0.23365063 </v> + </varray> + </structure> + <varray name="primitive_index" > + <v type="int" > 1 </v> + <v type="int" > 3 </v> + <v type="int" > 6 </v> + <v type="int" > 10 </v> + <v type="int" > 15 </v> + <v type="int" > 4 </v> + <v type="int" > 7 </v> + <v type="int" > 8 </v> + <v type="int" > 2 </v> + <v type="int" > 13 </v> + <v type="int" > 18 </v> + <v type="int" > 12 </v> + <v type="int" > 11 </v> + <v type="int" > 14 </v> + <v type="int" > 17 </v> + <v type="int" > 5 </v> + <v type="int" > 9 </v> + <v type="int" > 16 </v> + <v type="int" > 24 </v> + <v type="int" > 19 </v> + <v type="int" > 21 </v> + <v type="int" > 22 </v> + <v type="int" > 23 </v> + <v type="int" > 25 </v> + <v type="int" > 20 </v> + <v type="int" > 27 </v> + <v type="int" > 26 </v> + <v type="int" > 28 </v> + <v type="int" > 30 </v> + <v type="int" > 29 </v> + <v type="int" > 31 </v> + <v type="int" > 33 </v> + <v type="int" > 35 </v> + <v type="int" > 34 </v> + <v type="int" > 32 </v> + <v type="int" > 36 </v> + <v type="int" > 37 </v> + <v type="int" > 41 </v> + <v type="int" > 40 </v> + <v type="int" > 44 </v> + <v type="int" > 39 </v> + <v type="int" > 38 </v> + <v type="int" > 45 </v> + <v type="int" > 43 </v> + <v type="int" > 42 </v> + <v type="int" > 46 </v> + </varray> + <kpoints> + <generation param="Monkhorst-Pack"> + <v type="int" name="divisions"> 3 3 1 </v> + <v name="usershift"> 0.00000000 0.00000000 0.00000000 </v> + <v name="genvec1"> 0.33333333 -0.00000000 0.00000000 </v> + <v name="genvec2"> 0.00000000 0.33333333 0.00000000 </v> + <v name="genvec3"> 0.00000000 0.00000000 1.00000000 </v> + <v name="shift"> 0.00000000 0.00000000 0.00000000 </v> + </generation> + <varray name="kpointlist" > + <v> 0.00000000 0.00000000 0.00000000 </v> + <v> 0.33333333 0.00000000 0.00000000 </v> + <v> -0.33333333 0.33333333 0.00000000 </v> + </varray> + <varray name="weights" > + <v> 0.11111111 </v> + <v> 0.66666667 </v> + <v> 0.22222222 </v> + </varray> + </kpoints> + <parameters> + <separator name="general" > + <i type="string" name="SYSTEM">unknown system</i> + <i type="logical" name="LCOMPAT"> F </i> + </separator> + <separator name="electronic" > + <i type="string" name="PREC">accura</i> + <i name="ENMAX"> 400.00000000</i> + <i name="ENAUG"> 627.11200000</i> + <i name="EDIFF"> 0.00000100</i> + <i type="int" name="IALGO"> 68</i> + <i type="int" name="IWAVPR"> 11</i> + <i type="int" name="NBANDS"> 325</i> + <i name="NELECT"> 499.00000000</i> + <i type="int" name="TURBO"> 0</i> + <i type="int" name="IRESTART"> 0</i> + <i type="int" name="NREBOOT"> 0</i> + <i type="int" name="NMIN"> 0</i> + <i name="EREF"> 0.00000000</i> + <separator name="electronic smearing" > + <i type="int" name="ISMEAR"> 1</i> + <i name="SIGMA"> 0.10000000</i> + <i name="KSPACING"> 0.50000000</i> + <i type="logical" name="KGAMMA"> T </i> + </separator> + <separator name="electronic projectors" > + <i type="logical" name="LREAL"> T </i> + <v name="ROPT"> -0.00025000 -0.00025000 -0.00025000</v> + <i type="int" name="LMAXPAW"> -100</i> + <i type="int" name="LMAXMIX"> 2</i> + <i type="logical" name="NLSPLINE"> F </i> + </separator> + <separator name="electronic startup" > + <i type="int" name="ISTART"> 0</i> + <i type="int" name="ICHARG"> 1</i> + <i type="int" name="INIWAV"> 1</i> + </separator> + <separator name="electronic spin" > + <i type="int" name="ISPIN"> 2</i> + <i type="logical" name="LNONCOLLINEAR"> F </i> + <v name="MAGMOM"> 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 + 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 + 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000</v> + <i name="NUPDOWN"> -1.00000000</i> + <i type="logical" name="LSORBIT"> F </i> + <v name="SAXIS"> 0.00000000 0.00000000 1.00000000</v> + <i type="logical" name="LSPIRAL"> F </i> + <v name="QSPIRAL"> 0.00000000 0.00000000 0.00000000</v> + <i type="logical" name="LZEROZ"> F </i> + </separator> + <separator name="electronic exchange-correlation" > + <i type="logical" name="LASPH"> T </i> + <i type="logical" name="LMETAGGA"> F </i> + </separator> + <separator name="electronic convergence" > + <i type="int" name="NELM"> 60</i> + <i type="int" name="NELMDL"> -5</i> + <i type="int" name="NELMIN"> 2</i> + <i name="ENINI"> 400.00000000</i> + <separator name="electronic convergence detail" > + <i type="logical" name="LDIAG"> T </i> + <i type="logical" name="LSUBROT"> F </i> + <i name="WEIMIN"> 0.00100000</i> + <i name="EBREAK"> 0.00000000</i> + <i name="DEPER"> 0.30000000</i> + <i type="int" name="NRMM"> 4</i> + <i name="TIME"> 0.40000000</i> + </separator> + </separator> + <separator name="electronic mixer" > + <i name="AMIX"> 0.40000000</i> + <i name="BMIX"> 1.00000000</i> + <i name="AMIN"> 0.10000000</i> + <i name="AMIX_MAG"> 1.60000000</i> + <i name="BMIX_MAG"> 1.00000000</i> + <separator name="electronic mixer details" > + <i type="int" name="IMIX"> 4</i> + <i type="logical" name="MIXFIRST"> F </i> + <i type="int" name="MAXMIX"> -45</i> + <i name="WC"> 100.00000000</i> + <i type="int" name="INIMIX"> 1</i> + <i type="int" name="MIXPRE"> 1</i> + <i type="int" name="MREMOVE"> 5</i> + </separator> + </separator> + <separator name="electronic dipolcorrection" > + <i type="logical" name="LDIPOL"> T </i> + <i type="logical" name="LMONO"> F </i> + <i type="int" name="IDIPOL"> 3</i> + <i name="EPSILON"> 1.00000000</i> + <v name="DIPOL"> 0.50000000 0.50000000 0.50000000</v> + <i name="EFIELD"> 0.00000000</i> + </separator> + </separator> + <separator name="grids" > + <i type="int" name="NGX"> 60</i> + <i type="int" name="NGY"> 60</i> + <i type="int" name="NGZ"> 162</i> + <i type="int" name="NGXF"> 120</i> + <i type="int" name="NGYF"> 120</i> + <i type="int" name="NGZF"> 324</i> + <i type="logical" name="ADDGRID"> F </i> + </separator> + <separator name="ionic" > + <i type="int" name="NSW"> 60</i> + <i type="int" name="IBRION"> 2</i> + <i type="int" name="MDALGO"> 0</i> + <i type="int" name="ISIF"> 2</i> + <i name="PSTRESS"> 0.00000000</i> + <i name="EDIFFG"> -0.02000000</i> + <i type="int" name="NFREE"> 1</i> + <i name="POTIM"> 0.10000000</i> + <i name="SMASS"> -3.00000000</i> + <i name="SCALEE"> 1.00000000</i> + </separator> + <separator name="ionic md" > + <i name="TEBEG"> 0.00010000</i> + <i name="TEEND"> 0.00010000</i> + <i type="int" name="NBLOCK"> 1</i> + <i type="int" name="KBLOCK"> 60</i> + <i type="int" name="NPACO"> 256</i> + <i name="APACO"> 16.00000000</i> + </separator> + <separator name="symmetry" > + <i type="int" name="ISYM"> 2</i> + <i name="SYMPREC"> 0.00001000</i> + </separator> + <separator name="dos" > + <i type="int" name="LORBIT"> 0</i> + <v name="RWIGS"> -1.00000000 -1.00000000 -1.00000000</v> + <i type="int" name="NEDOS"> 301</i> + <i name="EMIN"> 10.00000000</i> + <i name="EMAX"> -10.00000000</i> + <i name="EFERMI"> 0.00000000</i> + </separator> + <separator name="writing" > + <i type="int" name="NWRITE"> 2</i> + <i type="logical" name="LWAVE"> F </i> + <i type="logical" name="LDOWNSAMPLE"> F </i> + <i type="logical" name="LCHARG"> T </i> + <i type="logical" name="LPARD"> F </i> + <i type="logical" name="LVTOT"> F </i> + <i type="logical" name="LVHAR"> F </i> + <i type="logical" name="LELF"> F </i> + <i type="logical" name="LOPTICS"> F </i> + <v name="STM"> 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000</v> + </separator> + <separator name="performance" > + <i type="int" name="NPAR"> 5</i> + <i type="int" name="NSIM"> 4</i> + <i type="int" name="NBLK"> -1</i> + <i type="logical" name="LPLANE"> T </i> + <i type="logical" name="LSCALAPACK"> T </i> + <i type="logical" name="LSCAAWARE"> F </i> + <i type="logical" name="LSCALU"> F </i> + <i type="logical" name="LASYNC"> F </i> + <i type="logical" name="LORBITALREAL"> F </i> + </separator> + <separator name="miscellaneous" > + <i type="int" name="IDIOT"> 3</i> + <i type="int" name="ISPECIAL"> 0</i> + <i type="logical" name="LMUSIC"> F </i> + <v name="POMASS"> 107.86800000 106.42000000 14.00100000</v> + <v name="DARWINR"> 0.00000000 0.00000000 0.00000000</v> + <v name="DARWINV"> 1.00000000 1.00000000 1.00000000</v> + <i type="logical" name="LCORR"> T </i> + </separator> + <i type="logical" name="GGA_COMPAT"> T </i> + <i type="logical" name="LBERRY"> F </i> + <i type="int" name="ICORELEVEL"> 0</i> + <i type="logical" name="LDAU"> F </i> + <i type="int" name="I_CONSTRAINED_M"> 0</i> + <separator name="electronic exchange-correlation" > + <i type="string" name="GGA">RP</i> + <i type="int" name="VOSKOWN"> 0</i> + <i type="logical" name="LHFCALC"> F </i> + <i type="string" name="PRECFOCK"></i> + <i type="logical" name="LSYMGRAD"> F </i> + <i type="logical" name="LHFONE"> F </i> + <i type="logical" name="LRHFCALC"> F </i> + <i type="logical" name="LTHOMAS"> F </i> + <i type="logical" name="LMODELHF"> F </i> + <i name="ENCUT4O"> -1.00000000</i> + <i type="int" name="EXXOEP"> 0</i> + <i type="int" name="FOURORBIT"> 0</i> + <i name="AEXX"> 0.00000000</i> + <i name="HFALPHA"> 0.00000000</i> + <i name="MCALPHA"> 0.00000000</i> + <i name="ALDAX"> 1.00000000</i> + <i name="AGGAX"> 1.00000000</i> + <i name="ALDAC"> 1.00000000</i> + <i name="AGGAC"> 1.00000000</i> + <i type="int" name="NKREDX"> 1</i> + <i type="int" name="NKREDY"> 1</i> + <i type="int" name="NKREDZ"> 1</i> + <i type="logical" name="SHIFTRED"> F </i> + <i type="logical" name="ODDONLY"> F </i> + <i type="logical" name="EVENONLY"> F </i> + <i type="int" name="LMAXFOCK"> 0</i> + <i type="int" name="NMAXFOCKAE"> 0</i> + <i type="logical" name="LFOCKAEDFT"> F </i> + <i name="HFSCREEN"> 0.00000000</i> + <i name="HFSCREENC"> 0.00000000</i> + <i type="int" name="NBANDSGWLOW"> 0</i> + </separator> + <separator name="vdW DFT" > + <i type="logical" name="LUSE_VDW"> F </i> + <i name="Zab_VDW"> -0.84910000</i> + <i name="PARAM1"> 0.12340000</i> + <i name="PARAM2"> 1.00000000</i> + <i name="PARAM3"> 0.00000000</i> + </separator> + <separator name="model GW" > + <i type="int" name="MODEL_GW"> 0</i> + <i name="MODEL_EPS0"> 22.27381053</i> + <i name="MODEL_ALPHA"> 1.00000000</i> + </separator> + <separator name="linear response parameters" > + <i type="logical" name="LEPSILON"> F </i> + <i type="logical" name="LRPA"> F </i> + <i type="logical" name="LNABLA"> F </i> + <i type="logical" name="LVEL"> F </i> + <i type="int" name="KINTER"> 0</i> + <i name="CSHIFT"> 0.10000000</i> + <i name="OMEGAMAX"> -1.00000000</i> + <i name="DEG_THRESHOLD"> 0.00200000</i> + <i name="RTIME"> -0.10000000</i> + <i name="WPLASMAI"> 0.00000000</i> + <v name="DFIELD"> 0.00000000 0.00000000 0.00000000</v> + <v name="WPLASMA"> 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000</v> + </separator> + <separator name="orbital magnetization" > + <i type="logical" name="NUCIND"> F </i> + <v name="MAGPOS"> 0.00000000 0.00000000 0.00000000</v> + <i type="logical" name="LNICSALL"> T </i> + <i type="logical" name="ORBITALMAG"> F </i> + <i type="logical" name="LMAGBLOCH"> F </i> + <i type="logical" name="LCHIMAG"> F </i> + <i type="logical" name="LGAUGE"> T </i> + <i type="int" name="MAGATOM"> 0</i> + <v name="MAGDIPOL"> 0.00000000 0.00000000 0.00000000</v> + <v name="AVECCONST"> 0.00000000 0.00000000 0.00000000</v> + </separator> + <separator name="response functions" > + <i type="logical" name="LADDER"> F </i> + <i type="logical" name="LRPAFORCE"> F </i> + <i type="logical" name="LFXC"> F </i> + <i type="logical" name="LHARTREE"> T </i> + <i type="int" name="IBSE"> 0</i> + <v type="int" name="KPOINT"> -1 0 0 0</v> + <i type="logical" name="LTCTE"> F </i> + <i type="logical" name="LTETE"> F </i> + <i type="logical" name="LTRIPLET"> F </i> + <i type="logical" name="LFXCEPS"> F </i> + <i type="logical" name="LFXHEG"> F </i> + <i type="int" name="NATURALO"> 2</i> + <i type="logical" name="L2ORDER"> F </i> + <i type="logical" name="LMP2LT"> F </i> + <i type="logical" name="LUSEW"> F </i> + <i name="ENCUTGW"> -2.00000000</i> + <i name="ENCUTGWSOFT"> -2.00000000</i> + <i name="ENCUTLF"> -1.00000000</i> + <i type="int" name="LMAXMP2"> -1</i> + <i name="SCISSOR"> 0.00000000</i> + <i type="int" name="NOMEGA"> 0</i> + <i type="int" name="NOMEGAR"> 0</i> + <i type="int" name="NBANDSGW"> -1</i> + <i type="int" name="NBANDSO"> -1</i> + <i type="int" name="NBANDSV"> -1</i> + <i type="int" name="NELM"> 1</i> + <i type="int" name="NELMHF"> 1</i> + <i type="int" name="DIM"> 3</i> + <i type="int" name="ANTIRES"> 0</i> + <i name="OMEGAMAX"> -30.00000000</i> + <i name="OMEGAMIN"> -30.00000000</i> + <i name="OMEGATL"> -200.00000000</i> + <i type="int" name="OMEGAGRID"> 140</i> + <i name="CSHIFT"> -0.10000000</i> + <i type="logical" name="SELFENERGY"> F </i> + <i type="logical" name="LSPECTRAL"> F </i> + <i type="logical" name="LSPECTRALGW"> F </i> + <i type="logical" name="LSINGLES"> F </i> + <i type="logical" name="LFERMIGW"> F </i> + <i type="logical" name="ODDONLYGW"> F </i> + <i type="logical" name="EVENONLYGW"> F </i> + <i type="int" name="NKREDLFX"> 1</i> + <i type="int" name="NKREDLFY"> 1</i> + <i type="int" name="NKREDLFZ"> 1</i> + <i type="int" name="MAXMEM"> 2800</i> + <i type="int" name="TELESCOPE"> 0</i> + <i type="int" name="TAUPAR"> 1</i> + <i type="int" name="OMEGAPAR"> -1</i> + <i name="LAMBDA"> 1.00000000</i> + </separator> + <separator name="External order field" > + <i name="OFIELD_KAPPA"> 0.00000000</i> + <v name="OFIELD_K"> 0.00000000 0.00000000 0.00000000</v> + <i name="OFIELD_Q6_NEAR"> 0.00000000</i> + <i name="OFIELD_Q6_FAR"> 0.00000000</i> + <i name="OFIELD_A"> 0.00000000</i> + </separator> + </parameters> + <atominfo> + <atoms> 46 </atoms> + <types> 3 </types> + <array name="atoms" > + <dimension dim="1">ion</dimension> + <field type="string">element</field> + <field type="int">atomtype</field> + <set> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Pd</c><c> 2</c></rc> + <rc><c>N </c><c> 3</c></rc> + </set> + </array> + <array name="atomtypes" > + <dimension dim="1">type</dimension> + <field type="int">atomspertype</field> + <field type="string">element</field> + <field>mass</field> + <field>valence</field> + <field type="string">pseudopotential</field> + <set> + <rc><c> 44</c><c>Ag</c><c> 107.86800000</c><c> 11.00000000</c><c> PAW_PBE Ag 02Apr2005 </c></rc> + <rc><c> 1</c><c>Pd</c><c> 106.42000000</c><c> 10.00000000</c><c> PAW_PBE Pd 04Jan2005 </c></rc> + <rc><c> 1</c><c>N </c><c> 14.00100000</c><c> 5.00000000</c><c> PAW_PBE N 08Apr2002 </c></rc> + </set> + </array> + </atominfo> + <structure name="initialpos" > + <crystal> + <varray name="basis" > + <v> 8.93075865 0.00000000 0.00000000 </v> + <v> 4.46537932 7.73426386 0.00000000 </v> + <v> 0.00000000 0.00000000 24.72257853 </v> + </varray> + <i name="volume"> 1707.65880700 </i> + <varray name="rec_basis" > + <v> 0.11197257 -0.06464739 0.00000000 </v> + <v> 0.00000000 0.12929479 0.00000000 </v> + <v> 0.00000000 0.00000000 0.04044886 </v> + </varray> + </crystal> + <varray name="positions" > + <v> 0.88888889 0.22222222 0.30336641 </v> + <v> 0.22222222 0.22222222 0.30336641 </v> + <v> 0.55555556 0.22222222 0.30336641 </v> + <v> 0.88888889 0.55555556 0.30336641 </v> + <v> 0.22222222 0.55555556 0.30336641 </v> + <v> 0.55555556 0.55555556 0.30336641 </v> + <v> 0.88888889 0.88888889 0.30336641 </v> + <v> 0.22222222 0.88888889 0.30336641 </v> + <v> 0.55555556 0.88888889 0.30336641 </v> + <v> 0.00000000 0.00000000 0.40168321 </v> + <v> 0.33333333 0.00000000 0.40168321 </v> + <v> 0.66666667 0.00000000 0.40168321 </v> + <v> 0.00000000 0.33333333 0.40168321 </v> + <v> 0.33333333 0.33333333 0.40168321 </v> + <v> 0.66666667 0.33333333 0.40168321 </v> + <v> 0.00000000 0.66666667 0.40168321 </v> + <v> 0.33333333 0.66666667 0.40168321 </v> + <v> 0.66666667 0.66666667 0.40168321 </v> + <v> 0.11075049 0.11075049 0.50056804 </v> + <v> 0.44456917 0.11086166 0.49981223 </v> + <v> 0.77849901 0.11075049 0.50056804 </v> + <v> 0.11086166 0.44456917 0.49981223 </v> + <v> 0.44456917 0.44456917 0.49981223 </v> + <v> 0.77790438 0.44419123 0.50038475 </v> + <v> 0.11075049 0.77849901 0.50056804 </v> + <v> 0.44419123 0.77790438 0.50038475 </v> + <v> 0.77790438 0.77790438 0.50038475 </v> + <v> 0.88860671 0.22278658 0.59923470 </v> + <v> 0.22298931 0.22298931 0.59793300 </v> + <v> 0.55402138 0.22298931 0.59793300 </v> + <v> 0.88905604 0.55547198 0.59850650 </v> + <v> 0.22298931 0.55402138 0.59793300 </v> + <v> 0.55547198 0.55547198 0.59850650 </v> + <v> 0.88860671 0.88860671 0.59923470 </v> + <v> 0.22278658 0.88860671 0.59923470 </v> + <v> 0.55547198 0.88905604 0.59850650 </v> + <v> 0.00000000 0.00000000 0.69735864 </v> + <v> 0.33303373 0.00108233 0.69746823 </v> + <v> 0.66588394 0.00108233 0.69746823 </v> + <v> 0.00108233 0.33303373 0.69746823 </v> + <v> 0.66588394 0.33303373 0.69746823 </v> + <v> 0.00108233 0.66588394 0.69746823 </v> + <v> 0.33303373 0.66588394 0.69746823 </v> + <v> 0.66666667 0.66666667 0.69641327 </v> + <v> 0.33333333 0.33333333 0.69458653 </v> + <v> 0.33333333 0.33333333 0.76634937 </v> + </varray> + <varray name="selective" type="logical" > + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + </varray> + <nose> + <v> -3.00000000 0.00000000 0.00010000 0.00010000 </v> + </nose> + </structure> + <calculation> + <scstep> + <time name="dav"> 4.79 4.80</time> + <time name="total"> 5.30 5.32</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.47492420 </v> + <i name="Tr[quadrupol]"> -6472.94198890 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.00633291 </i> + <i name="ewald"> 133529.80051456 </i> + <i name="hartreedc">-181526.49657434 </i> + <i name="XCdc"> -526.08678450 </i> + <i name="pawpsdc"> 49369.97515157 </i> + <i name="pawaedc"> -47324.76811576 </i> + <i name="eentropy"> 0.01203946 </i> + <i name="bandstr"> 1558.23081192 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> 2787.14493075 </i> + <i name="e_wo_entrp"> 2787.13289129 </i> + <i name="e_0_energy"> 2787.14091760 </i> + </energy> + </scstep> + <scstep> + <time name="dav"> 5.31 5.33</time> + <time name="total"> 5.31 5.33</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.47492420 </v> + <i name="Tr[quadrupol]"> -6472.94198890 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -0.97694780 </i> + <i name="e_wo_entrp"> -0.97830084 </i> + <i name="e_0_energy"> -0.97739882 </i> + </energy> + </scstep> + <scstep> + <time name="dav"> 5.27 5.28</time> + <time name="total"> 5.27 5.29</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.47492420 </v> + <i name="Tr[quadrupol]"> -6472.94198890 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -94.13873247 </i> + <i name="e_wo_entrp"> -94.12138289 </i> + <i name="e_0_energy"> -94.13294927 </i> + </energy> + </scstep> + <scstep> + <time name="dav"> 5.06 5.09</time> + <time name="total"> 5.06 5.09</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.47492420 </v> + <i name="Tr[quadrupol]"> -6472.94198890 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -95.52689048 </i> + <i name="e_wo_entrp"> -95.51388322 </i> + <i name="e_0_energy"> -95.52255472 </i> + </energy> + </scstep> + <scstep> + <time name="dav"> 5.32 5.33</time> + <time name="total"> 5.63 5.65</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.47492420 </v> + <i name="Tr[quadrupol]"> -6472.94198890 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -95.56917327 </i> + <i name="e_wo_entrp"> -95.55623096 </i> + <i name="e_0_energy"> -95.56485917 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.52 2.52</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.34 4.35</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 -0.70867885 </v> + <i name="Tr[quadrupol]"> -6473.72277842 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -84.66659640 </i> + <i name="e_wo_entrp"> -84.65264703 </i> + <i name="e_0_energy"> -84.66194661 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.83 0.83</time> + <time name="diis"> 2.58 2.59</time> + <time name="orth"> 0.17 0.17</time> + <time name="total"> 4.45 4.47</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 2.36740577 </v> + <i name="Tr[quadrupol]"> -6471.90375276 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -111.17454878 </i> + <i name="e_wo_entrp"> -111.15404244 </i> + <i name="e_0_energy"> -111.16771333 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.87 0.87</time> + <time name="diis"> 2.57 2.58</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.45 4.46</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.04337734 </v> + <i name="Tr[quadrupol]"> -6474.32524603 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -75.47983382 </i> + <i name="e_wo_entrp"> -75.48435302 </i> + <i name="e_0_energy"> -75.48134022 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.83 0.83</time> + <time name="diis"> 2.52 2.52</time> + <time name="orth"> 0.17 0.17</time> + <time name="total"> 4.39 4.41</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.28601808 </v> + <i name="Tr[quadrupol]"> -6476.32939926 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -76.61661037 </i> + <i name="e_wo_entrp"> -76.60138559 </i> + <i name="e_0_energy"> -76.61153544 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.88 0.88</time> + <time name="diis"> 2.56 2.56</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.50 4.52</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 -0.01741175 </v> + <i name="Tr[quadrupol]"> -6475.70503185 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -77.28731396 </i> + <i name="e_wo_entrp"> -77.27732632 </i> + <i name="e_0_energy"> -77.28398475 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 2.47 2.48</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.38 4.39</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.36041870 </v> + <i name="Tr[quadrupol]"> -6476.32824485 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -79.27776867 </i> + <i name="e_wo_entrp"> -79.27307008 </i> + <i name="e_0_energy"> -79.27620247 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.83 0.83</time> + <time name="diis"> 2.51 2.52</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.33 4.34</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.15722392 </v> + <i name="Tr[quadrupol]"> -6478.31175291 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -85.43951528 </i> + <i name="e_wo_entrp"> -85.43468851 </i> + <i name="e_0_energy"> -85.43790636 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.83 0.84</time> + <time name="diis"> 2.53 2.53</time> + <time name="orth"> 0.15 0.15</time> + <time name="total"> 4.34 4.36</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.34060057 </v> + <i name="Tr[quadrupol]"> -6480.35034754 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -93.49195179 </i> + <i name="e_wo_entrp"> -93.50231281 </i> + <i name="e_0_energy"> -93.49540546 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.83 0.84</time> + <time name="diis"> 2.53 2.54</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.35 4.36</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.28608170 </v> + <i name="Tr[quadrupol]"> -6480.60794407 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -95.79063912 </i> + <i name="e_wo_entrp"> -95.77098701 </i> + <i name="e_0_energy"> -95.78408842 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.51 2.51</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.32 4.34</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.27765501 </v> + <i name="Tr[quadrupol]"> -6479.94734518 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -97.27870156 </i> + <i name="e_wo_entrp"> -97.26464548 </i> + <i name="e_0_energy"> -97.27401620 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.83 0.83</time> + <time name="diis"> 2.61 2.62</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.48 4.50</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.26739663 </v> + <i name="Tr[quadrupol]"> -6479.07722470 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -98.69721196 </i> + <i name="e_wo_entrp"> -98.68833212 </i> + <i name="e_0_energy"> -98.69425202 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.87 0.87</time> + <time name="diis"> 2.62 2.63</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.51 4.52</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.26806154 </v> + <i name="Tr[quadrupol]"> -6478.36006796 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -99.61815007 </i> + <i name="e_wo_entrp"> -99.61569165 </i> + <i name="e_0_energy"> -99.61733059 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.50 2.51</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.34 4.35</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.22478979 </v> + <i name="Tr[quadrupol]"> -6477.15731139 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -100.28254307 </i> + <i name="e_wo_entrp"> -100.28347717 </i> + <i name="e_0_energy"> -100.28285444 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.88 0.88</time> + <time name="diis"> 2.57 2.58</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.53 4.54</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.23656777 </v> + <i name="Tr[quadrupol]"> -6476.93364742 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -100.63467472 </i> + <i name="e_wo_entrp"> -100.63710050 </i> + <i name="e_0_energy"> -100.63548331 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.90 0.90</time> + <time name="diis"> 2.49 2.50</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.39 4.41</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.22894931 </v> + <i name="Tr[quadrupol]"> -6476.19488513 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -100.79603087 </i> + <i name="e_wo_entrp"> -100.79578243 </i> + <i name="e_0_energy"> -100.79594806 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.48 2.49</time> + <time name="orth"> 0.15 0.15</time> + <time name="total"> 4.30 4.31</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.22940257 </v> + <i name="Tr[quadrupol]"> -6475.41304215 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -100.96381497 </i> + <i name="e_wo_entrp"> -100.95899185 </i> + <i name="e_0_energy"> -100.96220727 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.50 2.51</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.32 4.33</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.22590301 </v> + <i name="Tr[quadrupol]"> -6475.01368351 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.07309822 </i> + <i name="e_wo_entrp"> -101.06702145 </i> + <i name="e_0_energy"> -101.07107263 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.49 2.50</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.31 4.32</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.22166181 </v> + <i name="Tr[quadrupol]"> -6474.37423439 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.22781514 </i> + <i name="e_wo_entrp"> -101.21868164 </i> + <i name="e_0_energy"> -101.22477064 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.49 2.49</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.31 4.32</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.22212045 </v> + <i name="Tr[quadrupol]"> -6474.00974579 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.41461239 </i> + <i name="e_wo_entrp"> -101.40386996 </i> + <i name="e_0_energy"> -101.41103158 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.54 2.55</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.39 4.40</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21833398 </v> + <i name="Tr[quadrupol]"> -6473.66097075 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.60888060 </i> + <i name="e_wo_entrp"> -101.59716034 </i> + <i name="e_0_energy"> -101.60497385 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.88 0.89</time> + <time name="diis"> 2.62 2.62</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.56 4.57</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21525520 </v> + <i name="Tr[quadrupol]"> -6473.41537719 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.69741517 </i> + <i name="e_wo_entrp"> -101.68513887 </i> + <i name="e_0_energy"> -101.69332307 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.49 2.50</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.31 4.33</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21151174 </v> + <i name="Tr[quadrupol]"> -6473.27288478 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.70977177 </i> + <i name="e_wo_entrp"> -101.69728841 </i> + <i name="e_0_energy"> -101.70561065 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.88 0.88</time> + <time name="diis"> 2.58 2.58</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.45 4.46</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20864346 </v> + <i name="Tr[quadrupol]"> -6473.21995982 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.71475210 </i> + <i name="e_wo_entrp"> -101.70240743 </i> + <i name="e_0_energy"> -101.71063721 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 2.47 2.48</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.35 4.37</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20630325 </v> + <i name="Tr[quadrupol]"> -6473.16221749 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.71542167 </i> + <i name="e_wo_entrp"> -101.70305240 </i> + <i name="e_0_energy"> -101.71129858 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.83 0.84</time> + <time name="diis"> 2.28 2.28</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.09 4.11</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20438740 </v> + <i name="Tr[quadrupol]"> -6473.12599507 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.71555342 </i> + <i name="e_wo_entrp"> -101.70317667 </i> + <i name="e_0_energy"> -101.71142784 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.25 2.26</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.07 4.08</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20255024 </v> + <i name="Tr[quadrupol]"> -6473.09886616 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.71561389 </i> + <i name="e_wo_entrp"> -101.70326398 </i> + <i name="e_0_energy"> -101.71149725 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.21 2.21</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.03 4.04</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20140952 </v> + <i name="Tr[quadrupol]"> -6473.07772238 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.71567885 </i> + <i name="e_wo_entrp"> -101.70328296 </i> + <i name="e_0_energy"> -101.71154689 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.05 2.05</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.86 3.88</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20069231 </v> + <i name="Tr[quadrupol]"> -6473.06915859 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.71569370 </i> + <i name="e_wo_entrp"> -101.70331345 </i> + <i name="e_0_energy"> -101.71156695 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.88 1.88</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.70 3.71</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20022088 </v> + <i name="Tr[quadrupol]"> -6473.06129848 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.71577289 </i> + <i name="e_wo_entrp"> -101.70340238 </i> + <i name="e_0_energy"> -101.71164939 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.88 0.88</time> + <time name="diis"> 1.90 1.91</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.78 3.80</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.19992842 </v> + <i name="Tr[quadrupol]"> -6473.05510222 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.71586089 </i> + <i name="e_wo_entrp"> -101.70349768 </i> + <i name="e_0_energy"> -101.71173982 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.88 0.88</time> + <time name="diis"> 1.77 1.77</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.66 3.67</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.19983871 </v> + <i name="Tr[quadrupol]"> -6473.05183356 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.71589985 </i> + <i name="e_wo_entrp"> -101.70354404 </i> + <i name="e_0_energy"> -101.71178125 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.62 1.62</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.44 3.45</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.19992759 </v> + <i name="Tr[quadrupol]"> -6473.04941925 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.71593247 </i> + <i name="e_wo_entrp"> -101.70357107 </i> + <i name="e_0_energy"> -101.71181201 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.87 0.87</time> + <time name="diis"> 1.59 1.60</time> + <time name="orth"> 0.17 0.17</time> + <time name="total"> 3.48 3.49</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20005278 </v> + <i name="Tr[quadrupol]"> -6473.04902147 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.71594852 </i> + <i name="e_wo_entrp"> -101.70358885 </i> + <i name="e_0_energy"> -101.71182863 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 1.60 1.60</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.49 3.50</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20019003 </v> + <i name="Tr[quadrupol]"> -6473.04987885 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.71595761 </i> + <i name="e_wo_entrp"> -101.70360298 </i> + <i name="e_0_energy"> -101.71183940 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.86 0.86</time> + <time name="diis"> 1.41 1.41</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.27 3.28</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20026268 </v> + <i name="Tr[quadrupol]"> -6473.04978961 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.71596002 </i> + <i name="e_wo_entrp"> -101.70360389 </i> + <i name="e_0_energy"> -101.71184131 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.83 0.83</time> + <time name="diis"> 1.19 1.19</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 2.70 2.71</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20030274 </v> + <i name="Tr[quadrupol]"> -6473.05010816 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.89704482 </i> + <i name="ewald"> 133529.80051456 </i> + <i name="hartreedc">-181529.55033984 </i> + <i name="XCdc"> -530.16277185 </i> + <i name="pawpsdc"> 49382.02487328 </i> + <i name="pawaedc"> -47336.38561034 </i> + <i name="eentropy"> -0.01235599 </i> + <i name="bandstr"> -1324.79887020 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.71596063 </i> + <i name="e_wo_entrp"> -101.70360464 </i> + <i name="e_0_energy"> -101.71184196 </i> + </energy> + </scstep> + <structure> + <crystal> + <varray name="basis" > + <v> 8.93075865 0.00000000 0.00000000 </v> + <v> 4.46537932 7.73426386 0.00000000 </v> + <v> 0.00000000 0.00000000 24.72257853 </v> + </varray> + <i name="volume"> 1707.65880700 </i> + <varray name="rec_basis" > + <v> 0.11197257 -0.06464739 0.00000000 </v> + <v> 0.00000000 0.12929479 0.00000000 </v> + <v> 0.00000000 0.00000000 0.04044886 </v> + </varray> + </crystal> + <varray name="positions" > + <v> 0.88888889 0.22222222 0.30336641 </v> + <v> 0.22222222 0.22222222 0.30336641 </v> + <v> 0.55555556 0.22222222 0.30336641 </v> + <v> 0.88888889 0.55555556 0.30336641 </v> + <v> 0.22222222 0.55555556 0.30336641 </v> + <v> 0.55555556 0.55555556 0.30336641 </v> + <v> 0.88888889 0.88888889 0.30336641 </v> + <v> 0.22222222 0.88888889 0.30336641 </v> + <v> 0.55555556 0.88888889 0.30336641 </v> + <v> 0.00000000 0.00000000 0.40168321 </v> + <v> 0.33333333 0.00000000 0.40168321 </v> + <v> 0.66666667 0.00000000 0.40168321 </v> + <v> 0.00000000 0.33333333 0.40168321 </v> + <v> 0.33333333 0.33333333 0.40168321 </v> + <v> 0.66666667 0.33333333 0.40168321 </v> + <v> 0.00000000 0.66666667 0.40168321 </v> + <v> 0.33333333 0.66666667 0.40168321 </v> + <v> 0.66666667 0.66666667 0.40168321 </v> + <v> 0.11075049 0.11075049 0.50056804 </v> + <v> 0.44456917 0.11086166 0.49981223 </v> + <v> 0.77849901 0.11075049 0.50056804 </v> + <v> 0.11086166 0.44456917 0.49981223 </v> + <v> 0.44456917 0.44456917 0.49981223 </v> + <v> 0.77790438 0.44419123 0.50038475 </v> + <v> 0.11075049 0.77849901 0.50056804 </v> + <v> 0.44419123 0.77790438 0.50038475 </v> + <v> 0.77790438 0.77790438 0.50038475 </v> + <v> 0.88860671 0.22278658 0.59923470 </v> + <v> 0.22298931 0.22298931 0.59793300 </v> + <v> 0.55402138 0.22298931 0.59793300 </v> + <v> 0.88905604 0.55547198 0.59850650 </v> + <v> 0.22298931 0.55402138 0.59793300 </v> + <v> 0.55547198 0.55547198 0.59850650 </v> + <v> 0.88860671 0.88860671 0.59923470 </v> + <v> 0.22278658 0.88860671 0.59923470 </v> + <v> 0.55547198 0.88905604 0.59850650 </v> + <v> 0.00000000 0.00000000 0.69735864 </v> + <v> 0.33303373 0.00108233 0.69746823 </v> + <v> 0.66588394 0.00108233 0.69746823 </v> + <v> 0.00108233 0.33303373 0.69746823 </v> + <v> 0.66588394 0.33303373 0.69746823 </v> + <v> 0.00108233 0.66588394 0.69746823 </v> + <v> 0.33303373 0.66588394 0.69746823 </v> + <v> 0.66666667 0.66666667 0.69641327 </v> + <v> 0.33333333 0.33333333 0.69458653 </v> + <v> 0.33333333 0.33333333 0.76634937 </v> + </varray> + </structure> + <varray name="forces" > + <v> -0.00000000 -0.00047414 0.01490074 </v> + <v> 0.04586178 0.02647831 -0.02653290 </v> + <v> -0.04586178 0.02647831 -0.02653290 </v> + <v> 0.01149514 -0.00663672 0.01038897 </v> + <v> -0.00000000 -0.05295663 -0.02653290 </v> + <v> -0.01149514 -0.00663672 0.01038897 </v> + <v> 0.00041062 0.00023707 0.01490074 </v> + <v> -0.00041062 0.00023707 0.01490074 </v> + <v> -0.00000000 0.01327345 0.01038897 </v> + <v> -0.00000000 -0.00000000 0.00504058 </v> + <v> -0.01410720 -0.00645909 0.00514289 </v> + <v> 0.01410720 -0.00645909 0.00514289 </v> + <v> -0.01264734 -0.00898765 0.00514289 </v> + <v> -0.00000000 -0.00000000 -0.00212323 </v> + <v> 0.01264734 -0.00898765 0.00514289 </v> + <v> 0.00145986 0.01544674 0.00514289 </v> + <v> -0.00145986 0.01544674 0.00514289 </v> + <v> -0.00000000 -0.00000000 -0.00825239 </v> + <v> 0.00025174 0.00014534 -0.00144624 </v> + <v> -0.00000000 -0.00502833 -0.00339796 </v> + <v> -0.00025174 0.00014534 -0.00144624 </v> + <v> -0.00435466 0.00251417 -0.00339796 </v> + <v> 0.00435466 0.00251417 -0.00339796 </v> + <v> -0.00000000 -0.00549812 -0.00314082 </v> + <v> -0.00000000 -0.00029068 -0.00144624 </v> + <v> -0.00476151 0.00274906 -0.00314082 </v> + <v> 0.00476151 0.00274906 -0.00314082 </v> + <v> -0.00000000 0.00721180 -0.00220001 </v> + <v> -0.00685099 -0.00395542 -0.01074675 </v> + <v> 0.00685099 -0.00395542 -0.01074675 </v> + <v> 0.00739031 -0.00426679 0.00033580 </v> + <v> -0.00000000 0.00791084 -0.01074675 </v> + <v> -0.00739031 -0.00426679 0.00033580 </v> + <v> -0.00624560 -0.00360590 -0.00220001 </v> + <v> 0.00624560 -0.00360590 -0.00220001 </v> + <v> -0.00000000 0.00853359 0.00033580 </v> + <v> -0.00000000 -0.00000000 -0.00708594 </v> + <v> -0.00209810 -0.01376376 -0.01619485 </v> + <v> 0.00209810 -0.01376376 -0.01619485 </v> + <v> -0.01296882 0.00506487 -0.01619485 </v> + <v> 0.01296882 0.00506487 -0.01619485 </v> + <v> -0.01087072 0.00869889 -0.01619485 </v> + <v> 0.01087072 0.00869889 -0.01619485 </v> + <v> -0.00000000 -0.00000000 0.00222787 </v> + <v> -0.00000000 -0.00000000 -0.64601380 </v> + <v> -0.00000000 -0.00000000 0.78803611 </v> + </varray> + <varray name="stress" > + <v> -10.79398474 0.00000000 0.00000000 </v> + <v> 0.00000000 -10.79398474 -0.00000000 </v> + <v> 0.00000000 0.00000000 -1.12237426 </v> + </varray> + <energy> + <i name="e_fr_energy"> -101.71596063 </i> + <i name="e_wo_entrp"> -101.71184196 </i> + <i name="e_0_energy"> -0.01235599 </i> + </energy> + <time name="totalsc"> 189.07 189.88</time> + </calculation> + <calculation> + <scstep> + <time name="dav"> 4.91 4.92</time> + <time name="total"> 5.74 5.76</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20033344 </v> + <i name="Tr[quadrupol]"> -6473.03107941 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.89783091 </i> + <i name="ewald"> 133536.19071066 </i> + <i name="hartreedc">-181536.31942244 </i> + <i name="XCdc"> -530.18706100 </i> + <i name="pawpsdc"> 49382.02411268 </i> + <i name="pawaedc"> -47336.38484535 </i> + <i name="eentropy"> -0.01179627 </i> + <i name="bandstr"> -1324.40438998 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.72330585 </i> + <i name="e_wo_entrp"> -101.71150959 </i> + <i name="e_0_energy"> -101.71937376 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 2.63 2.63</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.51 4.53</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21811143 </v> + <i name="Tr[quadrupol]"> -6473.00457424 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72669473 </i> + <i name="e_wo_entrp"> -101.71538601 </i> + <i name="e_0_energy"> -101.72292516 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.85 0.85</time> + <time name="diis"> 2.51 2.52</time> + <time name="orth"> 0.15 0.16</time> + <time name="total"> 4.39 4.40</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.19730171 </v> + <i name="Tr[quadrupol]"> -6473.02409266 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72374178 </i> + <i name="e_wo_entrp"> -101.71224502 </i> + <i name="e_0_energy"> -101.71990953 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.87 0.87</time> + <time name="diis"> 2.60 2.60</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.50 4.52</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.23054173 </v> + <i name="Tr[quadrupol]"> -6472.99450668 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72896796 </i> + <i name="e_wo_entrp"> -101.71778659 </i> + <i name="e_0_energy"> -101.72524084 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 2.50 2.50</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.41 4.42</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20139449 </v> + <i name="Tr[quadrupol]"> -6473.00260636 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72227883 </i> + <i name="e_wo_entrp"> -101.71091808 </i> + <i name="e_0_energy"> -101.71849192 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.54 2.55</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.36 4.38</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20403499 </v> + <i name="Tr[quadrupol]"> -6473.01257856 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72213812 </i> + <i name="e_wo_entrp"> -101.71080304 </i> + <i name="e_0_energy"> -101.71835976 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.90 0.90</time> + <time name="diis"> 2.44 2.44</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.41 4.43</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20132168 </v> + <i name="Tr[quadrupol]"> -6473.00914660 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72222091 </i> + <i name="e_wo_entrp"> -101.71085408 </i> + <i name="e_0_energy"> -101.71843197 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.86 1.86</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.68 3.69</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20243787 </v> + <i name="Tr[quadrupol]"> -6473.01134469 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72232216 </i> + <i name="e_wo_entrp"> -101.71095833 </i> + <i name="e_0_energy"> -101.71853422 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.87 1.87</time> + <time name="orth"> 0.15 0.16</time> + <time name="total"> 3.69 3.70</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20229511 </v> + <i name="Tr[quadrupol]"> -6473.00956330 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72259855 </i> + <i name="e_wo_entrp"> -101.71122773 </i> + <i name="e_0_energy"> -101.71880828 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.66 1.66</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.52 3.54</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20235731 </v> + <i name="Tr[quadrupol]"> -6473.00877481 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72281328 </i> + <i name="e_wo_entrp"> -101.71144845 </i> + <i name="e_0_energy"> -101.71902501 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 1.97 1.97</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.86 3.87</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20248012 </v> + <i name="Tr[quadrupol]"> -6473.00475408 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72346703 </i> + <i name="e_wo_entrp"> -101.71211671 </i> + <i name="e_0_energy"> -101.71968359 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.88 0.88</time> + <time name="diis"> 1.85 1.87</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.73 3.75</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20261656 </v> + <i name="Tr[quadrupol]"> -6473.00184204 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72385687 </i> + <i name="e_wo_entrp"> -101.71251455 </i> + <i name="e_0_energy"> -101.72007609 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.61 1.62</time> + <time name="orth"> 0.15 0.15</time> + <time name="total"> 3.43 3.44</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20267569 </v> + <i name="Tr[quadrupol]"> -6473.00026731 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72397840 </i> + <i name="e_wo_entrp"> -101.71263839 </i> + <i name="e_0_energy"> -101.72019840 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 1.61 1.62</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.53 3.54</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20273087 </v> + <i name="Tr[quadrupol]"> -6472.99912999 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72401892 </i> + <i name="e_wo_entrp"> -101.71267869 </i> + <i name="e_0_energy"> -101.72023884 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.88 0.89</time> + <time name="diis"> 1.41 1.41</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.32 3.34</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20274970 </v> + <i name="Tr[quadrupol]"> -6472.99875606 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72401724 </i> + <i name="e_wo_entrp"> -101.71267665 </i> + <i name="e_0_energy"> -101.72023705 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.83 0.84</time> + <time name="diis"> 1.26 1.26</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.08 3.09</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20276446 </v> + <i name="Tr[quadrupol]"> -6472.99832745 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72401498 </i> + <i name="e_wo_entrp"> -101.71267414 </i> + <i name="e_0_energy"> -101.72023470 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.21 1.21</time> + <time name="orth"> 0.15 0.16</time> + <time name="total"> 2.73 2.74</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20277502 </v> + <i name="Tr[quadrupol]"> -6472.99797736 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.88995785 </i> + <i name="ewald"> 133536.19071066 </i> + <i name="hartreedc">-181535.84198501 </i> + <i name="XCdc"> -530.17469962 </i> + <i name="pawpsdc"> 49372.76400282 </i> + <i name="pawaedc"> -47327.02633239 </i> + <i name="eentropy"> -0.01134020 </i> + <i name="bandstr"> -1324.98588350 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.72401445 </i> + <i name="e_wo_entrp"> -101.71267426 </i> + <i name="e_0_energy"> -101.72023439 </i> + </energy> + </scstep> + <structure> + <crystal> + <varray name="basis" > + <v> 8.93075865 0.00000000 0.00000000 </v> + <v> 4.46537932 7.73426386 0.00000000 </v> + <v> 0.00000000 0.00000000 24.72257853 </v> + </varray> + <i name="volume"> 1707.65880700 </i> + <varray name="rec_basis" > + <v> 0.11197257 -0.06464739 0.00000000 </v> + <v> 0.00000000 0.12929479 0.00000000 </v> + <v> 0.00000000 0.00000000 0.04044886 </v> + </varray> + </crystal> + <varray name="positions" > + <v> 0.88888889 0.22222222 0.30336641 </v> + <v> 0.22222222 0.22222222 0.30336641 </v> + <v> 0.55555556 0.22222222 0.30336641 </v> + <v> 0.88888889 0.55555556 0.30336641 </v> + <v> 0.22222222 0.55555556 0.30336641 </v> + <v> 0.55555556 0.55555556 0.30336641 </v> + <v> 0.88888889 0.88888889 0.30336641 </v> + <v> 0.22222222 0.88888889 0.30336641 </v> + <v> 0.55555556 0.88888889 0.30336641 </v> + <v> 0.00000000 0.00000000 0.40168321 </v> + <v> 0.33333333 0.00000000 0.40168321 </v> + <v> 0.66666667 0.00000000 0.40168321 </v> + <v> 0.00000000 0.33333333 0.40168321 </v> + <v> 0.33333333 0.33333333 0.40168321 </v> + <v> 0.66666667 0.33333333 0.40168321 </v> + <v> 0.00000000 0.66666667 0.40168321 </v> + <v> 0.33333333 0.66666667 0.40168321 </v> + <v> 0.66666667 0.66666667 0.40168321 </v> + <v> 0.11075068 0.11075068 0.50056747 </v> + <v> 0.44457231 0.11085539 0.49981091 </v> + <v> 0.77849865 0.11075068 0.50056747 </v> + <v> 0.11085539 0.44457231 0.49981091 </v> + <v> 0.44457231 0.44457231 0.49981091 </v> + <v> 0.77790781 0.44418437 0.50038353 </v> + <v> 0.11075068 0.77849865 0.50056747 </v> + <v> 0.44418437 0.77790781 0.50038353 </v> + <v> 0.77790781 0.77790781 0.50038353 </v> + <v> 0.88860221 0.22279558 0.59923384 </v> + <v> 0.22298437 0.22298437 0.59792881 </v> + <v> 0.55403125 0.22298437 0.59792881 </v> + <v> 0.88906668 0.55546666 0.59850663 </v> + <v> 0.22298437 0.55403125 0.59792881 </v> + <v> 0.55546666 0.55546666 0.59850663 </v> + <v> 0.88860221 0.88860221 0.59923384 </v> + <v> 0.22279558 0.88860221 0.59923384 </v> + <v> 0.55546666 0.88906668 0.59850663 </v> + <v> -0.00000000 -0.00000000 0.69735588 </v> + <v> 0.33304005 0.00106516 0.69746191 </v> + <v> 0.66589479 0.00106516 0.69746191 </v> + <v> 0.00106516 0.33304005 0.69746191 </v> + <v> 0.66589479 0.33304005 0.69746191 </v> + <v> 0.00106516 0.66589479 0.69746191 </v> + <v> 0.33304005 0.66589479 0.69746191 </v> + <v> 0.66666667 0.66666667 0.69641414 </v> + <v> 0.33333333 0.33333333 0.69433441 </v> + <v> 0.33333333 0.33333333 0.76665692 </v> + </varray> + </structure> + <varray name="forces" > + <v> 0.00000000 -0.00071626 0.01425502 </v> + <v> 0.04578233 0.02643244 -0.02703497 </v> + <v> -0.04578233 0.02643244 -0.02703497 </v> + <v> 0.01139180 -0.00657706 0.00957793 </v> + <v> -0.00000000 -0.05286488 -0.02703497 </v> + <v> -0.01139180 -0.00657706 0.00957793 </v> + <v> 0.00062030 0.00035813 0.01425502 </v> + <v> -0.00062030 0.00035813 0.01425502 </v> + <v> 0.00000000 0.01315412 0.00957793 </v> + <v> 0.00000000 0.00000000 0.00533348 </v> + <v> -0.01400432 -0.00611417 0.00508438 </v> + <v> 0.01400432 -0.00611417 0.00508438 </v> + <v> -0.01229718 -0.00907101 0.00508438 </v> + <v> 0.00000000 0.00000000 -0.00222254 </v> + <v> 0.01229718 -0.00907101 0.00508438 </v> + <v> 0.00170713 0.01518518 0.00508438 </v> + <v> -0.00170713 0.01518518 0.00508438 </v> + <v> 0.00000000 0.00000000 -0.00731127 </v> + <v> 0.00047958 0.00027688 -0.00105472 </v> + <v> -0.00000000 -0.00512783 -0.00359111 </v> + <v> -0.00047958 0.00027688 -0.00105472 </v> + <v> -0.00444083 0.00256391 -0.00359111 </v> + <v> 0.00444083 0.00256391 -0.00359111 </v> + <v> 0.00000000 -0.00574438 -0.00281459 </v> + <v> 0.00000000 -0.00055377 -0.00105472 </v> + <v> -0.00497478 0.00287219 -0.00281459 </v> + <v> 0.00497478 0.00287219 -0.00281459 </v> + <v> 0.00000000 0.00758914 -0.00207213 </v> + <v> -0.00895584 -0.00517066 -0.01378417 </v> + <v> 0.00895584 -0.00517066 -0.01378417 </v> + <v> 0.00768615 -0.00443760 0.00074988 </v> + <v> 0.00000000 0.01034132 -0.01378417 </v> + <v> -0.00768615 -0.00443760 0.00074988 </v> + <v> -0.00657239 -0.00379457 -0.00207213 </v> + <v> 0.00657239 -0.00379457 -0.00207213 </v> + <v> -0.00000000 0.00887521 0.00074988 </v> + <v> 0.00000000 0.00000000 -0.00714666 </v> + <v> -0.00115216 -0.01223371 -0.01535890 </v> + <v> 0.00115216 -0.01223371 -0.01535890 </v> + <v> -0.01117078 0.00511905 -0.01535890 </v> + <v> 0.01117078 0.00511905 -0.01535890 </v> + <v> -0.01001862 0.00711465 -0.01535890 </v> + <v> 0.01001862 0.00711465 -0.01535890 </v> + <v> 0.00000000 0.00000000 0.00178476 </v> + <v> 0.00000000 0.00000000 -0.35962477 </v> + <v> 0.00000000 0.00000000 0.50814075 </v> + </varray> + <varray name="stress" > + <v> -10.81352448 0.00000000 0.00000000 </v> + <v> 0.00000000 -10.81352448 0.00000000 </v> + <v> 0.00000000 -0.00000000 -1.54899180 </v> + </varray> + <energy> + <i name="e_fr_energy"> -101.72401445 </i> + <i name="e_wo_entrp"> -101.72023439 </i> + <i name="e_0_energy"> -0.01134020 </i> + </energy> + <time name="totalsc"> 73.07 73.33</time> + </calculation> + <calculation> + <scstep> + <time name="dav"> 4.81 4.82</time> + <time name="total"> 5.63 5.64</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20279126 </v> + <i name="Tr[quadrupol]"> -6472.95942925 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.89168603 </i> + <i name="ewald"> 133549.03251344 </i> + <i name="hartreedc">-181549.37509057 </i> + <i name="XCdc"> -530.22092351 </i> + <i name="pawpsdc"> 49372.76406398 </i> + <i name="pawaedc"> -47327.02639240 </i> + <i name="eentropy"> -0.01026060 </i> + <i name="bandstr"> -1324.25339561 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.72624431 </i> + <i name="e_wo_entrp"> -101.71598370 </i> + <i name="e_0_energy"> -101.72282411 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.53 2.54</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.41 4.43</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.23513151 </v> + <i name="Tr[quadrupol]"> -6472.91553865 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73765376 </i> + <i name="e_wo_entrp"> -101.72844818 </i> + <i name="e_0_energy"> -101.73458523 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 2.62 2.63</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.51 4.53</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.18942709 </v> + <i name="Tr[quadrupol]"> -6472.95448323 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72964524 </i> + <i name="e_wo_entrp"> -101.71987628 </i> + <i name="e_0_energy"> -101.72638892 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.85 0.86</time> + <time name="diis"> 2.51 2.52</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.36 4.38</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.25755424 </v> + <i name="Tr[quadrupol]"> -6472.89226871 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.74563193 </i> + <i name="e_wo_entrp"> -101.73667090 </i> + <i name="e_0_energy"> -101.74264492 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.54 2.55</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.39 4.41</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20672525 </v> + <i name="Tr[quadrupol]"> -6472.91027903 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72472905 </i> + <i name="e_wo_entrp"> -101.71519650 </i> + <i name="e_0_energy"> -101.72155153 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.90 0.90</time> + <time name="diis"> 2.63 2.63</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.51 4.53</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20811134 </v> + <i name="Tr[quadrupol]"> -6472.92271064 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72443482 </i> + <i name="e_wo_entrp"> -101.71491655 </i> + <i name="e_0_energy"> -101.72126206 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.54 2.54</time> + <time name="orth"> 0.15 0.16</time> + <time name="total"> 4.36 4.38</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20416345 </v> + <i name="Tr[quadrupol]"> -6472.91852877 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72477172 </i> + <i name="e_wo_entrp"> -101.71520137 </i> + <i name="e_0_energy"> -101.72158161 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.44 2.45</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.26 4.28</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20660183 </v> + <i name="Tr[quadrupol]"> -6472.92293541 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72505036 </i> + <i name="e_wo_entrp"> -101.71550031 </i> + <i name="e_0_energy"> -101.72186701 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.17 2.18</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.99 4.01</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20612696 </v> + <i name="Tr[quadrupol]"> -6472.91929775 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72575514 </i> + <i name="e_wo_entrp"> -101.71619690 </i> + <i name="e_0_energy"> -101.72256906 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.83 1.84</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.65 3.66</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20633500 </v> + <i name="Tr[quadrupol]"> -6472.91747905 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72630063 </i> + <i name="e_wo_entrp"> -101.71675292 </i> + <i name="e_0_energy"> -101.72311806 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.22 2.23</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.04 4.06</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20654173 </v> + <i name="Tr[quadrupol]"> -6472.90913914 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72786632 </i> + <i name="e_wo_entrp"> -101.71834099 </i> + <i name="e_0_energy"> -101.72469121 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.88 0.88</time> + <time name="diis"> 2.17 2.18</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.06 4.07</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20681028 </v> + <i name="Tr[quadrupol]"> -6472.90269389 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72883339 </i> + <i name="e_wo_entrp"> -101.71931988 </i> + <i name="e_0_energy"> -101.72566222 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.88 0.89</time> + <time name="diis"> 1.86 1.86</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.75 3.76</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20694853 </v> + <i name="Tr[quadrupol]"> -6472.89929642 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72913623 </i> + <i name="e_wo_entrp"> -101.71962559 </i> + <i name="e_0_energy"> -101.72596602 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.65 1.65</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.47 3.48</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20705717 </v> + <i name="Tr[quadrupol]"> -6472.89682836 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72922779 </i> + <i name="e_wo_entrp"> -101.71971557 </i> + <i name="e_0_energy"> -101.72605705 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.56 1.56</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.45 3.46</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20710246 </v> + <i name="Tr[quadrupol]"> -6472.89597800 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72921875 </i> + <i name="e_wo_entrp"> -101.71970521 </i> + <i name="e_0_energy"> -101.72604757 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.90 0.90</time> + <time name="diis"> 1.44 1.44</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.40 3.41</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20714052 </v> + <i name="Tr[quadrupol]"> -6472.89517507 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72921512 </i> + <i name="e_wo_entrp"> -101.71970105 </i> + <i name="e_0_energy"> -101.72604377 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 1.34 1.34</time> + <time name="orth"> 0.15 0.16</time> + <time name="total"> 2.93 2.94</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20717478 </v> + <i name="Tr[quadrupol]"> -6472.89450471 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.87758792 </i> + <i name="ewald"> 133549.03251344 </i> + <i name="hartreedc">-181548.45834773 </i> + <i name="XCdc"> -530.19692538 </i> + <i name="pawpsdc"> 49355.60117933 </i> + <i name="pawaedc"> -47309.67847816 </i> + <i name="eentropy"> -0.00951317 </i> + <i name="bandstr"> -1325.36878587 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.72921468 </i> + <i name="e_wo_entrp"> -101.71970151 </i> + <i name="e_0_energy"> -101.72604362 </i> + </energy> + </scstep> + <structure> + <crystal> + <varray name="basis" > + <v> 8.93075865 0.00000000 0.00000000 </v> + <v> 4.46537932 7.73426386 0.00000000 </v> + <v> 0.00000000 0.00000000 24.72257853 </v> + </varray> + <i name="volume"> 1707.65880700 </i> + <varray name="rec_basis" > + <v> 0.11197257 -0.06464739 0.00000000 </v> + <v> 0.00000000 0.12929479 0.00000000 </v> + <v> 0.00000000 0.00000000 0.04044886 </v> + </varray> + </crystal> + <varray name="positions" > + <v> 0.88888889 0.22222222 0.30336641 </v> + <v> 0.22222222 0.22222222 0.30336641 </v> + <v> 0.55555556 0.22222222 0.30336641 </v> + <v> 0.88888889 0.55555556 0.30336641 </v> + <v> 0.22222222 0.55555556 0.30336641 </v> + <v> 0.55555556 0.55555556 0.30336641 </v> + <v> 0.88888889 0.88888889 0.30336641 </v> + <v> 0.22222222 0.88888889 0.30336641 </v> + <v> 0.55555556 0.88888889 0.30336641 </v> + <v> 0.00000000 0.00000000 0.40168321 </v> + <v> 0.33333333 0.00000000 0.40168321 </v> + <v> 0.66666667 0.00000000 0.40168321 </v> + <v> 0.00000000 0.33333333 0.40168321 </v> + <v> 0.33333333 0.33333333 0.40168321 </v> + <v> 0.66666667 0.33333333 0.40168321 </v> + <v> 0.00000000 0.66666667 0.40168321 </v> + <v> 0.33333333 0.66666667 0.40168321 </v> + <v> 0.66666667 0.66666667 0.40168321 </v> + <v> 0.11075104 0.11075104 0.50056635 </v> + <v> 0.44457854 0.11084293 0.49980827 </v> + <v> 0.77849793 0.11075104 0.50056635 </v> + <v> 0.11084293 0.44457854 0.49980827 </v> + <v> 0.44457854 0.44457854 0.49980827 </v> + <v> 0.77791463 0.44417074 0.50038109 </v> + <v> 0.11075104 0.77849793 0.50056635 </v> + <v> 0.44417074 0.77791463 0.50038109 </v> + <v> 0.77791463 0.77791463 0.50038109 </v> + <v> 0.88859327 0.22281345 0.59923214 </v> + <v> 0.22297457 0.22297457 0.59792047 </v> + <v> 0.55405086 0.22297457 0.59792047 </v> + <v> 0.88908784 0.55545608 0.59850689 </v> + <v> 0.22297457 0.55405086 0.59792047 </v> + <v> 0.55545608 0.55545608 0.59850689 </v> + <v> 0.88859327 0.88859327 0.59923214 </v> + <v> 0.22281345 0.88859327 0.59923214 </v> + <v> 0.55545608 0.88908784 0.59850689 </v> + <v> -0.00000000 -0.00000000 0.69735038 </v> + <v> 0.33305260 0.00103104 0.69744935 </v> + <v> 0.66591636 0.00103104 0.69744935 </v> + <v> 0.00103104 0.33305260 0.69744935 </v> + <v> 0.66591636 0.33305260 0.69744935 </v> + <v> 0.00103104 0.66591636 0.69744935 </v> + <v> 0.33305260 0.66591636 0.69744935 </v> + <v> 0.66666667 0.66666667 0.69641587 </v> + <v> 0.33333333 0.33333333 0.69383343 </v> + <v> 0.33333333 0.33333333 0.76726803 </v> + </varray> + </structure> + <varray name="forces" > + <v> -0.00000000 -0.00113423 0.01317062 </v> + <v> 0.04558732 0.02631985 -0.02771898 </v> + <v> -0.04558732 0.02631985 -0.02771898 </v> + <v> 0.01127269 -0.00650829 0.00821120 </v> + <v> 0.00000000 -0.05263970 -0.02771898 </v> + <v> -0.01127269 -0.00650829 0.00821120 </v> + <v> 0.00098227 0.00056712 0.01317062 </v> + <v> -0.00098227 0.00056712 0.01317062 </v> + <v> 0.00000000 0.01301658 0.00821120 </v> + <v> -0.00000000 -0.00000000 0.00621353 </v> + <v> -0.01377726 -0.00542527 0.00517245 </v> + <v> 0.01377726 -0.00542527 0.00517245 </v> + <v> -0.01158705 -0.00921882 0.00517245 </v> + <v> -0.00000000 -0.00000000 -0.00226830 </v> + <v> 0.01158705 -0.00921882 0.00517245 </v> + <v> 0.00219021 0.01464409 0.00517245 </v> + <v> -0.00219021 0.01464409 0.00517245 </v> + <v> -0.00000000 -0.00000000 -0.00527275 </v> + <v> 0.00098177 0.00056682 -0.00001384 </v> + <v> -0.00000000 -0.00531485 -0.00370525 </v> + <v> -0.00098177 0.00056682 -0.00001384 </v> + <v> -0.00460279 0.00265742 -0.00370525 </v> + <v> 0.00460279 0.00265742 -0.00370525 </v> + <v> 0.00000000 -0.00621320 -0.00195664 </v> + <v> 0.00000000 -0.00113365 -0.00001384 </v> + <v> -0.00538079 0.00310660 -0.00195664 </v> + <v> 0.00538079 0.00310660 -0.00195664 </v> + <v> -0.00000000 0.00827018 -0.00167043 </v> + <v> -0.01328030 -0.00766739 -0.01996664 </v> + <v> 0.01328030 -0.00766739 -0.01996664 </v> + <v> 0.00807468 -0.00466192 0.00168188 </v> + <v> 0.00000000 0.01533477 -0.01996664 </v> + <v> -0.00807468 -0.00466192 0.00168188 </v> + <v> -0.00716218 -0.00413509 -0.00167043 </v> + <v> 0.00716218 -0.00413509 -0.00167043 </v> + <v> -0.00000000 0.00932384 0.00168188 </v> + <v> -0.00000000 -0.00000000 -0.00684140 </v> + <v> 0.00060806 -0.00936745 -0.01345784 </v> + <v> -0.00060806 -0.00936745 -0.01345784 </v> + <v> -0.00780842 0.00521032 -0.01345784 </v> + <v> 0.00780842 0.00521032 -0.01345784 </v> + <v> -0.00841648 0.00415713 -0.01345784 </v> + <v> 0.00841648 0.00415713 -0.01345784 </v> + <v> -0.00000000 0.00000000 0.00133130 </v> + <v> -0.00000000 0.00000000 0.13571219 </v> + <v> -0.00000000 -0.00000000 0.01674201 </v> + </varray> + <varray name="stress" > + <v> -10.84995387 0.00000000 0.00000000 </v> + <v> 0.00000000 -10.84995387 0.00000000 </v> + <v> 0.00000000 -0.00000000 -2.29361892 </v> + </varray> + <energy> + <i name="e_fr_energy"> -101.72921468 </i> + <i name="e_wo_entrp"> -101.72604362 </i> + <i name="e_0_energy"> -0.00951317 </i> + </energy> + <time name="totalsc"> 75.29 75.54</time> + </calculation> + <calculation> + <scstep> + <time name="dav"> 4.85 4.86</time> + <time name="total"> 5.67 5.69</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20721474 </v> + <i name="Tr[quadrupol]"> -6472.89763748 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.87727759 </i> + <i name="ewald"> 133547.74093486 </i> + <i name="hartreedc">-181547.09345013 </i> + <i name="XCdc"> -530.19244387 </i> + <i name="pawpsdc"> 49355.60066489 </i> + <i name="pawaedc"> -47309.67794797 </i> + <i name="eentropy"> -0.00961287 </i> + <i name="bandstr"> -1325.44623740 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.72925996 </i> + <i name="e_wo_entrp"> -101.71964709 </i> + <i name="e_0_energy"> -101.72605567 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.52 2.53</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.35 4.36</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20411425 </v> + <i name="Tr[quadrupol]"> -6472.90135204 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72934504 </i> + <i name="e_wo_entrp"> -101.71963591 </i> + <i name="e_0_energy"> -101.72610867 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.85 0.85</time> + <time name="diis"> 2.56 2.57</time> + <time name="orth"> 0.17 0.17</time> + <time name="total"> 4.44 4.45</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20873664 </v> + <i name="Tr[quadrupol]"> -6472.89760978 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72928480 </i> + <i name="e_wo_entrp"> -101.71962570 </i> + <i name="e_0_energy"> -101.72606510 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 2.61 2.61</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.51 4.52</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20180483 </v> + <i name="Tr[quadrupol]"> -6472.90393422 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72941263 </i> + <i name="e_wo_entrp"> -101.71969336 </i> + <i name="e_0_energy"> -101.72617287 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.86 0.86</time> + <time name="diis"> 2.47 2.48</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.33 4.34</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20673264 </v> + <i name="Tr[quadrupol]"> -6472.90232351 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72916372 </i> + <i name="e_wo_entrp"> -101.71947503 </i> + <i name="e_0_energy"> -101.72593415 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.74 1.75</time> + <time name="orth"> 0.17 0.17</time> + <time name="total"> 3.63 3.65</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20661505 </v> + <i name="Tr[quadrupol]"> -6472.90133726 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72914254 </i> + <i name="e_wo_entrp"> -101.71945571 </i> + <i name="e_0_energy"> -101.72591360 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 1.69 1.69</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.73 3.74</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20703766 </v> + <i name="Tr[quadrupol]"> -6472.90192445 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72915058 </i> + <i name="e_wo_entrp"> -101.71947069 </i> + <i name="e_0_energy"> -101.72592395 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 1.48 1.48</time> + <time name="orth"> 0.15 0.16</time> + <time name="total"> 3.37 3.39</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20681035 </v> + <i name="Tr[quadrupol]"> -6472.90158473 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72915963 </i> + <i name="e_wo_entrp"> -101.71947910 </i> + <i name="e_0_energy"> -101.72593279 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.45 1.45</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.26 3.28</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20684038 </v> + <i name="Tr[quadrupol]"> -6472.90207159 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72918410 </i> + <i name="e_wo_entrp"> -101.71950639 </i> + <i name="e_0_energy"> -101.72595820 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.85</time> + <time name="diis"> 1.30 1.31</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.13 3.14</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20682172 </v> + <i name="Tr[quadrupol]"> -6472.90223969 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72920388 </i> + <i name="e_wo_entrp"> -101.71952614 </i> + <i name="e_0_energy"> -101.72597797 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.48 1.48</time> + <time name="orth"> 0.15 0.16</time> + <time name="total"> 3.31 3.32</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20682160 </v> + <i name="Tr[quadrupol]"> -6472.90282052 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72926234 </i> + <i name="e_wo_entrp"> -101.71958465 </i> + <i name="e_0_energy"> -101.72603644 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.85 0.85</time> + <time name="diis"> 1.41 1.41</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.24 3.26</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20680718 </v> + <i name="Tr[quadrupol]"> -6472.90315689 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72929389 </i> + <i name="e_wo_entrp"> -101.71961638 </i> + <i name="e_0_energy"> -101.72606805 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.35 1.35</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.17 3.18</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20679719 </v> + <i name="Tr[quadrupol]"> -6472.90321912 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72930574 </i> + <i name="e_wo_entrp"> -101.71962851 </i> + <i name="e_0_energy"> -101.72608000 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.25 1.25</time> + <time name="orth"> 0.15 0.15</time> + <time name="total"> 3.07 3.08</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20680001 </v> + <i name="Tr[quadrupol]"> -6472.90316663 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72930769 </i> + <i name="e_wo_entrp"> -101.71963061 </i> + <i name="e_0_energy"> -101.72608200 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.86 0.87</time> + <time name="diis"> 1.30 1.30</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 2.93 2.94</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20681033 </v> + <i name="Tr[quadrupol]"> -6472.90306374 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.87857868 </i> + <i name="ewald"> 133547.74093486 </i> + <i name="hartreedc">-181547.17284333 </i> + <i name="XCdc"> -530.19481330 </i> + <i name="pawpsdc"> 49357.24233045 </i> + <i name="pawaedc"> -47311.33743946 </i> + <i name="eentropy"> -0.00967689 </i> + <i name="bandstr"> -1325.34793374 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.72930780 </i> + <i name="e_wo_entrp"> -101.71963090 </i> + <i name="e_0_energy"> -101.72608217 </i> + </energy> + </scstep> + <structure> + <crystal> + <varray name="basis" > + <v> 8.93075865 0.00000000 0.00000000 </v> + <v> 4.46537932 7.73426386 0.00000000 </v> + <v> 0.00000000 0.00000000 24.72257853 </v> + </varray> + <i name="volume"> 1707.65880700 </i> + <varray name="rec_basis" > + <v> 0.11197257 -0.06464739 0.00000000 </v> + <v> 0.00000000 0.12929479 0.00000000 </v> + <v> 0.00000000 0.00000000 0.04044886 </v> + </varray> + </crystal> + <varray name="positions" > + <v> 0.88888889 0.22222222 0.30336641 </v> + <v> 0.22222222 0.22222222 0.30336641 </v> + <v> 0.55555556 0.22222222 0.30336641 </v> + <v> 0.88888889 0.55555556 0.30336641 </v> + <v> 0.22222222 0.55555556 0.30336641 </v> + <v> 0.55555556 0.55555556 0.30336641 </v> + <v> 0.88888889 0.88888889 0.30336641 </v> + <v> 0.22222222 0.88888889 0.30336641 </v> + <v> 0.55555556 0.88888889 0.30336641 </v> + <v> 0.00000000 0.00000000 0.40168321 </v> + <v> 0.33333333 0.00000000 0.40168321 </v> + <v> 0.66666667 0.00000000 0.40168321 </v> + <v> 0.00000000 0.33333333 0.40168321 </v> + <v> 0.33333333 0.33333333 0.40168321 </v> + <v> 0.66666667 0.33333333 0.40168321 </v> + <v> 0.00000000 0.66666667 0.40168321 </v> + <v> 0.33333333 0.66666667 0.40168321 </v> + <v> 0.66666667 0.66666667 0.40168321 </v> + <v> 0.11075100 0.11075100 0.50056646 </v> + <v> 0.44457791 0.11084417 0.49980854 </v> + <v> 0.77849800 0.11075100 0.50056646 </v> + <v> 0.11084417 0.44457791 0.49980854 </v> + <v> 0.44457791 0.44457791 0.49980854 </v> + <v> 0.77791395 0.44417211 0.50038134 </v> + <v> 0.11075100 0.77849800 0.50056646 </v> + <v> 0.44417211 0.77791395 0.50038134 </v> + <v> 0.77791395 0.77791395 0.50038134 </v> + <v> 0.88859417 0.22281167 0.59923231 </v> + <v> 0.22297555 0.22297555 0.59792130 </v> + <v> 0.55404890 0.22297555 0.59792130 </v> + <v> 0.88908572 0.55545714 0.59850686 </v> + <v> 0.22297555 0.55404890 0.59792130 </v> + <v> 0.55545714 0.55545714 0.59850686 </v> + <v> 0.88859417 0.88859417 0.59923231 </v> + <v> 0.22281167 0.88859417 0.59923231 </v> + <v> 0.55545714 0.88908572 0.59850686 </v> + <v> -0.00000000 -0.00000000 0.69735093 </v> + <v> 0.33305135 0.00103445 0.69745061 </v> + <v> 0.66591420 0.00103445 0.69745061 </v> + <v> 0.00103445 0.33305135 0.69745061 </v> + <v> 0.66591420 0.33305135 0.69745061 </v> + <v> 0.00103445 0.66591420 0.69745061 </v> + <v> 0.33305135 0.66591420 0.69745061 </v> + <v> 0.66666667 0.66666667 0.69641570 </v> + <v> 0.33333333 0.33333333 0.69388349 </v> + <v> 0.33333333 0.33333333 0.76720697 </v> + </varray> + </structure> + <varray name="forces" > + <v> 0.00000000 -0.00109611 0.01327034 </v> + <v> 0.04559436 0.02632392 -0.02766705 </v> + <v> -0.04559436 0.02632392 -0.02766705 </v> + <v> 0.01128045 -0.00651277 0.00833205 </v> + <v> 0.00000000 -0.05264783 -0.02766705 </v> + <v> -0.01128045 -0.00651277 0.00833205 </v> + <v> 0.00094926 0.00054805 0.01327034 </v> + <v> -0.00094926 0.00054805 0.01327034 </v> + <v> 0.00000000 0.01302554 0.00833205 </v> + <v> 0.00000000 0.00000000 0.00611285 </v> + <v> -0.01380159 -0.00549249 0.00515244 </v> + <v> 0.01380159 -0.00549249 0.00515244 </v> + <v> -0.01165743 -0.00920628 0.00515244 </v> + <v> 0.00000000 0.00000000 -0.00227253 </v> + <v> 0.01165743 -0.00920628 0.00515244 </v> + <v> 0.00214416 0.01469877 0.00515244 </v> + <v> -0.00214416 0.01469877 0.00515244 </v> + <v> 0.00000000 0.00000000 -0.00548139 </v> + <v> 0.00092968 0.00053675 -0.00013302 </v> + <v> -0.00000000 -0.00529938 -0.00370587 </v> + <v> -0.00092968 0.00053675 -0.00013302 </v> + <v> -0.00458939 0.00264969 -0.00370587 </v> + <v> 0.00458939 0.00264969 -0.00370587 </v> + <v> -0.00000000 -0.00617444 -0.00205409 </v> + <v> 0.00000000 -0.00107351 -0.00013302 </v> + <v> -0.00534722 0.00308722 -0.00205409 </v> + <v> 0.00534722 0.00308722 -0.00205409 </v> + <v> 0.00000000 0.00821092 -0.00169676 </v> + <v> -0.01281763 -0.00740026 -0.01929696 </v> + <v> 0.01281763 -0.00740026 -0.01929696 </v> + <v> 0.00802657 -0.00463414 0.00159909 </v> + <v> 0.00000000 0.01480053 -0.01929696 </v> + <v> -0.00802657 -0.00463414 0.00159909 </v> + <v> -0.00711087 -0.00410546 -0.00169676 </v> + <v> 0.00711087 -0.00410546 -0.00169676 </v> + <v> 0.00000000 0.00926829 0.00159909 </v> + <v> 0.00000000 0.00000000 -0.00686698 </v> + <v> 0.00041754 -0.00968702 -0.01364676 </v> + <v> -0.00041754 -0.00968702 -0.01364676 </v> + <v> -0.00818044 0.00520511 -0.01364676 </v> + <v> 0.00818044 0.00520511 -0.01364676 </v> + <v> -0.00859798 0.00448191 -0.01364676 </v> + <v> 0.00859798 0.00448191 -0.01364676 </v> + <v> 0.00000000 0.00000000 0.00138366 </v> + <v> 0.00000000 0.00000000 0.09005134 </v> + <v> 0.00000000 0.00000000 0.06209577 </v> + </varray> + <varray name="stress" > + <v> -10.84594399 0.00000000 0.00000000 </v> + <v> 0.00000000 -10.84594399 -0.00000000 </v> + <v> 0.00000000 -0.00000000 -2.22345772 </v> + </varray> + <energy> + <i name="e_fr_energy"> -101.72930780 </i> + <i name="e_wo_entrp"> -101.72608217 </i> + <i name="e_0_energy"> -0.00967689 </i> + </energy> + <time name="totalsc"> 62.42 62.64</time> + </calculation> + <calculation> + <scstep> + <time name="dav"> 4.95 4.97</time> + <time name="total"> 5.83 5.85</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20681600 </v> + <i name="Tr[quadrupol]"> -6472.90330002 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.87854548 </i> + <i name="ewald"> 133547.63450733 </i> + <i name="hartreedc">-181547.05961514 </i> + <i name="XCdc"> -530.19444405 </i> + <i name="pawpsdc"> 49357.24299244 </i> + <i name="pawaedc"> -47311.33811021 </i> + <i name="eentropy"> -0.00968535 </i> + <i name="bandstr"> -1325.35505344 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.72930800 </i> + <i name="e_wo_entrp"> -101.71962265 </i> + <i name="e_0_energy"> -101.72607955 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 1.80 1.81</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.39 3.40</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20654782 </v> + <i name="Tr[quadrupol]"> -6472.90358255 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.87940831 </i> + <i name="ewald"> 133547.63450733 </i> + <i name="hartreedc">-181547.06106330 </i> + <i name="XCdc"> -530.19461808 </i> + <i name="pawpsdc"> 49357.28393552 </i> + <i name="pawaedc"> -47311.38002518 </i> + <i name="eentropy"> -0.00969348 </i> + <i name="bandstr"> -1325.35331419 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.72930812 </i> + <i name="e_wo_entrp"> -101.71961465 </i> + <i name="e_0_energy"> -101.72607696 </i> + </energy> + </scstep> + <structure> + <crystal> + <varray name="basis" > + <v> 8.93075865 0.00000000 0.00000000 </v> + <v> 4.46537932 7.73426386 0.00000000 </v> + <v> 0.00000000 0.00000000 24.72257853 </v> + </varray> + <i name="volume"> 1707.65880700 </i> + <varray name="rec_basis" > + <v> 0.11197257 -0.06464739 0.00000000 </v> + <v> 0.00000000 0.12929479 0.00000000 </v> + <v> 0.00000000 0.00000000 0.04044886 </v> + </varray> + </crystal> + <varray name="positions" > + <v> 0.88888889 0.22222222 0.30336641 </v> + <v> 0.22222222 0.22222222 0.30336641 </v> + <v> 0.55555556 0.22222222 0.30336641 </v> + <v> 0.88888889 0.55555556 0.30336641 </v> + <v> 0.22222222 0.55555556 0.30336641 </v> + <v> 0.55555556 0.55555556 0.30336641 </v> + <v> 0.88888889 0.88888889 0.30336641 </v> + <v> 0.22222222 0.88888889 0.30336641 </v> + <v> 0.55555556 0.88888889 0.30336641 </v> + <v> 0.00000000 0.00000000 0.40168321 </v> + <v> 0.33333333 0.00000000 0.40168321 </v> + <v> 0.66666667 0.00000000 0.40168321 </v> + <v> 0.00000000 0.33333333 0.40168321 </v> + <v> 0.33333333 0.33333333 0.40168321 </v> + <v> 0.66666667 0.33333333 0.40168321 </v> + <v> 0.00000000 0.66666667 0.40168321 </v> + <v> 0.33333333 0.66666667 0.40168321 </v> + <v> 0.66666667 0.66666667 0.40168321 </v> + <v> 0.11075100 0.11075100 0.50056647 </v> + <v> 0.44457786 0.11084427 0.49980856 </v> + <v> 0.77849801 0.11075100 0.50056647 </v> + <v> 0.11084427 0.44457786 0.49980856 </v> + <v> 0.44457786 0.44457786 0.49980856 </v> + <v> 0.77791389 0.44417222 0.50038136 </v> + <v> 0.11075100 0.77849801 0.50056647 </v> + <v> 0.44417222 0.77791389 0.50038136 </v> + <v> 0.77791389 0.77791389 0.50038136 </v> + <v> 0.88859424 0.22281152 0.59923232 </v> + <v> 0.22297563 0.22297563 0.59792137 </v> + <v> 0.55404874 0.22297563 0.59792137 </v> + <v> 0.88908555 0.55545723 0.59850686 </v> + <v> 0.22297563 0.55404874 0.59792137 </v> + <v> 0.55545723 0.55545723 0.59850686 </v> + <v> 0.88859424 0.88859424 0.59923232 </v> + <v> 0.22281152 0.88859424 0.59923232 </v> + <v> 0.55545723 0.88908555 0.59850686 </v> + <v> -0.00000000 -0.00000000 0.69735098 </v> + <v> 0.33305124 0.00103473 0.69745071 </v> + <v> 0.66591403 0.00103473 0.69745071 </v> + <v> 0.00103473 0.33305124 0.69745071 </v> + <v> 0.66591403 0.33305124 0.69745071 </v> + <v> 0.00103473 0.66591403 0.69745071 </v> + <v> 0.33305124 0.66591403 0.69745071 </v> + <v> 0.66666667 0.66666667 0.69641568 </v> + <v> 0.33333333 0.33333333 0.69388762 </v> + <v> 0.33333333 0.33333333 0.76720193 </v> + </varray> + </structure> + <varray name="forces" > + <v> -0.00000000 -0.00109120 0.01341461 </v> + <v> 0.04560551 0.02633036 -0.02754753 </v> + <v> -0.04560551 0.02633036 -0.02754753 </v> + <v> 0.01128277 -0.00651411 0.00846953 </v> + <v> 0.00000000 -0.05266071 -0.02754753 </v> + <v> -0.01128277 -0.00651411 0.00846953 </v> + <v> 0.00094500 0.00054560 0.01341461 </v> + <v> -0.00094500 0.00054560 0.01341461 </v> + <v> 0.00000000 0.01302822 0.00846953 </v> + <v> 0.00000000 -0.00000000 0.00614880 </v> + <v> -0.01380628 -0.00550656 0.00519753 </v> + <v> 0.01380628 -0.00550656 0.00519753 </v> + <v> -0.01167196 -0.00920331 0.00519753 </v> + <v> -0.00000000 -0.00000000 -0.00223466 </v> + <v> 0.01167196 -0.00920331 0.00519753 </v> + <v> 0.00213432 0.01470987 0.00519753 </v> + <v> -0.00213432 0.01470987 0.00519753 </v> + <v> -0.00000000 -0.00000000 -0.00545465 </v> + <v> 0.00091707 0.00052947 -0.00016117 </v> + <v> 0.00000000 -0.00532239 -0.00375104 </v> + <v> -0.00091707 0.00052947 -0.00016117 </v> + <v> -0.00460932 0.00266119 -0.00375104 </v> + <v> 0.00460932 0.00266119 -0.00375104 </v> + <v> -0.00000000 -0.00618709 -0.00208761 </v> + <v> 0.00000000 -0.00105894 -0.00016117 </v> + <v> -0.00535817 0.00309354 -0.00208761 </v> + <v> 0.00535817 0.00309354 -0.00208761 </v> + <v> -0.00000000 0.00822974 -0.00164542 </v> + <v> -0.01275246 -0.00736264 -0.01919638 </v> + <v> 0.01275246 -0.00736264 -0.01919638 </v> + <v> 0.00805368 -0.00464980 0.00164634 </v> + <v> -0.00000000 0.01472527 -0.01919638 </v> + <v> -0.00805368 -0.00464980 0.00164634 </v> + <v> -0.00712716 -0.00411487 -0.00164542 </v> + <v> 0.00712716 -0.00411487 -0.00164542 </v> + <v> -0.00000000 0.00929959 0.00164634 </v> + <v> 0.00000000 -0.00000000 -0.00683875 </v> + <v> 0.00038189 -0.00977218 -0.01364408 </v> + <v> -0.00038189 -0.00977218 -0.01364408 </v> + <v> -0.00827201 0.00521682 -0.01364408 </v> + <v> 0.00827201 0.00521682 -0.01364408 </v> + <v> -0.00865390 0.00455536 -0.01364408 </v> + <v> 0.00865390 0.00455536 -0.01364408 </v> + <v> -0.00000000 -0.00000000 0.00144494 </v> + <v> 0.00000000 -0.00000000 0.08203843 </v> + <v> -0.00000000 -0.00000000 0.06815121 </v> + </varray> + <varray name="stress" > + <v> -10.83171170 0.00000000 0.00000000 </v> + <v> 0.00000000 -10.83171170 0.00000000 </v> + <v> 0.00000000 -0.00000000 -2.21078144 </v> + </varray> + <energy> + <i name="e_fr_energy"> -101.72930812 </i> + <i name="e_wo_entrp"> -101.72607696 </i> + <i name="e_0_energy"> -0.00969348 </i> + </energy> + <time name="totalsc"> 15.40 15.45</time> + </calculation> + <calculation> + <scstep> + <time name="dav"> 4.82 4.83</time> + <time name="total"> 5.65 5.66</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20693494 </v> + <i name="Tr[quadrupol]"> -6472.90311981 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.87816962 </i> + <i name="ewald"> 133547.68290529 </i> + <i name="hartreedc">-181547.10783133 </i> + <i name="XCdc"> -530.19467837 </i> + <i name="pawpsdc"> 49357.29575866 </i> + <i name="pawaedc"> -47311.39162816 </i> + <i name="eentropy"> -0.00968547 </i> + <i name="bandstr"> -1325.35387307 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.72930789 </i> + <i name="e_wo_entrp"> -101.71962242 </i> + <i name="e_0_energy"> -101.72607940 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.64 1.65</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.46 3.47</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20625321 </v> + <i name="Tr[quadrupol]"> -6472.90367122 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72930973 </i> + <i name="e_wo_entrp"> -101.71962080 </i> + <i name="e_0_energy"> -101.72608009 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.52 1.52</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.35 3.36</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20688691 </v> + <i name="Tr[quadrupol]"> -6472.90320181 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72930800 </i> + <i name="e_wo_entrp"> -101.71962482 </i> + <i name="e_0_energy"> -101.72608027 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.34 1.34</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 2.86 2.87</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20680738 </v> + <i name="Tr[quadrupol]"> -6472.90331676 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.87858003 </i> + <i name="ewald"> 133547.68290529 </i> + <i name="hartreedc">-181547.11372478 </i> + <i name="XCdc"> -530.19470532 </i> + <i name="pawpsdc"> 49357.31237626 </i> + <i name="pawaedc"> -47311.40830149 </i> + <i name="eentropy"> -0.00968478 </i> + <i name="bandstr"> -1325.34830808 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.72930794 </i> + <i name="e_wo_entrp"> -101.71962316 </i> + <i name="e_0_energy"> -101.72607968 </i> + </energy> + </scstep> + <structure> + <crystal> + <varray name="basis" > + <v> 8.93075865 0.00000000 0.00000000 </v> + <v> 4.46537932 7.73426386 0.00000000 </v> + <v> 0.00000000 0.00000000 24.72257853 </v> + </varray> + <i name="volume"> 1707.65880700 </i> + <varray name="rec_basis" > + <v> 0.11197257 -0.06464739 0.00000000 </v> + <v> 0.00000000 0.12929479 0.00000000 </v> + <v> 0.00000000 0.00000000 0.04044886 </v> + </varray> + </crystal> + <varray name="positions" > + <v> 0.88888889 0.22222222 0.30336641 </v> + <v> 0.22222222 0.22222222 0.30336641 </v> + <v> 0.55555556 0.22222222 0.30336641 </v> + <v> 0.88888889 0.55555556 0.30336641 </v> + <v> 0.22222222 0.55555556 0.30336641 </v> + <v> 0.55555556 0.55555556 0.30336641 </v> + <v> 0.88888889 0.88888889 0.30336641 </v> + <v> 0.22222222 0.88888889 0.30336641 </v> + <v> 0.55555556 0.88888889 0.30336641 </v> + <v> 0.00000000 0.00000000 0.40168321 </v> + <v> 0.33333333 0.00000000 0.40168321 </v> + <v> 0.66666667 0.00000000 0.40168321 </v> + <v> 0.00000000 0.33333333 0.40168321 </v> + <v> 0.33333333 0.33333333 0.40168321 </v> + <v> 0.66666667 0.33333333 0.40168321 </v> + <v> 0.00000000 0.66666667 0.40168321 </v> + <v> 0.33333333 0.66666667 0.40168321 </v> + <v> 0.66666667 0.66666667 0.40168321 </v> + <v> 0.11075100 0.11075100 0.50056647 </v> + <v> 0.44457789 0.11084423 0.49980855 </v> + <v> 0.77849800 0.11075100 0.50056647 </v> + <v> 0.11084423 0.44457789 0.49980855 </v> + <v> 0.44457789 0.44457789 0.49980855 </v> + <v> 0.77791392 0.44417217 0.50038135 </v> + <v> 0.11075100 0.77849800 0.50056647 </v> + <v> 0.44417217 0.77791392 0.50038135 </v> + <v> 0.77791392 0.77791392 0.50038135 </v> + <v> 0.88859421 0.22281159 0.59923231 </v> + <v> 0.22297559 0.22297559 0.59792134 </v> + <v> 0.55404881 0.22297559 0.59792134 </v> + <v> 0.88908563 0.55545719 0.59850686 </v> + <v> 0.22297559 0.55404881 0.59792134 </v> + <v> 0.55545719 0.55545719 0.59850686 </v> + <v> 0.88859421 0.88859421 0.59923231 </v> + <v> 0.22281159 0.88859421 0.59923231 </v> + <v> 0.55545719 0.88908563 0.59850686 </v> + <v> -0.00000000 -0.00000000 0.69735096 </v> + <v> 0.33305129 0.00103460 0.69745066 </v> + <v> 0.66591411 0.00103460 0.69745066 </v> + <v> 0.00103460 0.33305129 0.69745066 </v> + <v> 0.66591411 0.33305129 0.69745066 </v> + <v> 0.00103460 0.66591411 0.69745066 </v> + <v> 0.33305129 0.66591411 0.69745066 </v> + <v> 0.66666667 0.66666667 0.69641569 </v> + <v> 0.33333333 0.33333333 0.69388574 </v> + <v> 0.33333333 0.33333333 0.76720422 </v> + </varray> + </structure> + <varray name="forces" > + <v> -0.00000000 -0.00109173 0.01325091 </v> + <v> 0.04559196 0.02632253 -0.02768150 </v> + <v> -0.04559196 0.02632253 -0.02768150 </v> + <v> 0.01128062 -0.00651287 0.00831564 </v> + <v> -0.00000000 -0.05264506 -0.02768150 </v> + <v> -0.01128062 -0.00651287 0.00831564 </v> + <v> 0.00094546 0.00054586 0.01325091 </v> + <v> -0.00094546 0.00054586 0.01325091 </v> + <v> -0.00000000 0.01302574 0.00831564 </v> + <v> -0.00000000 -0.00000000 0.00610257 </v> + <v> -0.01380122 -0.00549568 0.00514580 </v> + <v> 0.01380122 -0.00549568 0.00514580 </v> + <v> -0.01166001 -0.00920437 0.00514580 </v> + <v> -0.00000000 -0.00000000 -0.00228115 </v> + <v> 0.01166001 -0.00920437 0.00514580 </v> + <v> 0.00214121 0.01470005 0.00514580 </v> + <v> -0.00214121 0.01470005 0.00514580 </v> + <v> -0.00000000 -0.00000000 -0.00549497 </v> + <v> 0.00092682 0.00053510 -0.00014940 </v> + <v> 0.00000000 -0.00528412 -0.00371122 </v> + <v> -0.00092682 0.00053510 -0.00014940 </v> + <v> -0.00457618 0.00264206 -0.00371122 </v> + <v> 0.00457618 0.00264206 -0.00371122 </v> + <v> 0.00000000 -0.00615558 -0.00206617 </v> + <v> -0.00000000 -0.00107020 -0.00014940 </v> + <v> -0.00533089 0.00307779 -0.00206617 </v> + <v> 0.00533089 0.00307779 -0.00206617 </v> + <v> -0.00000000 0.00818878 -0.00170210 </v> + <v> -0.01279723 -0.00738849 -0.01928419 </v> + <v> 0.01279723 -0.00738849 -0.01928419 </v> + <v> 0.00799873 -0.00461807 0.00158111 </v> + <v> -0.00000000 0.01477697 -0.01928419 </v> + <v> -0.00799873 -0.00461807 0.00158111 </v> + <v> -0.00709169 -0.00409439 -0.00170210 </v> + <v> 0.00709169 -0.00409439 -0.00170210 </v> + <v> 0.00000000 0.00923614 0.00158111 </v> + <v> 0.00000000 -0.00000000 -0.00689762 </v> + <v> 0.00038810 -0.00971693 -0.01366958 </v> + <v> -0.00038810 -0.00971693 -0.01366958 </v> + <v> -0.00822105 0.00519457 -0.01366958 </v> + <v> 0.00822105 0.00519457 -0.01366958 </v> + <v> -0.00860916 0.00452236 -0.01366958 </v> + <v> 0.00860916 0.00452236 -0.01366958 </v> + <v> 0.00000000 -0.00000000 0.00133542 </v> + <v> 0.00000000 -0.00000000 0.08830239 </v> + <v> 0.00000000 -0.00000000 0.06441685 </v> + </varray> + <varray name="stress" > + <v> -10.84500472 0.00000000 0.00000000 </v> + <v> 0.00000000 -10.84500472 -0.00000000 </v> + <v> 0.00000000 0.00000000 -2.21967273 </v> + </varray> + <energy> + <i name="e_fr_energy"> -101.72930794 </i> + <i name="e_wo_entrp"> -101.72607968 </i> + <i name="e_0_energy"> -0.00968478 </i> + </energy> + <time name="totalsc"> 21.82 21.89</time> + </calculation> + <calculation> + <scstep> + <time name="dav"> 4.83 4.84</time> + <time name="total"> 5.65 5.67</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20678025 </v> + <i name="Tr[quadrupol]"> -6472.86936967 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.87885983 </i> + <i name="ewald"> 133548.10134476 </i> + <i name="hartreedc">-181547.54580670 </i> + <i name="XCdc"> -530.19468521 </i> + <i name="pawpsdc"> 49357.31408831 </i> + <i name="pawaedc"> -47311.41000340 </i> + <i name="eentropy"> -0.00965300 </i> + <i name="bandstr"> -1325.33518956 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.72949003 </i> + <i name="e_wo_entrp"> -101.71983703 </i> + <i name="e_0_energy"> -101.72627236 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.88 0.89</time> + <time name="diis"> 2.51 2.52</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.41 4.42</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20660006 </v> + <i name="Tr[quadrupol]"> -6472.86985579 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72950812 </i> + <i name="e_wo_entrp"> -101.71985322 </i> + <i name="e_0_energy"> -101.72628982 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.90 0.90</time> + <time name="diis"> 2.37 2.38</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.28 4.29</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20802187 </v> + <i name="Tr[quadrupol]"> -6472.86677644 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72952288 </i> + <i name="e_wo_entrp"> -101.71988343 </i> + <i name="e_0_energy"> -101.72630973 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.82 1.82</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.65 3.66</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20656873 </v> + <i name="Tr[quadrupol]"> -6472.86794633 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.72951096 </i> + <i name="e_wo_entrp"> -101.71985714 </i> + <i name="e_0_energy"> -101.72629302 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.85</time> + <time name="diis"> 1.57 1.57</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.09 3.11</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20728393 </v> + <i name="Tr[quadrupol]"> -6472.86829903 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.87723981 </i> + <i name="ewald"> 133548.10134476 </i> + <i name="hartreedc">-181547.50579086 </i> + <i name="XCdc"> -530.19493557 </i> + <i name="pawpsdc"> 49357.25667783 </i> + <i name="pawaedc"> -47311.35282648 </i> + <i name="eentropy"> -0.00964695 </i> + <i name="bandstr"> -1325.37312806 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.72951059 </i> + <i name="e_wo_entrp"> -101.71986364 </i> + <i name="e_0_energy"> -101.72629494 </i> + </energy> + </scstep> + <structure> + <crystal> + <varray name="basis" > + <v> 8.93075865 0.00000000 0.00000000 </v> + <v> 4.46537932 7.73426386 0.00000000 </v> + <v> 0.00000000 0.00000000 24.72257853 </v> + </varray> + <i name="volume"> 1707.65880700 </i> + <varray name="rec_basis" > + <v> 0.11197257 -0.06464739 0.00000000 </v> + <v> 0.00000000 0.12929479 0.00000000 </v> + <v> 0.00000000 0.00000000 0.04044886 </v> + </varray> + </crystal> + <varray name="positions" > + <v> 0.88888889 0.22222222 0.30336641 </v> + <v> 0.22222222 0.22222222 0.30336641 </v> + <v> 0.55555556 0.22222222 0.30336641 </v> + <v> 0.88888889 0.55555556 0.30336641 </v> + <v> 0.22222222 0.55555556 0.30336641 </v> + <v> 0.55555556 0.55555556 0.30336641 </v> + <v> 0.88888889 0.88888889 0.30336641 </v> + <v> 0.22222222 0.88888889 0.30336641 </v> + <v> 0.55555556 0.88888889 0.30336641 </v> + <v> 0.00000000 0.00000000 0.40168321 </v> + <v> 0.33333333 0.00000000 0.40168321 </v> + <v> 0.66666667 0.00000000 0.40168321 </v> + <v> 0.00000000 0.33333333 0.40168321 </v> + <v> 0.33333333 0.33333333 0.40168321 </v> + <v> 0.66666667 0.33333333 0.40168321 </v> + <v> 0.00000000 0.66666667 0.40168321 </v> + <v> 0.33333333 0.66666667 0.40168321 </v> + <v> 0.66666667 0.66666667 0.40168321 </v> + <v> 0.11075191 0.11075191 0.50056637 </v> + <v> 0.44458243 0.11083514 0.49980655 </v> + <v> 0.77849619 0.11075191 0.50056637 </v> + <v> 0.11083514 0.44458243 0.49980655 </v> + <v> 0.44458243 0.44458243 0.49980655 </v> + <v> 0.77791921 0.44416159 0.50038022 </v> + <v> 0.11075191 0.77849619 0.50056637 </v> + <v> 0.44416159 0.77791921 0.50038022 </v> + <v> 0.77791921 0.77791921 0.50038022 </v> + <v> 0.88858717 0.22282566 0.59923139 </v> + <v> 0.22296298 0.22296298 0.59791104 </v> + <v> 0.55407405 0.22296298 0.59791104 </v> + <v> 0.88910151 0.55544925 0.59850770 </v> + <v> 0.22296298 0.55407405 0.59791104 </v> + <v> 0.55544925 0.55544925 0.59850770 </v> + <v> 0.88858717 0.88858717 0.59923139 </v> + <v> 0.22282566 0.88858717 0.59923139 </v> + <v> 0.55544925 0.88910151 0.59850770 </v> + <v> -0.00000000 -0.00000000 0.69734724 </v> + <v> 0.33306023 0.00101775 0.69744328 </v> + <v> 0.66592202 0.00101775 0.69744328 </v> + <v> 0.00101775 0.33306023 0.69744328 </v> + <v> 0.66592202 0.33306023 0.69744328 </v> + <v> 0.00101775 0.66592202 0.69744328 </v> + <v> 0.33306023 0.66592202 0.69744328 </v> + <v> 0.66666667 0.66666667 0.69641642 </v> + <v> 0.33333333 0.33333333 0.69392635 </v> + <v> 0.33333333 0.33333333 0.76724577 </v> + </varray> + </structure> + <varray name="forces" > + <v> 0.00000000 -0.00105364 0.01318717 </v> + <v> 0.04556935 0.02630948 -0.02776902 </v> + <v> -0.04556935 0.02630948 -0.02776902 </v> + <v> 0.01131262 -0.00653135 0.00822775 </v> + <v> 0.00000000 -0.05261895 -0.02776902 </v> + <v> -0.01131262 -0.00653135 0.00822775 </v> + <v> 0.00091248 0.00052682 0.01318717 </v> + <v> -0.00091248 0.00052682 0.01318717 </v> + <v> 0.00000000 0.01306269 0.00822775 </v> + <v> 0.00000000 -0.00000000 0.00620237 </v> + <v> -0.01382111 -0.00546582 0.00510579 </v> + <v> 0.01382111 -0.00546582 0.00510579 </v> + <v> -0.01164409 -0.00923652 0.00510579 </v> + <v> 0.00000000 -0.00000000 -0.00221482 </v> + <v> 0.01164409 -0.00923652 0.00510579 </v> + <v> 0.00217701 0.01470234 0.00510579 </v> + <v> -0.00217701 0.01470234 0.00510579 </v> + <v> 0.00000000 -0.00000000 -0.00532626 </v> + <v> 0.00067610 0.00039035 -0.00026569 </v> + <v> 0.00000000 -0.00492859 -0.00341273 </v> + <v> -0.00067610 0.00039035 -0.00026569 </v> + <v> -0.00426828 0.00246429 -0.00341273 </v> + <v> 0.00426828 0.00246429 -0.00341273 </v> + <v> 0.00000000 -0.00550576 -0.00180731 </v> + <v> 0.00000000 -0.00078069 -0.00026569 </v> + <v> -0.00476813 0.00275288 -0.00180731 </v> + <v> 0.00476813 0.00275288 -0.00180731 </v> + <v> 0.00000000 0.00760052 -0.00184875 </v> + <v> -0.01110245 -0.00641000 -0.01739829 </v> + <v> 0.01110245 -0.00641000 -0.01739829 </v> + <v> 0.00740622 -0.00427599 0.00121704 </v> + <v> 0.00000000 0.01282001 -0.01739829 </v> + <v> -0.00740622 -0.00427599 0.00121704 </v> + <v> -0.00658224 -0.00380026 -0.00184875 </v> + <v> 0.00658224 -0.00380026 -0.00184875 </v> + <v> 0.00000000 0.00855197 0.00121704 </v> + <v> 0.00000000 -0.00000000 -0.00709387 </v> + <v> 0.00046713 -0.00885004 -0.01341342 </v> + <v> -0.00046713 -0.00885004 -0.01341342 </v> + <v> -0.00743079 0.00482957 -0.01341342 </v> + <v> 0.00743079 0.00482957 -0.01341342 </v> + <v> -0.00789792 0.00402047 -0.01341342 </v> + <v> 0.00789792 0.00402047 -0.01341342 </v> + <v> 0.00000000 -0.00000000 0.00109080 </v> + <v> 0.00000000 -0.00000000 0.08455297 </v> + <v> 0.00000000 -0.00000000 0.06224410 </v> + </varray> + <varray name="stress" > + <v> -10.85554728 0.00000000 0.00000000 </v> + <v> 0.00000000 -10.85554728 0.00000000 </v> + <v> 0.00000000 0.00000000 -2.22405582 </v> + </varray> + <energy> + <i name="e_fr_energy"> -101.72951059 </i> + <i name="e_wo_entrp"> -101.72629494 </i> + <i name="e_0_energy"> -0.00964695 </i> + </energy> + <time name="totalsc"> 27.25 27.35</time> + </calculation> + <calculation> + <scstep> + <time name="dav"> 4.81 4.82</time> + <time name="total"> 5.64 5.65</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20675332 </v> + <i name="Tr[quadrupol]"> -6472.76591050 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.87952389 </i> + <i name="ewald"> 133549.35837424 </i> + <i name="hartreedc">-181548.78935955 </i> + <i name="XCdc"> -530.19472212 </i> + <i name="pawpsdc"> 49357.25933149 </i> + <i name="pawaedc"> -47311.35539845 </i> + <i name="eentropy"> -0.00955630 </i> + <i name="bandstr"> -1325.34961467 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.72986653 </i> + <i name="e_wo_entrp"> -101.72031023 </i> + <i name="e_0_energy"> -101.72668110 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.86 0.86</time> + <time name="diis"> 2.57 2.58</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.42 4.43</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20659115 </v> + <i name="Tr[quadrupol]"> -6472.76805046 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73003293 </i> + <i name="e_wo_entrp"> -101.72047441 </i> + <i name="e_0_energy"> -101.72684676 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 2.57 2.58</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.47 4.48</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21002007 </v> + <i name="Tr[quadrupol]"> -6472.75833066 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73011894 </i> + <i name="e_wo_entrp"> -101.72060082 </i> + <i name="e_0_energy"> -101.72694623 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.55 2.56</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.39 4.41</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20598160 </v> + <i name="Tr[quadrupol]"> -6472.76187912 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73003481 </i> + <i name="e_wo_entrp"> -101.72047562 </i> + <i name="e_0_energy"> -101.72684841 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.87 0.88</time> + <time name="diis"> 2.48 2.48</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.43 4.44</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20844195 </v> + <i name="Tr[quadrupol]"> -6472.76302732 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73002798 </i> + <i name="e_wo_entrp"> -101.72049333 </i> + <i name="e_0_energy"> -101.72684976 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.90</time> + <time name="diis"> 2.10 2.11</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.00 4.02</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20682015 </v> + <i name="Tr[quadrupol]"> -6472.76067459 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73000916 </i> + <i name="e_wo_entrp"> -101.72045960 </i> + <i name="e_0_energy"> -101.72682597 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.64 1.64</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.46 3.47</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20728388 </v> + <i name="Tr[quadrupol]"> -6472.76094575 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73000624 </i> + <i name="e_wo_entrp"> -101.72046350 </i> + <i name="e_0_energy"> -101.72682533 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.85</time> + <time name="diis"> 1.48 1.49</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.31 3.33</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20732597 </v> + <i name="Tr[quadrupol]"> -6472.76049227 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73001199 </i> + <i name="e_wo_entrp"> -101.72047004 </i> + <i name="e_0_energy"> -101.72683134 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.32 1.33</time> + <time name="orth"> 0.15 0.15</time> + <time name="total"> 3.14 3.16</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20735585 </v> + <i name="Tr[quadrupol]"> -6472.76022872 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73001945 </i> + <i name="e_wo_entrp"> -101.72048011 </i> + <i name="e_0_energy"> -101.72683967 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.25 1.26</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.11 3.12</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20739336 </v> + <i name="Tr[quadrupol]"> -6472.75980238 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73002763 </i> + <i name="e_wo_entrp"> -101.72049032 </i> + <i name="e_0_energy"> -101.72684853 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.85 0.85</time> + <time name="diis"> 1.24 1.24</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.07 3.09</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20742814 </v> + <i name="Tr[quadrupol]"> -6472.75943296 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73003902 </i> + <i name="e_wo_entrp"> -101.72050403 </i> + <i name="e_0_energy"> -101.72686069 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.31 1.32</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.17 3.19</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20747905 </v> + <i name="Tr[quadrupol]"> -6472.75882314 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73005437 </i> + <i name="e_wo_entrp"> -101.72052258 </i> + <i name="e_0_energy"> -101.72687710 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 1.44 1.45</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.38 3.39</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20754787 </v> + <i name="Tr[quadrupol]"> -6472.75795832 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73007186 </i> + <i name="e_wo_entrp"> -101.72054466 </i> + <i name="e_0_energy"> -101.72689613 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 1.40 1.40</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.29 3.31</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20758752 </v> + <i name="Tr[quadrupol]"> -6472.75734530 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73007977 </i> + <i name="e_wo_entrp"> -101.72055593 </i> + <i name="e_0_energy"> -101.72690516 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.22 1.22</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 2.73 2.74</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20759588 </v> + <i name="Tr[quadrupol]"> -6472.75719514 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.87681625 </i> + <i name="ewald"> 133549.35837424 </i> + <i name="hartreedc">-181548.58537363 </i> + <i name="XCdc"> -530.19526065 </i> + <i name="pawpsdc"> 49357.25412763 </i> + <i name="pawaedc"> -47311.35147101 </i> + <i name="eentropy"> -0.00952280 </i> + <i name="bandstr"> -1325.54932524 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.73008027 </i> + <i name="e_wo_entrp"> -101.72055747 </i> + <i name="e_0_energy"> -101.72690601 </i> + </energy> + </scstep> + <structure> + <crystal> + <varray name="basis" > + <v> 8.93075865 0.00000000 0.00000000 </v> + <v> 4.46537932 7.73426386 0.00000000 </v> + <v> 0.00000000 0.00000000 24.72257853 </v> + </varray> + <i name="volume"> 1707.65880700 </i> + <varray name="rec_basis" > + <v> 0.11197257 -0.06464739 0.00000000 </v> + <v> 0.00000000 0.12929479 0.00000000 </v> + <v> 0.00000000 0.00000000 0.04044886 </v> + </varray> + </crystal> + <varray name="positions" > + <v> 0.88888889 0.22222222 0.30336641 </v> + <v> 0.22222222 0.22222222 0.30336641 </v> + <v> 0.55555556 0.22222222 0.30336641 </v> + <v> 0.88888889 0.55555556 0.30336641 </v> + <v> 0.22222222 0.55555556 0.30336641 </v> + <v> 0.55555556 0.55555556 0.30336641 </v> + <v> 0.88888889 0.88888889 0.30336641 </v> + <v> 0.22222222 0.88888889 0.30336641 </v> + <v> 0.55555556 0.88888889 0.30336641 </v> + <v> 0.00000000 0.00000000 0.40168321 </v> + <v> 0.33333333 0.00000000 0.40168321 </v> + <v> 0.66666667 0.00000000 0.40168321 </v> + <v> 0.00000000 0.33333333 0.40168321 </v> + <v> 0.33333333 0.33333333 0.40168321 </v> + <v> 0.66666667 0.33333333 0.40168321 </v> + <v> 0.00000000 0.66666667 0.40168321 </v> + <v> 0.33333333 0.66666667 0.40168321 </v> + <v> 0.66666667 0.66666667 0.40168321 </v> + <v> 0.11075464 0.11075464 0.50056610 </v> + <v> 0.44459607 0.11080787 0.49980056 </v> + <v> 0.77849073 0.11075464 0.50056610 </v> + <v> 0.11080787 0.44459607 0.49980056 </v> + <v> 0.44459607 0.44459607 0.49980056 </v> + <v> 0.77793507 0.44412985 0.50037686 </v> + <v> 0.11075464 0.77849073 0.50056610 </v> + <v> 0.44412985 0.77793507 0.50037686 </v> + <v> 0.77793507 0.77793507 0.50037686 </v> + <v> 0.88856607 0.22286787 0.59922863 </v> + <v> 0.22292512 0.22292512 0.59788012 </v> + <v> 0.55414975 0.22292512 0.59788012 </v> + <v> 0.88914915 0.55542542 0.59851022 </v> + <v> 0.22292512 0.55414975 0.59788012 </v> + <v> 0.55542542 0.55542542 0.59851022 </v> + <v> 0.88856607 0.88856607 0.59922863 </v> + <v> 0.22286787 0.88856607 0.59922863 </v> + <v> 0.55542542 0.88914915 0.59851022 </v> + <v> 0.00000000 -0.00000000 0.69733609 </v> + <v> 0.33308705 0.00096719 0.69742112 </v> + <v> 0.66594576 0.00096719 0.69742112 </v> + <v> 0.00096719 0.33308705 0.69742112 </v> + <v> 0.66594576 0.33308705 0.69742112 </v> + <v> 0.00096719 0.66594576 0.69742112 </v> + <v> 0.33308705 0.66594576 0.69742112 </v> + <v> 0.66666667 0.66666667 0.69641860 </v> + <v> 0.33333333 0.33333333 0.69404818 </v> + <v> 0.33333333 0.33333333 0.76737042 </v> + </varray> + </structure> + <varray name="forces" > + <v> -0.00000000 -0.00092972 0.01322620 </v> + <v> 0.04552568 0.02628427 -0.02790567 </v> + <v> -0.04552568 0.02628427 -0.02790567 </v> + <v> 0.01143290 -0.00660079 0.00815696 </v> + <v> -0.00000000 -0.05256853 -0.02790567 </v> + <v> -0.01143290 -0.00660079 0.00815696 </v> + <v> 0.00080516 0.00046486 0.01322620 </v> + <v> -0.00080516 0.00046486 0.01322620 </v> + <v> -0.00000000 0.01320158 0.00815696 </v> + <v> -0.00000000 -0.00000000 0.00622065 </v> + <v> -0.01388598 -0.00539256 0.00465086 </v> + <v> 0.01388598 -0.00539256 0.00465086 </v> + <v> -0.01161308 -0.00932933 0.00465086 </v> + <v> -0.00000000 -0.00000000 -0.00236751 </v> + <v> 0.01161308 -0.00932933 0.00465086 </v> + <v> 0.00227290 0.01472189 0.00465086 </v> + <v> -0.00227290 0.01472189 0.00465086 </v> + <v> -0.00000000 -0.00000000 -0.00513354 </v> + <v> -0.00004300 -0.00002483 -0.00119713 </v> + <v> -0.00000000 -0.00422649 -0.00384884 </v> + <v> 0.00004300 -0.00002483 -0.00119713 </v> + <v> -0.00366025 0.00211324 -0.00384884 </v> + <v> 0.00366025 0.00211324 -0.00384884 </v> + <v> -0.00000000 -0.00413019 -0.00164090 </v> + <v> -0.00000000 0.00004966 -0.00119713 </v> + <v> -0.00357685 0.00206509 -0.00164090 </v> + <v> 0.00357685 0.00206509 -0.00164090 </v> + <v> -0.00000000 0.00593316 -0.00236557 </v> + <v> -0.00585934 -0.00338289 -0.01220781 </v> + <v> 0.00585934 -0.00338289 -0.01220781 </v> + <v> 0.00571794 -0.00330125 -0.00018271 </v> + <v> -0.00000000 0.00676578 -0.01220781 </v> + <v> -0.00571794 -0.00330125 -0.00018271 </v> + <v> -0.00513827 -0.00296658 -0.00236557 </v> + <v> 0.00513827 -0.00296658 -0.00236557 </v> + <v> -0.00000000 0.00660251 -0.00018271 </v> + <v> -0.00000000 -0.00000000 -0.00668940 </v> + <v> 0.00072546 -0.00630672 -0.01241893 </v> + <v> -0.00072546 -0.00630672 -0.01241893 </v> + <v> -0.00509904 0.00378163 -0.01241893 </v> + <v> 0.00509904 0.00378163 -0.01241893 </v> + <v> -0.00582451 0.00252509 -0.01241893 </v> + <v> 0.00582451 0.00252509 -0.01241893 </v> + <v> -0.00000000 -0.00000000 0.00054632 </v> + <v> -0.00000000 -0.00000000 0.07959079 </v> + <v> -0.00000000 -0.00000000 0.05833755 </v> + </varray> + <varray name="stress" > + <v> -10.85236830 0.00000000 0.00000000 </v> + <v> 0.00000000 -10.85236830 0.00000000 </v> + <v> 0.00000000 0.00000000 -2.23139718 </v> + </varray> + <energy> + <i name="e_fr_energy"> -101.73008027 </i> + <i name="e_wo_entrp"> -101.72690601 </i> + <i name="e_0_energy"> -0.00952280 </i> + </energy> + <time name="totalsc"> 62.32 62.54</time> + </calculation> + <calculation> + <scstep> + <time name="dav"> 4.93 4.94</time> + <time name="total"> 5.77 5.78</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20759174 </v> + <i name="Tr[quadrupol]"> -6472.55425113 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.87798912 </i> + <i name="ewald"> 133551.88013504 </i> + <i name="hartreedc">-181551.19614614 </i> + <i name="XCdc"> -530.19492005 </i> + <i name="pawpsdc"> 49357.25422905 </i> + <i name="pawaedc"> -47311.35157399 </i> + <i name="eentropy"> -0.00933169 </i> + <i name="bandstr"> -1325.46209756 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.73016129 </i> + <i name="e_wo_entrp"> -101.72082960 </i> + <i name="e_0_energy"> -101.72705073 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.50 2.51</time> + <time name="orth"> 0.15 0.16</time> + <time name="total"> 4.32 4.33</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20561972 </v> + <i name="Tr[quadrupol]"> -6472.55818926 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73096420 </i> + <i name="e_wo_entrp"> -101.72161118 </i> + <i name="e_0_energy"> -101.72784653 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.50 2.51</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.32 4.33</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21618716 </v> + <i name="Tr[quadrupol]"> -6472.53887226 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73150865 </i> + <i name="e_wo_entrp"> -101.72228370 </i> + <i name="e_0_energy"> -101.72843367 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.51 2.52</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.33 4.35</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20626635 </v> + <i name="Tr[quadrupol]"> -6472.54599300 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73092031 </i> + <i name="e_wo_entrp"> -101.72158516 </i> + <i name="e_0_energy"> -101.72780859 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.52 2.52</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.33 4.35</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21037346 </v> + <i name="Tr[quadrupol]"> -6472.54862452 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73090719 </i> + <i name="e_wo_entrp"> -101.72161345 </i> + <i name="e_0_energy"> -101.72780928 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.87 0.87</time> + <time name="diis"> 2.59 2.60</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.46 4.48</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20719081 </v> + <i name="Tr[quadrupol]"> -6472.54401688 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73085552 </i> + <i name="e_wo_entrp"> -101.72153234 </i> + <i name="e_0_energy"> -101.72774779 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 2.15 2.15</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.04 4.05</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20822384 </v> + <i name="Tr[quadrupol]"> -6472.54497938 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73084476 </i> + <i name="e_wo_entrp"> -101.72153553 </i> + <i name="e_0_energy"> -101.72774168 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.59 1.59</time> + <time name="orth"> 0.15 0.15</time> + <time name="total"> 3.40 3.42</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20827367 </v> + <i name="Tr[quadrupol]"> -6472.54416014 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73085655 </i> + <i name="e_wo_entrp"> -101.72154797 </i> + <i name="e_0_energy"> -101.72775369 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 1.61 1.61</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.52 3.53</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20832956 </v> + <i name="Tr[quadrupol]"> -6472.54378154 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73087212 </i> + <i name="e_wo_entrp"> -101.72156827 </i> + <i name="e_0_energy"> -101.72777084 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 1.46 1.46</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.37 3.38</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20839551 </v> + <i name="Tr[quadrupol]"> -6472.54306288 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73088969 </i> + <i name="e_wo_entrp"> -101.72158970 </i> + <i name="e_0_energy"> -101.72778969 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.27 1.27</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.10 3.11</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20844096 </v> + <i name="Tr[quadrupol]"> -6472.54255905 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73091081 </i> + <i name="e_wo_entrp"> -101.72161457 </i> + <i name="e_0_energy"> -101.72781206 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.38 1.38</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.20 3.22</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20851460 </v> + <i name="Tr[quadrupol]"> -6472.54168705 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73094010 </i> + <i name="e_wo_entrp"> -101.72164873 </i> + <i name="e_0_energy"> -101.72784298 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.46 1.47</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.29 3.30</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20861599 </v> + <i name="Tr[quadrupol]"> -6472.54041262 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73097564 </i> + <i name="e_wo_entrp"> -101.72169163 </i> + <i name="e_0_energy"> -101.72788097 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.45 1.45</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.27 3.28</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20870255 </v> + <i name="Tr[quadrupol]"> -6472.53922556 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73099840 </i> + <i name="e_wo_entrp"> -101.72172138 </i> + <i name="e_0_energy"> -101.72790606 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.26 1.27</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.08 3.10</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20871716 </v> + <i name="Tr[quadrupol]"> -6472.53893049 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73100099 </i> + <i name="e_wo_entrp"> -101.72172597 </i> + <i name="e_0_energy"> -101.72790932 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.20 1.20</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 2.71 2.72</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20871156 </v> + <i name="Tr[quadrupol]"> -6472.53886013 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.87439661 </i> + <i name="ewald"> 133551.88013504 </i> + <i name="hartreedc">-181550.81113441 </i> + <i name="XCdc"> -530.19591916 </i> + <i name="pawpsdc"> 49357.18927729 </i> + <i name="pawaedc"> -47311.28909136 </i> + <i name="eentropy"> -0.00927396 </i> + <i name="bandstr"> -1325.84094575 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.73100078 </i> + <i name="e_wo_entrp"> -101.72172681 </i> + <i name="e_0_energy"> -101.72790946 </i> + </energy> + </scstep> + <structure> + <crystal> + <varray name="basis" > + <v> 8.93075865 0.00000000 0.00000000 </v> + <v> 4.46537932 7.73426386 0.00000000 </v> + <v> 0.00000000 0.00000000 24.72257853 </v> + </varray> + <i name="volume"> 1707.65880700 </i> + <varray name="rec_basis" > + <v> 0.11197257 -0.06464739 0.00000000 </v> + <v> 0.00000000 0.12929479 0.00000000 </v> + <v> 0.00000000 0.00000000 0.04044886 </v> + </varray> + </crystal> + <varray name="positions" > + <v> 0.88888889 0.22222222 0.30336641 </v> + <v> 0.22222222 0.22222222 0.30336641 </v> + <v> 0.55555556 0.22222222 0.30336641 </v> + <v> 0.88888889 0.55555556 0.30336641 </v> + <v> 0.22222222 0.55555556 0.30336641 </v> + <v> 0.55555556 0.55555556 0.30336641 </v> + <v> 0.88888889 0.88888889 0.30336641 </v> + <v> 0.22222222 0.88888889 0.30336641 </v> + <v> 0.55555556 0.88888889 0.30336641 </v> + <v> 0.00000000 0.00000000 0.40168321 </v> + <v> 0.33333333 0.00000000 0.40168321 </v> + <v> 0.66666667 0.00000000 0.40168321 </v> + <v> 0.00000000 0.33333333 0.40168321 </v> + <v> 0.33333333 0.33333333 0.40168321 </v> + <v> 0.66666667 0.33333333 0.40168321 </v> + <v> 0.00000000 0.66666667 0.40168321 </v> + <v> 0.33333333 0.66666667 0.40168321 </v> + <v> 0.66666667 0.66666667 0.40168321 </v> + <v> 0.11076009 0.11076009 0.50056554 </v> + <v> 0.44462334 0.11075332 0.49978859 </v> + <v> 0.77847981 0.11076009 0.50056554 </v> + <v> 0.11075332 0.44462334 0.49978859 </v> + <v> 0.44462334 0.44462334 0.49978859 </v> + <v> 0.77796681 0.44406638 0.50037012 </v> + <v> 0.11076009 0.77847981 0.50056554 </v> + <v> 0.44406638 0.77796681 0.50037012 </v> + <v> 0.77796681 0.77796681 0.50037012 </v> + <v> 0.88852386 0.22295228 0.59922310 </v> + <v> 0.22284942 0.22284942 0.59781828 </v> + <v> 0.55430116 0.22284942 0.59781828 </v> + <v> 0.88924444 0.55537778 0.59851526 </v> + <v> 0.22284942 0.55430116 0.59781828 </v> + <v> 0.55537778 0.55537778 0.59851526 </v> + <v> 0.88852386 0.88852386 0.59922310 </v> + <v> 0.22295228 0.88852386 0.59922310 </v> + <v> 0.55537778 0.88924444 0.59851526 </v> + <v> 0.00000000 -0.00000000 0.69731378 </v> + <v> 0.33314069 0.00086607 0.69737679 </v> + <v> 0.66599324 0.00086607 0.69737679 </v> + <v> 0.00086607 0.33314069 0.69737679 </v> + <v> 0.66599324 0.33314069 0.69737679 </v> + <v> 0.00086607 0.66599324 0.69737679 </v> + <v> 0.33314069 0.66599324 0.69737679 </v> + <v> 0.66666667 0.66666667 0.69642297 </v> + <v> 0.33333333 0.33333333 0.69429185 </v> + <v> 0.33333333 0.33333333 0.76761972 </v> + </varray> + </structure> + <varray name="forces" > + <v> -0.00000000 -0.00068641 0.01320220 </v> + <v> 0.04543476 0.02623177 -0.02821860 </v> + <v> -0.04543476 0.02623177 -0.02821860 </v> + <v> 0.01166126 -0.00673263 0.00793958 </v> + <v> -0.00000000 -0.05246354 -0.02821860 </v> + <v> -0.01166126 -0.00673263 0.00793958 </v> + <v> 0.00059445 0.00034320 0.01320220 </v> + <v> -0.00059445 0.00034320 0.01320220 </v> + <v> -0.00000000 0.01346526 0.00793958 </v> + <v> -0.00000000 -0.00000000 0.00641843 </v> + <v> -0.01401375 -0.00523930 0.00392123 </v> + <v> 0.01401375 -0.00523930 0.00392123 </v> + <v> -0.01154424 -0.00951662 0.00392123 </v> + <v> -0.00000000 -0.00000000 -0.00245119 </v> + <v> 0.01154424 -0.00951662 0.00392123 </v> + <v> 0.00246951 0.01475592 0.00392123 </v> + <v> -0.00246951 0.01475592 0.00392123 </v> + <v> -0.00000000 -0.00000000 -0.00457562 </v> + <v> -0.00151942 -0.00087724 -0.00276836 </v> + <v> -0.00000000 -0.00263884 -0.00413577 </v> + <v> 0.00151942 -0.00087724 -0.00276836 </v> + <v> -0.00228530 0.00131942 -0.00413577 </v> + <v> 0.00228530 0.00131942 -0.00413577 </v> + <v> -0.00000000 -0.00106272 -0.00083733 </v> + <v> -0.00000000 0.00175447 -0.00276836 </v> + <v> -0.00092034 0.00053136 -0.00083733 </v> + <v> 0.00092034 0.00053136 -0.00083733 </v> + <v> -0.00000000 0.00234802 -0.00335157 </v> + <v> 0.00388835 0.00224494 -0.00221727 </v> + <v> -0.00388835 0.00224494 -0.00221727 </v> + <v> 0.00206111 -0.00118998 -0.00267763 </v> + <v> -0.00000000 -0.00448987 -0.00221727 </v> + <v> -0.00206111 -0.00118998 -0.00267763 </v> + <v> -0.00203345 -0.00117401 -0.00335157 </v> + <v> 0.00203345 -0.00117401 -0.00335157 </v> + <v> -0.00000000 0.00237997 -0.00267763 </v> + <v> -0.00000000 -0.00000000 -0.00619883 </v> + <v> 0.00103646 -0.00123691 -0.01043607 </v> + <v> -0.00103646 -0.00123691 -0.01043607 </v> + <v> -0.00055297 0.00151605 -0.01043607 </v> + <v> 0.00055297 0.00151605 -0.01043607 </v> + <v> -0.00158942 -0.00027914 -0.01043607 </v> + <v> 0.00158942 -0.00027914 -0.01043607 </v> + <v> -0.00000000 -0.00000000 -0.00069487 </v> + <v> -0.00000000 -0.00000000 0.06749224 </v> + <v> -0.00000000 -0.00000000 0.04829312 </v> + </varray> + <varray name="stress" > + <v> -10.85867453 0.00000000 0.00000000 </v> + <v> 0.00000000 -10.85867453 0.00000000 </v> + <v> 0.00000000 -0.00000000 -2.24666002 </v> + </varray> + <energy> + <i name="e_fr_energy"> -101.73100078 </i> + <i name="e_wo_entrp"> -101.72790946 </i> + <i name="e_0_energy"> -0.00927396 </i> + </energy> + <time name="totalsc"> 66.84 67.08</time> + </calculation> + <calculation> + <scstep> + <time name="dav"> 5.00 5.01</time> + <time name="total"> 5.84 5.86</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20869883 </v> + <i name="Tr[quadrupol]"> -6472.13406613 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.87676897 </i> + <i name="ewald"> 133556.95442384 </i> + <i name="hartreedc">-181556.06124943 </i> + <i name="XCdc"> -530.19474098 </i> + <i name="pawpsdc"> 49357.18920962 </i> + <i name="pawaedc"> -47311.28902402 </i> + <i name="eentropy"> -0.00889453 </i> + <i name="bandstr"> -1325.66665055 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.72860214 </i> + <i name="e_wo_entrp"> -101.71970761 </i> + <i name="e_0_energy"> -101.72563730 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.56 2.57</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.43 4.44</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20454576 </v> + <i name="Tr[quadrupol]"> -6472.14231106 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73203342 </i> + <i name="e_wo_entrp"> -101.72308707 </i> + <i name="e_0_energy"> -101.72905130 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.91 0.91</time> + <time name="diis"> 2.61 2.61</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.53 4.55</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.22618022 </v> + <i name="Tr[quadrupol]"> -6472.10296125 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73415095 </i> + <i name="e_wo_entrp"> -101.72550640 </i> + <i name="e_0_energy"> -101.73126944 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.52 2.53</time> + <time name="orth"> 0.15 0.15</time> + <time name="total"> 4.35 4.36</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20591663 </v> + <i name="Tr[quadrupol]"> -6472.11725003 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73172511 </i> + <i name="e_wo_entrp"> -101.72282272 </i> + <i name="e_0_energy"> -101.72875764 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.83 0.84</time> + <time name="diis"> 2.53 2.54</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.35 4.36</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21411558 </v> + <i name="Tr[quadrupol]"> -6472.12279480 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73173364 </i> + <i name="e_wo_entrp"> -101.72291679 </i> + <i name="e_0_energy"> -101.72879469 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.57 2.57</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.39 4.41</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20790868 </v> + <i name="Tr[quadrupol]"> -6472.11372765 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73156827 </i> + <i name="e_wo_entrp"> -101.72269426 </i> + <i name="e_0_energy"> -101.72861027 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.85 0.85</time> + <time name="diis"> 2.44 2.44</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.28 4.30</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20996750 </v> + <i name="Tr[quadrupol]"> -6472.11556594 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73153640 </i> + <i name="e_wo_entrp"> -101.72268984 </i> + <i name="e_0_energy"> -101.72858755 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.85</time> + <time name="diis"> 1.70 1.71</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.53 3.54</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21006866 </v> + <i name="Tr[quadrupol]"> -6472.11401557 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73157062 </i> + <i name="e_wo_entrp"> -101.72272466 </i> + <i name="e_0_energy"> -101.72862197 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.86 0.86</time> + <time name="diis"> 1.80 1.81</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.70 3.72</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21018535 </v> + <i name="Tr[quadrupol]"> -6472.11325020 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73161646 </i> + <i name="e_wo_entrp"> -101.72277985 </i> + <i name="e_0_energy"> -101.72867092 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.90 0.90</time> + <time name="diis"> 1.65 1.65</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.56 3.57</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21032179 </v> + <i name="Tr[quadrupol]"> -6472.11181363 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73166784 </i> + <i name="e_wo_entrp"> -101.72283895 </i> + <i name="e_0_energy"> -101.72872487 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.41 1.41</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.25 3.27</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21040518 </v> + <i name="Tr[quadrupol]"> -6472.11082207 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73172609 </i> + <i name="e_wo_entrp"> -101.72290475 </i> + <i name="e_0_energy"> -101.72878564 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.57 1.57</time> + <time name="orth"> 0.17 0.17</time> + <time name="total"> 3.43 3.45</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21055425 </v> + <i name="Tr[quadrupol]"> -6472.10913767 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73180543 </i> + <i name="e_wo_entrp"> -101.72299337 </i> + <i name="e_0_energy"> -101.72886808 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 1.65 1.65</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.64 3.66</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21076712 </v> + <i name="Tr[quadrupol]"> -6472.10657524 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73190507 </i> + <i name="e_wo_entrp"> -101.72310755 </i> + <i name="e_0_energy"> -101.72897256 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 1.56 1.57</time> + <time name="orth"> 0.15 0.15</time> + <time name="total"> 3.46 3.47</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21094356 </v> + <i name="Tr[quadrupol]"> -6472.10415825 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73197130 </i> + <i name="e_wo_entrp"> -101.72318758 </i> + <i name="e_0_energy"> -101.72904339 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.36 1.36</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.18 3.20</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21098353 </v> + <i name="Tr[quadrupol]"> -6472.10338026 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73198223 </i> + <i name="e_wo_entrp"> -101.72320353 </i> + <i name="e_0_energy"> -101.72905599 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.83 0.84</time> + <time name="diis"> 1.28 1.28</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 2.79 2.80</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21097676 </v> + <i name="Tr[quadrupol]"> -6472.10321569 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.86948617 </i> + <i name="ewald"> 133556.95442384 </i> + <i name="hartreedc">-181555.28971897 </i> + <i name="XCdc"> -530.19678834 </i> + <i name="pawpsdc"> 49357.16396918 </i> + <i name="pawaedc"> -47311.26992652 </i> + <i name="eentropy"> -0.00877675 </i> + <i name="bandstr"> -1326.42620484 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.73198130 </i> + <i name="e_wo_entrp"> -101.72320455 </i> + <i name="e_0_energy"> -101.72905572 </i> + </energy> + </scstep> + <structure> + <crystal> + <varray name="basis" > + <v> 8.93075865 0.00000000 0.00000000 </v> + <v> 4.46537932 7.73426386 0.00000000 </v> + <v> 0.00000000 0.00000000 24.72257853 </v> + </varray> + <i name="volume"> 1707.65880700 </i> + <varray name="rec_basis" > + <v> 0.11197257 -0.06464739 0.00000000 </v> + <v> 0.00000000 0.12929479 0.00000000 </v> + <v> 0.00000000 0.00000000 0.04044886 </v> + </varray> + </crystal> + <varray name="positions" > + <v> 0.88888889 0.22222222 0.30336641 </v> + <v> 0.22222222 0.22222222 0.30336641 </v> + <v> 0.55555556 0.22222222 0.30336641 </v> + <v> 0.88888889 0.55555556 0.30336641 </v> + <v> 0.22222222 0.55555556 0.30336641 </v> + <v> 0.55555556 0.55555556 0.30336641 </v> + <v> 0.88888889 0.88888889 0.30336641 </v> + <v> 0.22222222 0.88888889 0.30336641 </v> + <v> 0.55555556 0.88888889 0.30336641 </v> + <v> 0.00000000 0.00000000 0.40168321 </v> + <v> 0.33333333 0.00000000 0.40168321 </v> + <v> 0.66666667 0.00000000 0.40168321 </v> + <v> 0.00000000 0.33333333 0.40168321 </v> + <v> 0.33333333 0.33333333 0.40168321 </v> + <v> 0.66666667 0.33333333 0.40168321 </v> + <v> 0.00000000 0.66666667 0.40168321 </v> + <v> 0.33333333 0.66666667 0.40168321 </v> + <v> 0.66666667 0.66666667 0.40168321 </v> + <v> 0.11077101 0.11077101 0.50056443 </v> + <v> 0.44467788 0.11064424 0.49976463 </v> + <v> 0.77845798 0.11077101 0.50056443 </v> + <v> 0.11064424 0.44467788 0.49976463 </v> + <v> 0.44467788 0.44467788 0.49976463 </v> + <v> 0.77803028 0.44393944 0.50035664 </v> + <v> 0.11077101 0.77845798 0.50056443 </v> + <v> 0.44393944 0.77803028 0.50035664 </v> + <v> 0.77803028 0.77803028 0.50035664 </v> + <v> 0.88843944 0.22312112 0.59921204 </v> + <v> 0.22269801 0.22269801 0.59769460 </v> + <v> 0.55460398 0.22269801 0.59769460 </v> + <v> 0.88943502 0.55528249 0.59852534 </v> + <v> 0.22269801 0.55460398 0.59769460 </v> + <v> 0.55528249 0.55528249 0.59852534 </v> + <v> 0.88843944 0.88843944 0.59921204 </v> + <v> 0.22312112 0.88843944 0.59921204 </v> + <v> 0.55528249 0.88943502 0.59852534 </v> + <v> 0.00000000 -0.00000000 0.69726918 </v> + <v> 0.33324797 0.00066384 0.69728815 </v> + <v> 0.66608819 0.00066384 0.69728815 </v> + <v> 0.00066384 0.33324797 0.69728815 </v> + <v> 0.66608819 0.33324797 0.69728815 </v> + <v> 0.00066384 0.66608819 0.69728815 </v> + <v> 0.33324797 0.66608819 0.69728815 </v> + <v> 0.66666667 0.66666667 0.69643170 </v> + <v> 0.33333333 0.33333333 0.69477918 </v> + <v> 0.33333333 0.33333333 0.76811830 </v> + </varray> + </structure> + <varray name="forces" > + <v> 0.00000000 -0.00019036 0.01338476 </v> + <v> 0.04526223 0.02613216 -0.02863227 </v> + <v> -0.04526223 0.02613216 -0.02863227 </v> + <v> 0.01213129 -0.00700400 0.00773549 </v> + <v> -0.00000000 -0.05226432 -0.02863227 </v> + <v> -0.01213129 -0.00700400 0.00773549 </v> + <v> 0.00016486 0.00009518 0.01338476 </v> + <v> -0.00016486 0.00009518 0.01338476 </v> + <v> -0.00000000 0.01400800 0.00773549 </v> + <v> 0.00000000 0.00000000 0.00703123 </v> + <v> -0.01427070 -0.00493682 0.00267052 </v> + <v> 0.01427070 -0.00493682 0.00267052 </v> + <v> -0.01141077 -0.00989038 0.00267052 </v> + <v> 0.00000000 0.00000000 -0.00241574 </v> + <v> 0.01141077 -0.00989038 0.00267052 </v> + <v> 0.00285994 0.01482720 0.00267052 </v> + <v> -0.00285994 0.01482720 0.00267052 </v> + <v> 0.00000000 0.00000000 -0.00325884 </v> + <v> -0.00450974 -0.00260370 -0.00575555 </v> + <v> 0.00000000 0.00004093 -0.00505173 </v> + <v> 0.00450974 -0.00260370 -0.00575555 </v> + <v> 0.00003545 -0.00002046 -0.00505173 </v> + <v> -0.00003545 -0.00002046 -0.00505173 </v> + <v> 0.00000000 0.00480965 0.00086288 </v> + <v> 0.00000000 0.00520740 -0.00575555 </v> + <v> 0.00416528 -0.00240482 0.00086288 </v> + <v> -0.00416528 -0.00240482 0.00086288 </v> + <v> 0.00000000 -0.00460138 -0.00522212 </v> + <v> 0.02341285 0.01351742 0.01814059 </v> + <v> -0.02341285 0.01351742 0.01814059 </v> + <v> -0.00540623 0.00312129 -0.00732421 </v> + <v> 0.00000000 -0.02703483 0.01814059 </v> + <v> 0.00540623 0.00312129 -0.00732421 </v> + <v> 0.00398491 0.00230069 -0.00522212 </v> + <v> -0.00398491 0.00230069 -0.00522212 </v> + <v> 0.00000000 -0.00624258 -0.00732421 </v> + <v> 0.00000000 0.00000000 -0.00797322 </v> + <v> 0.00193524 0.00933100 -0.00603591 </v> + <v> -0.00193524 0.00933100 -0.00603591 </v> + <v> 0.00904850 -0.00298953 -0.00603591 </v> + <v> -0.00904850 -0.00298953 -0.00603591 </v> + <v> 0.00711326 -0.00634147 -0.00603591 </v> + <v> -0.00711326 -0.00634147 -0.00603591 </v> + <v> 0.00000000 0.00000000 -0.00339577 </v> + <v> 0.00000000 0.00000000 0.03688527 </v> + <v> 0.00000000 0.00000000 0.02890591 </v> + </varray> + <varray name="stress" > + <v> -10.86827276 0.00000000 0.00000000 </v> + <v> 0.00000000 -10.86827276 0.00000000 </v> + <v> 0.00000000 0.00000000 -2.26275445 </v> + </varray> + <energy> + <i name="e_fr_energy"> -101.73198130 </i> + <i name="e_wo_entrp"> -101.72905572 </i> + <i name="e_0_energy"> -0.00877675 </i> + </energy> + <time name="totalsc"> 68.81 69.05</time> + </calculation> + <calculation> + <scstep> + <time name="dav"> 4.84 4.85</time> + <time name="total"> 5.66 5.68</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21095374 </v> + <i name="Tr[quadrupol]"> -6471.97219371 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.87032438 </i> + <i name="ewald"> 133558.60948965 </i> + <i name="hartreedc">-181557.00150135 </i> + <i name="XCdc"> -530.19628405 </i> + <i name="pawpsdc"> 49357.16362631 </i> + <i name="pawaedc"> -47311.26960122 </i> + <i name="eentropy"> -0.00864653 </i> + <i name="bandstr"> -1326.37065251 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.73169039 </i> + <i name="e_wo_entrp"> -101.72304386 </i> + <i name="e_0_energy"> -101.72880821 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.83 0.84</time> + <time name="diis"> 2.54 2.55</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.39 4.40</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20969423 </v> + <i name="Tr[quadrupol]"> -6471.97468460 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73201173 </i> + <i name="e_wo_entrp"> -101.72334526 </i> + <i name="e_0_energy"> -101.72912290 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 2.61 2.61</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.51 4.53</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21646673 </v> + <i name="Tr[quadrupol]"> -6471.96225331 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73225399 </i> + <i name="e_wo_entrp"> -101.72368049 </i> + <i name="e_0_energy"> -101.72939616 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.85</time> + <time name="diis"> 2.57 2.58</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.41 4.43</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21007507 </v> + <i name="Tr[quadrupol]"> -6471.96688274 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73201121 </i> + <i name="e_wo_entrp"> -101.72336022 </i> + <i name="e_0_energy"> -101.72912755 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 2.52 2.53</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.42 4.43</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21270729 </v> + <i name="Tr[quadrupol]"> -6471.96853871 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73200394 </i> + <i name="e_wo_entrp"> -101.72337953 </i> + <i name="e_0_energy"> -101.72912914 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.90</time> + <time name="diis"> 2.37 2.37</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.26 4.28</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21065285 </v> + <i name="Tr[quadrupol]"> -6471.96554829 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73197935 </i> + <i name="e_wo_entrp"> -101.72333500 </i> + <i name="e_0_energy"> -101.72909790 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.72 1.73</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.54 3.56</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21132763 </v> + <i name="Tr[quadrupol]"> -6471.96614363 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73197210 </i> + <i name="e_wo_entrp"> -101.72333682 </i> + <i name="e_0_energy"> -101.72909367 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.85 0.85</time> + <time name="diis"> 1.54 1.55</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.38 3.38</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21135722 </v> + <i name="Tr[quadrupol]"> -6471.96561270 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73197803 </i> + <i name="e_wo_entrp"> -101.72334338 </i> + <i name="e_0_energy"> -101.72909981 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.85</time> + <time name="diis"> 1.37 1.37</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.20 3.21</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21138781 </v> + <i name="Tr[quadrupol]"> -6471.96536513 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73198540 </i> + <i name="e_wo_entrp"> -101.72335413 </i> + <i name="e_0_energy"> -101.72910831 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.25 1.26</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.07 3.09</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21142530 </v> + <i name="Tr[quadrupol]"> -6471.96490847 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73199362 </i> + <i name="e_wo_entrp"> -101.72336497 </i> + <i name="e_0_energy"> -101.72911741 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.24 1.24</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.06 3.07</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21145478 </v> + <i name="Tr[quadrupol]"> -6471.96457292 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73200417 </i> + <i name="e_wo_entrp"> -101.72337813 </i> + <i name="e_0_energy"> -101.72912883 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.31 1.32</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.13 3.14</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21149756 </v> + <i name="Tr[quadrupol]"> -6471.96398977 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73201906 </i> + <i name="e_wo_entrp"> -101.72339674 </i> + <i name="e_0_energy"> -101.72914495 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.86 0.86</time> + <time name="diis"> 1.50 1.51</time> + <time name="orth"> 0.17 0.17</time> + <time name="total"> 3.37 3.39</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21155513 </v> + <i name="Tr[quadrupol]"> -6471.96315491 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73203649 </i> + <i name="e_wo_entrp"> -101.72341943 </i> + <i name="e_0_energy"> -101.72916414 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 1.47 1.47</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.38 3.39</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21160366 </v> + <i name="Tr[quadrupol]"> -6471.96241608 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73204647 </i> + <i name="e_wo_entrp"> -101.72343410 </i> + <i name="e_0_energy"> -101.72917568 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.23 1.23</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 2.76 2.77</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21161297 </v> + <i name="Tr[quadrupol]"> -6471.96224968 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.86821901 </i> + <i name="ewald"> 133558.60948965 </i> + <i name="hartreedc">-181556.75316036 </i> + <i name="XCdc"> -530.19694491 </i> + <i name="pawpsdc"> 49357.18138615 </i> + <i name="pawaedc"> -47311.28965383 </i> + <i name="eentropy"> -0.00861099 </i> + <i name="bandstr"> -1326.61432679 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.73204714 </i> + <i name="e_wo_entrp"> -101.72343616 </i> + <i name="e_0_energy"> -101.72917681 </i> + </energy> + </scstep> + <structure> + <crystal> + <varray name="basis" > + <v> 8.93075865 0.00000000 0.00000000 </v> + <v> 4.46537932 7.73426386 0.00000000 </v> + <v> 0.00000000 0.00000000 24.72257853 </v> + </varray> + <i name="volume"> 1707.65880700 </i> + <varray name="rec_basis" > + <v> 0.11197257 -0.06464739 0.00000000 </v> + <v> 0.00000000 0.12929479 0.00000000 </v> + <v> 0.00000000 0.00000000 0.04044886 </v> + </varray> + </crystal> + <varray name="positions" > + <v> 0.88888889 0.22222222 0.30336641 </v> + <v> 0.22222222 0.22222222 0.30336641 </v> + <v> 0.55555556 0.22222222 0.30336641 </v> + <v> 0.88888889 0.55555556 0.30336641 </v> + <v> 0.22222222 0.55555556 0.30336641 </v> + <v> 0.55555556 0.55555556 0.30336641 </v> + <v> 0.88888889 0.88888889 0.30336641 </v> + <v> 0.22222222 0.88888889 0.30336641 </v> + <v> 0.55555556 0.88888889 0.30336641 </v> + <v> 0.00000000 0.00000000 0.40168321 </v> + <v> 0.33333333 0.00000000 0.40168321 </v> + <v> 0.66666667 0.00000000 0.40168321 </v> + <v> 0.00000000 0.33333333 0.40168321 </v> + <v> 0.33333333 0.33333333 0.40168321 </v> + <v> 0.66666667 0.33333333 0.40168321 </v> + <v> 0.00000000 0.66666667 0.40168321 </v> + <v> 0.33333333 0.66666667 0.40168321 </v> + <v> 0.66666667 0.66666667 0.40168321 </v> + <v> 0.11077455 0.11077455 0.50056407 </v> + <v> 0.44469558 0.11060885 0.49975686 </v> + <v> 0.77845090 0.11077455 0.50056407 </v> + <v> 0.11060885 0.44469558 0.49975686 </v> + <v> 0.44469558 0.44469558 0.49975686 </v> + <v> 0.77805087 0.44389825 0.50035227 </v> + <v> 0.11077455 0.77845090 0.50056407 </v> + <v> 0.44389825 0.77805087 0.50035227 </v> + <v> 0.77805087 0.77805087 0.50035227 </v> + <v> 0.88841205 0.22317590 0.59920845 </v> + <v> 0.22264889 0.22264889 0.59765447 </v> + <v> 0.55470222 0.22264889 0.59765447 </v> + <v> 0.88949684 0.55525158 0.59852861 </v> + <v> 0.22264889 0.55470222 0.59765447 </v> + <v> 0.55525158 0.55525158 0.59852861 </v> + <v> 0.88841205 0.88841205 0.59920845 </v> + <v> 0.22317590 0.88841205 0.59920845 </v> + <v> 0.55525158 0.88949684 0.59852861 </v> + <v> 0.00000000 -0.00000000 0.69725471 </v> + <v> 0.33328277 0.00059823 0.69725939 </v> + <v> 0.66611900 0.00059823 0.69725939 </v> + <v> 0.00059823 0.33328277 0.69725939 </v> + <v> 0.66611900 0.33328277 0.69725939 </v> + <v> 0.00059823 0.66611900 0.69725939 </v> + <v> 0.33328277 0.66611900 0.69725939 </v> + <v> 0.66666667 0.66666667 0.69643453 </v> + <v> 0.33333333 0.33333333 0.69493728 </v> + <v> 0.33333333 0.33333333 0.76828006 </v> + </varray> + </structure> + <varray name="forces" > + <v> -0.00000000 -0.00002617 0.01339294 </v> + <v> 0.04520214 0.02609747 -0.02883440 </v> + <v> -0.04520214 0.02609747 -0.02883440 </v> + <v> 0.01229168 -0.00709660 0.00761336 </v> + <v> -0.00000000 -0.05219493 -0.02883440 </v> + <v> -0.01229168 -0.00709660 0.00761336 </v> + <v> 0.00002266 0.00001308 0.01339294 </v> + <v> -0.00002266 0.00001308 0.01339294 </v> + <v> -0.00000000 0.01419321 0.00761336 </v> + <v> -0.00000000 0.00000000 0.00718175 </v> + <v> -0.01435336 -0.00483913 0.00221849 </v> + <v> 0.01435336 -0.00483913 0.00221849 </v> + <v> -0.01136749 -0.01001081 0.00221849 </v> + <v> -0.00000000 0.00000000 -0.00245662 </v> + <v> 0.01136749 -0.01001081 0.00221849 </v> + <v> 0.00298588 0.01484994 0.00221849 </v> + <v> -0.00298588 0.01484994 0.00221849 </v> + <v> -0.00000000 0.00000000 -0.00288500 </v> + <v> -0.00547663 -0.00316193 -0.00677628 </v> + <v> -0.00000000 0.00118663 -0.00523681 </v> + <v> 0.00547663 -0.00316193 -0.00677628 </v> + <v> 0.00102765 -0.00059331 -0.00523681 </v> + <v> -0.00102765 -0.00059331 -0.00523681 </v> + <v> -0.00000000 0.00681021 0.00134824 </v> + <v> -0.00000000 0.00632387 -0.00677628 </v> + <v> 0.00589782 -0.00340511 0.00134824 </v> + <v> -0.00589782 -0.00340511 0.00134824 </v> + <v> -0.00000000 -0.00681887 -0.00597267 </v> + <v> 0.02949688 0.01703003 0.02436541 </v> + <v> -0.02949688 0.01703003 0.02436541 </v> + <v> -0.00767283 0.00442991 -0.00899771 </v> + <v> -0.00000000 -0.03406006 0.02436541 </v> + <v> 0.00767283 0.00442991 -0.00899771 </v> + <v> 0.00590531 0.00340943 -0.00597267 </v> + <v> -0.00590531 0.00340943 -0.00597267 </v> + <v> -0.00000000 -0.00885982 -0.00899771 </v> + <v> -0.00000000 0.00000000 -0.00862207 </v> + <v> 0.00220366 0.01259721 -0.00488373 </v> + <v> -0.00220366 0.01259721 -0.00488373 </v> + <v> 0.01201133 -0.00439018 -0.00488373 </v> + <v> -0.01201133 -0.00439018 -0.00488373 </v> + <v> 0.00980767 -0.00820703 -0.00488373 </v> + <v> -0.00980767 -0.00820703 -0.00488373 </v> + <v> -0.00000000 0.00000000 -0.00416483 </v> + <v> -0.00000000 0.00000000 0.03192202 </v> + <v> -0.00000000 0.00000000 0.02230994 </v> + </varray> + <varray name="stress" > + <v> -10.87187293 0.00000000 0.00000000 </v> + <v> 0.00000000 -10.87187293 -0.00000000 </v> + <v> 0.00000000 -0.00000000 -2.26799034 </v> + </varray> + <energy> + <i name="e_fr_energy"> -101.73204714 </i> + <i name="e_wo_entrp"> -101.72917681 </i> + <i name="e_0_energy"> -0.00861099 </i> + </energy> + <time name="totalsc"> 70.18 72.27</time> + </calculation> + <calculation> + <scstep> + <time name="dav"> 4.82 4.83</time> + <time name="total"> 5.65 5.66</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21160983 </v> + <i name="Tr[quadrupol]"> -6472.63930265 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.86899098 </i> + <i name="ewald"> 133557.82333187 </i> + <i name="hartreedc">-181556.02368316 </i> + <i name="XCdc"> -530.19334366 </i> + <i name="pawpsdc"> 49357.18127847 </i> + <i name="pawaedc"> -47311.28954959 </i> + <i name="eentropy"> -0.00845416 </i> + <i name="bandstr"> -1326.56214943 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.73202374 </i> + <i name="e_wo_entrp"> -101.72356958 </i> + <i name="e_0_energy"> -101.72920569 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.51 2.51</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.33 4.34</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20962378 </v> + <i name="Tr[quadrupol]"> -6472.64334027 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73270396 </i> + <i name="e_wo_entrp"> -101.72419011 </i> + <i name="e_0_energy"> -101.72986601 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.51 2.51</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.33 4.35</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21881716 </v> + <i name="Tr[quadrupol]"> -6472.62779988 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73308293 </i> + <i name="e_wo_entrp"> -101.72468789 </i> + <i name="e_0_energy"> -101.73028458 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.85</time> + <time name="diis"> 2.64 2.65</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.48 4.49</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20912506 </v> + <i name="Tr[quadrupol]"> -6472.63463127 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73271323 </i> + <i name="e_wo_entrp"> -101.72420432 </i> + <i name="e_0_energy"> -101.72987693 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.90 0.90</time> + <time name="diis"> 2.60 2.61</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.50 4.52</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21307324 </v> + <i name="Tr[quadrupol]"> -6472.63630287 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73266267 </i> + <i name="e_wo_entrp"> -101.72418740 </i> + <i name="e_0_energy"> -101.72983758 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.37 2.38</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.21 4.22</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21107542 </v> + <i name="Tr[quadrupol]"> -6472.63241377 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73265989 </i> + <i name="e_wo_entrp"> -101.72416309 </i> + <i name="e_0_energy"> -101.72982762 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.88 0.88</time> + <time name="diis"> 2.21 2.22</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.78 3.79</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21214964 </v> + <i name="Tr[quadrupol]"> -6472.63247429 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.86726893 </i> + <i name="ewald"> 133557.82333187 </i> + <i name="hartreedc">-181555.79307383 </i> + <i name="XCdc"> -530.19521288 </i> + <i name="pawpsdc"> 49357.66130912 </i> + <i name="pawaedc"> -47311.77951486 </i> + <i name="eentropy"> -0.00848740 </i> + <i name="bandstr"> -1326.77983664 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.73266076 </i> + <i name="e_wo_entrp"> -101.72417336 </i> + <i name="e_0_energy"> -101.72983163 </i> + </energy> + </scstep> + <structure> + <crystal> + <varray name="basis" > + <v> 8.93075865 0.00000000 0.00000000 </v> + <v> 4.46537932 7.73426386 0.00000000 </v> + <v> 0.00000000 0.00000000 24.72257853 </v> + </varray> + <i name="volume"> 1707.65880700 </i> + <varray name="rec_basis" > + <v> 0.11197257 -0.06464739 0.00000000 </v> + <v> 0.00000000 0.12929479 0.00000000 </v> + <v> 0.00000000 0.00000000 0.04044886 </v> + </varray> + </crystal> + <varray name="positions" > + <v> 0.88888889 0.22222222 0.30336641 </v> + <v> 0.22222222 0.22222222 0.30336641 </v> + <v> 0.55555556 0.22222222 0.30336641 </v> + <v> 0.88888889 0.55555556 0.30336641 </v> + <v> 0.22222222 0.55555556 0.30336641 </v> + <v> 0.55555556 0.55555556 0.30336641 </v> + <v> 0.88888889 0.88888889 0.30336641 </v> + <v> 0.22222222 0.88888889 0.30336641 </v> + <v> 0.55555556 0.88888889 0.30336641 </v> + <v> 0.00000000 0.00000000 0.40168321 </v> + <v> 0.33333333 0.00000000 0.40168321 </v> + <v> 0.66666667 0.00000000 0.40168321 </v> + <v> 0.00000000 0.33333333 0.40168321 </v> + <v> 0.33333333 0.33333333 0.40168321 </v> + <v> 0.66666667 0.33333333 0.40168321 </v> + <v> 0.00000000 0.66666667 0.40168321 </v> + <v> 0.33333333 0.66666667 0.40168321 </v> + <v> 0.66666667 0.66666667 0.40168321 </v> + <v> 0.11074549 0.11074549 0.50054233 </v> + <v> 0.44470416 0.11059169 0.49973389 </v> + <v> 0.77850902 0.11074549 0.50054233 </v> + <v> 0.11059169 0.44470416 0.49973389 </v> + <v> 0.44470416 0.44470416 0.49973389 </v> + <v> 0.77803340 0.44393319 0.50035293 </v> + <v> 0.11074549 0.77850902 0.50054233 </v> + <v> 0.44393319 0.77803340 0.50035293 </v> + <v> 0.77803340 0.77803340 0.50035293 </v> + <v> 0.88842397 0.22315207 0.59918660 </v> + <v> 0.22278064 0.22278064 0.59769850 </v> + <v> 0.55443872 0.22278064 0.59769850 </v> + <v> 0.88945819 0.55527091 0.59850283 </v> + <v> 0.22278064 0.55443872 0.59769850 </v> + <v> 0.55527091 0.55527091 0.59850283 </v> + <v> 0.88842397 0.88842397 0.59918660 </v> + <v> 0.22315207 0.88842397 0.59918660 </v> + <v> 0.55527091 0.88945819 0.59850283 </v> + <v> 0.00000000 -0.00000000 0.69721551 </v> + <v> 0.33326705 0.00067156 0.69722025 </v> + <v> 0.66606138 0.00067156 0.69722025 </v> + <v> 0.00067156 0.33326705 0.69722025 </v> + <v> 0.66606138 0.33326705 0.69722025 </v> + <v> 0.00067156 0.66606138 0.69722025 </v> + <v> 0.33326705 0.66606138 0.69722025 </v> + <v> 0.66666667 0.66666667 0.69642369 </v> + <v> 0.33333333 0.33333333 0.69516855 </v> + <v> 0.33333333 0.33333333 0.76848393 </v> + </varray> + </structure> + <varray name="forces" > + <v> 0.00000000 0.00009386 0.01360055 </v> + <v> 0.04547704 0.02625618 -0.02907853 </v> + <v> -0.04547704 0.02625618 -0.02907853 </v> + <v> 0.01240635 -0.00716281 0.00768261 </v> + <v> -0.00000000 -0.05251236 -0.02907853 </v> + <v> -0.01240635 -0.00716281 0.00768261 </v> + <v> -0.00008129 -0.00004693 0.01360055 </v> + <v> 0.00008129 -0.00004693 0.01360055 </v> + <v> 0.00000000 0.01432562 0.00768261 </v> + <v> 0.00000000 0.00000000 0.00523881 </v> + <v> -0.01443554 -0.00508398 0.00160909 </v> + <v> 0.01443554 -0.00508398 0.00160909 </v> + <v> -0.01162063 -0.00995956 0.00160909 </v> + <v> 0.00000000 0.00000000 -0.00327282 </v> + <v> 0.01162063 -0.00995956 0.00160909 </v> + <v> 0.00281491 0.01504354 0.00160909 </v> + <v> -0.00281491 0.01504354 0.00160909 </v> + <v> 0.00000000 -0.00000000 -0.00354672 </v> + <v> -0.00229816 -0.00132685 -0.00359796 </v> + <v> 0.00000000 0.00230630 -0.00261625 </v> + <v> 0.00229816 -0.00132685 -0.00359796 </v> + <v> 0.00199732 -0.00115315 -0.00261625 </v> + <v> -0.00199732 -0.00115315 -0.00261625 </v> + <v> 0.00000000 0.00520450 0.00037028 </v> + <v> 0.00000000 0.00265369 -0.00359796 </v> + <v> 0.00450723 -0.00260225 0.00037028 </v> + <v> -0.00450723 -0.00260225 0.00037028 </v> + <v> 0.00000000 -0.00618194 -0.00592653 </v> + <v> 0.02179809 0.01258514 0.02060574 </v> + <v> -0.02179809 0.01258514 0.02060574 </v> + <v> -0.00640650 0.00369879 -0.00805227 </v> + <v> -0.00000000 -0.02517027 0.02060574 </v> + <v> 0.00640650 0.00369879 -0.00805227 </v> + <v> 0.00535372 0.00309097 -0.00592653 </v> + <v> -0.00535372 0.00309097 -0.00592653 </v> + <v> 0.00000000 -0.00739758 -0.00805227 </v> + <v> 0.00000000 0.00000000 -0.00876167 </v> + <v> 0.00175588 0.01024216 -0.00400692 </v> + <v> -0.00175588 0.01024216 -0.00400692 </v> + <v> 0.00974792 -0.00360044 -0.00400692 </v> + <v> -0.00974792 -0.00360044 -0.00400692 </v> + <v> 0.00799203 -0.00664172 -0.00400692 </v> + <v> -0.00799203 -0.00664172 -0.00400692 </v> + <v> 0.00000000 0.00000000 -0.00444967 </v> + <v> 0.00000000 -0.00000000 0.02064912 </v> + <v> 0.00000000 0.00000000 0.02956705 </v> + </varray> + <varray name="stress" > + <v> -10.86481619 0.00000000 0.00000000 </v> + <v> 0.00000000 -10.86481619 -0.00000000 </v> + <v> 0.00000000 0.00000000 -2.26663878 </v> + </varray> + <energy> + <i name="e_fr_energy"> -101.73266076 </i> + <i name="e_wo_entrp"> -101.72983163 </i> + <i name="e_0_energy"> -0.00848740 </i> + </energy> + <time name="totalsc"> 37.51 37.63</time> + </calculation> + <calculation> + <scstep> + <time name="dav"> 4.74 4.76</time> + <time name="total"> 5.57 5.58</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21213484 </v> + <i name="Tr[quadrupol]"> -6474.66557436 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.86960763 </i> + <i name="ewald"> 133555.43152883 </i> + <i name="hartreedc">-181553.55058809 </i> + <i name="XCdc"> -530.18388466 </i> + <i name="pawpsdc"> 49357.69158445 </i> + <i name="pawaedc"> -47311.81012251 </i> + <i name="eentropy"> -0.00804728 </i> + <i name="bandstr"> -1326.63924874 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.72761545 </i> + <i name="e_wo_entrp"> -101.71956816 </i> + <i name="e_0_energy"> -101.72493302 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.52 2.53</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.34 4.36</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20602326 </v> + <i name="Tr[quadrupol]"> -6474.67801802 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73417937 </i> + <i name="e_wo_entrp"> -101.72599443 </i> + <i name="e_0_energy"> -101.73145106 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.85 0.85</time> + <time name="diis"> 2.50 2.51</time> + <time name="orth"> 0.15 0.15</time> + <time name="total"> 4.33 4.34</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.23415427 </v> + <i name="Tr[quadrupol]"> -6474.62940432 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73727180 </i> + <i name="e_wo_entrp"> -101.72941073 </i> + <i name="e_0_energy"> -101.73465145 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.85 0.85</time> + <time name="diis"> 2.51 2.52</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.39 4.40</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20449809 </v> + <i name="Tr[quadrupol]"> -6474.65010774 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73400547 </i> + <i name="e_wo_entrp"> -101.72582242 </i> + <i name="e_0_energy"> -101.73127778 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.86 0.86</time> + <time name="diis"> 2.61 2.61</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.58 4.59</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21666785 </v> + <i name="Tr[quadrupol]"> -6474.65560727 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73356735 </i> + <i name="e_wo_entrp"> -101.72547427 </i> + <i name="e_0_energy"> -101.73086966 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 2.49 2.49</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.38 4.39</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21077648 </v> + <i name="Tr[quadrupol]"> -6474.64370535 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73355061 </i> + <i name="e_wo_entrp"> -101.72540390 </i> + <i name="e_0_energy"> -101.73083504 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.54 2.54</time> + <time name="orth"> 0.17 0.17</time> + <time name="total"> 4.38 4.39</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21400564 </v> + <i name="Tr[quadrupol]"> -6474.64316078 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73355300 </i> + <i name="e_wo_entrp"> -101.72543087 </i> + <i name="e_0_energy"> -101.73084562 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 2.03 2.03</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.95 3.96</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21401938 </v> + <i name="Tr[quadrupol]"> -6474.64035893 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73358641 </i> + <i name="e_wo_entrp"> -101.72545667 </i> + <i name="e_0_energy"> -101.73087649 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.85 0.85</time> + <time name="diis"> 1.70 1.70</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.56 3.57</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21429649 </v> + <i name="Tr[quadrupol]"> -6474.63940739 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73362499 </i> + <i name="e_wo_entrp"> -101.72549989 </i> + <i name="e_0_energy"> -101.73091662 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.60 1.61</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.44 3.45</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21449055 </v> + <i name="Tr[quadrupol]"> -6474.63710839 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73366599 </i> + <i name="e_wo_entrp"> -101.72554157 </i> + <i name="e_0_energy"> -101.73095785 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 1.00 1.00</time> + <time name="diis"> 1.45 1.45</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.43 3.44</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21461984 </v> + <i name="Tr[quadrupol]"> -6474.63572370 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73369664 </i> + <i name="e_wo_entrp"> -101.72557118 </i> + <i name="e_0_energy"> -101.73098816 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.35 1.35</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.17 3.18</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21476872 </v> + <i name="Tr[quadrupol]"> -6474.63416298 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73372601 </i> + <i name="e_wo_entrp"> -101.72559836 </i> + <i name="e_0_energy"> -101.73101679 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.40 1.41</time> + <time name="orth"> 0.15 0.16</time> + <time name="total"> 3.22 3.23</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21497118 </v> + <i name="Tr[quadrupol]"> -6474.63198657 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73376411 </i> + <i name="e_wo_entrp"> -101.72563311 </i> + <i name="e_0_energy"> -101.73105378 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.44 1.45</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.26 3.27</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21523467 </v> + <i name="Tr[quadrupol]"> -6474.62890738 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73381031 </i> + <i name="e_wo_entrp"> -101.72567395 </i> + <i name="e_0_energy"> -101.73109819 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.86 0.86</time> + <time name="diis"> 1.46 1.46</time> + <time name="orth"> 0.16 0.17</time> + <time name="total"> 3.36 3.38</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21538000 </v> + <i name="Tr[quadrupol]"> -6474.62700969 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73383223 </i> + <i name="e_wo_entrp"> -101.72569334 </i> + <i name="e_0_energy"> -101.73111927 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 1.36 1.36</time> + <time name="orth"> 0.17 0.17</time> + <time name="total"> 3.27 3.28</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21541241 </v> + <i name="Tr[quadrupol]"> -6474.62638844 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73383841 </i> + <i name="e_wo_entrp"> -101.72569886 </i> + <i name="e_0_energy"> -101.73112523 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.85 0.85</time> + <time name="diis"> 1.19 1.19</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.04 3.05</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21540213 </v> + <i name="Tr[quadrupol]"> -6474.62623043 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73383975 </i> + <i name="e_wo_entrp"> -101.72569986 </i> + <i name="e_0_energy"> -101.73112645 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.85</time> + <time name="diis"> 1.16 1.16</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 2.68 2.69</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21537848 </v> + <i name="Tr[quadrupol]"> -6474.62617490 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.85929447 </i> + <i name="ewald"> 133555.43152883 </i> + <i name="hartreedc">-181552.58476363 </i> + <i name="XCdc"> -530.19024172 </i> + <i name="pawpsdc"> 49359.72511194 </i> + <i name="pawaedc"> -47313.87664112 </i> + <i name="eentropy"> -0.00814017 </i> + <i name="bandstr"> -1327.56154361 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.73384009 </i> + <i name="e_wo_entrp"> -101.72569992 </i> + <i name="e_0_energy"> -101.73112670 </i> + </energy> + </scstep> + <structure> + <crystal> + <varray name="basis" > + <v> 8.93075865 0.00000000 0.00000000 </v> + <v> 4.46537932 7.73426386 0.00000000 </v> + <v> 0.00000000 0.00000000 24.72257853 </v> + </varray> + <i name="volume"> 1707.65880700 </i> + <varray name="rec_basis" > + <v> 0.11197257 -0.06464739 0.00000000 </v> + <v> 0.00000000 0.12929479 0.00000000 </v> + <v> 0.00000000 0.00000000 0.04044886 </v> + </varray> + </crystal> + <varray name="positions" > + <v> 0.88888889 0.22222222 0.30336641 </v> + <v> 0.22222222 0.22222222 0.30336641 </v> + <v> 0.55555556 0.22222222 0.30336641 </v> + <v> 0.88888889 0.55555556 0.30336641 </v> + <v> 0.22222222 0.55555556 0.30336641 </v> + <v> 0.55555556 0.55555556 0.30336641 </v> + <v> 0.88888889 0.88888889 0.30336641 </v> + <v> 0.22222222 0.88888889 0.30336641 </v> + <v> 0.55555556 0.88888889 0.30336641 </v> + <v> 0.00000000 0.00000000 0.40168321 </v> + <v> 0.33333333 0.00000000 0.40168321 </v> + <v> 0.66666667 0.00000000 0.40168321 </v> + <v> 0.00000000 0.33333333 0.40168321 </v> + <v> 0.33333333 0.33333333 0.40168321 </v> + <v> 0.66666667 0.33333333 0.40168321 </v> + <v> 0.00000000 0.66666667 0.40168321 </v> + <v> 0.33333333 0.66666667 0.40168321 </v> + <v> 0.66666667 0.66666667 0.40168321 </v> + <v> 0.11065831 0.11065831 0.50047712 </v> + <v> 0.44472989 0.11054021 0.49966498 </v> + <v> 0.77868337 0.11065831 0.50047712 </v> + <v> 0.11054021 0.44472989 0.49966498 </v> + <v> 0.44472989 0.44472989 0.49966498 </v> + <v> 0.77798100 0.44403800 0.50035492 </v> + <v> 0.11065831 0.77868337 0.50047712 </v> + <v> 0.44403800 0.77798100 0.50035492 </v> + <v> 0.77798100 0.77798100 0.50035492 </v> + <v> 0.88845970 0.22308059 0.59912104 </v> + <v> 0.22317589 0.22317589 0.59783057 </v> + <v> 0.55364823 0.22317589 0.59783057 </v> + <v> 0.88934223 0.55532889 0.59842552 </v> + <v> 0.22317589 0.55364823 0.59783057 </v> + <v> 0.55532889 0.55532889 0.59842552 </v> + <v> 0.88845970 0.88845970 0.59912104 </v> + <v> 0.22308059 0.88845970 0.59912104 </v> + <v> 0.55532889 0.88934223 0.59842552 </v> + <v> -0.00000000 -0.00000000 0.69709790 </v> + <v> 0.33321989 0.00089157 0.69710281 </v> + <v> 0.66588854 0.00089157 0.69710281 </v> + <v> 0.00089157 0.33321989 0.69710281 </v> + <v> 0.66588854 0.33321989 0.69710281 </v> + <v> 0.00089157 0.66588854 0.69710281 </v> + <v> 0.33321989 0.66588854 0.69710281 </v> + <v> 0.66666667 0.66666667 0.69639116 </v> + <v> 0.33333333 0.33333333 0.69586234 </v> + <v> 0.33333333 0.33333333 0.76909552 </v> + </varray> + </structure> + <varray name="forces" > + <v> 0.00000000 0.00045428 0.01425249 </v> + <v> 0.04618645 0.02666576 -0.02966437 </v> + <v> -0.04618645 0.02666576 -0.02966437 </v> + <v> 0.01272528 -0.00734694 0.00794560 </v> + <v> 0.00000000 -0.05333152 -0.02966437 </v> + <v> -0.01272528 -0.00734694 0.00794560 </v> + <v> -0.00039342 -0.00022714 0.01425249 </v> + <v> 0.00039342 -0.00022714 0.01425249 </v> + <v> 0.00000000 0.01469388 0.00794560 </v> + <v> 0.00000000 0.00000000 -0.00053904 </v> + <v> -0.01468224 -0.00581755 -0.00013681 </v> + <v> 0.01468224 -0.00581755 -0.00013681 </v> + <v> -0.01237926 -0.00980642 -0.00013681 </v> + <v> 0.00000000 0.00000000 -0.00570167 </v> + <v> 0.01237926 -0.00980642 -0.00013681 </v> + <v> 0.00230298 0.01562397 -0.00013681 </v> + <v> -0.00230298 0.01562397 -0.00013681 </v> + <v> 0.00000000 0.00000000 -0.00541413 </v> + <v> 0.00772374 0.00445930 0.00645338 </v> + <v> 0.00000000 0.00532022 0.00505685 </v> + <v> -0.00772374 0.00445930 0.00645338 </v> + <v> 0.00460745 -0.00266011 0.00505685 </v> + <v> -0.00460745 -0.00266011 0.00505685 </v> + <v> 0.00000000 0.00057482 -0.00256947 </v> + <v> -0.00000000 -0.00891860 0.00645338 </v> + <v> 0.00049781 -0.00028741 -0.00256947 </v> + <v> -0.00049781 -0.00028741 -0.00256947 </v> + <v> 0.00000000 -0.00450365 -0.00480236 </v> + <v> -0.00095503 -0.00055139 0.00959694 </v> + <v> 0.00095503 -0.00055139 0.00959694 </v> + <v> -0.00240095 0.00138619 -0.00487947 </v> + <v> 0.00000000 0.00110278 0.00959694 </v> + <v> 0.00240095 0.00138619 -0.00487947 </v> + <v> 0.00390028 0.00225183 -0.00480236 </v> + <v> -0.00390028 0.00225183 -0.00480236 </v> + <v> 0.00000000 -0.00277237 -0.00487947 </v> + <v> 0.00000000 0.00000000 -0.00863503 </v> + <v> 0.00039058 0.00274656 -0.00078707 </v> + <v> -0.00039058 0.00274656 -0.00078707 </v> + <v> 0.00257388 -0.00103503 -0.00078707 </v> + <v> -0.00257388 -0.00103503 -0.00078707 </v> + <v> 0.00218330 -0.00171153 -0.00078707 </v> + <v> -0.00218330 -0.00171153 -0.00078707 </v> + <v> 0.00000000 0.00000000 -0.00609908 </v> + <v> 0.00000000 0.00000000 -0.02224479 </v> + <v> 0.00000000 0.00000000 0.05000828 </v> + </varray> + <varray name="stress" > + <v> -10.84509396 0.00000000 0.00000000 </v> + <v> 0.00000000 -10.84509396 0.00000000 </v> + <v> 0.00000000 0.00000000 -2.20138408 </v> + </varray> + <energy> + <i name="e_fr_energy"> -101.73384009 </i> + <i name="e_wo_entrp"> -101.73112670 </i> + <i name="e_0_energy"> -0.00814017 </i> + </energy> + <time name="totalsc"> 74.68 74.93</time> + </calculation> + <calculation> + <scstep> + <time name="dav"> 4.90 4.91</time> + <time name="total"> 5.74 5.76</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21535180 </v> + <i name="Tr[quadrupol]"> -6475.36902056 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.86022765 </i> + <i name="ewald"> 133554.54705042 </i> + <i name="hartreedc">-181551.76108151 </i> + <i name="XCdc"> -530.18601652 </i> + <i name="pawpsdc"> 49359.72481922 </i> + <i name="pawaedc"> -47313.87634888 </i> + <i name="eentropy"> -0.00797304 </i> + <i name="bandstr"> -1327.50534320 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.73311092 </i> + <i name="e_wo_entrp"> -101.72513788 </i> + <i name="e_0_energy"> -101.73045324 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.85 0.85</time> + <time name="diis"> 2.51 2.52</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.34 4.35</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21314366 </v> + <i name="Tr[quadrupol]"> -6475.37352234 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73392646 </i> + <i name="e_wo_entrp"> -101.72590025 </i> + <i name="e_0_energy"> -101.73125105 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.86 0.86</time> + <time name="diis"> 2.50 2.51</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.35 4.36</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.22324833 </v> + <i name="Tr[quadrupol]"> -6475.35626100 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73437617 </i> + <i name="e_wo_entrp"> -101.72644883 </i> + <i name="e_0_energy"> -101.73173372 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.85</time> + <time name="diis"> 2.52 2.52</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.35 4.37</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21258805 </v> + <i name="Tr[quadrupol]"> -6475.36386513 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73394068 </i> + <i name="e_wo_entrp"> -101.72591462 </i> + <i name="e_0_energy"> -101.73126533 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.85</time> + <time name="diis"> 2.54 2.54</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.42 4.44</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21693407 </v> + <i name="Tr[quadrupol]"> -6475.36577354 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73387763 </i> + <i name="e_wo_entrp"> -101.72588179 </i> + <i name="e_0_energy"> -101.73121235 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.87 0.87</time> + <time name="diis"> 2.55 2.55</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.43 4.44</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21474249 </v> + <i name="Tr[quadrupol]"> -6475.36154070 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73387366 </i> + <i name="e_wo_entrp"> -101.72585685 </i> + <i name="e_0_energy"> -101.73120139 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.88 0.88</time> + <time name="diis"> 2.18 2.18</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.06 4.08</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21592409 </v> + <i name="Tr[quadrupol]"> -6475.36160540 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73387571 </i> + <i name="e_wo_entrp"> -101.72586706 </i> + <i name="e_0_energy"> -101.73120616 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.59 1.59</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.44 3.45</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21590795 </v> + <i name="Tr[quadrupol]"> -6475.36057615 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73388363 </i> + <i name="e_wo_entrp"> -101.72587257 </i> + <i name="e_0_energy"> -101.73121328 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 1.58 1.58</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.48 3.49</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21600917 </v> + <i name="Tr[quadrupol]"> -6475.36030226 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73389202 </i> + <i name="e_wo_entrp"> -101.72588305 </i> + <i name="e_0_energy"> -101.73122236 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.88 0.89</time> + <time name="diis"> 1.44 1.45</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.33 3.34</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21606469 </v> + <i name="Tr[quadrupol]"> -6475.35955868 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73389973 </i> + <i name="e_wo_entrp"> -101.72589104 </i> + <i name="e_0_energy"> -101.73123017 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.19 1.19</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.00 3.01</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21610381 </v> + <i name="Tr[quadrupol]"> -6475.35913748 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73390510 </i> + <i name="e_wo_entrp"> -101.72589607 </i> + <i name="e_0_energy"> -101.73123542 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.85 0.85</time> + <time name="diis"> 1.19 1.19</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.01 3.02</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21614614 </v> + <i name="Tr[quadrupol]"> -6475.35866125 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73391024 </i> + <i name="e_wo_entrp"> -101.72590051 </i> + <i name="e_0_energy"> -101.73124033 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.23 1.23</time> + <time name="orth"> 0.15 0.15</time> + <time name="total"> 3.04 3.05</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21619883 </v> + <i name="Tr[quadrupol]"> -6475.35807046 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73391603 </i> + <i name="e_wo_entrp"> -101.72590534 </i> + <i name="e_0_energy"> -101.73124580 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.26 1.26</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.08 3.09</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21627901 </v> + <i name="Tr[quadrupol]"> -6475.35715485 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73392364 </i> + <i name="e_wo_entrp"> -101.72591134 </i> + <i name="e_0_energy"> -101.73125287 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.24 1.25</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.07 3.08</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21632853 </v> + <i name="Tr[quadrupol]"> -6475.35649945 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73392794 </i> + <i name="e_wo_entrp"> -101.72591474 </i> + <i name="e_0_energy"> -101.73125688 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.85 0.85</time> + <time name="diis"> 1.17 1.18</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 2.70 2.71</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21634039 </v> + <i name="Tr[quadrupol]"> -6475.35629679 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.85708812 </i> + <i name="ewald"> 133554.54705042 </i> + <i name="hartreedc">-181551.42961392 </i> + <i name="XCdc"> -530.18826152 </i> + <i name="pawpsdc"> 49360.46321942 </i> + <i name="pawaedc"> -47314.62707609 </i> + <i name="eentropy"> -0.00801347 </i> + <i name="bandstr"> -1327.81987679 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.73392891 </i> + <i name="e_wo_entrp"> -101.72591543 </i> + <i name="e_0_energy"> -101.73125775 </i> + </energy> + </scstep> + <structure> + <crystal> + <varray name="basis" > + <v> 8.93075865 0.00000000 0.00000000 </v> + <v> 4.46537932 7.73426386 0.00000000 </v> + <v> 0.00000000 0.00000000 24.72257853 </v> + </varray> + <i name="volume"> 1707.65880700 </i> + <varray name="rec_basis" > + <v> 0.11197257 -0.06464739 0.00000000 </v> + <v> 0.00000000 0.12929479 0.00000000 </v> + <v> 0.00000000 0.00000000 0.04044886 </v> + </varray> + </crystal> + <varray name="positions" > + <v> 0.88888889 0.22222222 0.30336641 </v> + <v> 0.22222222 0.22222222 0.30336641 </v> + <v> 0.55555556 0.22222222 0.30336641 </v> + <v> 0.88888889 0.55555556 0.30336641 </v> + <v> 0.22222222 0.55555556 0.30336641 </v> + <v> 0.55555556 0.55555556 0.30336641 </v> + <v> 0.88888889 0.88888889 0.30336641 </v> + <v> 0.22222222 0.88888889 0.30336641 </v> + <v> 0.55555556 0.88888889 0.30336641 </v> + <v> 0.00000000 0.00000000 0.40168321 </v> + <v> 0.33333333 0.00000000 0.40168321 </v> + <v> 0.66666667 0.00000000 0.40168321 </v> + <v> 0.00000000 0.33333333 0.40168321 </v> + <v> 0.33333333 0.33333333 0.40168321 </v> + <v> 0.66666667 0.33333333 0.40168321 </v> + <v> 0.00000000 0.66666667 0.40168321 </v> + <v> 0.33333333 0.66666667 0.40168321 </v> + <v> 0.66666667 0.66666667 0.40168321 </v> + <v> 0.11062652 0.11062652 0.50045334 </v> + <v> 0.44473928 0.11052144 0.49963985 </v> + <v> 0.77874696 0.11062652 0.50045334 </v> + <v> 0.11052144 0.44473928 0.49963985 </v> + <v> 0.44473928 0.44473928 0.49963985 </v> + <v> 0.77796189 0.44407623 0.50035564 </v> + <v> 0.11062652 0.77874696 0.50045334 </v> + <v> 0.44407623 0.77796189 0.50035564 </v> + <v> 0.77796189 0.77796189 0.50035564 </v> + <v> 0.88847274 0.22305452 0.59909714 </v> + <v> 0.22332003 0.22332003 0.59787874 </v> + <v> 0.55335994 0.22332003 0.59787874 </v> + <v> 0.88929993 0.55535003 0.59839732 </v> + <v> 0.22332003 0.55335994 0.59787874 </v> + <v> 0.55535003 0.55535003 0.59839732 </v> + <v> 0.88847274 0.88847274 0.59909714 </v> + <v> 0.22305452 0.88847274 0.59909714 </v> + <v> 0.55535003 0.88929993 0.59839732 </v> + <v> -0.00000000 -0.00000000 0.69705501 </v> + <v> 0.33320270 0.00097180 0.69705998 </v> + <v> 0.66582550 0.00097180 0.69705998 </v> + <v> 0.00097180 0.33320270 0.69705998 </v> + <v> 0.66582550 0.33320270 0.69705998 </v> + <v> 0.00097180 0.66582550 0.69705998 </v> + <v> 0.33320270 0.66582550 0.69705998 </v> + <v> 0.66666667 0.66666667 0.69637930 </v> + <v> 0.33333333 0.33333333 0.69611536 </v> + <v> 0.33333333 0.33333333 0.76931856 </v> + </varray> + </structure> + <varray name="forces" > + <v> -0.00000000 0.00058670 0.01445792 </v> + <v> 0.04644379 0.02681433 -0.02993537 </v> + <v> -0.04644379 0.02681433 -0.02993537 </v> + <v> 0.01284764 -0.00741759 0.00800047 </v> + <v> -0.00000000 -0.05362867 -0.02993537 </v> + <v> -0.01284764 -0.00741759 0.00800047 </v> + <v> -0.00050810 -0.00029335 0.01445792 </v> + <v> 0.00050810 -0.00029335 0.01445792 </v> + <v> 0.00000000 0.01483518 0.00800047 </v> + <v> -0.00000000 -0.00000000 -0.00270613 </v> + <v> -0.01477270 -0.00608310 -0.00082391 </v> + <v> 0.01477270 -0.00608310 -0.00082391 </v> + <v> -0.01265447 -0.00975198 -0.00082391 </v> + <v> -0.00000000 -0.00000000 -0.00664873 </v> + <v> 0.01265447 -0.00975198 -0.00082391 </v> + <v> 0.00211823 0.01583509 -0.00082391 </v> + <v> -0.00211823 0.01583509 -0.00082391 </v> + <v> -0.00000000 -0.00000000 -0.00614417 </v> + <v> 0.01130986 0.00652975 0.00989659 </v> + <v> -0.00000000 0.00638870 0.00789475 </v> + <v> -0.01130986 0.00652975 0.00989659 </v> + <v> 0.00553278 -0.00319435 0.00789475 </v> + <v> -0.00553278 -0.00319435 0.00789475 </v> + <v> -0.00000000 -0.00104772 -0.00365622 </v> + <v> -0.00000000 -0.01305951 0.00989659 </v> + <v> -0.00090735 0.00052386 -0.00365622 </v> + <v> 0.00090735 0.00052386 -0.00365622 </v> + <v> 0.00000000 -0.00377417 -0.00474517 </v> + <v> -0.00968042 -0.00558899 0.00589373 </v> + <v> 0.00968042 -0.00558899 0.00589373 </v> + <v> -0.00094593 0.00054613 -0.00388269 </v> + <v> -0.00000000 0.01117798 0.00589373 </v> + <v> 0.00094593 0.00054613 -0.00388269 </v> + <v> 0.00326852 0.00188708 -0.00474517 </v> + <v> -0.00326852 0.00188708 -0.00474517 </v> + <v> -0.00000000 -0.00109227 -0.00388269 </v> + <v> -0.00000000 -0.00000000 -0.00890333 </v> + <v> 0.00004004 0.00005582 0.00037824 </v> + <v> -0.00004004 0.00005582 0.00037824 </v> + <v> 0.00006836 0.00000676 0.00037824 </v> + <v> -0.00006836 0.00000676 0.00037824 </v> + <v> 0.00002833 -0.00006259 0.00037824 </v> + <v> -0.00002833 -0.00006259 0.00037824 </v> + <v> -0.00000000 -0.00000000 -0.00681404 </v> + <v> -0.00000000 -0.00000000 -0.03513390 </v> + <v> -0.00000000 -0.00000000 0.05725226 </v> + </varray> + <varray name="stress" > + <v> -10.83705859 0.00000000 0.00000000 </v> + <v> 0.00000000 -10.83705859 0.00000000 </v> + <v> 0.00000000 -0.00000000 -2.18264064 </v> + </varray> + <energy> + <i name="e_fr_energy"> -101.73392891 </i> + <i name="e_wo_entrp"> -101.73125775 </i> + <i name="e_0_energy"> -0.00801347 </i> + </energy> + <time name="totalsc"> 66.12 66.35</time> + </calculation> + <calculation> + <scstep> + <time name="dav"> 4.97 4.98</time> + <time name="total"> 5.81 5.83</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21633878 </v> + <i name="Tr[quadrupol]"> -6475.79803136 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.85762563 </i> + <i name="ewald"> 133559.84335901 </i> + <i name="hartreedc">-181557.10475250 </i> + <i name="XCdc"> -530.20354872 </i> + <i name="pawpsdc"> 49360.46363004 </i> + <i name="pawaedc"> -47314.62750152 </i> + <i name="eentropy"> -0.00737171 </i> + <i name="bandstr"> -1327.42404549 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.73105034 </i> + <i name="e_wo_entrp"> -101.72367863 </i> + <i name="e_0_energy"> -101.72859311 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.85</time> + <time name="diis"> 2.57 2.58</time> + <time name="orth"> 0.17 0.17</time> + <time name="total"> 4.44 4.45</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.22579412 </v> + <i name="Tr[quadrupol]"> -6475.78809385 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73342883 </i> + <i name="e_wo_entrp"> -101.72642447 </i> + <i name="e_0_energy"> -101.73109404 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 2.61 2.61</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.53 4.55</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.19781816 </v> + <i name="Tr[quadrupol]"> -6475.79996973 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73584624 </i> + <i name="e_wo_entrp"> -101.72856556 </i> + <i name="e_0_energy"> -101.73341934 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.85 0.86</time> + <time name="diis"> 2.51 2.51</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.37 4.38</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.23866758 </v> + <i name="Tr[quadrupol]"> -6475.76162890 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73561157 </i> + <i name="e_wo_entrp"> -101.72867829 </i> + <i name="e_0_energy"> -101.73330048 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.53 2.53</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.35 4.36</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.22209649 </v> + <i name="Tr[quadrupol]"> -6475.77539736 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73217976 </i> + <i name="e_wo_entrp"> -101.72510957 </i> + <i name="e_0_energy"> -101.72982303 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.83 0.84</time> + <time name="diis"> 2.55 2.56</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.37 4.39</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21805093 </v> + <i name="Tr[quadrupol]"> -6475.76903977 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73184601 </i> + <i name="e_wo_entrp"> -101.72471651 </i> + <i name="e_0_energy"> -101.72946951 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.91 1.91</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.73 3.75</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21875456 </v> + <i name="Tr[quadrupol]"> -6475.77126944 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73198085 </i> + <i name="e_wo_entrp"> -101.72485751 </i> + <i name="e_0_energy"> -101.72960640 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.67 1.67</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.49 3.50</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21808773 </v> + <i name="Tr[quadrupol]"> -6475.76922830 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73210124 </i> + <i name="e_wo_entrp"> -101.72497169 </i> + <i name="e_0_energy"> -101.72972473 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.85 0.85</time> + <time name="diis"> 1.76 1.77</time> + <time name="orth"> 0.17 0.17</time> + <time name="total"> 3.68 3.69</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21882121 </v> + <i name="Tr[quadrupol]"> -6475.76829536 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73231638 </i> + <i name="e_wo_entrp"> -101.72519439 </i> + <i name="e_0_energy"> -101.72994238 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 1.78 1.79</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.68 3.70</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21875719 </v> + <i name="Tr[quadrupol]"> -6475.76579355 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73256645 </i> + <i name="e_wo_entrp"> -101.72544618 </i> + <i name="e_0_energy"> -101.73019303 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.70 1.70</time> + <time name="orth"> 0.15 0.16</time> + <time name="total"> 3.53 3.55</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21895738 </v> + <i name="Tr[quadrupol]"> -6475.76244750 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73294207 </i> + <i name="e_wo_entrp"> -101.72582678 </i> + <i name="e_0_energy"> -101.73057030 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.85</time> + <time name="diis"> 1.87 1.87</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.72 3.74</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21933835 </v> + <i name="Tr[quadrupol]"> -6475.75641935 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73343611 </i> + <i name="e_wo_entrp"> -101.72632647 </i> + <i name="e_0_energy"> -101.73106623 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.88 0.88</time> + <time name="diis"> 1.69 1.70</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.57 3.58</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21946185 </v> + <i name="Tr[quadrupol]"> -6475.75419463 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73355139 </i> + <i name="e_wo_entrp"> -101.72644319 </i> + <i name="e_0_energy"> -101.73118199 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.90</time> + <time name="diis"> 1.53 1.54</time> + <time name="orth"> 0.15 0.15</time> + <time name="total"> 3.44 3.46</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21949696 </v> + <i name="Tr[quadrupol]"> -6475.75306528 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73358460 </i> + <i name="e_wo_entrp"> -101.72647650 </i> + <i name="e_0_energy"> -101.73121523 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.35 1.36</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.18 3.19</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21950972 </v> + <i name="Tr[quadrupol]"> -6475.75272246 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73358340 </i> + <i name="e_wo_entrp"> -101.72647512 </i> + <i name="e_0_energy"> -101.73121397 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.30 1.30</time> + <time name="orth"> 0.15 0.16</time> + <time name="total"> 3.11 3.12</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21949982 </v> + <i name="Tr[quadrupol]"> -6475.75246571 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73358184 </i> + <i name="e_wo_entrp"> -101.72647375 </i> + <i name="e_0_energy"> -101.73121248 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.23 1.24</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 2.75 2.76</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21948725 </v> + <i name="Tr[quadrupol]"> -6475.75230622 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.84763383 </i> + <i name="ewald"> 133559.84335901 </i> + <i name="hartreedc">-181556.26891797 </i> + <i name="XCdc"> -530.19573171 </i> + <i name="pawpsdc"> 49353.94934732 </i> + <i name="pawaedc"> -47308.04663946 </i> + <i name="eentropy"> -0.00710773 </i> + <i name="bandstr"> -1328.32708020 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.73358196 </i> + <i name="e_wo_entrp"> -101.72647424 </i> + <i name="e_0_energy"> -101.73121272 </i> + </energy> + </scstep> + <structure> + <crystal> + <varray name="basis" > + <v> 8.93075865 0.00000000 0.00000000 </v> + <v> 4.46537932 7.73426386 0.00000000 </v> + <v> 0.00000000 0.00000000 24.72257853 </v> + </varray> + <i name="volume"> 1707.65880700 </i> + <varray name="rec_basis" > + <v> 0.11197257 -0.06464739 0.00000000 </v> + <v> 0.00000000 0.12929479 0.00000000 </v> + <v> 0.00000000 0.00000000 0.04044886 </v> + </varray> + </crystal> + <varray name="positions" > + <v> 0.88888889 0.22222222 0.30336641 </v> + <v> 0.22222222 0.22222222 0.30336641 </v> + <v> 0.55555556 0.22222222 0.30336641 </v> + <v> 0.88888889 0.55555556 0.30336641 </v> + <v> 0.22222222 0.55555556 0.30336641 </v> + <v> 0.55555556 0.55555556 0.30336641 </v> + <v> 0.88888889 0.88888889 0.30336641 </v> + <v> 0.22222222 0.88888889 0.30336641 </v> + <v> 0.55555556 0.88888889 0.30336641 </v> + <v> 0.00000000 0.00000000 0.40168321 </v> + <v> 0.33333333 0.00000000 0.40168321 </v> + <v> 0.66666667 0.00000000 0.40168321 </v> + <v> 0.00000000 0.33333333 0.40168321 </v> + <v> 0.33333333 0.33333333 0.40168321 </v> + <v> 0.66666667 0.33333333 0.40168321 </v> + <v> 0.00000000 0.66666667 0.40168321 </v> + <v> 0.33333333 0.66666667 0.40168321 </v> + <v> 0.66666667 0.66666667 0.40168321 </v> + <v> 0.11069984 0.11069984 0.50047761 </v> + <v> 0.44469598 0.11060803 0.49965178 </v> + <v> 0.77860033 0.11069984 0.50047761 </v> + <v> 0.11060803 0.44469598 0.49965178 </v> + <v> 0.44469598 0.44469598 0.49965178 </v> + <v> 0.77794781 0.44410438 0.50033696 </v> + <v> 0.11069984 0.77860033 0.50047761 </v> + <v> 0.44410438 0.77794781 0.50033696 </v> + <v> 0.77794781 0.77794781 0.50033696 </v> + <v> 0.88852071 0.22295858 0.59904294 </v> + <v> 0.22339821 0.22339821 0.59796832 </v> + <v> 0.55320357 0.22339821 0.59796832 </v> + <v> 0.88923029 0.55538486 0.59834257 </v> + <v> 0.22339821 0.55320357 0.59796832 </v> + <v> 0.55538486 0.55538486 0.59834257 </v> + <v> 0.88852071 0.88852071 0.59904294 </v> + <v> 0.22295858 0.88852071 0.59904294 </v> + <v> 0.55538486 0.88923029 0.59834257 </v> + <v> -0.00000000 -0.00000000 0.69695570 </v> + <v> 0.33318208 0.00106946 0.69701038 </v> + <v> 0.66574846 0.00106946 0.69701038 </v> + <v> 0.00106946 0.33318208 0.69701038 </v> + <v> 0.66574846 0.33318208 0.69701038 </v> + <v> 0.00106946 0.66574846 0.69701038 </v> + <v> 0.33318208 0.66574846 0.69701038 </v> + <v> 0.66666667 0.66666667 0.69632856 </v> + <v> 0.33333333 0.33333333 0.69623241 </v> + <v> 0.33333333 0.33333333 0.76989360 </v> + </varray> + </structure> + <varray name="forces" > + <v> 0.00000000 0.00070452 0.01422815 </v> + <v> 0.04649269 0.02684257 -0.03029816 </v> + <v> -0.04649269 0.02684257 -0.03029816 </v> + <v> 0.01298238 -0.00749538 0.00736201 </v> + <v> 0.00000000 -0.05368514 -0.03029816 </v> + <v> -0.01298238 -0.00749538 0.00736201 </v> + <v> -0.00061014 -0.00035226 0.01422815 </v> + <v> 0.00061014 -0.00035226 0.01422815 </v> + <v> 0.00000000 0.01499077 0.00736201 </v> + <v> 0.00000000 0.00000000 0.00048764 </v> + <v> -0.01474473 -0.00541122 -0.00052293 </v> + <v> 0.01474473 -0.00541122 -0.00052293 </v> + <v> -0.01205862 -0.01006370 -0.00052293 </v> + <v> 0.00000000 0.00000000 -0.00711206 </v> + <v> 0.01205862 -0.01006370 -0.00052293 </v> + <v> 0.00268611 0.01547492 -0.00052293 </v> + <v> -0.00268611 0.01547492 -0.00052293 </v> + <v> 0.00000000 0.00000000 -0.00685958 </v> + <v> 0.00806371 0.00465558 0.00809143 </v> + <v> 0.00000000 0.00373441 0.00853000 </v> + <v> -0.00806371 0.00465558 0.00809143 </v> + <v> 0.00323409 -0.00186720 0.00853000 </v> + <v> -0.00323409 -0.00186720 0.00853000 </v> + <v> 0.00000000 -0.00324917 -0.00444852 </v> + <v> 0.00000000 -0.00931117 0.00809143 </v> + <v> -0.00281387 0.00162459 -0.00444852 </v> + <v> 0.00281387 0.00162459 -0.00444852 </v> + <v> 0.00000000 0.00168367 -0.00199395 </v> + <v> -0.01306724 -0.00754438 0.00045142 </v> + <v> 0.01306724 -0.00754438 0.00045142 </v> + <v> 0.00181160 -0.00104593 -0.00081400 </v> + <v> 0.00000000 0.01508875 0.00045142 </v> + <v> -0.00181160 -0.00104593 -0.00081400 </v> + <v> -0.00145810 -0.00084184 -0.00199395 </v> + <v> 0.00145810 -0.00084184 -0.00199395 </v> + <v> 0.00000000 0.00209185 -0.00081400 </v> + <v> 0.00000000 0.00000000 -0.00655989 </v> + <v> -0.00004332 -0.00371191 0.00254984 </v> + <v> 0.00004332 -0.00371191 0.00254984 </v> + <v> -0.00323627 0.00181844 0.00254984 </v> + <v> 0.00323627 0.00181844 0.00254984 </v> + <v> -0.00319295 0.00189347 0.00254984 </v> + <v> 0.00319295 0.00189347 0.00254984 </v> + <v> 0.00000000 0.00000000 -0.00647651 </v> + <v> 0.00000000 0.00000000 0.14550725 </v> + <v> 0.00000000 0.00000000 -0.13447342 </v> + </varray> + <varray name="stress" > + <v> -10.84663304 0.00000000 0.00000000 </v> + <v> 0.00000000 -10.84663304 0.00000000 </v> + <v> 0.00000000 0.00000000 -2.47433966 </v> + </varray> + <energy> + <i name="e_fr_energy"> -101.73358196 </i> + <i name="e_wo_entrp"> -101.73121272 </i> + <i name="e_0_energy"> -0.00710773 </i> + </energy> + <time name="totalsc"> 71.92 72.16</time> + </calculation> + <calculation> + <scstep> + <time name="dav"> 4.84 4.86</time> + <time name="total"> 5.74 5.76</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21947449 </v> + <i name="Tr[quadrupol]"> -6475.46339569 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.84732139 </i> + <i name="ewald"> 133556.37766812 </i> + <i name="hartreedc">-181552.55650301 </i> + <i name="XCdc"> -530.18574701 </i> + <i name="pawpsdc"> 49353.94943320 </i> + <i name="pawaedc"> -47308.04671108 </i> + <i name="eentropy"> -0.00753915 </i> + <i name="bandstr"> -1328.58245887 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.73298148 </i> + <i name="e_wo_entrp"> -101.72544233 </i> + <i name="e_0_energy"> -101.73046843 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.88 0.89</time> + <time name="diis"> 2.63 2.64</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.62 4.64</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21314077 </v> + <i name="Tr[quadrupol]"> -6475.47028126 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73392146 </i> + <i name="e_wo_entrp"> -101.72615541 </i> + <i name="e_0_energy"> -101.73133278 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.50 2.50</time> + <time name="orth"> 0.15 0.16</time> + <time name="total"> 4.32 4.34</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.23160809 </v> + <i name="Tr[quadrupol]"> -6475.46148118 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73503382 </i> + <i name="e_wo_entrp"> -101.72749107 </i> + <i name="e_0_energy"> -101.73251957 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.55 2.56</time> + <time name="orth"> 0.17 0.17</time> + <time name="total"> 4.42 4.43</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.20477145 </v> + <i name="Tr[quadrupol]"> -6475.48748295 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73483613 </i> + <i name="e_wo_entrp"> -101.72704790 </i> + <i name="e_0_energy"> -101.73224006 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.88 0.89</time> + <time name="diis"> 2.58 2.59</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.49 4.50</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21610765 </v> + <i name="Tr[quadrupol]"> -6475.48100930 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73328428 </i> + <i name="e_wo_entrp"> -101.72554541 </i> + <i name="e_0_energy"> -101.73070465 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.52 2.53</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.35 4.37</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21768677 </v> + <i name="Tr[quadrupol]"> -6475.48498902 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73313205 </i> + <i name="e_wo_entrp"> -101.72542982 </i> + <i name="e_0_energy"> -101.73056464 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.71 1.71</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.52 3.54</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21789940 </v> + <i name="Tr[quadrupol]"> -6475.48510618 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73321473 </i> + <i name="e_wo_entrp"> -101.72552215 </i> + <i name="e_0_energy"> -101.73065054 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.85</time> + <time name="diis"> 1.64 1.64</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.47 3.48</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21772863 </v> + <i name="Tr[quadrupol]"> -6475.48640195 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73331342 </i> + <i name="e_wo_entrp"> -101.72562430 </i> + <i name="e_0_energy"> -101.73075038 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.67 1.67</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.49 3.50</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21764980 </v> + <i name="Tr[quadrupol]"> -6475.48874143 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73348165 </i> + <i name="e_wo_entrp"> -101.72579465 </i> + <i name="e_0_energy"> -101.73091932 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.55 1.56</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.39 3.40</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21741019 </v> + <i name="Tr[quadrupol]"> -6475.49002698 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73362213 </i> + <i name="e_wo_entrp"> -101.72593188 </i> + <i name="e_0_energy"> -101.73105872 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.69 1.70</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.55 3.57</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21748866 </v> + <i name="Tr[quadrupol]"> -6475.49251243 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73381037 </i> + <i name="e_wo_entrp"> -101.72612006 </i> + <i name="e_0_energy"> -101.73124693 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 1.76 1.76</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.64 3.66</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21718440 </v> + <i name="Tr[quadrupol]"> -6475.49514098 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73401714 </i> + <i name="e_wo_entrp"> -101.72632490 </i> + <i name="e_0_energy"> -101.73145306 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.88 0.88</time> + <time name="diis"> 1.49 1.49</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.38 3.39</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21716338 </v> + <i name="Tr[quadrupol]"> -6475.49599588 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73407061 </i> + <i name="e_wo_entrp"> -101.72637910 </i> + <i name="e_0_energy"> -101.73150677 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.85 0.86</time> + <time name="diis"> 1.39 1.39</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.23 3.24</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21719789 </v> + <i name="Tr[quadrupol]"> -6475.49572888 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73407849 </i> + <i name="e_wo_entrp"> -101.72638766 </i> + <i name="e_0_energy"> -101.73151488 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.88 0.88</time> + <time name="diis"> 1.35 1.35</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 2.95 2.96</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21723335 </v> + <i name="Tr[quadrupol]"> -6475.49538614 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.85443745 </i> + <i name="ewald"> 133556.37766812 </i> + <i name="hartreedc">-181553.13055744 </i> + <i name="XCdc"> -530.19083180 </i> + <i name="pawpsdc"> 49358.16942390 </i> + <i name="pawaedc"> -47312.30987553 </i> + <i name="eentropy"> -0.00769091 </i> + <i name="bandstr"> -1327.96820730 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.73407857 </i> + <i name="e_wo_entrp"> -101.72638767 </i> + <i name="e_0_energy"> -101.73151494 </i> + </energy> + </scstep> + <structure> + <crystal> + <varray name="basis" > + <v> 8.93075865 0.00000000 0.00000000 </v> + <v> 4.46537932 7.73426386 0.00000000 </v> + <v> 0.00000000 0.00000000 24.72257853 </v> + </varray> + <i name="volume"> 1707.65880700 </i> + <varray name="rec_basis" > + <v> 0.11197257 -0.06464739 0.00000000 </v> + <v> 0.00000000 0.12929479 0.00000000 </v> + <v> 0.00000000 0.00000000 0.04044886 </v> + </varray> + </crystal> + <varray name="positions" > + <v> 0.88888889 0.22222222 0.30336641 </v> + <v> 0.22222222 0.22222222 0.30336641 </v> + <v> 0.55555556 0.22222222 0.30336641 </v> + <v> 0.88888889 0.55555556 0.30336641 </v> + <v> 0.22222222 0.55555556 0.30336641 </v> + <v> 0.55555556 0.55555556 0.30336641 </v> + <v> 0.88888889 0.88888889 0.30336641 </v> + <v> 0.22222222 0.88888889 0.30336641 </v> + <v> 0.55555556 0.88888889 0.30336641 </v> + <v> 0.00000000 0.00000000 0.40168321 </v> + <v> 0.33333333 0.00000000 0.40168321 </v> + <v> 0.66666667 0.00000000 0.40168321 </v> + <v> 0.00000000 0.33333333 0.40168321 </v> + <v> 0.33333333 0.33333333 0.40168321 </v> + <v> 0.66666667 0.33333333 0.40168321 </v> + <v> 0.00000000 0.66666667 0.40168321 </v> + <v> 0.33333333 0.66666667 0.40168321 </v> + <v> 0.66666667 0.66666667 0.40168321 </v> + <v> 0.11065193 0.11065193 0.50046175 </v> + <v> 0.44472428 0.11055145 0.49964398 </v> + <v> 0.77869614 0.11065193 0.50046175 </v> + <v> 0.11055145 0.44472428 0.49964398 </v> + <v> 0.44472428 0.44472428 0.49964398 </v> + <v> 0.77795701 0.44408598 0.50034917 </v> + <v> 0.11065193 0.77869614 0.50046175 </v> + <v> 0.44408598 0.77795701 0.50034917 </v> + <v> 0.77795701 0.77795701 0.50034917 </v> + <v> 0.88848936 0.22302127 0.59907835 </v> + <v> 0.22334713 0.22334713 0.59790979 </v> + <v> 0.55330575 0.22334713 0.59790979 </v> + <v> 0.88927580 0.55536210 0.59837835 </v> + <v> 0.22334713 0.55330575 0.59790979 </v> + <v> 0.55536210 0.55536210 0.59837835 </v> + <v> 0.88848936 0.88848936 0.59907835 </v> + <v> 0.22302127 0.88848936 0.59907835 </v> + <v> 0.55536210 0.88927580 0.59837835 </v> + <v> -0.00000000 -0.00000000 0.69702059 </v> + <v> 0.33319555 0.00100564 0.69704279 </v> + <v> 0.66579880 0.00100564 0.69704279 </v> + <v> 0.00100564 0.33319555 0.69704279 </v> + <v> 0.66579880 0.33319555 0.69704279 </v> + <v> 0.00100564 0.66579880 0.69704279 </v> + <v> 0.33319555 0.66579880 0.69704279 </v> + <v> 0.66666667 0.66666667 0.69636172 </v> + <v> 0.33333333 0.33333333 0.69615593 </v> + <v> 0.33333333 0.33333333 0.76951785 </v> + </varray> + </structure> + <varray name="forces" > + <v> 0.00000000 0.00062607 0.01439234 </v> + <v> 0.04645646 0.02682165 -0.03005675 </v> + <v> -0.04645646 0.02682165 -0.03005675 </v> + <v> 0.01289455 -0.00744467 0.00778874 </v> + <v> -0.00000000 -0.05364330 -0.03005675 </v> + <v> -0.01289455 -0.00744467 0.00778874 </v> + <v> -0.00054219 -0.00031304 0.01439234 </v> + <v> 0.00054219 -0.00031304 0.01439234 </v> + <v> 0.00000000 0.01488934 0.00778874 </v> + <v> 0.00000000 -0.00000000 -0.00156137 </v> + <v> -0.01476313 -0.00584695 -0.00069074 </v> + <v> 0.01476313 -0.00584695 -0.00069074 </v> + <v> -0.01244518 -0.00986177 -0.00069074 </v> + <v> 0.00000000 -0.00000000 -0.00677103 </v> + <v> 0.01244518 -0.00986177 -0.00069074 </v> + <v> 0.00231795 0.01570872 -0.00069074 </v> + <v> -0.00231795 0.01570872 -0.00069074 </v> + <v> 0.00000000 -0.00000000 -0.00636540 </v> + <v> 0.01014943 0.00585978 0.00922917 </v> + <v> 0.00000000 0.00549772 0.00809135 </v> + <v> -0.01014943 0.00585978 0.00922917 </v> + <v> 0.00476116 -0.00274886 0.00809135 </v> + <v> -0.00476116 -0.00274886 0.00809135 </v> + <v> 0.00000000 -0.00173557 -0.00392078 </v> + <v> 0.00000000 -0.01171956 0.00922917 </v> + <v> -0.00150305 0.00086778 -0.00392078 </v> + <v> 0.00150305 0.00086778 -0.00392078 </v> + <v> 0.00000000 -0.00174797 -0.00364774 </v> + <v> -0.01094273 -0.00631779 0.00380430 </v> + <v> 0.01094273 -0.00631779 0.00380430 </v> + <v> 0.00006074 -0.00003507 -0.00278089 </v> + <v> 0.00000000 0.01263558 0.00380430 </v> + <v> -0.00006074 -0.00003507 -0.00278089 </v> + <v> 0.00151379 0.00087399 -0.00364774 </v> + <v> -0.00151379 0.00087399 -0.00364774 </v> + <v> 0.00000000 0.00007013 -0.00278089 </v> + <v> 0.00000000 -0.00000000 -0.00811135 </v> + <v> 0.00009827 -0.00123615 0.00108069 </v> + <v> -0.00009827 -0.00123615 0.00108069 </v> + <v> -0.00102140 0.00070318 0.00108069 </v> + <v> 0.00102140 0.00070318 0.00108069 </v> + <v> -0.00111967 0.00053297 0.00108069 </v> + <v> 0.00111967 0.00053297 0.00108069 </v> + <v> 0.00000000 -0.00000000 -0.00670753 </v> + <v> 0.00000000 -0.00000000 0.02948613 </v> + <v> 0.00000000 -0.00000000 -0.01100834 </v> + </varray> + <varray name="stress" > + <v> -10.84139530 0.00000000 0.00000000 </v> + <v> 0.00000000 -10.84139530 0.00000000 </v> + <v> 0.00000000 -0.00000000 -2.28697256 </v> + </varray> + <energy> + <i name="e_fr_energy"> -101.73407857 </i> + <i name="e_wo_entrp"> -101.73151494 </i> + <i name="e_0_energy"> -0.00769091 </i> + </energy> + <time name="totalsc"> 64.85 65.08</time> + </calculation> + <calculation> + <scstep> + <time name="dav"> 4.87 4.88</time> + <time name="total"> 5.69 5.71</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21727541 </v> + <i name="Tr[quadrupol]"> -6475.23165892 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.85315826 </i> + <i name="ewald"> 133556.14535979 </i> + <i name="hartreedc">-181552.93010816 </i> + <i name="XCdc"> -530.18902556 </i> + <i name="pawpsdc"> 49358.17088376 </i> + <i name="pawaedc"> -47312.31134458 </i> + <i name="eentropy"> -0.00761514 </i> + <i name="bandstr"> -1327.93669256 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.73382926 </i> + <i name="e_wo_entrp"> -101.72621413 </i> + <i name="e_0_energy"> -101.73129088 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.85 0.85</time> + <time name="diis"> 2.51 2.52</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.34 4.36</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21407971 </v> + <i name="Tr[quadrupol]"> -6475.23576598 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73436528 </i> + <i name="e_wo_entrp"> -101.72669614 </i> + <i name="e_0_energy"> -101.73180890 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.49 2.50</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.31 4.32</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.22337401 </v> + <i name="Tr[quadrupol]"> -6475.22334431 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73457076 </i> + <i name="e_wo_entrp"> -101.72699433 </i> + <i name="e_0_energy"> -101.73204528 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 2.54 2.55</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.36 4.37</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21513230 </v> + <i name="Tr[quadrupol]"> -6475.22792361 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73430133 </i> + <i name="e_wo_entrp"> -101.72664734 </i> + <i name="e_0_energy"> -101.73175000 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.87 0.87</time> + <time name="diis"> 2.57 2.58</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.44 4.45</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21813398 </v> + <i name="Tr[quadrupol]"> -6475.22932692 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73426940 </i> + <i name="e_wo_entrp"> -101.72663587 </i> + <i name="e_0_energy"> -101.73172489 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.88 0.89</time> + <time name="diis"> 2.44 2.44</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 4.32 4.34</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21661293 </v> + <i name="Tr[quadrupol]"> -6475.22609552 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73426821 </i> + <i name="e_wo_entrp"> -101.72662032 </i> + <i name="e_0_energy"> -101.73171892 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.91 1.91</time> + <time name="orth"> 0.17 0.17</time> + <time name="total"> 3.76 3.77</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21759080 </v> + <i name="Tr[quadrupol]"> -6475.22629186 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73426673 </i> + <i name="e_wo_entrp"> -101.72662832 </i> + <i name="e_0_energy"> -101.73172060 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.89 0.89</time> + <time name="diis"> 1.63 1.63</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.53 3.54</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21754780 </v> + <i name="Tr[quadrupol]"> -6475.22544810 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73427101 </i> + <i name="e_wo_entrp"> -101.72663179 </i> + <i name="e_0_energy"> -101.73172460 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.91 0.91</time> + <time name="diis"> 1.49 1.49</time> + <time name="orth"> 0.15 0.16</time> + <time name="total"> 3.39 3.41</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21765611 </v> + <i name="Tr[quadrupol]"> -6475.22520015 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73427630 </i> + <i name="e_wo_entrp"> -101.72664055 </i> + <i name="e_0_energy"> -101.73173105 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.83 0.84</time> + <time name="diis"> 1.33 1.34</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.15 3.16</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21770597 </v> + <i name="Tr[quadrupol]"> -6475.22460374 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73428106 </i> + <i name="e_wo_entrp"> -101.72664738 </i> + <i name="e_0_energy"> -101.73173650 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.17 1.17</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.00 3.01</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21774737 </v> + <i name="Tr[quadrupol]"> -6475.22424865 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73428478 </i> + <i name="e_wo_entrp"> -101.72665237 </i> + <i name="e_0_energy"> -101.73174064 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.18 1.18</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.01 3.02</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21778722 </v> + <i name="Tr[quadrupol]"> -6475.22383779 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73428844 </i> + <i name="e_wo_entrp"> -101.72665704 </i> + <i name="e_0_energy"> -101.73174464 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.85 0.85</time> + <time name="diis"> 1.18 1.19</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.02 3.03</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21783565 </v> + <i name="Tr[quadrupol]"> -6475.22334002 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73429251 </i> + <i name="e_wo_entrp"> -101.72666238 </i> + <i name="e_0_energy"> -101.73174914 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.84 0.84</time> + <time name="diis"> 1.27 1.27</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.10 3.11</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21791919 </v> + <i name="Tr[quadrupol]"> -6475.22243319 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73429899 </i> + <i name="e_wo_entrp"> -101.72667121 </i> + <i name="e_0_energy"> -101.73175640 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.85 0.85</time> + <time name="diis"> 1.23 1.23</time> + <time name="orth"> 0.15 0.16</time> + <time name="total"> 3.06 3.07</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21796535 </v> + <i name="Tr[quadrupol]"> -6475.22185382 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -101.73430202 </i> + <i name="e_wo_entrp"> -101.72667608 </i> + <i name="e_0_energy"> -101.73176004 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.85 0.85</time> + <time name="diis"> 1.18 1.19</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 2.72 2.73</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.21797827 </v> + <i name="Tr[quadrupol]"> -6475.22162430 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1018.85092287 </i> + <i name="ewald"> 133556.14535979 </i> + <i name="hartreedc">-181552.68843207 </i> + <i name="XCdc"> -530.19053167 </i> + <i name="pawpsdc"> 49358.59363462 </i> + <i name="pawaedc"> -47312.74036347 </i> + <i name="eentropy"> -0.00762493 </i> + <i name="bandstr"> -1328.16882259 </i> + <i name="atom"> 46688.47155493 </i> + <i name="e_fr_energy"> -101.73430253 </i> + <i name="e_wo_entrp"> -101.72667760 </i> + <i name="e_0_energy"> -101.73176089 </i> + </energy> + </scstep> + <structure> + <crystal> + <varray name="basis" > + <v> 8.93075865 0.00000000 0.00000000 </v> + <v> 4.46537932 7.73426386 0.00000000 </v> + <v> 0.00000000 0.00000000 24.72257853 </v> + </varray> + <i name="volume"> 1707.65880700 </i> + <varray name="rec_basis" > + <v> 0.11197257 -0.06464739 0.00000000 </v> + <v> 0.00000000 0.12929479 0.00000000 </v> + <v> 0.00000000 0.00000000 0.04044886 </v> + </varray> + </crystal> + <varray name="positions" > + <v> 0.88888889 0.22222222 0.30336641 </v> + <v> 0.22222222 0.22222222 0.30336641 </v> + <v> 0.55555556 0.22222222 0.30336641 </v> + <v> 0.88888889 0.55555556 0.30336641 </v> + <v> 0.22222222 0.55555556 0.30336641 </v> + <v> 0.55555556 0.55555556 0.30336641 </v> + <v> 0.88888889 0.88888889 0.30336641 </v> + <v> 0.22222222 0.88888889 0.30336641 </v> + <v> 0.55555556 0.88888889 0.30336641 </v> + <v> 0.00000000 0.00000000 0.40168321 </v> + <v> 0.33333333 0.00000000 0.40168321 </v> + <v> 0.66666667 0.00000000 0.40168321 </v> + <v> 0.00000000 0.33333333 0.40168321 </v> + <v> 0.33333333 0.33333333 0.40168321 </v> + <v> 0.66666667 0.33333333 0.40168321 </v> + <v> 0.00000000 0.66666667 0.40168321 </v> + <v> 0.33333333 0.66666667 0.40168321 </v> + <v> 0.66666667 0.66666667 0.40168321 </v> + <v> 0.11076472 0.11076472 0.50051317 </v> + <v> 0.44466825 0.11066351 0.49968579 </v> + <v> 0.77847057 0.11076472 0.50051317 </v> + <v> 0.11066351 0.44466825 0.49968579 </v> + <v> 0.44466825 0.44466825 0.49968579 </v> + <v> 0.77796497 0.44407006 0.50032439 </v> + <v> 0.11076472 0.77847057 0.50051317 </v> + <v> 0.44407006 0.77796497 0.50032439 </v> + <v> 0.77796497 0.77796497 0.50032439 </v> + <v> 0.88851917 0.22296166 0.59904240 </v> + <v> 0.22328064 0.22328064 0.59795887 </v> + <v> 0.55343872 0.22328064 0.59795887 </v> + <v> 0.88925243 0.55537379 0.59834622 </v> + <v> 0.22328064 0.55343872 0.59795887 </v> + <v> 0.55537379 0.55537379 0.59834622 </v> + <v> 0.88851917 0.88851917 0.59904240 </v> + <v> 0.22296166 0.88851917 0.59904240 </v> + <v> 0.55537379 0.88925243 0.59834622 </v> + <v> -0.00000000 -0.00000000 0.69694807 </v> + <v> 0.33319878 0.00102151 0.69703043 </v> + <v> 0.66577972 0.00102151 0.69703043 </v> + <v> 0.00102151 0.33319878 0.69703043 </v> + <v> 0.66577972 0.33319878 0.69703043 </v> + <v> 0.00102151 0.66577972 0.69703043 </v> + <v> 0.33319878 0.66577972 0.69703043 </v> + <v> 0.66666667 0.66666667 0.69631275 </v> + <v> 0.33333333 0.33333333 0.69633405 </v> + <v> 0.33333333 0.33333333 0.76966823 </v> + </varray> + </structure> + <varray name="forces" > + <v> -0.00000000 0.00079903 0.01455443 </v> + <v> 0.04627711 0.02671810 -0.02975774 </v> + <v> -0.04627711 0.02671810 -0.02975774 </v> + <v> 0.01292059 -0.00745971 0.00776236 </v> + <v> 0.00000000 -0.05343620 -0.02975774 </v> + <v> -0.01292059 -0.00745971 0.00776236 </v> + <v> -0.00069198 -0.00039952 0.01455443 </v> + <v> 0.00069198 -0.00039952 0.01455443 </v> + <v> -0.00000000 0.01491942 0.00776236 </v> + <v> -0.00000000 -0.00000000 0.00364826 </v> + <v> -0.01474731 -0.00506962 0.00019804 </v> + <v> 0.01474731 -0.00506962 0.00019804 </v> + <v> -0.01176408 -0.01023673 0.00019804 </v> + <v> -0.00000000 -0.00000000 -0.00610102 </v> + <v> 0.01176408 -0.01023673 0.00019804 </v> + <v> 0.00298323 0.01530636 0.00019804 </v> + <v> -0.00298323 0.01530636 0.00019804 </v> + <v> -0.00000000 -0.00000000 -0.00740570 </v> + <v> 0.00262878 0.00151773 0.00306924 </v> + <v> -0.00000000 0.00203139 0.00608228 </v> + <v> -0.00262878 0.00151773 0.00306924 </v> + <v> 0.00175923 -0.00101569 0.00608228 </v> + <v> -0.00175923 -0.00101569 0.00608228 </v> + <v> -0.00000000 -0.00127591 -0.00368560 </v> + <v> -0.00000000 -0.00303545 0.00306924 </v> + <v> -0.00110497 0.00063795 -0.00368560 </v> + <v> 0.00110497 0.00063795 -0.00368560 </v> + <v> -0.00000000 0.00197177 -0.00135740 </v> + <v> -0.00334507 -0.00193128 0.00568201 </v> + <v> 0.00334507 -0.00193128 0.00568201 </v> + <v> 0.00064290 -0.00037118 -0.00148846 </v> + <v> -0.00000000 0.00386256 0.00568201 </v> + <v> -0.00064290 -0.00037118 -0.00148846 </v> + <v> -0.00170760 -0.00098589 -0.00135740 </v> + <v> 0.00170760 -0.00098589 -0.00135740 </v> + <v> -0.00000000 0.00074236 -0.00148846 </v> + <v> -0.00000000 -0.00000000 -0.00597001 </v> + <v> 0.00002791 -0.00245622 0.00162316 </v> + <v> -0.00002791 -0.00245622 0.00162316 </v> + <v> -0.00211319 0.00125228 0.00162316 </v> + <v> 0.00211319 0.00125228 0.00162316 </v> + <v> -0.00214110 0.00120394 0.00162316 </v> + <v> 0.00214110 0.00120394 0.00162316 </v> + <v> -0.00000000 -0.00000000 -0.00547026 </v> + <v> -0.00000000 -0.00000000 0.01155219 </v> + <v> -0.00000000 -0.00000000 -0.00376396 </v> + </varray> + <varray name="stress" > + <v> -10.84101195 0.00000000 0.00000000 </v> + <v> 0.00000000 -10.84101195 0.00000000 </v> + <v> 0.00000000 0.00000000 -2.27353402 </v> + </varray> + <energy> + <i name="e_fr_energy"> -101.73430253 </i> + <i name="e_wo_entrp"> -101.73176089 </i> + <i name="e_0_energy"> -0.00762493 </i> + </energy> + <time name="totalsc"> 65.21 65.44</time> + <eigenvalues> + <array> + <dimension dim="1">band</dimension> + <dimension dim="2">kpoint</dimension> + <dimension dim="3">spin</dimension> + <field>eigene</field> + <field>occ</field> + <set> + <set comment="spin 1"> + <set comment="kpoint 1"> + <r> -12.7552 1.0000 </r> + <r> -5.5271 1.0000 </r> + <r> -4.8533 1.0000 </r> + <r> -4.5247 1.0000 </r> + <r> -4.3015 1.0000 </r> + <r> -4.2988 1.0000 </r> + <r> -4.2988 1.0000 </r> + <r> -4.2987 1.0000 </r> + <r> -4.2953 1.0000 </r> + <r> -4.2953 1.0000 </r> + <r> -4.2642 1.0000 </r> + <r> -4.2597 1.0000 </r> + <r> -4.2586 1.0000 </r> + <r> -4.2586 1.0000 </r> + <r> -4.2575 1.0000 </r> + <r> -4.2554 1.0000 </r> + <r> -4.2554 1.0000 </r> + <r> -4.2031 1.0000 </r> + <r> -4.1235 1.0000 </r> + <r> -4.1199 1.0000 </r> + <r> -4.1199 1.0000 </r> + <r> -4.1152 1.0000 </r> + <r> -4.1152 1.0000 </r> + <r> -4.1119 1.0000 </r> + <r> -4.0638 1.0000 </r> + <r> -4.0536 1.0000 </r> + <r> -4.0516 1.0000 </r> + <r> -4.0516 1.0000 </r> + <r> -4.0471 1.0000 </r> + <r> -4.0471 1.0000 </r> + <r> -3.9017 1.0000 </r> + <r> -3.8951 1.0000 </r> + <r> -3.8950 1.0000 </r> + <r> -3.8950 1.0000 </r> + <r> -3.8782 1.0000 </r> + <r> -3.8782 1.0000 </r> + <r> -3.8434 1.0000 </r> + <r> -3.8434 1.0000 </r> + <r> -3.8379 1.0000 </r> + <r> -3.8317 1.0000 </r> + <r> -3.8211 1.0000 </r> + <r> -3.8211 1.0000 </r> + <r> -3.7503 1.0000 </r> + <r> -3.7460 1.0000 </r> + <r> -3.7460 1.0000 </r> + <r> -3.7385 1.0000 </r> + <r> -3.7345 1.0000 </r> + <r> -3.7345 1.0000 </r> + <r> -3.7167 1.0000 </r> + <r> -3.7167 1.0000 </r> + <r> -3.7079 1.0000 </r> + <r> -3.7052 1.0000 </r> + <r> -3.6477 1.0000 </r> + <r> -3.6477 1.0000 </r> + <r> -3.6131 1.0000 </r> + <r> -3.6131 1.0000 </r> + <r> -3.6049 1.0000 </r> + <r> -3.5973 1.0000 </r> + <r> -3.5796 1.0000 </r> + <r> -3.5796 1.0000 </r> + <r> -3.4449 1.0000 </r> + <r> -3.4449 1.0000 </r> + <r> -3.3979 1.0000 </r> + <r> -3.3490 1.0000 </r> + <r> -3.3490 1.0000 </r> + <r> -3.3287 1.0000 </r> + <r> -3.3120 1.0000 </r> + <r> -3.3120 1.0000 </r> + <r> -3.2961 1.0000 </r> + <r> -3.2824 1.0000 </r> + <r> -3.2793 1.0000 </r> + <r> -3.2793 1.0000 </r> + <r> -3.2096 1.0000 </r> + <r> -3.1951 1.0000 </r> + <r> -3.1951 1.0000 </r> + <r> -3.1854 1.0000 </r> + <r> -3.1854 1.0000 </r> + <r> -3.1651 1.0000 </r> + <r> -3.1592 1.0000 </r> + <r> -3.1592 1.0000 </r> + <r> -3.1518 1.0000 </r> + <r> -3.1367 1.0000 </r> + <r> -3.1367 1.0000 </r> + <r> -3.1241 1.0000 </r> + <r> -3.0835 1.0000 </r> + <r> -3.0696 1.0000 </r> + <r> -3.0696 1.0000 </r> + <r> -3.0616 1.0000 </r> + <r> -3.0616 1.0000 </r> + <r> -3.0525 1.0000 </r> + <r> -3.0494 1.0000 </r> + <r> -3.0494 1.0000 </r> + <r> -3.0465 1.0000 </r> + <r> -3.0465 1.0000 </r> + <r> -3.0036 1.0000 </r> + <r> -3.0007 1.0000 </r> + <r> -3.0005 1.0000 </r> + <r> -3.0005 1.0000 </r> + <r> -2.9982 1.0000 </r> + <r> -2.9957 1.0000 </r> + <r> -2.9957 1.0000 </r> + <r> -2.9900 1.0000 </r> + <r> -2.9779 1.0000 </r> + <r> -2.9779 1.0000 </r> + <r> -2.8976 1.0000 </r> + <r> -2.8548 1.0000 </r> + <r> -2.8548 1.0000 </r> + <r> -2.8470 1.0000 </r> + <r> -2.8470 1.0000 </r> + <r> -2.8019 1.0000 </r> + <r> -2.7957 1.0000 </r> + <r> -2.7957 1.0000 </r> + <r> -2.7652 1.0000 </r> + <r> -2.7652 1.0000 </r> + <r> -2.7604 1.0000 </r> + <r> -2.7604 1.0000 </r> + <r> -2.7012 1.0000 </r> + <r> -2.6978 1.0000 </r> + <r> -2.6836 1.0000 </r> + <r> -2.6836 1.0000 </r> + <r> -2.6696 1.0000 </r> + <r> -2.6691 1.0000 </r> + <r> -2.6691 1.0000 </r> + <r> -2.6599 1.0000 </r> + <r> -2.6599 1.0000 </r> + <r> -2.6596 1.0000 </r> + <r> -2.6456 1.0000 </r> + <r> -2.6104 1.0000 </r> + <r> -2.6104 1.0000 </r> + <r> -2.5912 1.0000 </r> + <r> -2.5900 1.0000 </r> + <r> -2.5900 1.0000 </r> + <r> -2.5798 1.0000 </r> + <r> -2.5129 1.0000 </r> + <r> -2.5129 1.0000 </r> + <r> -2.4261 1.0000 </r> + <r> -2.4142 1.0000 </r> + <r> -2.4142 1.0000 </r> + <r> -2.4038 1.0000 </r> + <r> -2.3910 1.0000 </r> + <r> -2.3628 1.0000 </r> + <r> -2.3628 1.0000 </r> + <r> -2.3304 1.0000 </r> + <r> -2.3304 1.0000 </r> + <r> -2.3262 1.0000 </r> + <r> -2.3262 1.0000 </r> + <r> -2.3228 1.0000 </r> + <r> -2.3178 1.0000 </r> + <r> -2.3178 1.0000 </r> + <r> -2.3173 1.0000 </r> + <r> -2.3160 1.0000 </r> + <r> -2.3079 1.0000 </r> + <r> -2.3079 1.0000 </r> + <r> -2.2533 1.0000 </r> + <r> -2.2533 1.0000 </r> + <r> -2.2192 1.0000 </r> + <r> -2.2192 1.0000 </r> + <r> -2.1923 1.0000 </r> + <r> -2.1923 1.0000 </r> + <r> -2.1910 1.0000 </r> + <r> -2.1195 1.0000 </r> + <r> -2.1195 1.0000 </r> + <r> -2.1091 1.0000 </r> + <r> -2.1078 1.0000 </r> + <r> -2.1078 1.0000 </r> + <r> -2.0977 1.0000 </r> + <r> -2.0719 1.0000 </r> + <r> -2.0719 1.0000 </r> + <r> -2.0643 1.0000 </r> + <r> -2.0542 1.0000 </r> + <r> -2.0542 1.0000 </r> + <r> -2.0380 1.0000 </r> + <r> -2.0380 1.0000 </r> + <r> -2.0134 1.0000 </r> + <r> -2.0057 1.0000 </r> + <r> -2.0057 1.0000 </r> + <r> -2.0055 1.0000 </r> + <r> -2.0041 1.0000 </r> + <r> -2.0041 1.0000 </r> + <r> -1.9997 1.0000 </r> + <r> -1.9888 1.0000 </r> + <r> -1.9888 1.0000 </r> + <r> -1.9864 1.0000 </r> + <r> -1.9772 1.0000 </r> + <r> -1.9772 1.0000 </r> + <r> -1.9129 1.0000 </r> + <r> -1.9114 1.0000 </r> + <r> -1.9114 1.0000 </r> + <r> -1.9034 1.0000 </r> + <r> -1.9034 1.0000 </r> + <r> -1.8978 1.0000 </r> + <r> -1.8937 1.0000 </r> + <r> -1.8448 1.0000 </r> + <r> -1.8448 1.0000 </r> + <r> -1.8325 1.0000 </r> + <r> -1.8325 1.0000 </r> + <r> -1.8215 1.0000 </r> + <r> -1.8099 1.0000 </r> + <r> -1.8032 1.0000 </r> + <r> -1.8032 1.0000 </r> + <r> -1.8013 1.0000 </r> + <r> -1.7830 1.0000 </r> + <r> -1.7830 1.0000 </r> + <r> -1.7721 1.0000 </r> + <r> -1.7721 1.0000 </r> + <r> -1.7666 1.0000 </r> + <r> -1.7666 1.0000 </r> + <r> -1.7624 1.0000 </r> + <r> -1.7499 1.0000 </r> + <r> -1.7402 1.0000 </r> + <r> -1.7402 1.0000 </r> + <r> -1.7279 1.0000 </r> + <r> -1.7114 1.0000 </r> + <r> -1.7114 1.0000 </r> + <r> -1.7078 1.0000 </r> + <r> -1.7078 1.0000 </r> + <r> -1.7062 1.0000 </r> + <r> -1.6981 1.0000 </r> + <r> -1.6899 1.0000 </r> + <r> -1.6636 1.0000 </r> + <r> -1.6636 1.0000 </r> + <r> -1.6214 1.0000 </r> + <r> -1.6214 1.0000 </r> + <r> -1.6000 1.0000 </r> + <r> -1.6000 1.0000 </r> + <r> -1.5925 1.0000 </r> + <r> -1.5886 1.0000 </r> + <r> -1.4743 1.0000 </r> + <r> -1.4743 1.0000 </r> + <r> -1.4671 1.0000 </r> + <r> -1.4493 1.0000 </r> + <r> -1.4493 1.0000 </r> + <r> -1.4459 1.0000 </r> + <r> -1.1549 1.0000 </r> + <r> -1.0904 1.0000 </r> + <r> -1.0904 1.0000 </r> + <r> -1.0252 1.0000 </r> + <r> -1.0252 1.0000 </r> + <r> -0.9859 1.0000 </r> + <r> -0.9292 1.0000 </r> + <r> -0.8237 1.0000 </r> + <r> -0.8237 1.0000 </r> + <r> -0.0196 1.0000 </r> + <r> -0.0196 1.0000 </r> + <r> 0.0336 1.0000 </r> + <r> 0.1274 1.0000 </r> + <r> 0.1350 1.0000 </r> + <r> 0.1350 1.0000 </r> + <r> 0.8003 1.0000 </r> + <r> 0.9642 1.0000 </r> + <r> 0.9642 1.0000 </r> + <r> 1.2331 1.0353 </r> + <r> 1.7126 -0.0000 </r> + <r> 1.7168 -0.0000 </r> + <r> 1.7168 -0.0000 </r> + <r> 1.8192 -0.0000 </r> + <r> 1.9175 -0.0000 </r> + <r> 1.9175 -0.0000 </r> + <r> 2.7835 -0.0000 </r> + <r> 3.5836 -0.0000 </r> + <r> 3.6038 -0.0000 </r> + <r> 3.6038 -0.0000 </r> + <r> 3.6978 -0.0000 </r> + <r> 3.6978 -0.0000 </r> + <r> 4.4492 0.0000 </r> + <r> 4.4604 0.0000 </r> + <r> 4.4604 0.0000 </r> + <r> 4.4604 0.0000 </r> + <r> 4.5353 0.0000 </r> + <r> 4.5799 0.0000 </r> + <r> 4.5799 0.0000 </r> + <r> 5.1393 0.0000 </r> + <r> 5.1393 0.0000 </r> + <r> 5.2249 0.0000 </r> + <r> 5.2344 0.0000 </r> + <r> 5.2481 0.0000 </r> + <r> 5.3242 0.0000 </r> + <r> 5.3242 0.0000 </r> + <r> 5.5456 0.0000 </r> + <r> 5.5604 0.0000 </r> + <r> 5.5604 0.0000 </r> + <r> 5.6525 0.0000 </r> + <r> 5.6525 0.0000 </r> + <r> 5.9296 0.0000 </r> + <r> 5.9494 0.0000 </r> + <r> 6.0607 0.0000 </r> + <r> 6.1114 0.0000 </r> + <r> 6.1114 0.0000 </r> + <r> 6.2151 0.0000 </r> + <r> 6.4101 0.0000 </r> + <r> 6.6954 0.0000 </r> + <r> 6.6954 0.0000 </r> + <r> 7.2391 0.0000 </r> + <r> 7.2447 0.0000 </r> + <r> 7.2447 0.0000 </r> + <r> 7.2887 0.0000 </r> + <r> 7.2887 0.0000 </r> + <r> 7.3807 0.0000 </r> + <r> 7.4892 0.0000 </r> + <r> 7.4893 0.0000 </r> + <r> 7.5497 0.0000 </r> + <r> 7.5540 0.0000 </r> + <r> 7.5540 0.0000 </r> + <r> 7.5658 0.0000 </r> + <r> 7.5755 0.0000 </r> + <r> 7.5755 0.0000 </r> + <r> 7.6128 0.0000 </r> + <r> 7.6128 0.0000 </r> + <r> 7.6349 0.0000 </r> + <r> 7.6778 0.0000 </r> + <r> 8.0812 0.0000 </r> + <r> 8.1038 0.0000 </r> + <r> 8.1187 0.0000 </r> + <r> 8.1188 0.0000 </r> + <r> 8.1528 0.0000 </r> + <r> 8.1528 0.0000 </r> + <r> 8.1771 0.0000 </r> + <r> 8.4193 0.0000 </r> + <r> 8.4559 0.0000 </r> + <r> 8.4568 0.0000 </r> + <r> 8.4842 0.0000 </r> + <r> 8.4844 0.0000 </r> + <r> 8.5197 0.0000 </r> + <r> 8.6503 0.0000 </r> + <r> 8.6947 0.0000 </r> + </set> + <set comment="kpoint 2"> + <r> -12.7551 1.0000 </r> + <r> -5.2204 1.0000 </r> + <r> -4.5684 1.0000 </r> + <r> -4.5111 1.0000 </r> + <r> -4.4484 1.0000 </r> + <r> -4.3972 1.0000 </r> + <r> -4.3318 1.0000 </r> + <r> -4.3292 1.0000 </r> + <r> -4.2323 1.0000 </r> + <r> -4.2312 1.0000 </r> + <r> -4.2171 1.0000 </r> + <r> -4.2157 1.0000 </r> + <r> -4.2061 1.0000 </r> + <r> -4.1775 1.0000 </r> + <r> -4.1745 1.0000 </r> + <r> -4.1347 1.0000 </r> + <r> -4.1324 1.0000 </r> + <r> -4.1251 1.0000 </r> + <r> -4.1237 1.0000 </r> + <r> -4.1101 1.0000 </r> + <r> -4.0617 1.0000 </r> + <r> -4.0386 1.0000 </r> + <r> -3.9976 1.0000 </r> + <r> -3.9893 1.0000 </r> + <r> -3.9877 1.0000 </r> + <r> -3.9810 1.0000 </r> + <r> -3.9760 1.0000 </r> + <r> -3.9739 1.0000 </r> + <r> -3.9724 1.0000 </r> + <r> -3.9717 1.0000 </r> + <r> -3.9593 1.0000 </r> + <r> -3.9572 1.0000 </r> + <r> -3.9065 1.0000 </r> + <r> -3.9008 1.0000 </r> + <r> -3.9000 1.0000 </r> + <r> -3.8634 1.0000 </r> + <r> -3.8405 1.0000 </r> + <r> -3.8323 1.0000 </r> + <r> -3.8038 1.0000 </r> + <r> -3.7965 1.0000 </r> + <r> -3.7904 1.0000 </r> + <r> -3.7848 1.0000 </r> + <r> -3.7832 1.0000 </r> + <r> -3.7562 1.0000 </r> + <r> -3.7524 1.0000 </r> + <r> -3.7005 1.0000 </r> + <r> -3.7000 1.0000 </r> + <r> -3.6717 1.0000 </r> + <r> -3.6704 1.0000 </r> + <r> -3.6658 1.0000 </r> + <r> -3.6558 1.0000 </r> + <r> -3.6527 1.0000 </r> + <r> -3.6477 1.0000 </r> + <r> -3.6383 1.0000 </r> + <r> -3.6108 1.0000 </r> + <r> -3.5946 1.0000 </r> + <r> -3.5748 1.0000 </r> + <r> -3.5198 1.0000 </r> + <r> -3.5162 1.0000 </r> + <r> -3.4432 1.0000 </r> + <r> -3.4418 1.0000 </r> + <r> -3.4386 1.0000 </r> + <r> -3.4309 1.0000 </r> + <r> -3.4213 1.0000 </r> + <r> -3.4159 1.0000 </r> + <r> -3.4084 1.0000 </r> + <r> -3.4031 1.0000 </r> + <r> -3.3991 1.0000 </r> + <r> -3.3876 1.0000 </r> + <r> -3.3477 1.0000 </r> + <r> -3.3248 1.0000 </r> + <r> -3.2995 1.0000 </r> + <r> -3.2977 1.0000 </r> + <r> -3.2826 1.0000 </r> + <r> -3.2690 1.0000 </r> + <r> -3.2524 1.0000 </r> + <r> -3.2447 1.0000 </r> + <r> -3.2435 1.0000 </r> + <r> -3.2275 1.0000 </r> + <r> -3.2124 1.0000 </r> + <r> -3.1936 1.0000 </r> + <r> -3.1911 1.0000 </r> + <r> -3.1719 1.0000 </r> + <r> -3.1711 1.0000 </r> + <r> -3.1580 1.0000 </r> + <r> -3.1487 1.0000 </r> + <r> -3.1034 1.0000 </r> + <r> -3.0941 1.0000 </r> + <r> -3.0940 1.0000 </r> + <r> -3.0831 1.0000 </r> + <r> -3.0667 1.0000 </r> + <r> -3.0611 1.0000 </r> + <r> -3.0496 1.0000 </r> + <r> -3.0320 1.0000 </r> + <r> -3.0249 1.0000 </r> + <r> -3.0242 1.0000 </r> + <r> -3.0128 1.0000 </r> + <r> -3.0071 1.0000 </r> + <r> -2.9783 1.0000 </r> + <r> -2.9707 1.0000 </r> + <r> -2.9692 1.0000 </r> + <r> -2.9583 1.0000 </r> + <r> -2.9460 1.0000 </r> + <r> -2.9352 1.0000 </r> + <r> -2.9208 1.0000 </r> + <r> -2.9108 1.0000 </r> + <r> -2.9072 1.0000 </r> + <r> -2.8958 1.0000 </r> + <r> -2.8923 1.0000 </r> + <r> -2.8665 1.0000 </r> + <r> -2.8591 1.0000 </r> + <r> -2.8502 1.0000 </r> + <r> -2.8481 1.0000 </r> + <r> -2.8073 1.0000 </r> + <r> -2.8063 1.0000 </r> + <r> -2.7991 1.0000 </r> + <r> -2.7731 1.0000 </r> + <r> -2.7662 1.0000 </r> + <r> -2.7644 1.0000 </r> + <r> -2.7538 1.0000 </r> + <r> -2.7465 1.0000 </r> + <r> -2.7326 1.0000 </r> + <r> -2.7317 1.0000 </r> + <r> -2.7270 1.0000 </r> + <r> -2.7208 1.0000 </r> + <r> -2.7015 1.0000 </r> + <r> -2.6909 1.0000 </r> + <r> -2.6823 1.0000 </r> + <r> -2.6640 1.0000 </r> + <r> -2.6377 1.0000 </r> + <r> -2.6259 1.0000 </r> + <r> -2.6131 1.0000 </r> + <r> -2.5907 1.0000 </r> + <r> -2.5838 1.0000 </r> + <r> -2.5805 1.0000 </r> + <r> -2.5596 1.0000 </r> + <r> -2.5489 1.0000 </r> + <r> -2.5145 1.0000 </r> + <r> -2.5128 1.0000 </r> + <r> -2.5002 1.0000 </r> + <r> -2.4892 1.0000 </r> + <r> -2.4749 1.0000 </r> + <r> -2.4714 1.0000 </r> + <r> -2.4624 1.0000 </r> + <r> -2.4550 1.0000 </r> + <r> -2.4255 1.0000 </r> + <r> -2.4245 1.0000 </r> + <r> -2.4036 1.0000 </r> + <r> -2.3986 1.0000 </r> + <r> -2.3941 1.0000 </r> + <r> -2.3921 1.0000 </r> + <r> -2.3854 1.0000 </r> + <r> -2.3756 1.0000 </r> + <r> -2.3592 1.0000 </r> + <r> -2.3567 1.0000 </r> + <r> -2.3372 1.0000 </r> + <r> -2.3336 1.0000 </r> + <r> -2.3254 1.0000 </r> + <r> -2.3220 1.0000 </r> + <r> -2.3122 1.0000 </r> + <r> -2.2936 1.0000 </r> + <r> -2.2730 1.0000 </r> + <r> -2.2454 1.0000 </r> + <r> -2.2419 1.0000 </r> + <r> -2.2194 1.0000 </r> + <r> -2.2008 1.0000 </r> + <r> -2.1955 1.0000 </r> + <r> -2.1809 1.0000 </r> + <r> -2.1720 1.0000 </r> + <r> -2.1499 1.0000 </r> + <r> -2.1494 1.0000 </r> + <r> -2.1325 1.0000 </r> + <r> -2.1303 1.0000 </r> + <r> -2.1046 1.0000 </r> + <r> -2.0891 1.0000 </r> + <r> -2.0864 1.0000 </r> + <r> -2.0635 1.0000 </r> + <r> -2.0502 1.0000 </r> + <r> -2.0463 1.0000 </r> + <r> -2.0393 1.0000 </r> + <r> -2.0302 1.0000 </r> + <r> -2.0217 1.0000 </r> + <r> -2.0045 1.0000 </r> + <r> -1.9908 1.0000 </r> + <r> -1.9802 1.0000 </r> + <r> -1.9743 1.0000 </r> + <r> -1.9675 1.0000 </r> + <r> -1.9616 1.0000 </r> + <r> -1.9507 1.0000 </r> + <r> -1.9475 1.0000 </r> + <r> -1.9364 1.0000 </r> + <r> -1.9143 1.0000 </r> + <r> -1.9078 1.0000 </r> + <r> -1.8936 1.0000 </r> + <r> -1.8917 1.0000 </r> + <r> -1.8762 1.0000 </r> + <r> -1.8706 1.0000 </r> + <r> -1.8660 1.0000 </r> + <r> -1.8446 1.0000 </r> + <r> -1.8234 1.0000 </r> + <r> -1.8140 1.0000 </r> + <r> -1.7845 1.0000 </r> + <r> -1.7842 1.0000 </r> + <r> -1.7705 1.0000 </r> + <r> -1.7678 1.0000 </r> + <r> -1.7485 1.0000 </r> + <r> -1.7427 1.0000 </r> + <r> -1.7365 1.0000 </r> + <r> -1.7041 1.0000 </r> + <r> -1.7020 1.0000 </r> + <r> -1.6879 1.0000 </r> + <r> -1.6826 1.0000 </r> + <r> -1.6759 1.0000 </r> + <r> -1.6712 1.0000 </r> + <r> -1.6656 1.0000 </r> + <r> -1.6550 1.0000 </r> + <r> -1.6505 1.0000 </r> + <r> -1.6325 1.0000 </r> + <r> -1.6208 1.0000 </r> + <r> -1.6197 1.0000 </r> + <r> -1.6074 1.0000 </r> + <r> -1.6065 1.0000 </r> + <r> -1.5688 1.0000 </r> + <r> -1.5651 1.0000 </r> + <r> -1.5590 1.0000 </r> + <r> -1.5484 1.0000 </r> + <r> -1.5322 1.0000 </r> + <r> -1.5276 1.0000 </r> + <r> -1.5269 1.0000 </r> + <r> -1.4795 1.0000 </r> + <r> -1.4093 1.0000 </r> + <r> -1.3254 1.0000 </r> + <r> -1.2696 1.0000 </r> + <r> -1.0792 1.0000 </r> + <r> -0.9235 1.0000 </r> + <r> -0.9204 1.0000 </r> + <r> -0.5792 1.0000 </r> + <r> -0.3246 1.0000 </r> + <r> -0.2654 1.0000 </r> + <r> -0.0219 1.0000 </r> + <r> -0.0068 1.0000 </r> + <r> 0.2793 1.0000 </r> + <r> 0.3897 1.0000 </r> + <r> 0.4085 1.0000 </r> + <r> 0.5975 1.0000 </r> + <r> 0.7706 1.0000 </r> + <r> 0.8195 1.0000 </r> + <r> 1.0006 1.0000 </r> + <r> 1.2506 1.0319 </r> + <r> 1.3097 0.8670 </r> + <r> 1.3140 0.8422 </r> + <r> 1.5433 -0.0129 </r> + <r> 1.6470 -0.0002 </r> + <r> 1.9629 -0.0000 </r> + <r> 2.0300 -0.0000 </r> + <r> 2.0425 -0.0000 </r> + <r> 2.1474 -0.0000 </r> + <r> 2.3867 -0.0000 </r> + <r> 2.6014 -0.0000 </r> + <r> 2.6709 -0.0000 </r> + <r> 2.6983 -0.0000 </r> + <r> 2.9504 -0.0000 </r> + <r> 2.9946 -0.0000 </r> + <r> 3.2005 -0.0000 </r> + <r> 3.2012 -0.0000 </r> + <r> 3.5735 -0.0000 </r> + <r> 3.6170 -0.0000 </r> + <r> 3.6819 -0.0000 </r> + <r> 3.8913 -0.0000 </r> + <r> 4.0779 -0.0000 </r> + <r> 4.6171 0.0000 </r> + <r> 4.6978 0.0000 </r> + <r> 4.6997 0.0000 </r> + <r> 4.7820 0.0000 </r> + <r> 5.0009 0.0000 </r> + <r> 5.0022 0.0000 </r> + <r> 5.0478 0.0000 </r> + <r> 5.0494 0.0000 </r> + <r> 5.3000 0.0000 </r> + <r> 5.4604 0.0000 </r> + <r> 5.6778 0.0000 </r> + <r> 5.6835 0.0000 </r> + <r> 5.8053 0.0000 </r> + <r> 5.9232 0.0000 </r> + <r> 5.9311 0.0000 </r> + <r> 6.1240 0.0000 </r> + <r> 6.2170 0.0000 </r> + <r> 6.3044 0.0000 </r> + <r> 6.4786 0.0000 </r> + <r> 6.4905 0.0000 </r> + <r> 6.5162 0.0000 </r> + <r> 6.5249 0.0000 </r> + <r> 6.6481 0.0000 </r> + <r> 6.8745 0.0000 </r> + <r> 6.8918 0.0000 </r> + <r> 6.9325 0.0000 </r> + <r> 6.9905 0.0000 </r> + <r> 7.0208 0.0000 </r> + <r> 7.0600 0.0000 </r> + <r> 7.1641 0.0000 </r> + <r> 7.2798 0.0000 </r> + <r> 7.3568 0.0000 </r> + <r> 7.3607 0.0000 </r> + <r> 7.6309 0.0000 </r> + <r> 7.7230 0.0000 </r> + <r> 7.7860 0.0000 </r> + <r> 7.8996 0.0000 </r> + <r> 7.9275 0.0000 </r> + <r> 7.9382 0.0000 </r> + <r> 7.9741 0.0000 </r> + <r> 8.0731 0.0000 </r> + <r> 8.1003 0.0000 </r> + <r> 8.2483 0.0000 </r> + <r> 8.2955 0.0000 </r> + <r> 8.3999 0.0000 </r> + <r> 8.4217 0.0000 </r> + <r> 8.4721 0.0000 </r> + <r> 8.5114 0.0000 </r> + <r> 8.6325 0.0000 </r> + <r> 8.7236 0.0000 </r> + <r> 8.8597 0.0000 </r> + <r> 9.0583 0.0000 </r> + <r> 9.0985 0.0000 </r> + <r> 9.1711 0.0000 </r> + <r> 9.2002 0.0000 </r> + </set> + <set comment="kpoint 3"> + <r> -12.7551 1.0000 </r> + <r> -4.6821 1.0000 </r> + <r> -4.6813 1.0000 </r> + <r> -4.6760 1.0000 </r> + <r> -4.3505 1.0000 </r> + <r> -4.3465 1.0000 </r> + <r> -4.3458 1.0000 </r> + <r> -4.2854 1.0000 </r> + <r> -4.2822 1.0000 </r> + <r> -4.2792 1.0000 </r> + <r> -4.2635 1.0000 </r> + <r> -4.2624 1.0000 </r> + <r> -4.2607 1.0000 </r> + <r> -4.1293 1.0000 </r> + <r> -4.1270 1.0000 </r> + <r> -4.1226 1.0000 </r> + <r> -4.0689 1.0000 </r> + <r> -4.0664 1.0000 </r> + <r> -4.0635 1.0000 </r> + <r> -4.0296 1.0000 </r> + <r> -4.0269 1.0000 </r> + <r> -4.0243 1.0000 </r> + <r> -4.0217 1.0000 </r> + <r> -4.0182 1.0000 </r> + <r> -4.0172 1.0000 </r> + <r> -4.0148 1.0000 </r> + <r> -4.0070 1.0000 </r> + <r> -4.0001 1.0000 </r> + <r> -3.9324 1.0000 </r> + <r> -3.9244 1.0000 </r> + <r> -3.9200 1.0000 </r> + <r> -3.8721 1.0000 </r> + <r> -3.8674 1.0000 </r> + <r> -3.8657 1.0000 </r> + <r> -3.8222 1.0000 </r> + <r> -3.8205 1.0000 </r> + <r> -3.8147 1.0000 </r> + <r> -3.8134 1.0000 </r> + <r> -3.8096 1.0000 </r> + <r> -3.8069 1.0000 </r> + <r> -3.7811 1.0000 </r> + <r> -3.7409 1.0000 </r> + <r> -3.7270 1.0000 </r> + <r> -3.6979 1.0000 </r> + <r> -3.6977 1.0000 </r> + <r> -3.6965 1.0000 </r> + <r> -3.6610 1.0000 </r> + <r> -3.6552 1.0000 </r> + <r> -3.6514 1.0000 </r> + <r> -3.6371 1.0000 </r> + <r> -3.6323 1.0000 </r> + <r> -3.6284 1.0000 </r> + <r> -3.6237 1.0000 </r> + <r> -3.6185 1.0000 </r> + <r> -3.6167 1.0000 </r> + <r> -3.4957 1.0000 </r> + <r> -3.4907 1.0000 </r> + <r> -3.4886 1.0000 </r> + <r> -3.4825 1.0000 </r> + <r> -3.4730 1.0000 </r> + <r> -3.4716 1.0000 </r> + <r> -3.4583 1.0000 </r> + <r> -3.4561 1.0000 </r> + <r> -3.4534 1.0000 </r> + <r> -3.4461 1.0000 </r> + <r> -3.4432 1.0000 </r> + <r> -3.4286 1.0000 </r> + <r> -3.4194 1.0000 </r> + <r> -3.4170 1.0000 </r> + <r> -3.4160 1.0000 </r> + <r> -3.3584 1.0000 </r> + <r> -3.3470 1.0000 </r> + <r> -3.3387 1.0000 </r> + <r> -3.3374 1.0000 </r> + <r> -3.3340 1.0000 </r> + <r> -3.3321 1.0000 </r> + <r> -3.2728 1.0000 </r> + <r> -3.2685 1.0000 </r> + <r> -3.2524 1.0000 </r> + <r> -3.2457 1.0000 </r> + <r> -3.2324 1.0000 </r> + <r> -3.2172 1.0000 </r> + <r> -3.1914 1.0000 </r> + <r> -3.1806 1.0000 </r> + <r> -3.1743 1.0000 </r> + <r> -3.1581 1.0000 </r> + <r> -3.1416 1.0000 </r> + <r> -3.1297 1.0000 </r> + <r> -3.1254 1.0000 </r> + <r> -3.1192 1.0000 </r> + <r> -3.1006 1.0000 </r> + <r> -3.0901 1.0000 </r> + <r> -3.0645 1.0000 </r> + <r> -3.0597 1.0000 </r> + <r> -3.0495 1.0000 </r> + <r> -3.0306 1.0000 </r> + <r> -3.0300 1.0000 </r> + <r> -3.0188 1.0000 </r> + <r> -3.0125 1.0000 </r> + <r> -3.0045 1.0000 </r> + <r> -2.9873 1.0000 </r> + <r> -2.9586 1.0000 </r> + <r> -2.9580 1.0000 </r> + <r> -2.9550 1.0000 </r> + <r> -2.9457 1.0000 </r> + <r> -2.9450 1.0000 </r> + <r> -2.9256 1.0000 </r> + <r> -2.9183 1.0000 </r> + <r> -2.9154 1.0000 </r> + <r> -2.8926 1.0000 </r> + <r> -2.8791 1.0000 </r> + <r> -2.8594 1.0000 </r> + <r> -2.8533 1.0000 </r> + <r> -2.8463 1.0000 </r> + <r> -2.8461 1.0000 </r> + <r> -2.8413 1.0000 </r> + <r> -2.8412 1.0000 </r> + <r> -2.8201 1.0000 </r> + <r> -2.7802 1.0000 </r> + <r> -2.7781 1.0000 </r> + <r> -2.7781 1.0000 </r> + <r> -2.7474 1.0000 </r> + <r> -2.7424 1.0000 </r> + <r> -2.7292 1.0000 </r> + <r> -2.7253 1.0000 </r> + <r> -2.7178 1.0000 </r> + <r> -2.7135 1.0000 </r> + <r> -2.7030 1.0000 </r> + <r> -2.7009 1.0000 </r> + <r> -2.6601 1.0000 </r> + <r> -2.6516 1.0000 </r> + <r> -2.6515 1.0000 </r> + <r> -2.6479 1.0000 </r> + <r> -2.6279 1.0000 </r> + <r> -2.6213 1.0000 </r> + <r> -2.6035 1.0000 </r> + <r> -2.5751 1.0000 </r> + <r> -2.5670 1.0000 </r> + <r> -2.5651 1.0000 </r> + <r> -2.5601 1.0000 </r> + <r> -2.5454 1.0000 </r> + <r> -2.5434 1.0000 </r> + <r> -2.5279 1.0000 </r> + <r> -2.5236 1.0000 </r> + <r> -2.5170 1.0000 </r> + <r> -2.5058 1.0000 </r> + <r> -2.4991 1.0000 </r> + <r> -2.4757 1.0000 </r> + <r> -2.4570 1.0000 </r> + <r> -2.4523 1.0000 </r> + <r> -2.4420 1.0000 </r> + <r> -2.4336 1.0000 </r> + <r> -2.4229 1.0000 </r> + <r> -2.4058 1.0000 </r> + <r> -2.4031 1.0000 </r> + <r> -2.3743 1.0000 </r> + <r> -2.3725 1.0000 </r> + <r> -2.3661 1.0000 </r> + <r> -2.3573 1.0000 </r> + <r> -2.3477 1.0000 </r> + <r> -2.3253 1.0000 </r> + <r> -2.3216 1.0000 </r> + <r> -2.3140 1.0000 </r> + <r> -2.3037 1.0000 </r> + <r> -2.2900 1.0000 </r> + <r> -2.2677 1.0000 </r> + <r> -2.2023 1.0000 </r> + <r> -2.2021 1.0000 </r> + <r> -2.1796 1.0000 </r> + <r> -2.1619 1.0000 </r> + <r> -2.1576 1.0000 </r> + <r> -2.1369 1.0000 </r> + <r> -2.1315 1.0000 </r> + <r> -2.1099 1.0000 </r> + <r> -2.1071 1.0000 </r> + <r> -2.0844 1.0000 </r> + <r> -2.0812 1.0000 </r> + <r> -2.0750 1.0000 </r> + <r> -2.0701 1.0000 </r> + <r> -2.0637 1.0000 </r> + <r> -2.0572 1.0000 </r> + <r> -2.0563 1.0000 </r> + <r> -2.0523 1.0000 </r> + <r> -1.9996 1.0000 </r> + <r> -1.9992 1.0000 </r> + <r> -1.9874 1.0000 </r> + <r> -1.9744 1.0000 </r> + <r> -1.9715 1.0000 </r> + <r> -1.9600 1.0000 </r> + <r> -1.9391 1.0000 </r> + <r> -1.9166 1.0000 </r> + <r> -1.8766 1.0000 </r> + <r> -1.8761 1.0000 </r> + <r> -1.8641 1.0000 </r> + <r> -1.8526 1.0000 </r> + <r> -1.8475 1.0000 </r> + <r> -1.8331 1.0000 </r> + <r> -1.8213 1.0000 </r> + <r> -1.8157 1.0000 </r> + <r> -1.8141 1.0000 </r> + <r> -1.8105 1.0000 </r> + <r> -1.8082 1.0000 </r> + <r> -1.7969 1.0000 </r> + <r> -1.7876 1.0000 </r> + <r> -1.7712 1.0000 </r> + <r> -1.7286 1.0000 </r> + <r> -1.7069 1.0000 </r> + <r> -1.7034 1.0000 </r> + <r> -1.7017 1.0000 </r> + <r> -1.6952 1.0000 </r> + <r> -1.6882 1.0000 </r> + <r> -1.6812 1.0000 </r> + <r> -1.6483 1.0000 </r> + <r> -1.6386 1.0000 </r> + <r> -1.6368 1.0000 </r> + <r> -1.6301 1.0000 </r> + <r> -1.6272 1.0000 </r> + <r> -1.6272 1.0000 </r> + <r> -1.6113 1.0000 </r> + <r> -1.6057 1.0000 </r> + <r> -1.6013 1.0000 </r> + <r> -1.5988 1.0000 </r> + <r> -1.5857 1.0000 </r> + <r> -1.5576 1.0000 </r> + <r> -1.5408 1.0000 </r> + <r> -1.5362 1.0000 </r> + <r> -1.5359 1.0000 </r> + <r> -1.5125 1.0000 </r> + <r> -1.4998 1.0000 </r> + <r> -1.4798 1.0000 </r> + <r> -1.2565 1.0000 </r> + <r> -1.2292 1.0000 </r> + <r> -1.2195 1.0000 </r> + <r> -1.0073 1.0000 </r> + <r> -0.9880 1.0000 </r> + <r> -0.0988 1.0000 </r> + <r> -0.0978 1.0000 </r> + <r> -0.0855 1.0000 </r> + <r> 0.0293 1.0000 </r> + <r> 0.0949 1.0000 </r> + <r> 0.1062 1.0000 </r> + <r> 0.2915 1.0000 </r> + <r> 0.2980 1.0000 </r> + <r> 0.4201 1.0000 </r> + <r> 0.7294 1.0000 </r> + <r> 0.7819 1.0000 </r> + <r> 1.2078 1.0271 </r> + <r> 1.4892 -0.0346 </r> + <r> 1.5314 -0.0176 </r> + <r> 1.6043 -0.0014 </r> + <r> 1.9970 -0.0000 </r> + <r> 1.9976 -0.0000 </r> + <r> 2.0229 -0.0000 </r> + <r> 2.0460 -0.0000 </r> + <r> 2.0567 -0.0000 </r> + <r> 2.4152 -0.0000 </r> + <r> 2.4602 -0.0000 </r> + <r> 2.4856 -0.0000 </r> + <r> 2.4961 -0.0000 </r> + <r> 2.8143 -0.0000 </r> + <r> 2.8249 -0.0000 </r> + <r> 2.8258 -0.0000 </r> + <r> 2.9220 -0.0000 </r> + <r> 2.9448 -0.0000 </r> + <r> 3.1346 -0.0000 </r> + <r> 3.2526 -0.0000 </r> + <r> 3.3323 -0.0000 </r> + <r> 3.3460 -0.0000 </r> + <r> 3.4237 -0.0000 </r> + <r> 3.4266 -0.0000 </r> + <r> 3.5362 -0.0000 </r> + <r> 3.6534 -0.0000 </r> + <r> 3.7505 -0.0000 </r> + <r> 3.8953 -0.0000 </r> + <r> 4.6194 0.0000 </r> + <r> 4.6291 0.0000 </r> + <r> 4.8378 0.0000 </r> + <r> 4.9541 0.0000 </r> + <r> 4.9820 0.0000 </r> + <r> 5.0298 0.0000 </r> + <r> 5.7051 0.0000 </r> + <r> 5.7546 0.0000 </r> + <r> 5.8346 0.0000 </r> + <r> 5.8962 0.0000 </r> + <r> 5.9043 0.0000 </r> + <r> 5.9884 0.0000 </r> + <r> 6.2344 0.0000 </r> + <r> 6.2375 0.0000 </r> + <r> 6.4456 0.0000 </r> + <r> 6.5917 0.0000 </r> + <r> 6.5976 0.0000 </r> + <r> 6.6404 0.0000 </r> + <r> 6.6510 0.0000 </r> + <r> 6.8569 0.0000 </r> + <r> 6.8938 0.0000 </r> + <r> 7.0240 0.0000 </r> + <r> 7.0277 0.0000 </r> + <r> 7.0592 0.0000 </r> + <r> 7.1952 0.0000 </r> + <r> 7.2358 0.0000 </r> + <r> 7.8721 0.0000 </r> + <r> 8.0259 0.0000 </r> + <r> 8.0275 0.0000 </r> + <r> 8.0746 0.0000 </r> + <r> 8.0812 0.0000 </r> + <r> 8.1297 0.0000 </r> + <r> 8.1323 0.0000 </r> + <r> 8.1375 0.0000 </r> + <r> 8.1383 0.0000 </r> + <r> 8.1515 0.0000 </r> + <r> 8.2111 0.0000 </r> + <r> 8.2204 0.0000 </r> + <r> 8.3841 0.0000 </r> + <r> 8.4049 0.0000 </r> + <r> 8.4073 0.0000 </r> + <r> 8.6407 0.0000 </r> + <r> 8.7619 0.0000 </r> + <r> 8.7742 0.0000 </r> + <r> 8.8537 0.0000 </r> + <r> 8.8814 0.0000 </r> + <r> 8.8861 0.0000 </r> + <r> 8.8884 0.0000 </r> + <r> 8.9484 0.0000 </r> + <r> 8.9797 0.0000 </r> + <r> 9.0995 0.0000 </r> + </set> + </set> + <set comment="spin 2"> + <set comment="kpoint 1"> + <r> -11.1502 1.0000 </r> + <r> -5.5313 1.0000 </r> + <r> -4.8549 1.0000 </r> + <r> -4.5269 1.0000 </r> + <r> -4.3037 1.0000 </r> + <r> -4.3037 1.0000 </r> + <r> -4.3037 1.0000 </r> + <r> -4.3010 1.0000 </r> + <r> -4.2979 1.0000 </r> + <r> -4.2979 1.0000 </r> + <r> -4.2657 1.0000 </r> + <r> -4.2644 1.0000 </r> + <r> -4.2581 1.0000 </r> + <r> -4.2581 1.0000 </r> + <r> -4.2571 1.0000 </r> + <r> -4.2561 1.0000 </r> + <r> -4.2561 1.0000 </r> + <r> -4.2158 1.0000 </r> + <r> -4.1244 1.0000 </r> + <r> -4.1188 1.0000 </r> + <r> -4.1188 1.0000 </r> + <r> -4.1172 1.0000 </r> + <r> -4.1172 1.0000 </r> + <r> -4.1148 1.0000 </r> + <r> -4.0568 1.0000 </r> + <r> -4.0519 1.0000 </r> + <r> -4.0504 1.0000 </r> + <r> -4.0504 1.0000 </r> + <r> -4.0466 1.0000 </r> + <r> -4.0466 1.0000 </r> + <r> -3.9017 1.0000 </r> + <r> -3.8974 1.0000 </r> + <r> -3.8973 1.0000 </r> + <r> -3.8973 1.0000 </r> + <r> -3.8781 1.0000 </r> + <r> -3.8781 1.0000 </r> + <r> -3.8491 1.0000 </r> + <r> -3.8491 1.0000 </r> + <r> -3.8431 1.0000 </r> + <r> -3.8398 1.0000 </r> + <r> -3.8269 1.0000 </r> + <r> -3.8269 1.0000 </r> + <r> -3.7500 1.0000 </r> + <r> -3.7500 1.0000 </r> + <r> -3.7461 1.0000 </r> + <r> -3.7338 1.0000 </r> + <r> -3.7279 1.0000 </r> + <r> -3.7279 1.0000 </r> + <r> -3.7158 1.0000 </r> + <r> -3.7158 1.0000 </r> + <r> -3.7122 1.0000 </r> + <r> -3.7106 1.0000 </r> + <r> -3.6485 1.0000 </r> + <r> -3.6485 1.0000 </r> + <r> -3.6065 1.0000 </r> + <r> -3.6065 1.0000 </r> + <r> -3.6046 1.0000 </r> + <r> -3.5999 1.0000 </r> + <r> -3.5799 1.0000 </r> + <r> -3.5799 1.0000 </r> + <r> -3.4403 1.0000 </r> + <r> -3.4403 1.0000 </r> + <r> -3.3499 1.0000 </r> + <r> -3.3499 1.0000 </r> + <r> -3.3423 1.0000 </r> + <r> -3.3279 1.0000 </r> + <r> -3.2884 1.0000 </r> + <r> -3.2851 1.0000 </r> + <r> -3.2838 1.0000 </r> + <r> -3.2838 1.0000 </r> + <r> -3.2700 1.0000 </r> + <r> -3.2700 1.0000 </r> + <r> -3.2095 1.0000 </r> + <r> -3.1969 1.0000 </r> + <r> -3.1969 1.0000 </r> + <r> -3.1692 1.0000 </r> + <r> -3.1667 1.0000 </r> + <r> -3.1667 1.0000 </r> + <r> -3.1546 1.0000 </r> + <r> -3.1495 1.0000 </r> + <r> -3.1495 1.0000 </r> + <r> -3.1360 1.0000 </r> + <r> -3.1360 1.0000 </r> + <r> -3.1060 1.0000 </r> + <r> -3.0640 1.0000 </r> + <r> -3.0640 1.0000 </r> + <r> -3.0586 1.0000 </r> + <r> -3.0580 1.0000 </r> + <r> -3.0580 1.0000 </r> + <r> -3.0516 1.0000 </r> + <r> -3.0491 1.0000 </r> + <r> -3.0491 1.0000 </r> + <r> -3.0306 1.0000 </r> + <r> -3.0306 1.0000 </r> + <r> -3.0065 1.0000 </r> + <r> -3.0020 1.0000 </r> + <r> -3.0012 1.0000 </r> + <r> -3.0002 1.0000 </r> + <r> -3.0002 1.0000 </r> + <r> -2.9980 1.0000 </r> + <r> -2.9980 1.0000 </r> + <r> -2.9917 1.0000 </r> + <r> -2.9595 1.0000 </r> + <r> -2.9595 1.0000 </r> + <r> -2.8507 1.0000 </r> + <r> -2.8507 1.0000 </r> + <r> -2.8113 1.0000 </r> + <r> -2.8047 1.0000 </r> + <r> -2.8004 1.0000 </r> + <r> -2.8004 1.0000 </r> + <r> -2.7918 1.0000 </r> + <r> -2.7918 1.0000 </r> + <r> -2.7681 1.0000 </r> + <r> -2.7681 1.0000 </r> + <r> -2.7053 1.0000 </r> + <r> -2.7025 1.0000 </r> + <r> -2.7013 1.0000 </r> + <r> -2.7013 1.0000 </r> + <r> -2.6795 1.0000 </r> + <r> -2.6795 1.0000 </r> + <r> -2.6726 1.0000 </r> + <r> -2.6710 1.0000 </r> + <r> -2.6710 1.0000 </r> + <r> -2.6613 1.0000 </r> + <r> -2.6541 1.0000 </r> + <r> -2.6541 1.0000 </r> + <r> -2.6021 1.0000 </r> + <r> -2.5932 1.0000 </r> + <r> -2.5930 1.0000 </r> + <r> -2.5930 1.0000 </r> + <r> -2.5923 1.0000 </r> + <r> -2.5923 1.0000 </r> + <r> -2.5540 1.0000 </r> + <r> -2.5191 1.0000 </r> + <r> -2.5191 1.0000 </r> + <r> -2.4151 1.0000 </r> + <r> -2.4151 1.0000 </r> + <r> -2.4104 1.0000 </r> + <r> -2.4045 1.0000 </r> + <r> -2.3471 1.0000 </r> + <r> -2.3343 1.0000 </r> + <r> -2.3343 1.0000 </r> + <r> -2.3299 1.0000 </r> + <r> -2.3299 1.0000 </r> + <r> -2.3248 1.0000 </r> + <r> -2.3217 1.0000 </r> + <r> -2.3217 1.0000 </r> + <r> -2.3201 1.0000 </r> + <r> -2.3197 1.0000 </r> + <r> -2.3143 1.0000 </r> + <r> -2.3143 1.0000 </r> + <r> -2.2903 1.0000 </r> + <r> -2.2903 1.0000 </r> + <r> -2.2548 1.0000 </r> + <r> -2.2548 1.0000 </r> + <r> -2.2195 1.0000 </r> + <r> -2.2195 1.0000 </r> + <r> -2.1749 1.0000 </r> + <r> -2.1749 1.0000 </r> + <r> -2.1157 1.0000 </r> + <r> -2.1112 1.0000 </r> + <r> -2.1098 1.0000 </r> + <r> -2.1098 1.0000 </r> + <r> -2.0999 1.0000 </r> + <r> -2.0921 1.0000 </r> + <r> -2.0921 1.0000 </r> + <r> -2.0707 1.0000 </r> + <r> -2.0707 1.0000 </r> + <r> -2.0685 1.0000 </r> + <r> -2.0553 1.0000 </r> + <r> -2.0553 1.0000 </r> + <r> -2.0224 1.0000 </r> + <r> -2.0224 1.0000 </r> + <r> -2.0065 1.0000 </r> + <r> -2.0054 1.0000 </r> + <r> -2.0054 1.0000 </r> + <r> -2.0043 1.0000 </r> + <r> -2.0028 1.0000 </r> + <r> -2.0028 1.0000 </r> + <r> -2.0003 1.0000 </r> + <r> -1.9876 1.0000 </r> + <r> -1.9802 1.0000 </r> + <r> -1.9802 1.0000 </r> + <r> -1.9783 1.0000 </r> + <r> -1.9783 1.0000 </r> + <r> -1.9141 1.0000 </r> + <r> -1.9085 1.0000 </r> + <r> -1.9085 1.0000 </r> + <r> -1.9016 1.0000 </r> + <r> -1.9016 1.0000 </r> + <r> -1.8985 1.0000 </r> + <r> -1.8847 1.0000 </r> + <r> -1.8388 1.0000 </r> + <r> -1.8388 1.0000 </r> + <r> -1.8239 1.0000 </r> + <r> -1.8123 1.0000 </r> + <r> -1.8062 1.0000 </r> + <r> -1.8062 1.0000 </r> + <r> -1.8037 1.0000 </r> + <r> -1.8023 1.0000 </r> + <r> -1.8023 1.0000 </r> + <r> -1.7760 1.0000 </r> + <r> -1.7760 1.0000 </r> + <r> -1.7691 1.0000 </r> + <r> -1.7691 1.0000 </r> + <r> -1.7656 1.0000 </r> + <r> -1.7559 1.0000 </r> + <r> -1.7559 1.0000 </r> + <r> -1.7531 1.0000 </r> + <r> -1.7290 1.0000 </r> + <r> -1.7290 1.0000 </r> + <r> -1.7258 1.0000 </r> + <r> -1.7118 1.0000 </r> + <r> -1.7118 1.0000 </r> + <r> -1.7082 1.0000 </r> + <r> -1.7027 1.0000 </r> + <r> -1.6944 1.0000 </r> + <r> -1.6944 1.0000 </r> + <r> -1.6931 1.0000 </r> + <r> -1.6390 1.0000 </r> + <r> -1.6390 1.0000 </r> + <r> -1.6094 1.0000 </r> + <r> -1.6094 1.0000 </r> + <r> -1.5953 1.0000 </r> + <r> -1.5916 1.0000 </r> + <r> -1.5616 1.0000 </r> + <r> -1.5616 1.0000 </r> + <r> -1.4757 1.0000 </r> + <r> -1.4757 1.0000 </r> + <r> -1.4662 1.0000 </r> + <r> -1.4506 1.0000 </r> + <r> -1.4483 1.0000 </r> + <r> -1.4483 1.0000 </r> + <r> -1.1528 1.0000 </r> + <r> -1.0742 1.0000 </r> + <r> -1.0742 1.0000 </r> + <r> -1.0134 1.0000 </r> + <r> -1.0134 1.0000 </r> + <r> -0.9998 1.0000 </r> + <r> -0.9256 1.0000 </r> + <r> -0.7626 1.0000 </r> + <r> -0.7626 1.0000 </r> + <r> 0.0705 1.0000 </r> + <r> 0.0705 1.0000 </r> + <r> 0.0768 1.0000 </r> + <r> 0.1180 1.0000 </r> + <r> 0.1302 1.0000 </r> + <r> 0.1302 1.0000 </r> + <r> 0.8573 1.0000 </r> + <r> 1.3424 0.6393 </r> + <r> 1.6135 -0.0009 </r> + <r> 1.6135 -0.0009 </r> + <r> 1.7014 -0.0000 </r> + <r> 1.7099 -0.0000 </r> + <r> 1.7099 -0.0000 </r> + <r> 1.8197 -0.0000 </r> + <r> 2.6365 -0.0000 </r> + <r> 2.6365 -0.0000 </r> + <r> 2.9007 -0.0000 </r> + <r> 3.5715 -0.0000 </r> + <r> 3.5943 -0.0000 </r> + <r> 3.5943 -0.0000 </r> + <r> 3.7430 -0.0000 </r> + <r> 3.7430 -0.0000 </r> + <r> 4.4545 0.0000 </r> + <r> 4.4570 0.0000 </r> + <r> 4.4582 0.0000 </r> + <r> 4.4582 0.0000 </r> + <r> 4.5824 0.0000 </r> + <r> 4.5824 0.0000 </r> + <r> 4.6109 0.0000 </r> + <r> 5.1407 0.0000 </r> + <r> 5.1407 0.0000 </r> + <r> 5.2240 0.0000 </r> + <r> 5.2291 0.0000 </r> + <r> 5.2501 0.0000 </r> + <r> 5.3330 0.0000 </r> + <r> 5.3330 0.0000 </r> + <r> 5.5355 0.0000 </r> + <r> 5.5523 0.0000 </r> + <r> 5.5523 0.0000 </r> + <r> 5.6664 0.0000 </r> + <r> 5.6664 0.0000 </r> + <r> 5.9405 0.0000 </r> + <r> 5.9699 0.0000 </r> + <r> 6.0469 0.0000 </r> + <r> 6.1112 0.0000 </r> + <r> 6.1112 0.0000 </r> + <r> 6.2211 0.0000 </r> + <r> 6.4312 0.0000 </r> + <r> 6.6902 0.0000 </r> + <r> 6.6902 0.0000 </r> + <r> 7.2320 0.0000 </r> + <r> 7.2414 0.0000 </r> + <r> 7.2414 0.0000 </r> + <r> 7.2921 0.0000 </r> + <r> 7.2921 0.0000 </r> + <r> 7.3855 0.0000 </r> + <r> 7.4892 0.0000 </r> + <r> 7.4892 0.0000 </r> + <r> 7.5429 0.0000 </r> + <r> 7.5536 0.0000 </r> + <r> 7.5536 0.0000 </r> + <r> 7.5609 0.0000 </r> + <r> 7.5721 0.0000 </r> + <r> 7.5721 0.0000 </r> + <r> 7.6094 0.0000 </r> + <r> 7.6094 0.0000 </r> + <r> 7.6456 0.0000 </r> + <r> 7.6569 0.0000 </r> + <r> 8.0831 0.0000 </r> + <r> 8.1083 0.0000 </r> + <r> 8.1217 0.0000 </r> + <r> 8.1217 0.0000 </r> + <r> 8.1575 0.0000 </r> + <r> 8.1575 0.0000 </r> + <r> 8.1748 0.0000 </r> + <r> 8.4175 0.0000 </r> + <r> 8.4503 0.0000 </r> + <r> 8.4504 0.0000 </r> + <r> 8.4974 0.0000 </r> + <r> 8.4974 0.0000 </r> + <r> 8.5191 0.0000 </r> + <r> 8.6714 0.0000 </r> + <r> 8.7030 0.0000 </r> + </set> + <set comment="kpoint 2"> + <r> -11.1500 1.0000 </r> + <r> -5.2246 1.0000 </r> + <r> -4.5696 1.0000 </r> + <r> -4.5147 1.0000 </r> + <r> -4.4508 1.0000 </r> + <r> -4.3984 1.0000 </r> + <r> -4.3333 1.0000 </r> + <r> -4.3298 1.0000 </r> + <r> -4.2347 1.0000 </r> + <r> -4.2325 1.0000 </r> + <r> -4.2186 1.0000 </r> + <r> -4.2185 1.0000 </r> + <r> -4.2036 1.0000 </r> + <r> -4.1764 1.0000 </r> + <r> -4.1753 1.0000 </r> + <r> -4.1376 1.0000 </r> + <r> -4.1352 1.0000 </r> + <r> -4.1259 1.0000 </r> + <r> -4.1240 1.0000 </r> + <r> -4.1094 1.0000 </r> + <r> -4.0665 1.0000 </r> + <r> -4.0410 1.0000 </r> + <r> -4.0020 1.0000 </r> + <r> -3.9906 1.0000 </r> + <r> -3.9899 1.0000 </r> + <r> -3.9812 1.0000 </r> + <r> -3.9769 1.0000 </r> + <r> -3.9759 1.0000 </r> + <r> -3.9735 1.0000 </r> + <r> -3.9717 1.0000 </r> + <r> -3.9608 1.0000 </r> + <r> -3.9600 1.0000 </r> + <r> -3.9093 1.0000 </r> + <r> -3.9022 1.0000 </r> + <r> -3.9016 1.0000 </r> + <r> -3.8630 1.0000 </r> + <r> -3.8358 1.0000 </r> + <r> -3.8336 1.0000 </r> + <r> -3.8017 1.0000 </r> + <r> -3.7943 1.0000 </r> + <r> -3.7899 1.0000 </r> + <r> -3.7842 1.0000 </r> + <r> -3.7818 1.0000 </r> + <r> -3.7536 1.0000 </r> + <r> -3.7530 1.0000 </r> + <r> -3.7056 1.0000 </r> + <r> -3.7051 1.0000 </r> + <r> -3.6707 1.0000 </r> + <r> -3.6680 1.0000 </r> + <r> -3.6657 1.0000 </r> + <r> -3.6561 1.0000 </r> + <r> -3.6523 1.0000 </r> + <r> -3.6416 1.0000 </r> + <r> -3.6375 1.0000 </r> + <r> -3.6068 1.0000 </r> + <r> -3.5947 1.0000 </r> + <r> -3.5788 1.0000 </r> + <r> -3.5163 1.0000 </r> + <r> -3.5130 1.0000 </r> + <r> -3.4438 1.0000 </r> + <r> -3.4386 1.0000 </r> + <r> -3.4360 1.0000 </r> + <r> -3.4197 1.0000 </r> + <r> -3.4157 1.0000 </r> + <r> -3.4081 1.0000 </r> + <r> -3.4061 1.0000 </r> + <r> -3.4021 1.0000 </r> + <r> -3.3925 1.0000 </r> + <r> -3.3829 1.0000 </r> + <r> -3.3452 1.0000 </r> + <r> -3.3230 1.0000 </r> + <r> -3.2912 1.0000 </r> + <r> -3.2830 1.0000 </r> + <r> -3.2821 1.0000 </r> + <r> -3.2543 1.0000 </r> + <r> -3.2476 1.0000 </r> + <r> -3.2336 1.0000 </r> + <r> -3.2332 1.0000 </r> + <r> -3.2154 1.0000 </r> + <r> -3.2112 1.0000 </r> + <r> -3.1962 1.0000 </r> + <r> -3.1747 1.0000 </r> + <r> -3.1642 1.0000 </r> + <r> -3.1571 1.0000 </r> + <r> -3.1531 1.0000 </r> + <r> -3.1477 1.0000 </r> + <r> -3.0994 1.0000 </r> + <r> -3.0934 1.0000 </r> + <r> -3.0920 1.0000 </r> + <r> -3.0825 1.0000 </r> + <r> -3.0637 1.0000 </r> + <r> -3.0336 1.0000 </r> + <r> -3.0286 1.0000 </r> + <r> -3.0276 1.0000 </r> + <r> -3.0216 1.0000 </r> + <r> -3.0173 1.0000 </r> + <r> -3.0031 1.0000 </r> + <r> -2.9994 1.0000 </r> + <r> -2.9735 1.0000 </r> + <r> -2.9733 1.0000 </r> + <r> -2.9663 1.0000 </r> + <r> -2.9446 1.0000 </r> + <r> -2.9430 1.0000 </r> + <r> -2.9339 1.0000 </r> + <r> -2.9198 1.0000 </r> + <r> -2.9042 1.0000 </r> + <r> -2.8971 1.0000 </r> + <r> -2.8853 1.0000 </r> + <r> -2.8675 1.0000 </r> + <r> -2.8582 1.0000 </r> + <r> -2.8559 1.0000 </r> + <r> -2.8442 1.0000 </r> + <r> -2.8429 1.0000 </r> + <r> -2.8026 1.0000 </r> + <r> -2.7794 1.0000 </r> + <r> -2.7773 1.0000 </r> + <r> -2.7636 1.0000 </r> + <r> -2.7635 1.0000 </r> + <r> -2.7553 1.0000 </r> + <r> -2.7517 1.0000 </r> + <r> -2.7387 1.0000 </r> + <r> -2.7308 1.0000 </r> + <r> -2.7291 1.0000 </r> + <r> -2.7243 1.0000 </r> + <r> -2.7144 1.0000 </r> + <r> -2.7015 1.0000 </r> + <r> -2.6873 1.0000 </r> + <r> -2.6830 1.0000 </r> + <r> -2.6600 1.0000 </r> + <r> -2.6221 1.0000 </r> + <r> -2.6046 1.0000 </r> + <r> -2.5915 1.0000 </r> + <r> -2.5731 1.0000 </r> + <r> -2.5710 1.0000 </r> + <r> -2.5616 1.0000 </r> + <r> -2.5453 1.0000 </r> + <r> -2.5385 1.0000 </r> + <r> -2.5116 1.0000 </r> + <r> -2.4966 1.0000 </r> + <r> -2.4898 1.0000 </r> + <r> -2.4802 1.0000 </r> + <r> -2.4692 1.0000 </r> + <r> -2.4593 1.0000 </r> + <r> -2.4541 1.0000 </r> + <r> -2.4425 1.0000 </r> + <r> -2.4078 1.0000 </r> + <r> -2.4071 1.0000 </r> + <r> -2.4006 1.0000 </r> + <r> -2.3994 1.0000 </r> + <r> -2.3914 1.0000 </r> + <r> -2.3866 1.0000 </r> + <r> -2.3859 1.0000 </r> + <r> -2.3762 1.0000 </r> + <r> -2.3576 1.0000 </r> + <r> -2.3440 1.0000 </r> + <r> -2.3339 1.0000 </r> + <r> -2.3319 1.0000 </r> + <r> -2.3212 1.0000 </r> + <r> -2.3052 1.0000 </r> + <r> -2.2994 1.0000 </r> + <r> -2.2896 1.0000 </r> + <r> -2.2688 1.0000 </r> + <r> -2.2415 1.0000 </r> + <r> -2.2369 1.0000 </r> + <r> -2.2153 1.0000 </r> + <r> -2.1869 1.0000 </r> + <r> -2.1768 1.0000 </r> + <r> -2.1758 1.0000 </r> + <r> -2.1521 1.0000 </r> + <r> -2.1520 1.0000 </r> + <r> -2.1427 1.0000 </r> + <r> -2.1337 1.0000 </r> + <r> -2.1175 1.0000 </r> + <r> -2.0747 1.0000 </r> + <r> -2.0722 1.0000 </r> + <r> -2.0632 1.0000 </r> + <r> -2.0428 1.0000 </r> + <r> -2.0415 1.0000 </r> + <r> -2.0362 1.0000 </r> + <r> -2.0278 1.0000 </r> + <r> -2.0261 1.0000 </r> + <r> -2.0144 1.0000 </r> + <r> -1.9926 1.0000 </r> + <r> -1.9911 1.0000 </r> + <r> -1.9799 1.0000 </r> + <r> -1.9700 1.0000 </r> + <r> -1.9691 1.0000 </r> + <r> -1.9555 1.0000 </r> + <r> -1.9459 1.0000 </r> + <r> -1.9406 1.0000 </r> + <r> -1.9320 1.0000 </r> + <r> -1.9017 1.0000 </r> + <r> -1.9003 1.0000 </r> + <r> -1.8847 1.0000 </r> + <r> -1.8742 1.0000 </r> + <r> -1.8706 1.0000 </r> + <r> -1.8575 1.0000 </r> + <r> -1.8533 1.0000 </r> + <r> -1.8308 1.0000 </r> + <r> -1.8102 1.0000 </r> + <r> -1.7926 1.0000 </r> + <r> -1.7765 1.0000 </r> + <r> -1.7724 1.0000 </r> + <r> -1.7658 1.0000 </r> + <r> -1.7585 1.0000 </r> + <r> -1.7458 1.0000 </r> + <r> -1.7417 1.0000 </r> + <r> -1.7269 1.0000 </r> + <r> -1.7005 1.0000 </r> + <r> -1.6955 1.0000 </r> + <r> -1.6842 1.0000 </r> + <r> -1.6762 1.0000 </r> + <r> -1.6696 1.0000 </r> + <r> -1.6664 1.0000 </r> + <r> -1.6589 1.0000 </r> + <r> -1.6515 1.0000 </r> + <r> -1.6416 1.0000 </r> + <r> -1.6212 1.0000 </r> + <r> -1.6208 1.0000 </r> + <r> -1.6117 1.0000 </r> + <r> -1.6047 1.0000 </r> + <r> -1.5927 1.0000 </r> + <r> -1.5675 1.0000 </r> + <r> -1.5659 1.0000 </r> + <r> -1.5486 1.0000 </r> + <r> -1.5418 1.0000 </r> + <r> -1.5326 1.0000 </r> + <r> -1.5246 1.0000 </r> + <r> -1.5237 1.0000 </r> + <r> -1.4784 1.0000 </r> + <r> -1.4114 1.0000 </r> + <r> -1.3235 1.0000 </r> + <r> -1.2681 1.0000 </r> + <r> -1.0761 1.0000 </r> + <r> -0.8601 1.0000 </r> + <r> -0.8579 1.0000 </r> + <r> -0.5710 1.0000 </r> + <r> -0.2982 1.0000 </r> + <r> -0.2479 1.0000 </r> + <r> -0.0133 1.0000 </r> + <r> 0.0014 1.0000 </r> + <r> 0.3551 1.0000 </r> + <r> 0.4911 1.0000 </r> + <r> 0.5090 1.0000 </r> + <r> 0.6357 1.0000 </r> + <r> 1.0870 1.0004 </r> + <r> 1.1399 1.0041 </r> + <r> 1.2120 1.0289 </r> + <r> 1.2893 0.9591 </r> + <r> 1.3770 0.3517 </r> + <r> 1.4024 0.1689 </r> + <r> 1.8252 -0.0000 </r> + <r> 2.0131 -0.0000 </r> + <r> 2.0258 -0.0000 </r> + <r> 2.0858 -0.0000 </r> + <r> 2.3344 -0.0000 </r> + <r> 2.3441 -0.0000 </r> + <r> 2.4584 -0.0000 </r> + <r> 2.6212 -0.0000 </r> + <r> 2.7134 -0.0000 </r> + <r> 2.8077 -0.0000 </r> + <r> 2.9979 -0.0000 </r> + <r> 3.0009 -0.0000 </r> + <r> 3.2541 -0.0000 </r> + <r> 3.2562 -0.0000 </r> + <r> 3.6551 -0.0000 </r> + <r> 3.6714 -0.0000 </r> + <r> 3.7061 -0.0000 </r> + <r> 3.9508 -0.0000 </r> + <r> 4.1072 0.0000 </r> + <r> 4.6073 0.0000 </r> + <r> 4.7132 0.0000 </r> + <r> 4.7186 0.0000 </r> + <r> 4.7972 0.0000 </r> + <r> 4.9972 0.0000 </r> + <r> 4.9973 0.0000 </r> + <r> 5.0579 0.0000 </r> + <r> 5.0677 0.0000 </r> + <r> 5.3176 0.0000 </r> + <r> 5.4608 0.0000 </r> + <r> 5.6782 0.0000 </r> + <r> 5.6900 0.0000 </r> + <r> 5.8074 0.0000 </r> + <r> 5.9243 0.0000 </r> + <r> 5.9310 0.0000 </r> + <r> 6.1311 0.0000 </r> + <r> 6.2307 0.0000 </r> + <r> 6.2954 0.0000 </r> + <r> 6.4705 0.0000 </r> + <r> 6.4902 0.0000 </r> + <r> 6.5158 0.0000 </r> + <r> 6.5234 0.0000 </r> + <r> 6.6472 0.0000 </r> + <r> 6.8732 0.0000 </r> + <r> 6.8950 0.0000 </r> + <r> 6.9271 0.0000 </r> + <r> 6.9883 0.0000 </r> + <r> 7.0426 0.0000 </r> + <r> 7.0509 0.0000 </r> + <r> 7.1558 0.0000 </r> + <r> 7.2844 0.0000 </r> + <r> 7.3521 0.0000 </r> + <r> 7.3584 0.0000 </r> + <r> 7.6442 0.0000 </r> + <r> 7.7358 0.0000 </r> + <r> 7.7917 0.0000 </r> + <r> 7.9037 0.0000 </r> + <r> 7.9208 0.0000 </r> + <r> 7.9419 0.0000 </r> + <r> 7.9685 0.0000 </r> + <r> 8.0814 0.0000 </r> + <r> 8.1040 0.0000 </r> + <r> 8.2469 0.0000 </r> + <r> 8.2896 0.0000 </r> + <r> 8.4023 0.0000 </r> + <r> 8.4221 0.0000 </r> + <r> 8.4813 0.0000 </r> + <r> 8.5171 0.0000 </r> + <r> 8.6378 0.0000 </r> + <r> 8.7312 0.0000 </r> + <r> 8.8647 0.0000 </r> + <r> 9.0505 0.0000 </r> + <r> 9.0953 0.0000 </r> + <r> 9.1715 0.0000 </r> + <r> 9.1989 0.0000 </r> + </set> + <set comment="kpoint 3"> + <r> -11.1500 1.0000 </r> + <r> -4.6896 1.0000 </r> + <r> -4.6825 1.0000 </r> + <r> -4.6794 1.0000 </r> + <r> -4.3526 1.0000 </r> + <r> -4.3472 1.0000 </r> + <r> -4.3469 1.0000 </r> + <r> -4.2891 1.0000 </r> + <r> -4.2865 1.0000 </r> + <r> -4.2828 1.0000 </r> + <r> -4.2644 1.0000 </r> + <r> -4.2611 1.0000 </r> + <r> -4.2565 1.0000 </r> + <r> -4.1346 1.0000 </r> + <r> -4.1299 1.0000 </r> + <r> -4.1127 1.0000 </r> + <r> -4.0663 1.0000 </r> + <r> -4.0655 1.0000 </r> + <r> -4.0613 1.0000 </r> + <r> -4.0301 1.0000 </r> + <r> -4.0284 1.0000 </r> + <r> -4.0278 1.0000 </r> + <r> -4.0232 1.0000 </r> + <r> -4.0203 1.0000 </r> + <r> -4.0203 1.0000 </r> + <r> -4.0116 1.0000 </r> + <r> -4.0089 1.0000 </r> + <r> -4.0014 1.0000 </r> + <r> -3.9267 1.0000 </r> + <r> -3.9241 1.0000 </r> + <r> -3.9183 1.0000 </r> + <r> -3.8725 1.0000 </r> + <r> -3.8702 1.0000 </r> + <r> -3.8663 1.0000 </r> + <r> -3.8259 1.0000 </r> + <r> -3.8237 1.0000 </r> + <r> -3.8177 1.0000 </r> + <r> -3.8153 1.0000 </r> + <r> -3.8104 1.0000 </r> + <r> -3.8055 1.0000 </r> + <r> -3.7838 1.0000 </r> + <r> -3.7453 1.0000 </r> + <r> -3.7319 1.0000 </r> + <r> -3.6987 1.0000 </r> + <r> -3.6927 1.0000 </r> + <r> -3.6914 1.0000 </r> + <r> -3.6628 1.0000 </r> + <r> -3.6573 1.0000 </r> + <r> -3.6446 1.0000 </r> + <r> -3.6361 1.0000 </r> + <r> -3.6337 1.0000 </r> + <r> -3.6303 1.0000 </r> + <r> -3.6263 1.0000 </r> + <r> -3.6222 1.0000 </r> + <r> -3.6153 1.0000 </r> + <r> -3.4919 1.0000 </r> + <r> -3.4880 1.0000 </r> + <r> -3.4774 1.0000 </r> + <r> -3.4766 1.0000 </r> + <r> -3.4720 1.0000 </r> + <r> -3.4679 1.0000 </r> + <r> -3.4599 1.0000 </r> + <r> -3.4572 1.0000 </r> + <r> -3.4569 1.0000 </r> + <r> -3.4320 1.0000 </r> + <r> -3.4306 1.0000 </r> + <r> -3.4219 1.0000 </r> + <r> -3.4147 1.0000 </r> + <r> -3.4126 1.0000 </r> + <r> -3.4114 1.0000 </r> + <r> -3.3430 1.0000 </r> + <r> -3.3370 1.0000 </r> + <r> -3.3346 1.0000 </r> + <r> -3.3344 1.0000 </r> + <r> -3.3331 1.0000 </r> + <r> -3.3283 1.0000 </r> + <r> -3.2578 1.0000 </r> + <r> -3.2551 1.0000 </r> + <r> -3.2548 1.0000 </r> + <r> -3.2497 1.0000 </r> + <r> -3.2341 1.0000 </r> + <r> -3.2207 1.0000 </r> + <r> -3.1934 1.0000 </r> + <r> -3.1818 1.0000 </r> + <r> -3.1713 1.0000 </r> + <r> -3.1328 1.0000 </r> + <r> -3.1312 1.0000 </r> + <r> -3.1260 1.0000 </r> + <r> -3.1217 1.0000 </r> + <r> -3.1216 1.0000 </r> + <r> -3.1041 1.0000 </r> + <r> -3.0667 1.0000 </r> + <r> -3.0548 1.0000 </r> + <r> -3.0496 1.0000 </r> + <r> -3.0255 1.0000 </r> + <r> -3.0243 1.0000 </r> + <r> -3.0201 1.0000 </r> + <r> -3.0146 1.0000 </r> + <r> -3.0080 1.0000 </r> + <r> -2.9989 1.0000 </r> + <r> -2.9893 1.0000 </r> + <r> -2.9599 1.0000 </r> + <r> -2.9587 1.0000 </r> + <r> -2.9447 1.0000 </r> + <r> -2.9440 1.0000 </r> + <r> -2.9439 1.0000 </r> + <r> -2.9278 1.0000 </r> + <r> -2.9166 1.0000 </r> + <r> -2.9163 1.0000 </r> + <r> -2.8619 1.0000 </r> + <r> -2.8601 1.0000 </r> + <r> -2.8555 1.0000 </r> + <r> -2.8548 1.0000 </r> + <r> -2.8465 1.0000 </r> + <r> -2.8439 1.0000 </r> + <r> -2.8439 1.0000 </r> + <r> -2.8188 1.0000 </r> + <r> -2.8065 1.0000 </r> + <r> -2.7807 1.0000 </r> + <r> -2.7722 1.0000 </r> + <r> -2.7720 1.0000 </r> + <r> -2.7299 1.0000 </r> + <r> -2.7264 1.0000 </r> + <r> -2.7253 1.0000 </r> + <r> -2.7209 1.0000 </r> + <r> -2.7189 1.0000 </r> + <r> -2.7129 1.0000 </r> + <r> -2.6973 1.0000 </r> + <r> -2.6869 1.0000 </r> + <r> -2.6569 1.0000 </r> + <r> -2.6454 1.0000 </r> + <r> -2.6394 1.0000 </r> + <r> -2.6354 1.0000 </r> + <r> -2.5994 1.0000 </r> + <r> -2.5890 1.0000 </r> + <r> -2.5830 1.0000 </r> + <r> -2.5650 1.0000 </r> + <r> -2.5642 1.0000 </r> + <r> -2.5549 1.0000 </r> + <r> -2.5475 1.0000 </r> + <r> -2.5346 1.0000 </r> + <r> -2.5346 1.0000 </r> + <r> -2.5297 1.0000 </r> + <r> -2.5278 1.0000 </r> + <r> -2.5222 1.0000 </r> + <r> -2.5056 1.0000 </r> + <r> -2.4953 1.0000 </r> + <r> -2.4775 1.0000 </r> + <r> -2.4564 1.0000 </r> + <r> -2.4506 1.0000 </r> + <r> -2.4351 1.0000 </r> + <r> -2.4344 1.0000 </r> + <r> -2.4022 1.0000 </r> + <r> -2.3886 1.0000 </r> + <r> -2.3846 1.0000 </r> + <r> -2.3703 1.0000 </r> + <r> -2.3613 1.0000 </r> + <r> -2.3610 1.0000 </r> + <r> -2.3401 1.0000 </r> + <r> -2.3399 1.0000 </r> + <r> -2.3257 1.0000 </r> + <r> -2.3013 1.0000 </r> + <r> -2.2931 1.0000 </r> + <r> -2.2920 1.0000 </r> + <r> -2.2836 1.0000 </r> + <r> -2.2643 1.0000 </r> + <r> -2.1740 1.0000 </r> + <r> -2.1740 1.0000 </r> + <r> -2.1663 1.0000 </r> + <r> -2.1601 1.0000 </r> + <r> -2.1295 1.0000 </r> + <r> -2.1187 1.0000 </r> + <r> -2.1043 1.0000 </r> + <r> -2.1039 1.0000 </r> + <r> -2.0949 1.0000 </r> + <r> -2.0795 1.0000 </r> + <r> -2.0682 1.0000 </r> + <r> -2.0654 1.0000 </r> + <r> -2.0631 1.0000 </r> + <r> -2.0606 1.0000 </r> + <r> -2.0565 1.0000 </r> + <r> -2.0554 1.0000 </r> + <r> -2.0106 1.0000 </r> + <r> -2.0032 1.0000 </r> + <r> -1.9979 1.0000 </r> + <r> -1.9827 1.0000 </r> + <r> -1.9696 1.0000 </r> + <r> -1.9412 1.0000 </r> + <r> -1.9309 1.0000 </r> + <r> -1.9141 1.0000 </r> + <r> -1.8989 1.0000 </r> + <r> -1.8714 1.0000 </r> + <r> -1.8670 1.0000 </r> + <r> -1.8654 1.0000 </r> + <r> -1.8393 1.0000 </r> + <r> -1.8390 1.0000 </r> + <r> -1.8250 1.0000 </r> + <r> -1.8168 1.0000 </r> + <r> -1.8160 1.0000 </r> + <r> -1.8114 1.0000 </r> + <r> -1.8100 1.0000 </r> + <r> -1.7935 1.0000 </r> + <r> -1.7856 1.0000 </r> + <r> -1.7755 1.0000 </r> + <r> -1.7557 1.0000 </r> + <r> -1.7168 1.0000 </r> + <r> -1.7096 1.0000 </r> + <r> -1.6957 1.0000 </r> + <r> -1.6890 1.0000 </r> + <r> -1.6851 1.0000 </r> + <r> -1.6783 1.0000 </r> + <r> -1.6645 1.0000 </r> + <r> -1.6466 1.0000 </r> + <r> -1.6393 1.0000 </r> + <r> -1.6331 1.0000 </r> + <r> -1.6323 1.0000 </r> + <r> -1.6241 1.0000 </r> + <r> -1.6207 1.0000 </r> + <r> -1.6129 1.0000 </r> + <r> -1.6028 1.0000 </r> + <r> -1.6011 1.0000 </r> + <r> -1.5921 1.0000 </r> + <r> -1.5839 1.0000 </r> + <r> -1.5609 1.0000 </r> + <r> -1.5415 1.0000 </r> + <r> -1.5363 1.0000 </r> + <r> -1.5257 1.0000 </r> + <r> -1.5101 1.0000 </r> + <r> -1.4993 1.0000 </r> + <r> -1.4825 1.0000 </r> + <r> -1.2569 1.0000 </r> + <r> -1.2339 1.0000 </r> + <r> -1.2105 1.0000 </r> + <r> -0.9435 1.0000 </r> + <r> -0.9233 1.0000 </r> + <r> -0.0937 1.0000 </r> + <r> -0.0809 1.0000 </r> + <r> -0.0801 1.0000 </r> + <r> 0.0724 1.0000 </r> + <r> 0.1092 1.0000 </r> + <r> 0.1130 1.0000 </r> + <r> 0.4078 1.0000 </r> + <r> 0.4163 1.0000 </r> + <r> 0.4244 1.0000 </r> + <r> 1.2638 1.0195 </r> + <r> 1.2832 0.9790 </r> + <r> 1.2867 0.9680 </r> + <r> 1.7181 -0.0000 </r> + <r> 1.8970 -0.0000 </r> + <r> 1.8978 -0.0000 </r> + <r> 1.9980 -0.0000 </r> + <r> 1.9997 -0.0000 </r> + <r> 2.0223 -0.0000 </r> + <r> 2.1754 -0.0000 </r> + <r> 2.1848 -0.0000 </r> + <r> 2.4227 -0.0000 </r> + <r> 2.5053 -0.0000 </r> + <r> 2.5373 -0.0000 </r> + <r> 2.5389 -0.0000 </r> + <r> 2.8018 -0.0000 </r> + <r> 2.8174 -0.0000 </r> + <r> 2.8178 -0.0000 </r> + <r> 2.9874 -0.0000 </r> + <r> 3.0297 -0.0000 </r> + <r> 3.1937 -0.0000 </r> + <r> 3.2457 -0.0000 </r> + <r> 3.3552 -0.0000 </r> + <r> 3.3587 -0.0000 </r> + <r> 3.4326 -0.0000 </r> + <r> 3.4381 -0.0000 </r> + <r> 3.5329 -0.0000 </r> + <r> 3.8296 -0.0000 </r> + <r> 3.9348 -0.0000 </r> + <r> 3.9351 -0.0000 </r> + <r> 4.6326 0.0000 </r> + <r> 4.6494 0.0000 </r> + <r> 4.8479 0.0000 </r> + <r> 4.9553 0.0000 </r> + <r> 4.9878 0.0000 </r> + <r> 5.0426 0.0000 </r> + <r> 5.6995 0.0000 </r> + <r> 5.7432 0.0000 </r> + <r> 5.8344 0.0000 </r> + <r> 5.8971 0.0000 </r> + <r> 5.9066 0.0000 </r> + <r> 5.9949 0.0000 </r> + <r> 6.2205 0.0000 </r> + <r> 6.2280 0.0000 </r> + <r> 6.4481 0.0000 </r> + <r> 6.5840 0.0000 </r> + <r> 6.5928 0.0000 </r> + <r> 6.6562 0.0000 </r> + <r> 6.6654 0.0000 </r> + <r> 6.8661 0.0000 </r> + <r> 6.9362 0.0000 </r> + <r> 7.0233 0.0000 </r> + <r> 7.0261 0.0000 </r> + <r> 7.0726 0.0000 </r> + <r> 7.1878 0.0000 </r> + <r> 7.2291 0.0000 </r> + <r> 7.8869 0.0000 </r> + <r> 8.0244 0.0000 </r> + <r> 8.0254 0.0000 </r> + <r> 8.0729 0.0000 </r> + <r> 8.0765 0.0000 </r> + <r> 8.1274 0.0000 </r> + <r> 8.1304 0.0000 </r> + <r> 8.1315 0.0000 </r> + <r> 8.1364 0.0000 </r> + <r> 8.1507 0.0000 </r> + <r> 8.2151 0.0000 </r> + <r> 8.2257 0.0000 </r> + <r> 8.4029 0.0000 </r> + <r> 8.4046 0.0000 </r> + <r> 8.4048 0.0000 </r> + <r> 8.6450 0.0000 </r> + <r> 8.7574 0.0000 </r> + <r> 8.7741 0.0000 </r> + <r> 8.8612 0.0000 </r> + <r> 8.8809 0.0000 </r> + <r> 8.8864 0.0000 </r> + <r> 8.8940 0.0000 </r> + <r> 8.9500 0.0000 </r> + <r> 8.9924 0.0000 </r> + <r> 9.1052 0.0000 </r> + </set> + </set> + </set> + </array> + </eigenvalues> + <separator name="orbital magnetization" > + <v name="MAGDIPOLOUT"> 0.00000000 0.00000000 0.00000000</v> + </separator> + <dos> + <i name="efermi"> 1.35912405 </i> + <total> + <array> + <dimension dim="1">gridpoints</dimension> + <dimension dim="2">spin</dimension> + <field>energy</field> + <field>total</field> + <field>integrated</field> + <set> + <set comment="spin 1"> + <r> -13.8529 0.0000 0.0000 </r> + <r> -13.7724 0.0000 0.0000 </r> + <r> -13.6919 0.0000 0.0000 </r> + <r> -13.6114 -0.0000 -0.0000 </r> + <r> -13.5309 -0.0000 -0.0000 </r> + <r> -13.4504 -0.0000 -0.0000 </r> + <r> -13.3699 -0.0000 -0.0000 </r> + <r> -13.2894 -0.0000 -0.0000 </r> + <r> -13.2089 -0.0000 -0.0000 </r> + <r> -13.1284 -0.0000 -0.0000 </r> + <r> -13.0479 -0.0017 -0.0001 </r> + <r> -12.9674 -0.0637 -0.0053 </r> + <r> -12.8869 -0.3604 -0.0343 </r> + <r> -12.8064 1.9533 0.1230 </r> + <r> -12.7259 7.6151 0.7360 </r> + <r> -12.6454 3.6831 1.0325 </r> + <r> -12.5649 -0.2693 1.0108 </r> + <r> -12.4844 -0.1290 1.0004 </r> + <r> -12.4039 -0.0054 1.0000 </r> + <r> -12.3234 -0.0000 1.0000 </r> + <r> -12.2429 -0.0000 1.0000 </r> + <r> -12.1624 -0.0000 1.0000 </r> + <r> -12.0819 -0.0000 1.0000 </r> + <r> -12.0014 0.0000 1.0000 </r> + <r> -11.9209 0.0000 1.0000 </r> + <r> -11.8404 0.0000 1.0000 </r> + <r> -11.7599 0.0000 1.0000 </r> + <r> -11.6794 0.0000 1.0000 </r> + <r> -11.5989 0.0000 1.0000 </r> + <r> -11.5184 0.0000 1.0000 </r> + <r> -11.4378 0.0000 1.0000 </r> + <r> -11.3573 0.0000 1.0000 </r> + <r> -11.2768 0.0000 1.0000 </r> + <r> -11.1963 0.0000 1.0000 </r> + <r> -11.1158 0.0000 1.0000 </r> + <r> -11.0353 0.0000 1.0000 </r> + <r> -10.9548 0.0000 1.0000 </r> + <r> -10.8743 0.0000 1.0000 </r> + <r> -10.7938 0.0000 1.0000 </r> + <r> -10.7133 0.0000 1.0000 </r> + <r> -10.6328 0.0000 1.0000 </r> + <r> -10.5523 0.0000 1.0000 </r> + <r> -10.4718 0.0000 1.0000 </r> + <r> -10.3913 0.0000 1.0000 </r> + <r> -10.3108 0.0000 1.0000 </r> + <r> -10.2303 0.0000 1.0000 </r> + <r> -10.1498 0.0000 1.0000 </r> + <r> -10.0693 0.0000 1.0000 </r> + <r> -9.9888 0.0000 1.0000 </r> + <r> -9.9083 0.0000 1.0000 </r> + <r> -9.8278 0.0000 1.0000 </r> + <r> -9.7473 0.0000 1.0000 </r> + <r> -9.6668 0.0000 1.0000 </r> + <r> -9.5863 0.0000 1.0000 </r> + <r> -9.5058 0.0000 1.0000 </r> + <r> -9.4253 0.0000 1.0000 </r> + <r> -9.3448 0.0000 1.0000 </r> + <r> -9.2643 0.0000 1.0000 </r> + <r> -9.1838 0.0000 1.0000 </r> + <r> -9.1033 0.0000 1.0000 </r> + <r> -9.0228 0.0000 1.0000 </r> + <r> -8.9422 0.0000 1.0000 </r> + <r> -8.8617 0.0000 1.0000 </r> + <r> -8.7812 0.0000 1.0000 </r> + <r> -8.7007 0.0000 1.0000 </r> + <r> -8.6202 0.0000 1.0000 </r> + <r> -8.5397 0.0000 1.0000 </r> + <r> -8.4592 0.0000 1.0000 </r> + <r> -8.3787 0.0000 1.0000 </r> + <r> -8.2982 0.0000 1.0000 </r> + <r> -8.2177 0.0000 1.0000 </r> + <r> -8.1372 0.0000 1.0000 </r> + <r> -8.0567 0.0000 1.0000 </r> + <r> -7.9762 0.0000 1.0000 </r> + <r> -7.8957 0.0000 1.0000 </r> + <r> -7.8152 0.0000 1.0000 </r> + <r> -7.7347 0.0000 1.0000 </r> + <r> -7.6542 0.0000 1.0000 </r> + <r> -7.5737 0.0000 1.0000 </r> + <r> -7.4932 0.0000 1.0000 </r> + <r> -7.4127 0.0000 1.0000 </r> + <r> -7.3322 0.0000 1.0000 </r> + <r> -7.2517 0.0000 1.0000 </r> + <r> -7.1712 0.0000 1.0000 </r> + <r> -7.0907 0.0000 1.0000 </r> + <r> -7.0102 0.0000 1.0000 </r> + <r> -6.9297 0.0000 1.0000 </r> + <r> -6.8492 0.0000 1.0000 </r> + <r> -6.7687 0.0000 1.0000 </r> + <r> -6.6882 0.0000 1.0000 </r> + <r> -6.6077 0.0000 1.0000 </r> + <r> -6.5272 0.0000 1.0000 </r> + <r> -6.4466 0.0000 1.0000 </r> + <r> -6.3661 -0.0000 1.0000 </r> + <r> -6.2856 -0.0000 1.0000 </r> + <r> -6.2051 -0.0000 1.0000 </r> + <r> -6.1246 -0.0000 1.0000 </r> + <r> -6.0441 -0.0000 1.0000 </r> + <r> -5.9636 -0.0000 1.0000 </r> + <r> -5.8831 -0.0000 1.0000 </r> + <r> -5.8026 -0.0005 1.0000 </r> + <r> -5.7221 -0.0125 0.9990 </r> + <r> -5.6416 -0.0345 0.9962 </r> + <r> -5.5611 0.3647 1.0255 </r> + <r> -5.4806 0.8503 1.0940 </r> + <r> -5.4001 0.1406 1.1053 </r> + <r> -5.3196 -0.1204 1.0956 </r> + <r> -5.2391 3.0489 1.3411 </r> + <r> -5.1586 4.8285 1.7298 </r> + <r> -5.0781 0.8475 1.7980 </r> + <r> -4.9976 -0.2635 1.7768 </r> + <r> -4.9171 0.0839 1.7835 </r> + <r> -4.8366 0.6026 1.8321 </r> + <r> -4.7561 0.7932 1.8959 </r> + <r> -4.6756 3.8741 2.2078 </r> + <r> -4.5951 6.3933 2.7225 </r> + <r> -4.5146 9.8722 3.5172 </r> + <r> -4.4341 11.4812 4.4415 </r> + <r> -4.3536 18.0000 5.8905 </r> + <r> -4.2731 37.1918 8.8846 </r> + <r> -4.1926 53.2184 13.1689 </r> + <r> -4.1121 57.1907 17.7729 </r> + <r> -4.0316 63.4687 22.8823 </r> + <r> -3.9510 79.2871 29.2652 </r> + <r> -3.8705 68.6572 34.7923 </r> + <r> -3.7900 68.6371 40.3178 </r> + <r> -3.7095 72.5892 46.1615 </r> + <r> -3.6290 79.5574 52.5661 </r> + <r> -3.5485 52.7833 56.8153 </r> + <r> -3.4680 46.0408 60.5218 </r> + <r> -3.3875 77.6118 66.7698 </r> + <r> -3.3070 68.9371 72.3194 </r> + <r> -3.2265 72.4477 78.1517 </r> + <r> -3.1460 78.8883 84.5025 </r> + <r> -3.0655 83.9984 91.2646 </r> + <r> -2.9850 98.3374 99.1811 </r> + <r> -2.9045 93.4781 106.7064 </r> + <r> -2.8240 83.5894 113.4356 </r> + <r> -2.7435 90.4135 120.7141 </r> + <r> -2.6630 91.1797 128.0544 </r> + <r> -2.5825 75.9964 134.1724 </r> + <r> -2.5020 74.9706 140.2077 </r> + <r> -2.4215 85.9993 147.1310 </r> + <r> -2.3410 101.4065 155.2945 </r> + <r> -2.2605 81.6627 161.8686 </r> + <r> -2.1800 63.2031 166.9567 </r> + <r> -2.0995 78.7423 173.2957 </r> + <r> -2.0190 95.9729 181.0218 </r> + <r> -1.9385 98.6348 188.9622 </r> + <r> -1.8580 88.7576 196.1075 </r> + <r> -1.7775 87.5296 203.1539 </r> + <r> -1.6970 96.3095 210.9071 </r> + <r> -1.6165 105.5849 219.4071 </r> + <r> -1.5360 86.2542 226.3508 </r> + <r> -1.4554 44.8683 229.9628 </r> + <r> -1.3749 13.5129 231.0507 </r> + <r> -1.2944 9.4248 231.8094 </r> + <r> -1.2139 11.2502 232.7151 </r> + <r> -1.1334 5.9540 233.1944 </r> + <r> -1.0529 8.0563 233.8429 </r> + <r> -0.9724 11.7604 234.7897 </r> + <r> -0.8919 13.7464 235.8963 </r> + <r> -0.8114 6.3954 236.4112 </r> + <r> -0.7309 0.4268 236.4455 </r> + <r> -0.6504 0.3374 236.4727 </r> + <r> -0.5699 4.4245 236.8289 </r> + <r> -0.4894 3.3954 237.1022 </r> + <r> -0.4089 0.0093 237.1030 </r> + <r> -0.3284 4.5204 237.4669 </r> + <r> -0.2479 8.7875 238.1743 </r> + <r> -0.1674 3.4486 238.4519 </r> + <r> -0.0869 5.1629 238.8676 </r> + <r> -0.0064 14.7124 240.0520 </r> + <r> 0.0741 13.2587 241.1193 </r> + <r> 0.1546 6.2795 241.6248 </r> + <r> 0.2351 3.6692 241.9202 </r> + <r> 0.3156 8.5394 242.6077 </r> + <r> 0.3961 12.5737 243.6199 </r> + <r> 0.4766 9.4872 244.3836 </r> + <r> 0.5571 2.6953 244.6006 </r> + <r> 0.6376 4.2779 244.9450 </r> + <r> 0.7181 4.4022 245.2994 </r> + <r> 0.7986 11.4241 246.2191 </r> + <r> 0.8791 9.1123 246.9527 </r> + <r> 0.9596 3.8164 247.2599 </r> + <r> 1.0401 6.0825 247.7495 </r> + <r> 1.1207 1.5673 247.8757 </r> + <r> 1.2012 2.3538 248.0652 </r> + <r> 1.2817 12.1281 249.0416 </r> + <r> 1.3622 12.6641 250.0611 </r> + <r> 1.4427 2.7242 250.2804 </r> + <r> 1.5232 5.1300 250.6934 </r> + <r> 1.6037 9.9247 251.4923 </r> + <r> 1.6842 8.6487 252.1886 </r> + <r> 1.7647 4.3748 252.5408 </r> + <r> 1.8452 0.7807 252.6036 </r> + <r> 1.9257 3.5228 252.8872 </r> + <r> 2.0062 16.0254 254.1773 </r> + <r> 2.0867 20.1320 255.7980 </r> + <r> 2.1672 8.9687 256.5200 </r> + <r> 2.2477 1.8478 256.6688 </r> + <r> 2.3282 0.5812 256.7155 </r> + <r> 2.4087 6.5506 257.2429 </r> + <r> 2.4892 8.3094 257.9118 </r> + <r> 2.5697 5.5619 258.3596 </r> + <r> 2.6502 9.3018 259.1084 </r> + <r> 2.7307 11.4463 260.0298 </r> + <r> 2.8112 6.8376 260.5803 </r> + <r> 2.8917 6.5265 261.1057 </r> + <r> 2.9722 11.4672 262.0288 </r> + <r> 3.0527 8.5204 262.7148 </r> + <r> 3.1332 3.2285 262.9747 </r> + <r> 3.2137 10.7146 263.8372 </r> + <r> 3.2942 9.4648 264.5992 </r> + <r> 3.3747 4.6859 264.9764 </r> + <r> 3.4552 3.9788 265.2967 </r> + <r> 3.5357 5.0970 265.7070 </r> + <r> 3.6163 14.1546 266.8465 </r> + <r> 3.6968 15.4302 268.0887 </r> + <r> 3.7773 6.5608 268.6169 </r> + <r> 3.8578 3.4062 268.8911 </r> + <r> 3.9383 6.3460 269.4020 </r> + <r> 4.0188 2.9913 269.6428 </r> + <r> 4.0993 4.5850 270.0119 </r> + <r> 4.1798 2.8362 270.2402 </r> + <r> 4.2603 -0.1601 270.2273 </r> + <r> 4.3408 -0.2704 270.2055 </r> + <r> 4.4213 1.1596 270.2989 </r> + <r> 4.5018 3.3942 270.5721 </r> + <r> 4.5823 6.1805 271.0697 </r> + <r> 4.6628 13.8809 272.1871 </r> + <r> 4.7433 15.0531 273.3990 </r> + <r> 4.8238 8.6262 274.0934 </r> + <r> 4.9043 2.6802 274.3092 </r> + <r> 4.9848 11.3337 275.2216 </r> + <r> 5.0653 22.8028 277.0573 </r> + <r> 5.1458 9.8600 277.8510 </r> + <r> 5.2263 2.7188 278.0699 </r> + <r> 5.3068 7.1676 278.6469 </r> + <r> 5.3873 5.9144 279.1231 </r> + <r> 5.4678 4.6225 279.4952 </r> + <r> 5.5483 4.6784 279.8718 </r> + <r> 5.6288 5.6422 280.3260 </r> + <r> 5.7093 13.5667 281.4182 </r> + <r> 5.7898 11.3233 282.3298 </r> + <r> 5.8703 10.6113 283.1840 </r> + <r> 5.9508 16.3537 284.5005 </r> + <r> 6.0313 9.3347 285.2520 </r> + <r> 6.1119 5.3511 285.6828 </r> + <r> 6.1924 9.9145 286.4809 </r> + <r> 6.2729 12.0076 287.4476 </r> + <r> 6.3534 6.8459 287.9987 </r> + <r> 6.4339 5.6845 288.4563 </r> + <r> 6.5144 19.0205 289.9875 </r> + <r> 6.5949 18.4655 291.4741 </r> + <r> 6.6754 12.3831 292.4709 </r> + <r> 6.7559 4.6964 292.8490 </r> + <r> 6.8364 3.8382 293.1580 </r> + <r> 6.9169 16.3247 294.4722 </r> + <r> 6.9974 20.1376 296.0933 </r> + <r> 7.0779 18.5339 297.5854 </r> + <r> 7.1584 9.9075 298.3829 </r> + <r> 7.2389 10.4960 299.2279 </r> + <r> 7.3194 14.9182 300.4289 </r> + <r> 7.3999 13.5920 301.5231 </r> + <r> 7.4804 4.7633 301.9065 </r> + <r> 7.5609 5.6954 302.3650 </r> + <r> 7.6414 11.4220 303.2845 </r> + <r> 7.7219 10.5826 304.1365 </r> + <r> 7.8024 8.4644 304.8179 </r> + <r> 7.8829 10.3432 305.6505 </r> + <r> 7.9634 18.9190 307.1736 </r> + <r> 8.0439 18.5303 308.6653 </r> + <r> 8.1244 24.8782 310.6681 </r> + <r> 8.2049 20.7461 312.3382 </r> + <r> 8.2854 12.1943 313.3199 </r> + <r> 8.3659 11.5026 314.2459 </r> + <r> 8.4464 21.2969 315.9604 </r> + <r> 8.5269 19.2192 317.5076 </r> + <r> 8.6075 8.4790 318.1902 </r> + <r> 8.6880 9.5887 318.9621 </r> + <r> 8.7685 10.1358 319.7781 </r> + <r> 8.8490 10.6870 320.6384 </r> + <r> 8.9295 11.9849 321.6032 </r> + <r> 9.0100 6.7753 322.1487 </r> + <r> 9.0905 10.6202 323.0036 </r> + <r> 9.1710 14.5167 324.1723 </r> + <r> 9.2515 9.5631 324.9421 </r> + <r> 9.3320 1.2198 325.0403 </r> + <r> 9.4125 -0.4426 325.0047 </r> + <r> 9.4930 -0.0568 325.0001 </r> + <r> 9.5735 -0.0014 325.0000 </r> + <r> 9.6540 -0.0000 325.0000 </r> + <r> 9.7345 -0.0000 325.0000 </r> + <r> 9.8150 -0.0000 325.0000 </r> + <r> 9.8955 0.0000 325.0000 </r> + <r> 9.9760 0.0000 325.0000 </r> + <r> 10.0565 0.0000 325.0000 </r> + <r> 10.1370 0.0000 325.0000 </r> + <r> 10.2175 0.0000 325.0000 </r> + <r> 10.2980 0.0000 325.0000 </r> + </set> + <set comment="spin 2"> + <r> -13.8529 0.0000 0.0000 </r> + <r> -13.7724 0.0000 0.0000 </r> + <r> -13.6919 0.0000 0.0000 </r> + <r> -13.6114 0.0000 0.0000 </r> + <r> -13.5309 0.0000 0.0000 </r> + <r> -13.4504 0.0000 0.0000 </r> + <r> -13.3699 0.0000 0.0000 </r> + <r> -13.2894 0.0000 0.0000 </r> + <r> -13.2089 0.0000 0.0000 </r> + <r> -13.1284 0.0000 0.0000 </r> + <r> -13.0479 0.0000 0.0000 </r> + <r> -12.9674 0.0000 0.0000 </r> + <r> -12.8869 0.0000 0.0000 </r> + <r> -12.8064 0.0000 0.0000 </r> + <r> -12.7259 0.0000 0.0000 </r> + <r> -12.6454 0.0000 0.0000 </r> + <r> -12.5649 0.0000 0.0000 </r> + <r> -12.4844 0.0000 0.0000 </r> + <r> -12.4039 0.0000 0.0000 </r> + <r> -12.3234 0.0000 0.0000 </r> + <r> -12.2429 0.0000 0.0000 </r> + <r> -12.1624 0.0000 0.0000 </r> + <r> -12.0819 0.0000 0.0000 </r> + <r> -12.0014 -0.0000 -0.0000 </r> + <r> -11.9209 -0.0000 -0.0000 </r> + <r> -11.8404 -0.0000 -0.0000 </r> + <r> -11.7599 -0.0000 -0.0000 </r> + <r> -11.6794 -0.0000 -0.0000 </r> + <r> -11.5989 -0.0000 -0.0000 </r> + <r> -11.5184 -0.0000 -0.0000 </r> + <r> -11.4378 -0.0022 -0.0002 </r> + <r> -11.3573 -0.0756 -0.0063 </r> + <r> -11.2768 -0.3592 -0.0352 </r> + <r> -11.1963 2.3112 0.1509 </r> + <r> -11.1158 7.7095 0.7715 </r> + <r> -11.0353 3.2659 1.0344 </r> + <r> -10.9548 -0.3120 1.0093 </r> + <r> -10.8743 -0.1114 1.0003 </r> + <r> -10.7938 -0.0042 1.0000 </r> + <r> -10.7133 -0.0000 1.0000 </r> + <r> -10.6328 -0.0000 1.0000 </r> + <r> -10.5523 -0.0000 1.0000 </r> + <r> -10.4718 -0.0000 1.0000 </r> + <r> -10.3913 0.0000 1.0000 </r> + <r> -10.3108 0.0000 1.0000 </r> + <r> -10.2303 0.0000 1.0000 </r> + <r> -10.1498 0.0000 1.0000 </r> + <r> -10.0693 0.0000 1.0000 </r> + <r> -9.9888 0.0000 1.0000 </r> + <r> -9.9083 0.0000 1.0000 </r> + <r> -9.8278 0.0000 1.0000 </r> + <r> -9.7473 0.0000 1.0000 </r> + <r> -9.6668 0.0000 1.0000 </r> + <r> -9.5863 0.0000 1.0000 </r> + <r> -9.5058 0.0000 1.0000 </r> + <r> -9.4253 0.0000 1.0000 </r> + <r> -9.3448 0.0000 1.0000 </r> + <r> -9.2643 0.0000 1.0000 </r> + <r> -9.1838 0.0000 1.0000 </r> + <r> -9.1033 0.0000 1.0000 </r> + <r> -9.0228 0.0000 1.0000 </r> + <r> -8.9422 0.0000 1.0000 </r> + <r> -8.8617 0.0000 1.0000 </r> + <r> -8.7812 0.0000 1.0000 </r> + <r> -8.7007 0.0000 1.0000 </r> + <r> -8.6202 0.0000 1.0000 </r> + <r> -8.5397 0.0000 1.0000 </r> + <r> -8.4592 0.0000 1.0000 </r> + <r> -8.3787 0.0000 1.0000 </r> + <r> -8.2982 0.0000 1.0000 </r> + <r> -8.2177 0.0000 1.0000 </r> + <r> -8.1372 0.0000 1.0000 </r> + <r> -8.0567 0.0000 1.0000 </r> + <r> -7.9762 0.0000 1.0000 </r> + <r> -7.8957 0.0000 1.0000 </r> + <r> -7.8152 0.0000 1.0000 </r> + <r> -7.7347 0.0000 1.0000 </r> + <r> -7.6542 0.0000 1.0000 </r> + <r> -7.5737 0.0000 1.0000 </r> + <r> -7.4932 0.0000 1.0000 </r> + <r> -7.4127 0.0000 1.0000 </r> + <r> -7.3322 0.0000 1.0000 </r> + <r> -7.2517 0.0000 1.0000 </r> + <r> -7.1712 0.0000 1.0000 </r> + <r> -7.0907 0.0000 1.0000 </r> + <r> -7.0102 0.0000 1.0000 </r> + <r> -6.9297 0.0000 1.0000 </r> + <r> -6.8492 0.0000 1.0000 </r> + <r> -6.7687 0.0000 1.0000 </r> + <r> -6.6882 0.0000 1.0000 </r> + <r> -6.6077 0.0000 1.0000 </r> + <r> -6.5272 0.0000 1.0000 </r> + <r> -6.4466 0.0000 1.0000 </r> + <r> -6.3661 -0.0000 1.0000 </r> + <r> -6.2856 -0.0000 1.0000 </r> + <r> -6.2051 -0.0000 1.0000 </r> + <r> -6.1246 -0.0000 1.0000 </r> + <r> -6.0441 -0.0000 1.0000 </r> + <r> -5.9636 -0.0000 1.0000 </r> + <r> -5.8831 -0.0000 1.0000 </r> + <r> -5.8026 -0.0006 1.0000 </r> + <r> -5.7221 -0.0141 0.9988 </r> + <r> -5.6416 -0.0306 0.9964 </r> + <r> -5.5611 0.4035 1.0288 </r> + <r> -5.4806 0.8405 1.0965 </r> + <r> -5.4001 0.0948 1.1041 </r> + <r> -5.3196 -0.0646 1.0989 </r> + <r> -5.2391 3.2862 1.3635 </r> + <r> -5.1586 4.6912 1.7411 </r> + <r> -5.0781 0.6920 1.7968 </r> + <r> -4.9976 -0.2544 1.7764 </r> + <r> -4.9171 0.0953 1.7840 </r> + <r> -4.8366 0.5991 1.8323 </r> + <r> -4.7561 0.8946 1.9043 </r> + <r> -4.6756 4.0370 2.2293 </r> + <r> -4.5951 6.3358 2.7393 </r> + <r> -4.5146 10.0416 3.5477 </r> + <r> -4.4341 11.4151 4.4667 </r> + <r> -4.3536 18.2113 5.9327 </r> + <r> -4.2731 37.5440 8.9551 </r> + <r> -4.1926 53.0274 13.2240 </r> + <r> -4.1121 57.0437 17.8162 </r> + <r> -4.0316 64.1158 22.9778 </r> + <r> -3.9510 79.4023 29.3699 </r> + <r> -3.8705 67.9202 34.8377 </r> + <r> -3.7900 68.1415 40.3233 </r> + <r> -3.7095 72.5271 46.1620 </r> + <r> -3.6290 79.1051 52.5302 </r> + <r> -3.5485 52.6394 56.7678 </r> + <r> -3.4680 43.2038 60.2459 </r> + <r> -3.3875 75.8565 66.3526 </r> + <r> -3.3070 68.1988 71.8428 </r> + <r> -3.2265 71.7046 77.6152 </r> + <r> -3.1460 79.7230 84.0332 </r> + <r> -3.0655 81.5366 90.5971 </r> + <r> -2.9850 99.2344 98.5858 </r> + <r> -2.9045 92.8868 106.0635 </r> + <r> -2.8240 80.5683 112.5495 </r> + <r> -2.7435 92.8133 120.0213 </r> + <r> -2.6630 91.4826 127.3859 </r> + <r> -2.5825 71.8948 133.1737 </r> + <r> -2.5020 78.7012 139.5094 </r> + <r> -2.4215 86.0215 146.4344 </r> + <r> -2.3410 101.3502 154.5934 </r> + <r> -2.2605 84.2283 161.3741 </r> + <r> -2.1800 59.6987 166.1800 </r> + <r> -2.0995 74.7184 172.1951 </r> + <r> -2.0190 99.0652 180.1701 </r> + <r> -1.9385 100.9261 188.2950 </r> + <r> -1.8580 86.4097 195.2513 </r> + <r> -1.7775 88.7359 202.3948 </r> + <r> -1.6970 97.8125 210.2690 </r> + <r> -1.6165 106.2229 218.8203 </r> + <r> -1.5360 90.2521 226.0859 </r> + <r> -1.4554 48.1130 229.9591 </r> + <r> -1.3749 13.7621 231.0670 </r> + <r> -1.2944 9.0457 231.7952 </r> + <r> -1.2139 11.2922 232.7043 </r> + <r> -1.1334 5.8667 233.1766 </r> + <r> -1.0529 7.2673 233.7616 </r> + <r> -0.9724 7.2831 234.3479 </r> + <r> -0.8919 9.5047 235.1131 </r> + <r> -0.8114 12.0422 236.0825 </r> + <r> -0.7309 4.2615 236.4256 </r> + <r> -0.6504 0.5233 236.4677 </r> + <r> -0.5699 3.9553 236.7861 </r> + <r> -0.4894 3.8875 237.0991 </r> + <r> -0.4089 -0.1278 237.0888 </r> + <r> -0.3284 2.4764 237.2882 </r> + <r> -0.2479 8.9502 238.0087 </r> + <r> -0.1674 5.2856 238.4342 </r> + <r> -0.0869 4.2954 238.7800 </r> + <r> -0.0064 11.9763 239.7441 </r> + <r> 0.0741 13.8913 240.8624 </r> + <r> 0.1546 9.6114 241.6362 </r> + <r> 0.2351 1.8442 241.7846 </r> + <r> 0.3156 1.1927 241.8806 </r> + <r> 0.3961 7.8161 242.5099 </r> + <r> 0.4766 12.0413 243.4792 </r> + <r> 0.5571 10.8080 244.3493 </r> + <r> 0.6376 6.0175 244.8337 </r> + <r> 0.7181 3.4431 245.1109 </r> + <r> 0.7986 0.3016 245.1352 </r> + <r> 0.8791 0.5958 245.1832 </r> + <r> 0.9596 0.1049 245.1916 </r> + <r> 1.0401 1.2398 245.2914 </r> + <r> 1.1207 7.8279 245.9216 </r> + <r> 1.2012 10.8125 246.7920 </r> + <r> 1.2817 12.9896 247.8377 </r> + <r> 1.3622 14.4783 249.0033 </r> + <r> 1.4427 10.7544 249.8690 </r> + <r> 1.5232 2.1007 250.0381 </r> + <r> 1.6037 0.5196 250.0800 </r> + <r> 1.6842 3.2597 250.3424 </r> + <r> 1.7647 5.2574 250.7656 </r> + <r> 1.8452 7.0474 251.3330 </r> + <r> 1.9257 6.7240 251.8743 </r> + <r> 2.0062 12.4335 252.8752 </r> + <r> 2.0867 17.1482 254.2557 </r> + <r> 2.1672 7.5848 254.8663 </r> + <r> 2.2477 2.7026 255.0839 </r> + <r> 2.3282 6.8473 255.6351 </r> + <r> 2.4087 11.2012 256.5368 </r> + <r> 2.4892 9.4851 257.3004 </r> + <r> 2.5697 8.4291 257.9790 </r> + <r> 2.6502 8.5667 258.6686 </r> + <r> 2.7307 8.6408 259.3642 </r> + <r> 2.8112 10.8908 260.2410 </r> + <r> 2.8917 7.9819 260.8835 </r> + <r> 2.9722 7.6631 261.5004 </r> + <r> 3.0527 12.8179 262.5323 </r> + <r> 3.1332 3.2872 262.7970 </r> + <r> 3.2137 5.2072 263.2162 </r> + <r> 3.2942 13.2952 264.2865 </r> + <r> 3.3747 7.9754 264.9285 </r> + <r> 3.4552 4.6280 265.3011 </r> + <r> 3.5357 3.2577 265.5633 </r> + <r> 3.6163 6.6813 266.1012 </r> + <r> 3.6968 15.3784 267.3392 </r> + <r> 3.7773 10.6827 268.1992 </r> + <r> 3.8578 2.7274 268.4188 </r> + <r> 3.9383 6.4858 268.9409 </r> + <r> 4.0188 7.1996 269.5205 </r> + <r> 4.0993 4.3776 269.8729 </r> + <r> 4.1798 4.1095 270.2037 </r> + <r> 4.2603 0.3986 270.2358 </r> + <r> 4.3408 -0.3515 270.2075 </r> + <r> 4.4213 1.1846 270.3029 </r> + <r> 4.5018 3.1102 270.5533 </r> + <r> 4.5823 5.6912 271.0114 </r> + <r> 4.6628 12.4539 272.0140 </r> + <r> 4.7433 14.4792 273.1796 </r> + <r> 4.8238 10.2245 274.0027 </r> + <r> 4.9043 3.8823 274.3153 </r> + <r> 4.9848 10.7647 275.1818 </r> + <r> 5.0653 21.3243 276.8985 </r> + <r> 5.1458 11.4251 277.8183 </r> + <r> 5.2263 2.9092 278.0525 </r> + <r> 5.3068 5.9936 278.5350 </r> + <r> 5.3873 6.7689 279.0799 </r> + <r> 5.4678 5.3065 279.5071 </r> + <r> 5.5483 4.8306 279.8960 </r> + <r> 5.6288 4.9578 280.2951 </r> + <r> 5.7093 13.6061 281.3904 </r> + <r> 5.7898 11.7379 282.3354 </r> + <r> 5.8703 10.2724 283.1623 </r> + <r> 5.9508 16.0817 284.4570 </r> + <r> 6.0313 9.7358 285.2407 </r> + <r> 6.1119 5.0677 285.6487 </r> + <r> 6.1924 9.7136 286.4307 </r> + <r> 6.2729 12.9258 287.4712 </r> + <r> 6.3534 6.8346 288.0214 </r> + <r> 6.4339 5.5633 288.4693 </r> + <r> 6.5144 19.4815 290.0376 </r> + <r> 6.5949 17.8715 291.4763 </r> + <r> 6.6754 11.9518 292.4385 </r> + <r> 6.7559 5.0962 292.8488 </r> + <r> 6.8364 3.3881 293.1215 </r> + <r> 6.9169 15.9055 294.4020 </r> + <r> 6.9974 20.0098 296.0128 </r> + <r> 7.0779 19.0298 297.5448 </r> + <r> 7.1584 11.2499 298.4504 </r> + <r> 7.2389 10.0297 299.2578 </r> + <r> 7.3194 14.6385 300.4363 </r> + <r> 7.3999 13.7608 301.5441 </r> + <r> 7.4804 4.6245 301.9164 </r> + <r> 7.5609 5.5518 302.3633 </r> + <r> 7.6414 10.5660 303.2139 </r> + <r> 7.7219 10.2772 304.0412 </r> + <r> 7.8024 8.8032 304.7499 </r> + <r> 7.8829 10.8567 305.6239 </r> + <r> 7.9634 19.5852 307.2006 </r> + <r> 8.0439 17.9342 308.6444 </r> + <r> 8.1244 24.6255 310.6268 </r> + <r> 8.2049 21.2611 312.3384 </r> + <r> 8.2854 12.5928 313.3521 </r> + <r> 8.3659 10.8078 314.2222 </r> + <r> 8.4464 20.4393 315.8676 </r> + <r> 8.5269 19.3924 317.4288 </r> + <r> 8.6075 8.8172 318.1386 </r> + <r> 8.6880 9.3274 318.8895 </r> + <r> 8.7685 10.6163 319.7441 </r> + <r> 8.8490 10.5446 320.5930 </r> + <r> 8.9295 12.0257 321.5611 </r> + <r> 9.0100 7.4508 322.1609 </r> + <r> 9.0905 10.9759 323.0445 </r> + <r> 9.1710 14.1053 324.1800 </r> + <r> 9.2515 9.4917 324.9442 </r> + <r> 9.3320 1.1920 325.0401 </r> + <r> 9.4125 -0.4418 325.0045 </r> + <r> 9.4930 -0.0551 325.0001 </r> + <r> 9.5735 -0.0013 325.0000 </r> + <r> 9.6540 -0.0000 325.0000 </r> + <r> 9.7345 -0.0000 325.0000 </r> + <r> 9.8150 -0.0000 325.0000 </r> + <r> 9.8955 0.0000 325.0000 </r> + <r> 9.9760 0.0000 325.0000 </r> + <r> 10.0565 0.0000 325.0000 </r> + <r> 10.1370 0.0000 325.0000 </r> + <r> 10.2175 0.0000 325.0000 </r> + <r> 10.2980 0.0000 325.0000 </r> + </set> + </set> + </array> + </total> + </dos> + </calculation> + <structure name="finalpos" > + <crystal> + <varray name="basis" > + <v> 8.93075865 0.00000000 0.00000000 </v> + <v> 4.46537932 7.73426386 0.00000000 </v> + <v> 0.00000000 0.00000000 24.72257853 </v> + </varray> + <i name="volume"> 1707.65880700 </i> + <varray name="rec_basis" > + <v> 0.11197257 -0.06464739 0.00000000 </v> + <v> 0.00000000 0.12929479 0.00000000 </v> + <v> 0.00000000 0.00000000 0.04044886 </v> + </varray> + </crystal> + <varray name="positions" > + <v> 0.88888889 0.22222222 0.30336641 </v> + <v> 0.22222222 0.22222222 0.30336641 </v> + <v> 0.55555556 0.22222222 0.30336641 </v> + <v> 0.88888889 0.55555556 0.30336641 </v> + <v> 0.22222222 0.55555556 0.30336641 </v> + <v> 0.55555556 0.55555556 0.30336641 </v> + <v> 0.88888889 0.88888889 0.30336641 </v> + <v> 0.22222222 0.88888889 0.30336641 </v> + <v> 0.55555556 0.88888889 0.30336641 </v> + <v> 0.00000000 0.00000000 0.40168321 </v> + <v> 0.33333333 0.00000000 0.40168321 </v> + <v> 0.66666667 0.00000000 0.40168321 </v> + <v> 0.00000000 0.33333333 0.40168321 </v> + <v> 0.33333333 0.33333333 0.40168321 </v> + <v> 0.66666667 0.33333333 0.40168321 </v> + <v> 0.00000000 0.66666667 0.40168321 </v> + <v> 0.33333333 0.66666667 0.40168321 </v> + <v> 0.66666667 0.66666667 0.40168321 </v> + <v> 0.11076472 0.11076472 0.50051317 </v> + <v> 0.44466825 0.11066351 0.49968579 </v> + <v> 0.77847057 0.11076472 0.50051317 </v> + <v> 0.11066351 0.44466825 0.49968579 </v> + <v> 0.44466825 0.44466825 0.49968579 </v> + <v> 0.77796497 0.44407006 0.50032439 </v> + <v> 0.11076472 0.77847057 0.50051317 </v> + <v> 0.44407006 0.77796497 0.50032439 </v> + <v> 0.77796497 0.77796497 0.50032439 </v> + <v> 0.88851917 0.22296166 0.59904240 </v> + <v> 0.22328064 0.22328064 0.59795887 </v> + <v> 0.55343872 0.22328064 0.59795887 </v> + <v> 0.88925243 0.55537379 0.59834622 </v> + <v> 0.22328064 0.55343872 0.59795887 </v> + <v> 0.55537379 0.55537379 0.59834622 </v> + <v> 0.88851917 0.88851917 0.59904240 </v> + <v> 0.22296166 0.88851917 0.59904240 </v> + <v> 0.55537379 0.88925243 0.59834622 </v> + <v> -0.00000000 -0.00000000 0.69694807 </v> + <v> 0.33319878 0.00102151 0.69703043 </v> + <v> 0.66577972 0.00102151 0.69703043 </v> + <v> 0.00102151 0.33319878 0.69703043 </v> + <v> 0.66577972 0.33319878 0.69703043 </v> + <v> 0.00102151 0.66577972 0.69703043 </v> + <v> 0.33319878 0.66577972 0.69703043 </v> + <v> 0.66666667 0.66666667 0.69631275 </v> + <v> 0.33333333 0.33333333 0.69633405 </v> + <v> 0.33333333 0.33333333 0.76966823 </v> + </varray> + <varray name="selective" type="logical" > + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + </varray> + <nose> + <v> -3.00000000 0.00000000 0.00010000 0.00010000 </v> + </nose> + </structure> +</modeling> diff --git a/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/PdAg/vasprun.xml b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/PdAg/vasprun.xml new file mode 100644 index 0000000000000000000000000000000000000000..28305f305129e70209a2e6d4bec87d345a88c21a --- /dev/null +++ b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/PdAg/vasprun.xml @@ -0,0 +1,3640 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<modeling> + <generator> + <i name="program" type="string">vasp </i> + <i name="version" type="string">5.4.4.18Apr17-6-g9f103f2a35 </i> + <i name="subversion" type="string">(build Jul 30 2020 14:31:59) complex parallel </i> + <i name="platform" type="string">LinuxIFC </i> + <i name="date" type="string">2022 09 20 </i> + <i name="time" type="string">16:19:58 </i> + </generator> + <incar> + <i type="int" name="ISTART"> 0</i> + <i type="string" name="PREC">accurate</i> + <i type="string" name="ALGO"> Fast</i> + <i type="int" name="ISPIN"> 2</i> + <i type="int" name="ICHARG"> 1</i> + <i type="int" name="IBRION"> 2</i> + <i name="EDIFF"> 0.00000100</i> + <i name="EDIFFG"> -0.02000000</i> + <i type="int" name="NSW"> 60</i> + <i type="int" name="ISIF"> 2</i> + <i name="ENCUT"> 400.00000000</i> + <i name="POTIM"> 0.10000000</i> + <i type="string" name="LREAL"> AUTO</i> + <i type="int" name="ISMEAR"> 1</i> + <i name="SIGMA"> 0.10000000</i> + <i type="logical" name="LWAVE"> F </i> + <i type="logical" name="LCHARG"> T </i> + <i type="logical" name="LASPH"> T </i> + <v type="int" name="KPOINT_BSE"> -1 0 0 0</v> + <i type="string" name="GGA"> RP</i> + <i type="logical" name="LDIPOL"> T </i> + <i type="int" name="IDIPOL"> 3</i> + <v name="DIPOL"> 0.50000000 0.50000000 0.50000000</v> + <i type="logical" name="LASPH"> T </i> + </incar> + <structure name="primitive_cell" > + <crystal> + <varray name="basis" > + <v> 8.93075865 0.00000000 0.00000000 </v> + <v> 4.46537932 7.73426386 0.00000000 </v> + <v> 0.00000000 0.00000000 24.72257853 </v> + </varray> + <i name="volume"> 1707.65880700 </i> + <varray name="rec_basis" > + <v> 0.11197257 -0.06464739 0.00000000 </v> + <v> 0.00000000 0.12929479 0.00000000 </v> + <v> 0.00000000 0.00000000 0.04044886 </v> + </varray> + </crystal> + <varray name="positions" > + <v> -0.11111111 0.22222222 0.30336641 </v> + <v> -0.44444444 0.22222222 0.30336641 </v> + <v> -0.44444444 -0.44444444 0.30336641 </v> + <v> 0.00000000 0.00000000 0.40168321 </v> + <v> -0.33333333 0.33333333 0.40168321 </v> + <v> -0.11111111 -0.44444444 0.30336641 </v> + <v> -0.11111111 -0.11111111 0.30336641 </v> + <v> 0.22222222 -0.11111111 0.30336641 </v> + <v> 0.22222222 0.22222222 0.30336641 </v> + <v> 0.00000000 0.33333333 0.40168321 </v> + <v> -0.33333333 -0.33333333 0.40168321 </v> + <v> -0.33333333 0.00000000 0.40168321 </v> + <v> 0.33333333 0.00000000 0.40168321 </v> + <v> 0.33333333 0.33333333 0.40168321 </v> + <v> 0.33333333 -0.33333333 0.40168321 </v> + <v> 0.22222222 -0.44444444 0.30336641 </v> + <v> -0.44444444 -0.11111111 0.30336641 </v> + <v> 0.00000000 -0.33333333 0.40168321 </v> + <v> -0.22247745 0.11123873 -0.49939181 </v> + <v> 0.11123873 0.11123873 -0.49939181 </v> + <v> -0.22194948 0.44389897 -0.49927704 </v> + <v> 0.11094464 0.44452768 -0.49999407 </v> + <v> 0.44452768 0.44452768 -0.49999407 </v> + <v> 0.11123873 -0.22247745 -0.49939181 </v> + <v> 0.44452768 0.11094464 -0.49999407 </v> + <v> -0.22194948 -0.22194948 -0.49927704 </v> + <v> 0.44389897 -0.22194948 -0.49927704 </v> + <v> -0.11112821 0.22225642 -0.40098777 </v> + <v> -0.44426444 0.22213222 -0.40205888 </v> + <v> 0.22213222 0.22213222 -0.40205888 </v> + <v> -0.44467245 -0.44467245 -0.40136723 </v> + <v> -0.11065510 -0.44467245 -0.40136723 </v> + <v> 0.22225642 -0.11112821 -0.40098777 </v> + <v> -0.11112821 -0.11112821 -0.40098777 </v> + <v> 0.22213222 -0.44426444 -0.40205888 </v> + <v> -0.44467245 -0.11065510 -0.40136723 </v> + <v> -0.33570044 0.33340411 -0.30254137 </v> + <v> 0.00229633 0.33340411 -0.30254137 </v> + <v> 0.00000000 0.00000000 -0.30174486 </v> + <v> -0.33570044 0.00229633 -0.30254137 </v> + <v> 0.33340411 0.00229633 -0.30254137 </v> + <v> -0.33333333 -0.33333333 -0.30244813 </v> + <v> 0.33333333 0.33333333 -0.30956147 </v> + <v> 0.33340411 -0.33570044 -0.30254137 </v> + <v> 0.00229633 -0.33570044 -0.30254137 </v> + </varray> + </structure> + <varray name="primitive_index" > + <v type="int" > 1 </v> + <v type="int" > 3 </v> + <v type="int" > 6 </v> + <v type="int" > 10 </v> + <v type="int" > 15 </v> + <v type="int" > 4 </v> + <v type="int" > 7 </v> + <v type="int" > 8 </v> + <v type="int" > 2 </v> + <v type="int" > 13 </v> + <v type="int" > 18 </v> + <v type="int" > 12 </v> + <v type="int" > 11 </v> + <v type="int" > 14 </v> + <v type="int" > 17 </v> + <v type="int" > 5 </v> + <v type="int" > 9 </v> + <v type="int" > 16 </v> + <v type="int" > 21 </v> + <v type="int" > 19 </v> + <v type="int" > 24 </v> + <v type="int" > 22 </v> + <v type="int" > 23 </v> + <v type="int" > 25 </v> + <v type="int" > 20 </v> + <v type="int" > 27 </v> + <v type="int" > 26 </v> + <v type="int" > 28 </v> + <v type="int" > 30 </v> + <v type="int" > 29 </v> + <v type="int" > 33 </v> + <v type="int" > 31 </v> + <v type="int" > 35 </v> + <v type="int" > 34 </v> + <v type="int" > 32 </v> + <v type="int" > 36 </v> + <v type="int" > 41 </v> + <v type="int" > 40 </v> + <v type="int" > 37 </v> + <v type="int" > 39 </v> + <v type="int" > 38 </v> + <v type="int" > 44 </v> + <v type="int" > 45 </v> + <v type="int" > 43 </v> + <v type="int" > 42 </v> + </varray> + <kpoints> + <generation param="Monkhorst-Pack"> + <v type="int" name="divisions"> 3 3 1 </v> + <v name="usershift"> 0.00000000 0.00000000 0.00000000 </v> + <v name="genvec1"> 0.33333333 -0.00000000 0.00000000 </v> + <v name="genvec2"> 0.00000000 0.33333333 0.00000000 </v> + <v name="genvec3"> 0.00000000 0.00000000 1.00000000 </v> + <v name="shift"> 0.00000000 0.00000000 0.00000000 </v> + </generation> + <varray name="kpointlist" > + <v> 0.00000000 0.00000000 0.00000000 </v> + <v> 0.33333333 0.00000000 0.00000000 </v> + <v> -0.33333333 0.33333333 0.00000000 </v> + </varray> + <varray name="weights" > + <v> 0.11111111 </v> + <v> 0.66666667 </v> + <v> 0.22222222 </v> + </varray> + </kpoints> + <parameters> + <separator name="general" > + <i type="string" name="SYSTEM">unknown system</i> + <i type="logical" name="LCOMPAT"> F </i> + </separator> + <separator name="electronic" > + <i type="string" name="PREC">accura</i> + <i name="ENMAX"> 400.00000000</i> + <i name="ENAUG"> 416.23000000</i> + <i name="EDIFF"> 0.00000100</i> + <i type="int" name="IALGO"> 68</i> + <i type="int" name="IWAVPR"> 11</i> + <i type="int" name="NBANDS"> 320</i> + <i name="NELECT"> 494.00000000</i> + <i type="int" name="TURBO"> 0</i> + <i type="int" name="IRESTART"> 0</i> + <i type="int" name="NREBOOT"> 0</i> + <i type="int" name="NMIN"> 0</i> + <i name="EREF"> 0.00000000</i> + <separator name="electronic smearing" > + <i type="int" name="ISMEAR"> 1</i> + <i name="SIGMA"> 0.10000000</i> + <i name="KSPACING"> 0.50000000</i> + <i type="logical" name="KGAMMA"> T </i> + </separator> + <separator name="electronic projectors" > + <i type="logical" name="LREAL"> T </i> + <v name="ROPT"> -0.00025000 -0.00025000</v> + <i type="int" name="LMAXPAW"> -100</i> + <i type="int" name="LMAXMIX"> 2</i> + <i type="logical" name="NLSPLINE"> F </i> + </separator> + <separator name="electronic startup" > + <i type="int" name="ISTART"> 0</i> + <i type="int" name="ICHARG"> 1</i> + <i type="int" name="INIWAV"> 1</i> + </separator> + <separator name="electronic spin" > + <i type="int" name="ISPIN"> 2</i> + <i type="logical" name="LNONCOLLINEAR"> F </i> + <v name="MAGMOM"> 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 + 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000 + 1.00000000 1.00000000 1.00000000 1.00000000 1.00000000</v> + <i name="NUPDOWN"> -1.00000000</i> + <i type="logical" name="LSORBIT"> F </i> + <v name="SAXIS"> 0.00000000 0.00000000 1.00000000</v> + <i type="logical" name="LSPIRAL"> F </i> + <v name="QSPIRAL"> 0.00000000 0.00000000 0.00000000</v> + <i type="logical" name="LZEROZ"> F </i> + </separator> + <separator name="electronic exchange-correlation" > + <i type="logical" name="LASPH"> T </i> + <i type="logical" name="LMETAGGA"> F </i> + </separator> + <separator name="electronic convergence" > + <i type="int" name="NELM"> 60</i> + <i type="int" name="NELMDL"> -5</i> + <i type="int" name="NELMIN"> 2</i> + <i name="ENINI"> 400.00000000</i> + <separator name="electronic convergence detail" > + <i type="logical" name="LDIAG"> T </i> + <i type="logical" name="LSUBROT"> F </i> + <i name="WEIMIN"> 0.00100000</i> + <i name="EBREAK"> 0.00000000</i> + <i name="DEPER"> 0.30000000</i> + <i type="int" name="NRMM"> 4</i> + <i name="TIME"> 0.40000000</i> + </separator> + </separator> + <separator name="electronic mixer" > + <i name="AMIX"> 0.40000000</i> + <i name="BMIX"> 1.00000000</i> + <i name="AMIN"> 0.10000000</i> + <i name="AMIX_MAG"> 1.60000000</i> + <i name="BMIX_MAG"> 1.00000000</i> + <separator name="electronic mixer details" > + <i type="int" name="IMIX"> 4</i> + <i type="logical" name="MIXFIRST"> F </i> + <i type="int" name="MAXMIX"> -45</i> + <i name="WC"> 100.00000000</i> + <i type="int" name="INIMIX"> 1</i> + <i type="int" name="MIXPRE"> 1</i> + <i type="int" name="MREMOVE"> 5</i> + </separator> + </separator> + <separator name="electronic dipolcorrection" > + <i type="logical" name="LDIPOL"> T </i> + <i type="logical" name="LMONO"> F </i> + <i type="int" name="IDIPOL"> 3</i> + <i name="EPSILON"> 1.00000000</i> + <v name="DIPOL"> 0.50000000 0.50000000 0.50000000</v> + <i name="EFIELD"> 0.00000000</i> + </separator> + </separator> + <separator name="grids" > + <i type="int" name="NGX"> 60</i> + <i type="int" name="NGY"> 60</i> + <i type="int" name="NGZ"> 162</i> + <i type="int" name="NGXF"> 120</i> + <i type="int" name="NGYF"> 120</i> + <i type="int" name="NGZF"> 324</i> + <i type="logical" name="ADDGRID"> F </i> + </separator> + <separator name="ionic" > + <i type="int" name="NSW"> 60</i> + <i type="int" name="IBRION"> 2</i> + <i type="int" name="MDALGO"> 0</i> + <i type="int" name="ISIF"> 2</i> + <i name="PSTRESS"> 0.00000000</i> + <i name="EDIFFG"> -0.02000000</i> + <i type="int" name="NFREE"> 1</i> + <i name="POTIM"> 0.10000000</i> + <i name="SMASS"> -3.00000000</i> + <i name="SCALEE"> 1.00000000</i> + </separator> + <separator name="ionic md" > + <i name="TEBEG"> 0.00010000</i> + <i name="TEEND"> 0.00010000</i> + <i type="int" name="NBLOCK"> 1</i> + <i type="int" name="KBLOCK"> 60</i> + <i type="int" name="NPACO"> 256</i> + <i name="APACO"> 16.00000000</i> + </separator> + <separator name="symmetry" > + <i type="int" name="ISYM"> 2</i> + <i name="SYMPREC"> 0.00001000</i> + </separator> + <separator name="dos" > + <i type="int" name="LORBIT"> 0</i> + <v name="RWIGS"> -1.00000000 -1.00000000</v> + <i type="int" name="NEDOS"> 301</i> + <i name="EMIN"> 10.00000000</i> + <i name="EMAX"> -10.00000000</i> + <i name="EFERMI"> 0.00000000</i> + </separator> + <separator name="writing" > + <i type="int" name="NWRITE"> 2</i> + <i type="logical" name="LWAVE"> F </i> + <i type="logical" name="LDOWNSAMPLE"> F </i> + <i type="logical" name="LCHARG"> T </i> + <i type="logical" name="LPARD"> F </i> + <i type="logical" name="LVTOT"> F </i> + <i type="logical" name="LVHAR"> F </i> + <i type="logical" name="LELF"> F </i> + <i type="logical" name="LOPTICS"> F </i> + <v name="STM"> 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000</v> + </separator> + <separator name="performance" > + <i type="int" name="NPAR"> 5</i> + <i type="int" name="NSIM"> 4</i> + <i type="int" name="NBLK"> -1</i> + <i type="logical" name="LPLANE"> T </i> + <i type="logical" name="LSCALAPACK"> T </i> + <i type="logical" name="LSCAAWARE"> F </i> + <i type="logical" name="LSCALU"> F </i> + <i type="logical" name="LASYNC"> F </i> + <i type="logical" name="LORBITALREAL"> F </i> + </separator> + <separator name="miscellaneous" > + <i type="int" name="IDIOT"> 3</i> + <i type="int" name="ISPECIAL"> 0</i> + <i type="logical" name="LMUSIC"> F </i> + <v name="POMASS"> 107.86800000 106.42000000</v> + <v name="DARWINR"> 0.00000000 0.00000000</v> + <v name="DARWINV"> 1.00000000 1.00000000</v> + <i type="logical" name="LCORR"> T </i> + </separator> + <i type="logical" name="GGA_COMPAT"> T </i> + <i type="logical" name="LBERRY"> F </i> + <i type="int" name="ICORELEVEL"> 0</i> + <i type="logical" name="LDAU"> F </i> + <i type="int" name="I_CONSTRAINED_M"> 0</i> + <separator name="electronic exchange-correlation" > + <i type="string" name="GGA">RP</i> + <i type="int" name="VOSKOWN"> 0</i> + <i type="logical" name="LHFCALC"> F </i> + <i type="string" name="PRECFOCK"></i> + <i type="logical" name="LSYMGRAD"> F </i> + <i type="logical" name="LHFONE"> F </i> + <i type="logical" name="LRHFCALC"> F </i> + <i type="logical" name="LTHOMAS"> F </i> + <i type="logical" name="LMODELHF"> F </i> + <i name="ENCUT4O"> -1.00000000</i> + <i type="int" name="EXXOEP"> 0</i> + <i type="int" name="FOURORBIT"> 0</i> + <i name="AEXX"> 0.00000000</i> + <i name="HFALPHA"> 0.00000000</i> + <i name="MCALPHA"> 0.00000000</i> + <i name="ALDAX"> 1.00000000</i> + <i name="AGGAX"> 1.00000000</i> + <i name="ALDAC"> 1.00000000</i> + <i name="AGGAC"> 1.00000000</i> + <i type="int" name="NKREDX"> 1</i> + <i type="int" name="NKREDY"> 1</i> + <i type="int" name="NKREDZ"> 1</i> + <i type="logical" name="SHIFTRED"> F </i> + <i type="logical" name="ODDONLY"> F </i> + <i type="logical" name="EVENONLY"> F </i> + <i type="int" name="LMAXFOCK"> 0</i> + <i type="int" name="NMAXFOCKAE"> 0</i> + <i type="logical" name="LFOCKAEDFT"> F </i> + <i name="HFSCREEN"> 0.00000000</i> + <i name="HFSCREENC"> 0.00000000</i> + <i type="int" name="NBANDSGWLOW"> 0</i> + </separator> + <separator name="vdW DFT" > + <i type="logical" name="LUSE_VDW"> F </i> + <i name="Zab_VDW"> -0.84910000</i> + <i name="PARAM1"> 0.12340000</i> + <i name="PARAM2"> 1.00000000</i> + <i name="PARAM3"> 0.00000000</i> + </separator> + <separator name="model GW" > + <i type="int" name="MODEL_GW"> 0</i> + <i name="MODEL_EPS0"> 22.76878409</i> + <i name="MODEL_ALPHA"> 1.00000000</i> + </separator> + <separator name="linear response parameters" > + <i type="logical" name="LEPSILON"> F </i> + <i type="logical" name="LRPA"> F </i> + <i type="logical" name="LNABLA"> F </i> + <i type="logical" name="LVEL"> F </i> + <i type="int" name="KINTER"> 0</i> + <i name="CSHIFT"> 0.10000000</i> + <i name="OMEGAMAX"> -1.00000000</i> + <i name="DEG_THRESHOLD"> 0.00200000</i> + <i name="RTIME"> -0.10000000</i> + <i name="WPLASMAI"> 0.00000000</i> + <v name="DFIELD"> 0.00000000 0.00000000 0.00000000</v> + <v name="WPLASMA"> 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000</v> + </separator> + <separator name="orbital magnetization" > + <i type="logical" name="NUCIND"> F </i> + <v name="MAGPOS"> 0.00000000 0.00000000 0.00000000</v> + <i type="logical" name="LNICSALL"> T </i> + <i type="logical" name="ORBITALMAG"> F </i> + <i type="logical" name="LMAGBLOCH"> F </i> + <i type="logical" name="LCHIMAG"> F </i> + <i type="logical" name="LGAUGE"> T </i> + <i type="int" name="MAGATOM"> 0</i> + <v name="MAGDIPOL"> 0.00000000 0.00000000 0.00000000</v> + <v name="AVECCONST"> 0.00000000 0.00000000 0.00000000</v> + </separator> + <separator name="response functions" > + <i type="logical" name="LADDER"> F </i> + <i type="logical" name="LRPAFORCE"> F </i> + <i type="logical" name="LFXC"> F </i> + <i type="logical" name="LHARTREE"> T </i> + <i type="int" name="IBSE"> 0</i> + <v type="int" name="KPOINT"> -1 0 0 0</v> + <i type="logical" name="LTCTE"> F </i> + <i type="logical" name="LTETE"> F </i> + <i type="logical" name="LTRIPLET"> F </i> + <i type="logical" name="LFXCEPS"> F </i> + <i type="logical" name="LFXHEG"> F </i> + <i type="int" name="NATURALO"> 2</i> + <i type="logical" name="L2ORDER"> F </i> + <i type="logical" name="LMP2LT"> F </i> + <i type="logical" name="LUSEW"> F </i> + <i name="ENCUTGW"> -2.00000000</i> + <i name="ENCUTGWSOFT"> -2.00000000</i> + <i name="ENCUTLF"> -1.00000000</i> + <i type="int" name="LMAXMP2"> -1</i> + <i name="SCISSOR"> 0.00000000</i> + <i type="int" name="NOMEGA"> 0</i> + <i type="int" name="NOMEGAR"> 0</i> + <i type="int" name="NBANDSGW"> -1</i> + <i type="int" name="NBANDSO"> -1</i> + <i type="int" name="NBANDSV"> -1</i> + <i type="int" name="NELM"> 1</i> + <i type="int" name="NELMHF"> 1</i> + <i type="int" name="DIM"> 3</i> + <i type="int" name="ANTIRES"> 0</i> + <i name="OMEGAMAX"> -30.00000000</i> + <i name="OMEGAMIN"> -30.00000000</i> + <i name="OMEGATL"> -200.00000000</i> + <i type="int" name="OMEGAGRID"> 140</i> + <i name="CSHIFT"> -0.10000000</i> + <i type="logical" name="SELFENERGY"> F </i> + <i type="logical" name="LSPECTRAL"> F </i> + <i type="logical" name="LSPECTRALGW"> F </i> + <i type="logical" name="LSINGLES"> F </i> + <i type="logical" name="LFERMIGW"> F </i> + <i type="logical" name="ODDONLYGW"> F </i> + <i type="logical" name="EVENONLYGW"> F </i> + <i type="int" name="NKREDLFX"> 1</i> + <i type="int" name="NKREDLFY"> 1</i> + <i type="int" name="NKREDLFZ"> 1</i> + <i type="int" name="MAXMEM"> 2800</i> + <i type="int" name="TELESCOPE"> 0</i> + <i type="int" name="TAUPAR"> 1</i> + <i type="int" name="OMEGAPAR"> -1</i> + <i name="LAMBDA"> 1.00000000</i> + </separator> + <separator name="External order field" > + <i name="OFIELD_KAPPA"> 0.00000000</i> + <v name="OFIELD_K"> 0.00000000 0.00000000 0.00000000</v> + <i name="OFIELD_Q6_NEAR"> 0.00000000</i> + <i name="OFIELD_Q6_FAR"> 0.00000000</i> + <i name="OFIELD_A"> 0.00000000</i> + </separator> + </parameters> + <atominfo> + <atoms> 45 </atoms> + <types> 2 </types> + <array name="atoms" > + <dimension dim="1">ion</dimension> + <field type="string">element</field> + <field type="int">atomtype</field> + <set> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Ag</c><c> 1</c></rc> + <rc><c>Pd</c><c> 2</c></rc> + </set> + </array> + <array name="atomtypes" > + <dimension dim="1">type</dimension> + <field type="int">atomspertype</field> + <field type="string">element</field> + <field>mass</field> + <field>valence</field> + <field type="string">pseudopotential</field> + <set> + <rc><c> 44</c><c>Ag</c><c> 107.86800000</c><c> 11.00000000</c><c> PAW_PBE Ag 02Apr2005 </c></rc> + <rc><c> 1</c><c>Pd</c><c> 106.42000000</c><c> 10.00000000</c><c> PAW_PBE Pd 04Jan2005 </c></rc> + </set> + </array> + </atominfo> + <structure name="initialpos" > + <crystal> + <varray name="basis" > + <v> 8.93075865 0.00000000 0.00000000 </v> + <v> 4.46537932 7.73426386 0.00000000 </v> + <v> 0.00000000 0.00000000 24.72257853 </v> + </varray> + <i name="volume"> 1707.65880700 </i> + <varray name="rec_basis" > + <v> 0.11197257 -0.06464739 0.00000000 </v> + <v> 0.00000000 0.12929479 0.00000000 </v> + <v> 0.00000000 0.00000000 0.04044886 </v> + </varray> + </crystal> + <varray name="positions" > + <v> 0.88888889 0.22222222 0.30336641 </v> + <v> 0.22222222 0.22222222 0.30336641 </v> + <v> 0.55555556 0.22222222 0.30336641 </v> + <v> 0.88888889 0.55555556 0.30336641 </v> + <v> 0.22222222 0.55555556 0.30336641 </v> + <v> 0.55555556 0.55555556 0.30336641 </v> + <v> 0.88888889 0.88888889 0.30336641 </v> + <v> 0.22222222 0.88888889 0.30336641 </v> + <v> 0.55555556 0.88888889 0.30336641 </v> + <v> 0.00000000 0.00000000 0.40168321 </v> + <v> 0.33333333 0.00000000 0.40168321 </v> + <v> 0.66666667 0.00000000 0.40168321 </v> + <v> 0.00000000 0.33333333 0.40168321 </v> + <v> 0.33333333 0.33333333 0.40168321 </v> + <v> 0.66666667 0.33333333 0.40168321 </v> + <v> 0.00000000 0.66666667 0.40168321 </v> + <v> 0.33333333 0.66666667 0.40168321 </v> + <v> 0.66666667 0.66666667 0.40168321 </v> + <v> 0.11123873 0.11123873 0.50060819 </v> + <v> 0.44452768 0.11094464 0.50000593 </v> + <v> 0.77752255 0.11123873 0.50060819 </v> + <v> 0.11094464 0.44452768 0.50000593 </v> + <v> 0.44452768 0.44452768 0.50000593 </v> + <v> 0.77805052 0.44389897 0.50072296 </v> + <v> 0.11123873 0.77752255 0.50060819 </v> + <v> 0.44389897 0.77805052 0.50072296 </v> + <v> 0.77805052 0.77805052 0.50072296 </v> + <v> 0.88887179 0.22225642 0.59901223 </v> + <v> 0.22213222 0.22213222 0.59794112 </v> + <v> 0.55573556 0.22213222 0.59794112 </v> + <v> 0.88934490 0.55532755 0.59863277 </v> + <v> 0.22213222 0.55573556 0.59794112 </v> + <v> 0.55532755 0.55532755 0.59863277 </v> + <v> 0.88887179 0.88887179 0.59901223 </v> + <v> 0.22225642 0.88887179 0.59901223 </v> + <v> 0.55532755 0.88934490 0.59863277 </v> + <v> 0.00000000 0.00000000 0.69825514 </v> + <v> 0.33340411 0.00229633 0.69745863 </v> + <v> 0.66429956 0.00229633 0.69745863 </v> + <v> 0.00229633 0.33340411 0.69745863 </v> + <v> 0.66429956 0.33340411 0.69745863 </v> + <v> 0.00229633 0.66429956 0.69745863 </v> + <v> 0.33340411 0.66429956 0.69745863 </v> + <v> 0.66666667 0.66666667 0.69755187 </v> + <v> 0.33333333 0.33333333 0.69043853 </v> + </varray> + <varray name="selective" type="logical" > + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + </varray> + <nose> + <v> -3.00000000 0.00000000 0.00010000 0.00010000 </v> + </nose> + </structure> + <calculation> + <scstep> + <time name="dav"> 4.70 4.71</time> + <time name="total"> 5.21 5.23</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.01828134 </v> + <i name="Tr[quadrupol]"> -6387.77822949 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1003.09726602 </i> + <i name="ewald"> 134444.70184155 </i> + <i name="hartreedc">-182211.03729967 </i> + <i name="XCdc"> -549.43237183 </i> + <i name="pawpsdc"> 48950.24329206 </i> + <i name="pawaedc"> -46900.60641466 </i> + <i name="eentropy"> 0.00332027 </i> + <i name="bandstr"> 1586.80937463 </i> + <i name="atom"> 46423.96828442 </i> + <i name="e_fr_energy"> 2747.74729278 </i> + <i name="e_wo_entrp"> 2747.74397251 </i> + <i name="e_0_energy"> 2747.74618603 </i> + </energy> + </scstep> + <scstep> + <time name="dav"> 5.19 5.21</time> + <time name="total"> 5.19 5.21</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.01828134 </v> + <i name="Tr[quadrupol]"> -6387.77822949 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -5.70772875 </i> + <i name="e_wo_entrp"> -5.70457438 </i> + <i name="e_0_energy"> -5.70667730 </i> + </energy> + </scstep> + <scstep> + <time name="dav"> 5.46 5.47</time> + <time name="total"> 5.46 5.47</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.01828134 </v> + <i name="Tr[quadrupol]"> -6387.77822949 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -95.65890467 </i> + <i name="e_wo_entrp"> -95.66814201 </i> + <i name="e_0_energy"> -95.66198378 </i> + </energy> + </scstep> + <scstep> + <time name="dav"> 5.07 5.08</time> + <time name="total"> 5.07 5.09</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.01828134 </v> + <i name="Tr[quadrupol]"> -6387.77822949 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -96.65211924 </i> + <i name="e_wo_entrp"> -96.66132791 </i> + <i name="e_0_energy"> -96.65518880 </i> + </energy> + </scstep> + <scstep> + <time name="dav"> 5.53 5.55</time> + <time name="total"> 5.84 5.86</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.01828134 </v> + <i name="Tr[quadrupol]"> -6387.77822949 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -96.67854875 </i> + <i name="e_wo_entrp"> -96.68775656 </i> + <i name="e_0_energy"> -96.68161802 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.88 0.89</time> + <time name="diis"> 2.43 2.44</time> + <time name="orth"> 0.15 0.15</time> + <time name="total"> 4.30 4.31</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 -0.02832244 </v> + <i name="Tr[quadrupol]"> -6387.75896505 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -96.68298822 </i> + <i name="e_wo_entrp"> -96.69230513 </i> + <i name="e_0_energy"> -96.68609386 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.81 0.81</time> + <time name="diis"> 2.45 2.46</time> + <time name="orth"> 0.15 0.15</time> + <time name="total"> 4.23 4.24</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.01024531 </v> + <i name="Tr[quadrupol]"> -6387.75736155 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -96.67473543 </i> + <i name="e_wo_entrp"> -96.68392579 </i> + <i name="e_0_energy"> -96.67779888 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.81 0.82</time> + <time name="diis"> 2.49 2.50</time> + <time name="orth"> 0.15 0.15</time> + <time name="total"> 4.26 4.28</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.00897947 </v> + <i name="Tr[quadrupol]"> -6387.76071544 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -96.67473112 </i> + <i name="e_wo_entrp"> -96.68395526 </i> + <i name="e_0_energy"> -96.67780584 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.81 0.82</time> + <time name="diis"> 2.13 2.13</time> + <time name="orth"> 0.16 0.16</time> + <time name="total"> 3.91 3.92</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.00868376 </v> + <i name="Tr[quadrupol]"> -6387.75941315 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="e_fr_energy"> -96.67473179 </i> + <i name="e_wo_entrp"> -96.68393364 </i> + <i name="e_0_energy"> -96.67779907 </i> + </energy> + </scstep> + <scstep> + <time name="diag"> 0.82 0.82</time> + <time name="diis"> 1.53 1.53</time> + <time name="orth"> 0.15 0.16</time> + <time name="total"> 3.01 3.02</time> + <dipole> + <v name="dipole"> 0.00000000 0.00000000 0.00877968 </v> + <i name="Tr[quadrupol]"> -6387.75942183 </i> + <i name="Echarged"> 0.00000000 </i> + <i name="Edipol_quadrupol"> 0.00000000 </i> + <i name="Eion"> 0.00000000 </i> + </dipole> + <energy> + <i name="alphaZ"> 1003.09451441 </i> + <i name="ewald"> 134444.70184155 </i> + <i name="hartreedc">-182210.58761568 </i> + <i name="XCdc"> -549.43146991 </i> + <i name="pawpsdc"> 48966.77656413 </i> + <i name="pawaedc"> -46917.15233360 </i> + <i name="eentropy"> 0.00920818 </i> + <i name="bandstr"> -1258.05372439 </i> + <i name="atom"> 46423.96828442 </i> + <i name="e_fr_energy"> -96.67473087 </i> + <i name="e_wo_entrp"> -96.68393906 </i> + <i name="e_0_energy"> -96.67780027 </i> + </energy> + </scstep> + <structure> + <crystal> + <varray name="basis" > + <v> 8.93075865 0.00000000 0.00000000 </v> + <v> 4.46537932 7.73426386 0.00000000 </v> + <v> 0.00000000 0.00000000 24.72257853 </v> + </varray> + <i name="volume"> 1707.65880700 </i> + <varray name="rec_basis" > + <v> 0.11197257 -0.06464739 0.00000000 </v> + <v> 0.00000000 0.12929479 0.00000000 </v> + <v> 0.00000000 0.00000000 0.04044886 </v> + </varray> + </crystal> + <varray name="positions" > + <v> 0.88888889 0.22222222 0.30336641 </v> + <v> 0.22222222 0.22222222 0.30336641 </v> + <v> 0.55555556 0.22222222 0.30336641 </v> + <v> 0.88888889 0.55555556 0.30336641 </v> + <v> 0.22222222 0.55555556 0.30336641 </v> + <v> 0.55555556 0.55555556 0.30336641 </v> + <v> 0.88888889 0.88888889 0.30336641 </v> + <v> 0.22222222 0.88888889 0.30336641 </v> + <v> 0.55555556 0.88888889 0.30336641 </v> + <v> 0.00000000 0.00000000 0.40168321 </v> + <v> 0.33333333 0.00000000 0.40168321 </v> + <v> 0.66666667 0.00000000 0.40168321 </v> + <v> 0.00000000 0.33333333 0.40168321 </v> + <v> 0.33333333 0.33333333 0.40168321 </v> + <v> 0.66666667 0.33333333 0.40168321 </v> + <v> 0.00000000 0.66666667 0.40168321 </v> + <v> 0.33333333 0.66666667 0.40168321 </v> + <v> 0.66666667 0.66666667 0.40168321 </v> + <v> 0.11123873 0.11123873 0.50060819 </v> + <v> 0.44452768 0.11094464 0.50000593 </v> + <v> 0.77752255 0.11123873 0.50060819 </v> + <v> 0.11094464 0.44452768 0.50000593 </v> + <v> 0.44452768 0.44452768 0.50000593 </v> + <v> 0.77805052 0.44389897 0.50072296 </v> + <v> 0.11123873 0.77752255 0.50060819 </v> + <v> 0.44389897 0.77805052 0.50072296 </v> + <v> 0.77805052 0.77805052 0.50072296 </v> + <v> 0.88887179 0.22225642 0.59901223 </v> + <v> 0.22213222 0.22213222 0.59794112 </v> + <v> 0.55573556 0.22213222 0.59794112 </v> + <v> 0.88934490 0.55532755 0.59863277 </v> + <v> 0.22213222 0.55573556 0.59794112 </v> + <v> 0.55532755 0.55532755 0.59863277 </v> + <v> 0.88887179 0.88887179 0.59901223 </v> + <v> 0.22225642 0.88887179 0.59901223 </v> + <v> 0.55532755 0.88934490 0.59863277 </v> + <v> 0.00000000 0.00000000 0.69825514 </v> + <v> 0.33340411 0.00229633 0.69745863 </v> + <v> 0.66429956 0.00229633 0.69745863 </v> + <v> 0.00229633 0.33340411 0.69745863 </v> + <v> 0.66429956 0.33340411 0.69745863 </v> + <v> 0.00229633 0.66429956 0.69745863 </v> + <v> 0.33340411 0.66429956 0.69745863 </v> + <v> 0.66666667 0.66666667 0.69755187 </v> + <v> 0.33333333 0.33333333 0.69043853 </v> + </varray> + </structure> + <varray name="forces" > + <v> 0.00000000 0.00921186 -0.03662785 </v> + <v> 0.03537085 0.02042137 -0.02547155 </v> + <v> -0.03537085 0.02042137 -0.02547155 </v> + <v> 0.02772274 -0.01600573 -0.02398565 </v> + <v> 0.00000000 -0.04084274 -0.02547155 </v> + <v> -0.02772274 -0.01600573 -0.02398565 </v> + <v> -0.00797770 -0.00460593 -0.03662785 </v> + <v> 0.00797770 -0.00460593 -0.03662785 </v> + <v> -0.00000000 0.03201146 -0.02398565 </v> + <v> -0.00000000 0.00000000 0.06351444 </v> + <v> 0.00051216 -0.00709060 0.01604627 </v> + <v> -0.00051216 -0.00709060 0.01604627 </v> + <v> -0.00588456 0.00398884 0.01604627 </v> + <v> -0.00000000 -0.00000000 -0.01544708 </v> + <v> 0.00588456 0.00398884 0.01604627 </v> + <v> -0.00639672 0.00310176 0.01604627 </v> + <v> 0.00639672 0.00310176 0.01604627 </v> + <v> -0.00000000 -0.00000000 0.04545765 </v> + <v> 0.00556601 0.00321354 0.00090924 </v> + <v> 0.00000000 0.00011621 -0.00337056 </v> + <v> -0.00556601 0.00321354 0.00090924 </v> + <v> 0.00010064 -0.00005810 -0.00337056 </v> + <v> -0.00010064 -0.00005810 -0.00337056 </v> + <v> -0.00000000 0.00166379 0.00464034 </v> + <v> -0.00000000 -0.00642708 0.00090924 </v> + <v> 0.00144088 -0.00083189 0.00464034 </v> + <v> -0.00144088 -0.00083189 0.00464034 </v> + <v> -0.00000000 -0.00427242 0.00361695 </v> + <v> 0.00421869 0.00243566 0.00818017 </v> + <v> -0.00421869 0.00243566 0.00818017 </v> + <v> -0.00087539 0.00050541 0.00571968 </v> + <v> 0.00000000 -0.00487132 0.00818017 </v> + <v> 0.00087539 0.00050541 0.00571968 </v> + <v> 0.00370003 0.00213621 0.00361695 </v> + <v> -0.00370003 0.00213621 0.00361695 </v> + <v> 0.00000000 -0.00101081 0.00571968 </v> + <v> -0.00000000 0.00000000 0.01405827 </v> + <v> 0.00046330 0.00271693 -0.00148794 </v> + <v> -0.00046330 0.00271693 -0.00148794 </v> + <v> 0.00258458 -0.00095724 -0.00148794 </v> + <v> -0.00258458 -0.00095724 -0.00148794 </v> + <v> 0.00212128 -0.00175970 -0.00148794 </v> + <v> -0.00212128 -0.00175970 -0.00148794 </v> + <v> -0.00000000 0.00000000 0.00598969 </v> + <v> -0.00000000 0.00000000 -0.00175524 </v> + </varray> + <varray name="stress" > + <v> -11.79910981 0.00000000 0.00000000 </v> + <v> 0.00000000 -11.79910981 -0.00000000 </v> + <v> 0.00000000 -0.00000000 -1.20994389 </v> + </varray> + <energy> + <i name="e_fr_energy"> -96.67473087 </i> + <i name="e_wo_entrp"> -96.67780027 </i> + <i name="e_0_energy"> 0.00920818 </i> + </energy> + <time name="totalsc"> 59.18 59.58</time> + <eigenvalues> + <array> + <dimension dim="1">band</dimension> + <dimension dim="2">kpoint</dimension> + <dimension dim="3">spin</dimension> + <field>eigene</field> + <field>occ</field> + <set> + <set comment="spin 1"> + <set comment="kpoint 1"> + <r> -5.4681 1.0000 </r> + <r> -4.7800 1.0000 </r> + <r> -4.4685 1.0000 </r> + <r> -4.2530 1.0000 </r> + <r> -4.2530 1.0000 </r> + <r> -4.2504 1.0000 </r> + <r> -4.2486 1.0000 </r> + <r> -4.2486 1.0000 </r> + <r> -4.2431 1.0000 </r> + <r> -4.2228 1.0000 </r> + <r> -4.1957 1.0000 </r> + <r> -4.1957 1.0000 </r> + <r> -4.1917 1.0000 </r> + <r> -4.1858 1.0000 </r> + <r> -4.1857 1.0000 </r> + <r> -4.1830 1.0000 </r> + <r> -4.1050 1.0000 </r> + <r> -4.0587 1.0000 </r> + <r> -4.0587 1.0000 </r> + <r> -4.0572 1.0000 </r> + <r> -4.0501 1.0000 </r> + <r> -4.0500 1.0000 </r> + <r> -4.0482 1.0000 </r> + <r> -3.9777 1.0000 </r> + <r> -3.9777 1.0000 </r> + <r> -3.9755 1.0000 </r> + <r> -3.9607 1.0000 </r> + <r> -3.9607 1.0000 </r> + <r> -3.9502 1.0000 </r> + <r> -3.8426 1.0000 </r> + <r> -3.8373 1.0000 </r> + <r> -3.8373 1.0000 </r> + <r> -3.8351 1.0000 </r> + <r> -3.8095 1.0000 </r> + <r> -3.8095 1.0000 </r> + <r> -3.7919 1.0000 </r> + <r> -3.7918 1.0000 </r> + <r> -3.7918 1.0000 </r> + <r> -3.7883 1.0000 </r> + <r> -3.7836 1.0000 </r> + <r> -3.7835 1.0000 </r> + <r> -3.6866 1.0000 </r> + <r> -3.6866 1.0000 </r> + <r> -3.6811 1.0000 </r> + <r> -3.6578 1.0000 </r> + <r> -3.6578 1.0000 </r> + <r> -3.6492 1.0000 </r> + <r> -3.6399 1.0000 </r> + <r> -3.6377 1.0000 </r> + <r> -3.6377 1.0000 </r> + <r> -3.6032 1.0000 </r> + <r> -3.5616 1.0000 </r> + <r> -3.5616 1.0000 </r> + <r> -3.5470 1.0000 </r> + <r> -3.5396 1.0000 </r> + <r> -3.5263 1.0000 </r> + <r> -3.5263 1.0000 </r> + <r> -3.5023 1.0000 </r> + <r> -3.5023 1.0000 </r> + <r> -3.3576 1.0000 </r> + <r> -3.3576 1.0000 </r> + <r> -3.2955 1.0000 </r> + <r> -3.2955 1.0000 </r> + <r> -3.2373 1.0000 </r> + <r> -3.2347 1.0000 </r> + <r> -3.2288 1.0000 </r> + <r> -3.2288 1.0000 </r> + <r> -3.2277 1.0000 </r> + <r> -3.1910 1.0000 </r> + <r> -3.1910 1.0000 </r> + <r> -3.1866 1.0000 </r> + <r> -3.1558 1.0000 </r> + <r> -3.1558 1.0000 </r> + <r> -3.1518 1.0000 </r> + <r> -3.1111 1.0000 </r> + <r> -3.1071 1.0000 </r> + <r> -3.1070 1.0000 </r> + <r> -3.0966 1.0000 </r> + <r> -3.0782 1.0000 </r> + <r> -3.0782 1.0000 </r> + <r> -3.0646 1.0000 </r> + <r> -3.0646 1.0000 </r> + <r> -3.0353 1.0000 </r> + <r> -3.0028 1.0000 </r> + <r> -3.0027 1.0000 </r> + <r> -2.9937 1.0000 </r> + <r> -2.9783 1.0000 </r> + <r> -2.9783 1.0000 </r> + <r> -2.9712 1.0000 </r> + <r> -2.9687 1.0000 </r> + <r> -2.9613 1.0000 </r> + <r> -2.9613 1.0000 </r> + <r> -2.9454 1.0000 </r> + <r> -2.9454 1.0000 </r> + <r> -2.9398 1.0000 </r> + <r> -2.9398 1.0000 </r> + <r> -2.9390 1.0000 </r> + <r> -2.9338 1.0000 </r> + <r> -2.9317 1.0000 </r> + <r> -2.9316 1.0000 </r> + <r> -2.9316 1.0000 </r> + <r> -2.8745 1.0000 </r> + <r> -2.8745 1.0000 </r> + <r> -2.8204 1.0000 </r> + <r> -2.8204 1.0000 </r> + <r> -2.7454 1.0000 </r> + <r> -2.7433 1.0000 </r> + <r> -2.7433 1.0000 </r> + <r> -2.7215 1.0000 </r> + <r> -2.7215 1.0000 </r> + <r> -2.6897 1.0000 </r> + <r> -2.6897 1.0000 </r> + <r> -2.6728 1.0000 </r> + <r> -2.6718 1.0000 </r> + <r> -2.6651 1.0000 </r> + <r> -2.6546 1.0000 </r> + <r> -2.6546 1.0000 </r> + <r> -2.6039 1.0000 </r> + <r> -2.6031 1.0000 </r> + <r> -2.6031 1.0000 </r> + <r> -2.5894 1.0000 </r> + <r> -2.5894 1.0000 </r> + <r> -2.5878 1.0000 </r> + <r> -2.5625 1.0000 </r> + <r> -2.5625 1.0000 </r> + <r> -2.5346 1.0000 </r> + <r> -2.5345 1.0000 </r> + <r> -2.5338 1.0000 </r> + <r> -2.5295 1.0000 </r> + <r> -2.4535 1.0000 </r> + <r> -2.4535 1.0000 </r> + <r> -2.4334 1.0000 </r> + <r> -2.4098 1.0000 </r> + <r> -2.4098 1.0000 </r> + <r> -2.3676 1.0000 </r> + <r> -2.3676 1.0000 </r> + <r> -2.3312 1.0000 </r> + <r> -2.3245 1.0000 </r> + <r> -2.2757 1.0000 </r> + <r> -2.2757 1.0000 </r> + <r> -2.2720 1.0000 </r> + <r> -2.2720 1.0000 </r> + <r> -2.2682 1.0000 </r> + <r> -2.2602 1.0000 </r> + <r> -2.2599 1.0000 </r> + <r> -2.2554 1.0000 </r> + <r> -2.2554 1.0000 </r> + <r> -2.2509 1.0000 </r> + <r> -2.2509 1.0000 </r> + <r> -2.2011 1.0000 </r> + <r> -2.2011 1.0000 </r> + <r> -2.1926 1.0000 </r> + <r> -2.1799 1.0000 </r> + <r> -2.1799 1.0000 </r> + <r> -2.1520 1.0000 </r> + <r> -2.1520 1.0000 </r> + <r> -2.0998 1.0000 </r> + <r> -2.0998 1.0000 </r> + <r> -2.0669 1.0000 </r> + <r> -2.0578 1.0000 </r> + <r> -2.0570 1.0000 </r> + <r> -2.0570 1.0000 </r> + <r> -2.0234 1.0000 </r> + <r> -2.0234 1.0000 </r> + <r> -2.0193 1.0000 </r> + <r> -2.0130 1.0000 </r> + <r> -2.0130 1.0000 </r> + <r> -1.9945 1.0000 </r> + <r> -1.9945 1.0000 </r> + <r> -1.9628 1.0000 </r> + <r> -1.9519 1.0000 </r> + <r> -1.9519 1.0000 </r> + <r> -1.9469 1.0000 </r> + <r> -1.9369 1.0000 </r> + <r> -1.9368 1.0000 </r> + <r> -1.9362 1.0000 </r> + <r> -1.9346 1.0000 </r> + <r> -1.9346 1.0000 </r> + <r> -1.9182 1.0000 </r> + <r> -1.9104 1.0000 </r> + <r> -1.9104 1.0000 </r> + <r> -1.8815 1.0000 </r> + <r> -1.8815 1.0000 </r> + <r> -1.8656 1.0000 </r> + <r> -1.8480 1.0000 </r> + <r> -1.8261 1.0000 </r> + <r> -1.8249 1.0000 </r> + <r> -1.8248 1.0000 </r> + <r> -1.8213 1.0000 </r> + <r> -1.8213 1.0000 </r> + <r> -1.7874 1.0000 </r> + <r> -1.7874 1.0000 </r> + <r> -1.7648 1.0000 </r> + <r> -1.7623 1.0000 </r> + <r> -1.7569 1.0000 </r> + <r> -1.7569 1.0000 </r> + <r> -1.7513 1.0000 </r> + <r> -1.7507 1.0000 </r> + <r> -1.7506 1.0000 </r> + <r> -1.7261 1.0000 </r> + <r> -1.7261 1.0000 </r> + <r> -1.7118 1.0000 </r> + <r> -1.7118 1.0000 </r> + <r> -1.7045 1.0000 </r> + <r> -1.7015 1.0000 </r> + <r> -1.7015 1.0000 </r> + <r> -1.7008 1.0000 </r> + <r> -1.6904 1.0000 </r> + <r> -1.6788 1.0000 </r> + <r> -1.6788 1.0000 </r> + <r> -1.6528 1.0000 </r> + <r> -1.6528 1.0000 </r> + <r> -1.6508 1.0000 </r> + <r> -1.6443 1.0000 </r> + <r> -1.6422 1.0000 </r> + <r> -1.6138 1.0000 </r> + <r> -1.6138 1.0000 </r> + <r> -1.5779 1.0000 </r> + <r> -1.5779 1.0000 </r> + <r> -1.5486 1.0000 </r> + <r> -1.5486 1.0000 </r> + <r> -1.5376 1.0000 </r> + <r> -1.5263 1.0000 </r> + <r> -1.4289 1.0000 </r> + <r> -1.4119 1.0000 </r> + <r> -1.4118 1.0000 </r> + <r> -1.3898 1.0000 </r> + <r> -1.3897 1.0000 </r> + <r> -1.3897 1.0000 </r> + <r> -1.1173 1.0000 </r> + <r> -0.9688 1.0000 </r> + <r> -0.9687 1.0000 </r> + <r> -0.9365 1.0000 </r> + <r> -0.9125 1.0000 </r> + <r> -0.9125 1.0000 </r> + <r> -0.8637 1.0000 </r> + <r> -0.0870 1.0000 </r> + <r> -0.0869 1.0000 </r> + <r> -0.0227 1.0000 </r> + <r> 0.0786 1.0000 </r> + <r> 0.0786 1.0000 </r> + <r> 0.1716 1.0000 </r> + <r> 0.2020 1.0000 </r> + <r> 0.2021 1.0000 </r> + <r> 0.3025 1.0000 </r> + <r> 0.3026 1.0000 </r> + <r> 0.3703 1.0000 </r> + <r> 0.9409 1.0000 </r> + <r> 1.7472 -0.0001 </r> + <r> 1.7571 -0.0001 </r> + <r> 1.7571 -0.0001 </r> + <r> 1.8341 -0.0000 </r> + <r> 1.8342 -0.0000 </r> + <r> 1.8465 -0.0000 </r> + <r> 1.9669 -0.0000 </r> + <r> 3.6111 -0.0000 </r> + <r> 3.6312 -0.0000 </r> + <r> 3.6312 -0.0000 </r> + <r> 3.7217 -0.0000 </r> + <r> 3.7217 -0.0000 </r> + <r> 3.7690 -0.0000 </r> + <r> 4.5126 0.0000 </r> + <r> 4.5134 0.0000 </r> + <r> 4.5134 0.0000 </r> + <r> 4.5601 0.0000 </r> + <r> 4.6344 0.0000 </r> + <r> 4.6344 0.0000 </r> + <r> 5.1756 0.0000 </r> + <r> 5.2052 0.0000 </r> + <r> 5.2052 0.0000 </r> + <r> 5.2833 0.0000 </r> + <r> 5.3236 0.0000 </r> + <r> 5.3812 0.0000 </r> + <r> 5.3812 0.0000 </r> + <r> 5.5643 0.0000 </r> + <r> 5.5860 0.0000 </r> + <r> 5.5860 0.0000 </r> + <r> 5.6244 0.0000 </r> + <r> 5.6245 0.0000 </r> + <r> 5.6832 0.0000 </r> + <r> 5.7154 0.0000 </r> + <r> 6.1003 0.0000 </r> + <r> 6.1363 0.0000 </r> + <r> 6.1363 0.0000 </r> + <r> 6.1578 0.0000 </r> + <r> 6.1946 0.0000 </r> + <r> 6.7155 0.0000 </r> + <r> 6.7155 0.0000 </r> + <r> 7.2231 0.0000 </r> + <r> 7.2364 0.0000 </r> + <r> 7.2365 0.0000 </r> + <r> 7.2521 0.0000 </r> + <r> 7.2521 0.0000 </r> + <r> 7.3383 0.0000 </r> + <r> 7.4902 0.0000 </r> + <r> 7.4941 0.0000 </r> + <r> 7.4941 0.0000 </r> + <r> 7.5834 0.0000 </r> + <r> 7.5985 0.0000 </r> + <r> 7.5985 0.0000 </r> + <r> 7.6078 0.0000 </r> + <r> 7.6078 0.0000 </r> + <r> 7.6188 0.0000 </r> + <r> 7.6544 0.0000 </r> + <r> 7.6544 0.0000 </r> + <r> 7.6848 0.0000 </r> + <r> 7.8079 0.0000 </r> + <r> 8.0369 0.0000 </r> + <r> 8.1102 0.0000 </r> + <r> 8.1106 0.0000 </r> + <r> 8.1263 0.0000 </r> + <r> 8.1423 0.0000 </r> + <r> 8.1452 0.0000 </r> + <r> 8.1481 0.0000 </r> + <r> 8.3986 0.0000 </r> + <r> 8.4075 0.0000 </r> + <r> 8.4104 0.0000 </r> + <r> 8.4130 0.0000 </r> + <r> 8.4245 0.0000 </r> + <r> 8.4603 0.0000 </r> + </set> + <set comment="kpoint 2"> + <r> -5.1610 1.0000 </r> + <r> -4.4949 1.0000 </r> + <r> -4.4509 1.0000 </r> + <r> -4.3974 1.0000 </r> + <r> -4.3351 1.0000 </r> + <r> -4.2720 1.0000 </r> + <r> -4.2629 1.0000 </r> + <r> -4.1789 1.0000 </r> + <r> -4.1770 1.0000 </r> + <r> -4.1611 1.0000 </r> + <r> -4.1597 1.0000 </r> + <r> -4.1210 1.0000 </r> + <r> -4.1051 1.0000 </r> + <r> -4.1027 1.0000 </r> + <r> -4.0757 1.0000 </r> + <r> -4.0731 1.0000 </r> + <r> -4.0629 1.0000 </r> + <r> -4.0613 1.0000 </r> + <r> -4.0431 1.0000 </r> + <r> -4.0127 1.0000 </r> + <r> -3.9748 1.0000 </r> + <r> -3.9398 1.0000 </r> + <r> -3.9287 1.0000 </r> + <r> -3.9272 1.0000 </r> + <r> -3.9173 1.0000 </r> + <r> -3.9156 1.0000 </r> + <r> -3.9063 1.0000 </r> + <r> -3.9004 1.0000 </r> + <r> -3.8962 1.0000 </r> + <r> -3.8924 1.0000 </r> + <r> -3.8840 1.0000 </r> + <r> -3.8436 1.0000 </r> + <r> -3.8428 1.0000 </r> + <r> -3.8349 1.0000 </r> + <r> -3.7816 1.0000 </r> + <r> -3.7659 1.0000 </r> + <r> -3.7619 1.0000 </r> + <r> -3.7235 1.0000 </r> + <r> -3.7203 1.0000 </r> + <r> -3.7169 1.0000 </r> + <r> -3.7114 1.0000 </r> + <r> -3.7029 1.0000 </r> + <r> -3.6924 1.0000 </r> + <r> -3.6918 1.0000 </r> + <r> -3.6392 1.0000 </r> + <r> -3.6389 1.0000 </r> + <r> -3.6042 1.0000 </r> + <r> -3.5997 1.0000 </r> + <r> -3.5931 1.0000 </r> + <r> -3.5817 1.0000 </r> + <r> -3.5796 1.0000 </r> + <r> -3.5618 1.0000 </r> + <r> -3.5605 1.0000 </r> + <r> -3.5260 1.0000 </r> + <r> -3.5253 1.0000 </r> + <r> -3.4976 1.0000 </r> + <r> -3.4450 1.0000 </r> + <r> -3.4426 1.0000 </r> + <r> -3.3804 1.0000 </r> + <r> -3.3761 1.0000 </r> + <r> -3.3751 1.0000 </r> + <r> -3.3527 1.0000 </r> + <r> -3.3516 1.0000 </r> + <r> -3.3453 1.0000 </r> + <r> -3.3354 1.0000 </r> + <r> -3.3287 1.0000 </r> + <r> -3.3126 1.0000 </r> + <r> -3.3118 1.0000 </r> + <r> -3.2859 1.0000 </r> + <r> -3.2537 1.0000 </r> + <r> -3.2263 1.0000 </r> + <r> -3.2149 1.0000 </r> + <r> -3.2143 1.0000 </r> + <r> -3.1811 1.0000 </r> + <r> -3.1753 1.0000 </r> + <r> -3.1683 1.0000 </r> + <r> -3.1625 1.0000 </r> + <r> -3.1578 1.0000 </r> + <r> -3.1421 1.0000 </r> + <r> -3.1341 1.0000 </r> + <r> -3.0949 1.0000 </r> + <r> -3.0881 1.0000 </r> + <r> -3.0867 1.0000 </r> + <r> -3.0703 1.0000 </r> + <r> -3.0586 1.0000 </r> + <r> -3.0333 1.0000 </r> + <r> -3.0282 1.0000 </r> + <r> -3.0220 1.0000 </r> + <r> -3.0189 1.0000 </r> + <r> -3.0139 1.0000 </r> + <r> -2.9696 1.0000 </r> + <r> -2.9642 1.0000 </r> + <r> -2.9556 1.0000 </r> + <r> -2.9511 1.0000 </r> + <r> -2.9429 1.0000 </r> + <r> -2.9255 1.0000 </r> + <r> -2.9253 1.0000 </r> + <r> -2.9157 1.0000 </r> + <r> -2.9115 1.0000 </r> + <r> -2.9045 1.0000 </r> + <r> -2.8849 1.0000 </r> + <r> -2.8805 1.0000 </r> + <r> -2.8607 1.0000 </r> + <r> -2.8568 1.0000 </r> + <r> -2.8210 1.0000 </r> + <r> -2.8181 1.0000 </r> + <r> -2.8167 1.0000 </r> + <r> -2.8020 1.0000 </r> + <r> -2.7960 1.0000 </r> + <r> -2.7860 1.0000 </r> + <r> -2.7686 1.0000 </r> + <r> -2.7586 1.0000 </r> + <r> -2.7311 1.0000 </r> + <r> -2.7191 1.0000 </r> + <r> -2.7117 1.0000 </r> + <r> -2.6979 1.0000 </r> + <r> -2.6948 1.0000 </r> + <r> -2.6907 1.0000 </r> + <r> -2.6870 1.0000 </r> + <r> -2.6772 1.0000 </r> + <r> -2.6611 1.0000 </r> + <r> -2.6553 1.0000 </r> + <r> -2.6383 1.0000 </r> + <r> -2.6367 1.0000 </r> + <r> -2.6266 1.0000 </r> + <r> -2.6178 1.0000 </r> + <r> -2.6105 1.0000 </r> + <r> -2.5942 1.0000 </r> + <r> -2.5498 1.0000 </r> + <r> -2.5357 1.0000 </r> + <r> -2.5279 1.0000 </r> + <r> -2.5095 1.0000 </r> + <r> -2.5057 1.0000 </r> + <r> -2.4883 1.0000 </r> + <r> -2.4539 1.0000 </r> + <r> -2.4491 1.0000 </r> + <r> -2.4308 1.0000 </r> + <r> -2.4220 1.0000 </r> + <r> -2.4187 1.0000 </r> + <r> -2.4021 1.0000 </r> + <r> -2.3996 1.0000 </r> + <r> -2.3843 1.0000 </r> + <r> -2.3825 1.0000 </r> + <r> -2.3558 1.0000 </r> + <r> -2.3556 1.0000 </r> + <r> -2.3468 1.0000 </r> + <r> -2.3433 1.0000 </r> + <r> -2.3314 1.0000 </r> + <r> -2.3210 1.0000 </r> + <r> -2.3169 1.0000 </r> + <r> -2.3134 1.0000 </r> + <r> -2.2974 1.0000 </r> + <r> -2.2869 1.0000 </r> + <r> -2.2776 1.0000 </r> + <r> -2.2728 1.0000 </r> + <r> -2.2655 1.0000 </r> + <r> -2.2376 1.0000 </r> + <r> -2.2279 1.0000 </r> + <r> -2.2097 1.0000 </r> + <r> -2.2005 1.0000 </r> + <r> -2.1766 1.0000 </r> + <r> -2.1746 1.0000 </r> + <r> -2.1526 1.0000 </r> + <r> -2.1392 1.0000 </r> + <r> -2.1299 1.0000 </r> + <r> -2.1127 1.0000 </r> + <r> -2.1002 1.0000 </r> + <r> -2.0921 1.0000 </r> + <r> -2.0864 1.0000 </r> + <r> -2.0766 1.0000 </r> + <r> -2.0649 1.0000 </r> + <r> -2.0535 1.0000 </r> + <r> -2.0053 1.0000 </r> + <r> -2.0021 1.0000 </r> + <r> -1.9981 1.0000 </r> + <r> -1.9832 1.0000 </r> + <r> -1.9726 1.0000 </r> + <r> -1.9696 1.0000 </r> + <r> -1.9518 1.0000 </r> + <r> -1.9437 1.0000 </r> + <r> -1.9285 1.0000 </r> + <r> -1.9275 1.0000 </r> + <r> -1.9201 1.0000 </r> + <r> -1.9116 1.0000 </r> + <r> -1.9093 1.0000 </r> + <r> -1.8886 1.0000 </r> + <r> -1.8807 1.0000 </r> + <r> -1.8658 1.0000 </r> + <r> -1.8563 1.0000 </r> + <r> -1.8476 1.0000 </r> + <r> -1.8334 1.0000 </r> + <r> -1.8314 1.0000 </r> + <r> -1.8178 1.0000 </r> + <r> -1.8067 1.0000 </r> + <r> -1.7927 1.0000 </r> + <r> -1.7771 1.0000 </r> + <r> -1.7666 1.0000 </r> + <r> -1.7456 1.0000 </r> + <r> -1.7329 1.0000 </r> + <r> -1.7205 1.0000 </r> + <r> -1.7136 1.0000 </r> + <r> -1.7008 1.0000 </r> + <r> -1.6865 1.0000 </r> + <r> -1.6830 1.0000 </r> + <r> -1.6637 1.0000 </r> + <r> -1.6598 1.0000 </r> + <r> -1.6369 1.0000 </r> + <r> -1.6358 1.0000 </r> + <r> -1.6280 1.0000 </r> + <r> -1.6151 1.0000 </r> + <r> -1.6126 1.0000 </r> + <r> -1.6012 1.0000 </r> + <r> -1.5997 1.0000 </r> + <r> -1.5778 1.0000 </r> + <r> -1.5656 1.0000 </r> + <r> -1.5558 1.0000 </r> + <r> -1.5488 1.0000 </r> + <r> -1.5479 1.0000 </r> + <r> -1.5137 1.0000 </r> + <r> -1.5101 1.0000 </r> + <r> -1.5068 1.0000 </r> + <r> -1.4939 1.0000 </r> + <r> -1.4716 1.0000 </r> + <r> -1.4648 1.0000 </r> + <r> -1.4641 1.0000 </r> + <r> -1.4112 1.0000 </r> + <r> -1.3836 1.0000 </r> + <r> -1.2409 1.0000 </r> + <r> -1.1934 1.0000 </r> + <r> -1.0185 1.0000 </r> + <r> -0.5601 1.0000 </r> + <r> -0.3981 1.0000 </r> + <r> -0.2694 1.0000 </r> + <r> -0.1888 1.0000 </r> + <r> -0.0525 1.0000 </r> + <r> -0.0320 1.0000 </r> + <r> 0.0177 1.0000 </r> + <r> 0.0915 1.0000 </r> + <r> 0.1455 1.0000 </r> + <r> 0.1755 1.0000 </r> + <r> 0.5329 1.0000 </r> + <r> 0.6191 1.0000 </r> + <r> 0.6856 1.0000 </r> + <r> 0.7565 1.0000 </r> + <r> 1.2909 1.0222 </r> + <r> 1.3390 1.0341 </r> + <r> 1.3423 1.0329 </r> + <r> 1.4175 0.7783 </r> + <r> 1.5526 -0.0250 </r> + <r> 1.5645 -0.0334 </r> + <r> 2.0835 -0.0000 </r> + <r> 2.0971 -0.0000 </r> + <r> 2.1048 -0.0000 </r> + <r> 2.3575 -0.0000 </r> + <r> 2.4640 -0.0000 </r> + <r> 2.7336 -0.0000 </r> + <r> 2.7348 -0.0000 </r> + <r> 2.9633 -0.0000 </r> + <r> 2.9850 -0.0000 </r> + <r> 3.1943 -0.0000 </r> + <r> 3.2248 -0.0000 </r> + <r> 3.2359 -0.0000 </r> + <r> 3.6327 -0.0000 </r> + <r> 3.6335 -0.0000 </r> + <r> 3.8790 -0.0000 </r> + <r> 3.9176 -0.0000 </r> + <r> 4.6555 0.0000 </r> + <r> 4.6891 0.0000 </r> + <r> 4.7107 0.0000 </r> + <r> 4.7255 0.0000 </r> + <r> 5.0161 0.0000 </r> + <r> 5.0292 0.0000 </r> + <r> 5.0735 0.0000 </r> + <r> 5.0757 0.0000 </r> + <r> 5.1128 0.0000 </r> + <r> 5.4091 0.0000 </r> + <r> 5.7189 0.0000 </r> + <r> 5.7426 0.0000 </r> + <r> 5.7996 0.0000 </r> + <r> 5.9665 0.0000 </r> + <r> 5.9669 0.0000 </r> + <r> 5.9774 0.0000 </r> + <r> 6.1113 0.0000 </r> + <r> 6.2951 0.0000 </r> + <r> 6.3935 0.0000 </r> + <r> 6.5166 0.0000 </r> + <r> 6.5286 0.0000 </r> + <r> 6.5581 0.0000 </r> + <r> 6.6100 0.0000 </r> + <r> 6.8024 0.0000 </r> + <r> 6.8311 0.0000 </r> + <r> 6.8653 0.0000 </r> + <r> 6.9571 0.0000 </r> + <r> 6.9903 0.0000 </r> + <r> 7.1012 0.0000 </r> + <r> 7.1466 0.0000 </r> + <r> 7.1663 0.0000 </r> + <r> 7.2777 0.0000 </r> + <r> 7.4138 0.0000 </r> + <r> 7.4268 0.0000 </r> + <r> 7.6426 0.0000 </r> + <r> 7.6464 0.0000 </r> + <r> 7.7677 0.0000 </r> + <r> 7.9449 0.0000 </r> + <r> 7.9497 0.0000 </r> + <r> 7.9528 0.0000 </r> + <r> 7.9916 0.0000 </r> + <r> 8.0075 0.0000 </r> + <r> 8.0526 0.0000 </r> + <r> 8.2881 0.0000 </r> + <r> 8.3426 0.0000 </r> + <r> 8.3550 0.0000 </r> + <r> 8.4552 0.0000 </r> + <r> 8.4736 0.0000 </r> + <r> 8.5131 0.0000 </r> + <r> 8.6115 0.0000 </r> + <r> 8.7434 0.0000 </r> + <r> 9.0487 0.0000 </r> + <r> 9.0954 0.0000 </r> + <r> 9.1542 0.0000 </r> + </set> + <set comment="kpoint 3"> + <r> -4.6243 1.0000 </r> + <r> -4.6240 1.0000 </r> + <r> -4.6105 1.0000 </r> + <r> -4.2888 1.0000 </r> + <r> -4.2871 1.0000 </r> + <r> -4.2861 1.0000 </r> + <r> -4.2385 1.0000 </r> + <r> -4.2383 1.0000 </r> + <r> -4.2374 1.0000 </r> + <r> -4.1860 1.0000 </r> + <r> -4.1856 1.0000 </r> + <r> -4.1839 1.0000 </r> + <r> -4.0645 1.0000 </r> + <r> -4.0638 1.0000 </r> + <r> -4.0306 1.0000 </r> + <r> -3.9874 1.0000 </r> + <r> -3.9851 1.0000 </r> + <r> -3.9792 1.0000 </r> + <r> -3.9718 1.0000 </r> + <r> -3.9688 1.0000 </r> + <r> -3.9673 1.0000 </r> + <r> -3.9642 1.0000 </r> + <r> -3.9632 1.0000 </r> + <r> -3.9558 1.0000 </r> + <r> -3.9391 1.0000 </r> + <r> -3.9383 1.0000 </r> + <r> -3.9330 1.0000 </r> + <r> -3.8548 1.0000 </r> + <r> -3.8494 1.0000 </r> + <r> -3.8451 1.0000 </r> + <r> -3.8141 1.0000 </r> + <r> -3.8095 1.0000 </r> + <r> -3.8084 1.0000 </r> + <r> -3.7681 1.0000 </r> + <r> -3.7647 1.0000 </r> + <r> -3.7642 1.0000 </r> + <r> -3.7605 1.0000 </r> + <r> -3.7545 1.0000 </r> + <r> -3.7478 1.0000 </r> + <r> -3.7161 1.0000 </r> + <r> -3.6616 1.0000 </r> + <r> -3.6517 1.0000 </r> + <r> -3.6265 1.0000 </r> + <r> -3.6232 1.0000 </r> + <r> -3.6175 1.0000 </r> + <r> -3.5921 1.0000 </r> + <r> -3.5851 1.0000 </r> + <r> -3.5771 1.0000 </r> + <r> -3.5649 1.0000 </r> + <r> -3.5636 1.0000 </r> + <r> -3.5478 1.0000 </r> + <r> -3.5448 1.0000 </r> + <r> -3.5400 1.0000 </r> + <r> -3.5261 1.0000 </r> + <r> -3.4281 1.0000 </r> + <r> -3.4234 1.0000 </r> + <r> -3.4088 1.0000 </r> + <r> -3.4025 1.0000 </r> + <r> -3.3971 1.0000 </r> + <r> -3.3924 1.0000 </r> + <r> -3.3921 1.0000 </r> + <r> -3.3898 1.0000 </r> + <r> -3.3775 1.0000 </r> + <r> -3.3747 1.0000 </r> + <r> -3.3669 1.0000 </r> + <r> -3.3658 1.0000 </r> + <r> -3.3380 1.0000 </r> + <r> -3.3359 1.0000 </r> + <r> -3.3353 1.0000 </r> + <r> -3.2750 1.0000 </r> + <r> -3.2715 1.0000 </r> + <r> -3.2661 1.0000 </r> + <r> -3.2614 1.0000 </r> + <r> -3.2590 1.0000 </r> + <r> -3.2337 1.0000 </r> + <r> -3.2044 1.0000 </r> + <r> -3.1946 1.0000 </r> + <r> -3.1842 1.0000 </r> + <r> -3.1768 1.0000 </r> + <r> -3.1636 1.0000 </r> + <r> -3.1516 1.0000 </r> + <r> -3.1288 1.0000 </r> + <r> -3.1063 1.0000 </r> + <r> -3.1033 1.0000 </r> + <r> -3.0781 1.0000 </r> + <r> -3.0626 1.0000 </r> + <r> -3.0623 1.0000 </r> + <r> -3.0573 1.0000 </r> + <r> -3.0521 1.0000 </r> + <r> -3.0427 1.0000 </r> + <r> -3.0127 1.0000 </r> + <r> -2.9943 1.0000 </r> + <r> -2.9912 1.0000 </r> + <r> -2.9645 1.0000 </r> + <r> -2.9619 1.0000 </r> + <r> -2.9515 1.0000 </r> + <r> -2.9484 1.0000 </r> + <r> -2.9283 1.0000 </r> + <r> -2.9136 1.0000 </r> + <r> -2.8996 1.0000 </r> + <r> -2.8991 1.0000 </r> + <r> -2.8939 1.0000 </r> + <r> -2.8719 1.0000 </r> + <r> -2.8709 1.0000 </r> + <r> -2.8611 1.0000 </r> + <r> -2.8523 1.0000 </r> + <r> -2.8505 1.0000 </r> + <r> -2.8396 1.0000 </r> + <r> -2.7973 1.0000 </r> + <r> -2.7938 1.0000 </r> + <r> -2.7920 1.0000 </r> + <r> -2.7904 1.0000 </r> + <r> -2.7885 1.0000 </r> + <r> -2.7777 1.0000 </r> + <r> -2.7462 1.0000 </r> + <r> -2.7286 1.0000 </r> + <r> -2.7274 1.0000 </r> + <r> -2.7166 1.0000 </r> + <r> -2.7080 1.0000 </r> + <r> -2.7068 1.0000 </r> + <r> -2.6667 1.0000 </r> + <r> -2.6652 1.0000 </r> + <r> -2.6596 1.0000 </r> + <r> -2.6589 1.0000 </r> + <r> -2.6586 1.0000 </r> + <r> -2.6541 1.0000 </r> + <r> -2.6267 1.0000 </r> + <r> -2.6170 1.0000 </r> + <r> -2.5880 1.0000 </r> + <r> -2.5738 1.0000 </r> + <r> -2.5582 1.0000 </r> + <r> -2.5561 1.0000 </r> + <r> -2.5342 1.0000 </r> + <r> -2.5225 1.0000 </r> + <r> -2.5184 1.0000 </r> + <r> -2.5097 1.0000 </r> + <r> -2.5005 1.0000 </r> + <r> -2.4937 1.0000 </r> + <r> -2.4708 1.0000 </r> + <r> -2.4630 1.0000 </r> + <r> -2.4541 1.0000 </r> + <r> -2.4539 1.0000 </r> + <r> -2.4473 1.0000 </r> + <r> -2.4362 1.0000 </r> + <r> -2.4333 1.0000 </r> + <r> -2.4222 1.0000 </r> + <r> -2.4113 1.0000 </r> + <r> -2.3923 1.0000 </r> + <r> -2.3870 1.0000 </r> + <r> -2.3673 1.0000 </r> + <r> -2.3629 1.0000 </r> + <r> -2.3310 1.0000 </r> + <r> -2.3143 1.0000 </r> + <r> -2.3111 1.0000 </r> + <r> -2.3003 1.0000 </r> + <r> -2.2982 1.0000 </r> + <r> -2.2769 1.0000 </r> + <r> -2.2753 1.0000 </r> + <r> -2.2690 1.0000 </r> + <r> -2.2503 1.0000 </r> + <r> -2.2259 1.0000 </r> + <r> -2.2102 1.0000 </r> + <r> -2.2004 1.0000 </r> + <r> -2.1791 1.0000 </r> + <r> -2.1629 1.0000 </r> + <r> -2.1137 1.0000 </r> + <r> -2.1096 1.0000 </r> + <r> -2.1041 1.0000 </r> + <r> -2.0930 1.0000 </r> + <r> -2.0600 1.0000 </r> + <r> -2.0557 1.0000 </r> + <r> -2.0398 1.0000 </r> + <r> -2.0386 1.0000 </r> + <r> -2.0338 1.0000 </r> + <r> -2.0155 1.0000 </r> + <r> -2.0013 1.0000 </r> + <r> -2.0010 1.0000 </r> + <r> -1.9965 1.0000 </r> + <r> -1.9914 1.0000 </r> + <r> -1.9560 1.0000 </r> + <r> -1.9497 1.0000 </r> + <r> -1.9325 1.0000 </r> + <r> -1.9280 1.0000 </r> + <r> -1.9077 1.0000 </r> + <r> -1.8998 1.0000 </r> + <r> -1.8813 1.0000 </r> + <r> -1.8779 1.0000 </r> + <r> -1.8548 1.0000 </r> + <r> -1.8349 1.0000 </r> + <r> -1.8218 1.0000 </r> + <r> -1.8207 1.0000 </r> + <r> -1.7946 1.0000 </r> + <r> -1.7830 1.0000 </r> + <r> -1.7653 1.0000 </r> + <r> -1.7611 1.0000 </r> + <r> -1.7607 1.0000 </r> + <r> -1.7545 1.0000 </r> + <r> -1.7510 1.0000 </r> + <r> -1.7392 1.0000 </r> + <r> -1.7253 1.0000 </r> + <r> -1.7100 1.0000 </r> + <r> -1.6872 1.0000 </r> + <r> -1.6776 1.0000 </r> + <r> -1.6550 1.0000 </r> + <r> -1.6532 1.0000 </r> + <r> -1.6241 1.0000 </r> + <r> -1.6217 1.0000 </r> + <r> -1.6200 1.0000 </r> + <r> -1.6004 1.0000 </r> + <r> -1.5920 1.0000 </r> + <r> -1.5917 1.0000 </r> + <r> -1.5832 1.0000 </r> + <r> -1.5802 1.0000 </r> + <r> -1.5750 1.0000 </r> + <r> -1.5533 1.0000 </r> + <r> -1.5487 1.0000 </r> + <r> -1.5435 1.0000 </r> + <r> -1.5417 1.0000 </r> + <r> -1.5403 1.0000 </r> + <r> -1.5135 1.0000 </r> + <r> -1.4997 1.0000 </r> + <r> -1.4915 1.0000 </r> + <r> -1.4766 1.0000 </r> + <r> -1.4529 1.0000 </r> + <r> -1.4391 1.0000 </r> + <r> -1.4270 1.0000 </r> + <r> -1.1944 1.0000 </r> + <r> -1.1749 1.0000 </r> + <r> -1.1720 1.0000 </r> + <r> -0.3307 1.0000 </r> + <r> -0.3303 1.0000 </r> + <r> -0.2129 1.0000 </r> + <r> -0.0683 1.0000 </r> + <r> -0.0469 1.0000 </r> + <r> 0.0240 1.0000 </r> + <r> 0.0267 1.0000 </r> + <r> 0.0642 1.0000 </r> + <r> 0.2063 1.0000 </r> + <r> 0.2543 1.0000 </r> + <r> 0.4307 1.0000 </r> + <r> 0.5472 1.0000 </r> + <r> 0.6131 1.0000 </r> + <r> 0.6310 1.0000 </r> + <r> 1.4532 0.4959 </r> + <r> 1.4614 0.4265 </r> + <r> 1.4990 0.1508 </r> + <r> 2.0423 -0.0000 </r> + <r> 2.0499 -0.0000 </r> + <r> 2.0812 -0.0000 </r> + <r> 2.0839 -0.0000 </r> + <r> 2.1025 -0.0000 </r> + <r> 2.1098 -0.0000 </r> + <r> 2.4988 -0.0000 </r> + <r> 2.5155 -0.0000 </r> + <r> 2.5415 -0.0000 </r> + <r> 2.8752 -0.0000 </r> + <r> 2.8778 -0.0000 </r> + <r> 2.8794 -0.0000 </r> + <r> 2.9017 -0.0000 </r> + <r> 2.9077 -0.0000 </r> + <r> 2.9327 -0.0000 </r> + <r> 3.3141 -0.0000 </r> + <r> 3.3299 -0.0000 </r> + <r> 3.3614 -0.0000 </r> + <r> 3.4336 -0.0000 </r> + <r> 3.4441 -0.0000 </r> + <r> 3.4918 -0.0000 </r> + <r> 3.6193 -0.0000 </r> + <r> 3.6206 -0.0000 </r> + <r> 3.7048 -0.0000 </r> + <r> 4.6329 0.0000 </r> + <r> 4.6387 0.0000 </r> + <r> 4.6544 0.0000 </r> + <r> 5.0007 0.0000 </r> + <r> 5.0168 0.0000 </r> + <r> 5.0207 0.0000 </r> + <r> 5.7522 0.0000 </r> + <r> 5.7844 0.0000 </r> + <r> 5.8101 0.0000 </r> + <r> 5.8519 0.0000 </r> + <r> 5.8553 0.0000 </r> + <r> 5.9211 0.0000 </r> + <r> 6.2577 0.0000 </r> + <r> 6.2642 0.0000 </r> + <r> 6.3772 0.0000 </r> + <r> 6.5172 0.0000 </r> + <r> 6.5177 0.0000 </r> + <r> 6.5517 0.0000 </r> + <r> 6.5906 0.0000 </r> + <r> 6.6125 0.0000 </r> + <r> 6.6516 0.0000 </r> + <r> 6.8786 0.0000 </r> + <r> 6.8817 0.0000 </r> + <r> 6.9395 0.0000 </r> + <r> 7.2322 0.0000 </r> + <r> 7.2628 0.0000 </r> + <r> 7.2959 0.0000 </r> + <r> 8.0304 0.0000 </r> + <r> 8.0436 0.0000 </r> + <r> 8.0589 0.0000 </r> + <r> 8.1148 0.0000 </r> + <r> 8.1746 0.0000 </r> + <r> 8.1754 0.0000 </r> + <r> 8.1901 0.0000 </r> + <r> 8.2020 0.0000 </r> + <r> 8.2066 0.0000 </r> + <r> 8.2279 0.0000 </r> + <r> 8.2294 0.0000 </r> + <r> 8.2427 0.0000 </r> + <r> 8.3206 0.0000 </r> + <r> 8.3214 0.0000 </r> + <r> 8.3642 0.0000 </r> + <r> 8.7704 0.0000 </r> + <r> 8.7750 0.0000 </r> + <r> 8.8241 0.0000 </r> + <r> 8.8289 0.0000 </r> + <r> 8.8465 0.0000 </r> + <r> 8.8930 0.0000 </r> + <r> 8.9542 0.0000 </r> + <r> 8.9650 0.0000 </r> + </set> + </set> + <set comment="spin 2"> + <set comment="kpoint 1"> + <r> -5.4681 1.0000 </r> + <r> -4.7800 1.0000 </r> + <r> -4.4685 1.0000 </r> + <r> -4.2530 1.0000 </r> + <r> -4.2530 1.0000 </r> + <r> -4.2504 1.0000 </r> + <r> -4.2486 1.0000 </r> + <r> -4.2486 1.0000 </r> + <r> -4.2431 1.0000 </r> + <r> -4.2228 1.0000 </r> + <r> -4.1957 1.0000 </r> + <r> -4.1957 1.0000 </r> + <r> -4.1917 1.0000 </r> + <r> -4.1858 1.0000 </r> + <r> -4.1857 1.0000 </r> + <r> -4.1830 1.0000 </r> + <r> -4.1050 1.0000 </r> + <r> -4.0587 1.0000 </r> + <r> -4.0587 1.0000 </r> + <r> -4.0572 1.0000 </r> + <r> -4.0501 1.0000 </r> + <r> -4.0500 1.0000 </r> + <r> -4.0482 1.0000 </r> + <r> -3.9777 1.0000 </r> + <r> -3.9777 1.0000 </r> + <r> -3.9755 1.0000 </r> + <r> -3.9607 1.0000 </r> + <r> -3.9607 1.0000 </r> + <r> -3.9502 1.0000 </r> + <r> -3.8426 1.0000 </r> + <r> -3.8373 1.0000 </r> + <r> -3.8373 1.0000 </r> + <r> -3.8351 1.0000 </r> + <r> -3.8095 1.0000 </r> + <r> -3.8095 1.0000 </r> + <r> -3.7919 1.0000 </r> + <r> -3.7918 1.0000 </r> + <r> -3.7918 1.0000 </r> + <r> -3.7883 1.0000 </r> + <r> -3.7836 1.0000 </r> + <r> -3.7835 1.0000 </r> + <r> -3.6866 1.0000 </r> + <r> -3.6866 1.0000 </r> + <r> -3.6811 1.0000 </r> + <r> -3.6578 1.0000 </r> + <r> -3.6578 1.0000 </r> + <r> -3.6492 1.0000 </r> + <r> -3.6399 1.0000 </r> + <r> -3.6377 1.0000 </r> + <r> -3.6377 1.0000 </r> + <r> -3.6032 1.0000 </r> + <r> -3.5616 1.0000 </r> + <r> -3.5616 1.0000 </r> + <r> -3.5470 1.0000 </r> + <r> -3.5396 1.0000 </r> + <r> -3.5263 1.0000 </r> + <r> -3.5263 1.0000 </r> + <r> -3.5023 1.0000 </r> + <r> -3.5023 1.0000 </r> + <r> -3.3576 1.0000 </r> + <r> -3.3576 1.0000 </r> + <r> -3.2955 1.0000 </r> + <r> -3.2955 1.0000 </r> + <r> -3.2373 1.0000 </r> + <r> -3.2348 1.0000 </r> + <r> -3.2288 1.0000 </r> + <r> -3.2288 1.0000 </r> + <r> -3.2277 1.0000 </r> + <r> -3.1910 1.0000 </r> + <r> -3.1910 1.0000 </r> + <r> -3.1866 1.0000 </r> + <r> -3.1558 1.0000 </r> + <r> -3.1558 1.0000 </r> + <r> -3.1518 1.0000 </r> + <r> -3.1111 1.0000 </r> + <r> -3.1071 1.0000 </r> + <r> -3.1071 1.0000 </r> + <r> -3.0966 1.0000 </r> + <r> -3.0782 1.0000 </r> + <r> -3.0782 1.0000 </r> + <r> -3.0646 1.0000 </r> + <r> -3.0646 1.0000 </r> + <r> -3.0353 1.0000 </r> + <r> -3.0028 1.0000 </r> + <r> -3.0027 1.0000 </r> + <r> -2.9938 1.0000 </r> + <r> -2.9783 1.0000 </r> + <r> -2.9783 1.0000 </r> + <r> -2.9712 1.0000 </r> + <r> -2.9687 1.0000 </r> + <r> -2.9613 1.0000 </r> + <r> -2.9613 1.0000 </r> + <r> -2.9454 1.0000 </r> + <r> -2.9454 1.0000 </r> + <r> -2.9398 1.0000 </r> + <r> -2.9398 1.0000 </r> + <r> -2.9390 1.0000 </r> + <r> -2.9338 1.0000 </r> + <r> -2.9317 1.0000 </r> + <r> -2.9316 1.0000 </r> + <r> -2.9316 1.0000 </r> + <r> -2.8745 1.0000 </r> + <r> -2.8745 1.0000 </r> + <r> -2.8204 1.0000 </r> + <r> -2.8204 1.0000 </r> + <r> -2.7454 1.0000 </r> + <r> -2.7433 1.0000 </r> + <r> -2.7433 1.0000 </r> + <r> -2.7215 1.0000 </r> + <r> -2.7215 1.0000 </r> + <r> -2.6897 1.0000 </r> + <r> -2.6897 1.0000 </r> + <r> -2.6729 1.0000 </r> + <r> -2.6718 1.0000 </r> + <r> -2.6651 1.0000 </r> + <r> -2.6546 1.0000 </r> + <r> -2.6546 1.0000 </r> + <r> -2.6039 1.0000 </r> + <r> -2.6031 1.0000 </r> + <r> -2.6031 1.0000 </r> + <r> -2.5894 1.0000 </r> + <r> -2.5894 1.0000 </r> + <r> -2.5878 1.0000 </r> + <r> -2.5625 1.0000 </r> + <r> -2.5625 1.0000 </r> + <r> -2.5346 1.0000 </r> + <r> -2.5345 1.0000 </r> + <r> -2.5338 1.0000 </r> + <r> -2.5295 1.0000 </r> + <r> -2.4535 1.0000 </r> + <r> -2.4535 1.0000 </r> + <r> -2.4334 1.0000 </r> + <r> -2.4098 1.0000 </r> + <r> -2.4098 1.0000 </r> + <r> -2.3676 1.0000 </r> + <r> -2.3676 1.0000 </r> + <r> -2.3312 1.0000 </r> + <r> -2.3245 1.0000 </r> + <r> -2.2757 1.0000 </r> + <r> -2.2757 1.0000 </r> + <r> -2.2720 1.0000 </r> + <r> -2.2720 1.0000 </r> + <r> -2.2682 1.0000 </r> + <r> -2.2602 1.0000 </r> + <r> -2.2599 1.0000 </r> + <r> -2.2554 1.0000 </r> + <r> -2.2554 1.0000 </r> + <r> -2.2509 1.0000 </r> + <r> -2.2509 1.0000 </r> + <r> -2.2011 1.0000 </r> + <r> -2.2011 1.0000 </r> + <r> -2.1926 1.0000 </r> + <r> -2.1799 1.0000 </r> + <r> -2.1799 1.0000 </r> + <r> -2.1520 1.0000 </r> + <r> -2.1520 1.0000 </r> + <r> -2.0998 1.0000 </r> + <r> -2.0998 1.0000 </r> + <r> -2.0669 1.0000 </r> + <r> -2.0578 1.0000 </r> + <r> -2.0570 1.0000 </r> + <r> -2.0570 1.0000 </r> + <r> -2.0234 1.0000 </r> + <r> -2.0234 1.0000 </r> + <r> -2.0193 1.0000 </r> + <r> -2.0130 1.0000 </r> + <r> -2.0130 1.0000 </r> + <r> -1.9945 1.0000 </r> + <r> -1.9945 1.0000 </r> + <r> -1.9628 1.0000 </r> + <r> -1.9519 1.0000 </r> + <r> -1.9519 1.0000 </r> + <r> -1.9469 1.0000 </r> + <r> -1.9369 1.0000 </r> + <r> -1.9368 1.0000 </r> + <r> -1.9362 1.0000 </r> + <r> -1.9346 1.0000 </r> + <r> -1.9346 1.0000 </r> + <r> -1.9182 1.0000 </r> + <r> -1.9104 1.0000 </r> + <r> -1.9104 1.0000 </r> + <r> -1.8815 1.0000 </r> + <r> -1.8815 1.0000 </r> + <r> -1.8656 1.0000 </r> + <r> -1.8481 1.0000 </r> + <r> -1.8261 1.0000 </r> + <r> -1.8249 1.0000 </r> + <r> -1.8248 1.0000 </r> + <r> -1.8213 1.0000 </r> + <r> -1.8213 1.0000 </r> + <r> -1.7874 1.0000 </r> + <r> -1.7874 1.0000 </r> + <r> -1.7648 1.0000 </r> + <r> -1.7623 1.0000 </r> + <r> -1.7569 1.0000 </r> + <r> -1.7569 1.0000 </r> + <r> -1.7513 1.0000 </r> + <r> -1.7507 1.0000 </r> + <r> -1.7506 1.0000 </r> + <r> -1.7261 1.0000 </r> + <r> -1.7261 1.0000 </r> + <r> -1.7118 1.0000 </r> + <r> -1.7118 1.0000 </r> + <r> -1.7045 1.0000 </r> + <r> -1.7015 1.0000 </r> + <r> -1.7015 1.0000 </r> + <r> -1.7008 1.0000 </r> + <r> -1.6904 1.0000 </r> + <r> -1.6789 1.0000 </r> + <r> -1.6788 1.0000 </r> + <r> -1.6528 1.0000 </r> + <r> -1.6528 1.0000 </r> + <r> -1.6508 1.0000 </r> + <r> -1.6443 1.0000 </r> + <r> -1.6422 1.0000 </r> + <r> -1.6138 1.0000 </r> + <r> -1.6138 1.0000 </r> + <r> -1.5779 1.0000 </r> + <r> -1.5779 1.0000 </r> + <r> -1.5486 1.0000 </r> + <r> -1.5486 1.0000 </r> + <r> -1.5376 1.0000 </r> + <r> -1.5263 1.0000 </r> + <r> -1.4289 1.0000 </r> + <r> -1.4119 1.0000 </r> + <r> -1.4118 1.0000 </r> + <r> -1.3898 1.0000 </r> + <r> -1.3897 1.0000 </r> + <r> -1.3897 1.0000 </r> + <r> -1.1173 1.0000 </r> + <r> -0.9688 1.0000 </r> + <r> -0.9687 1.0000 </r> + <r> -0.9365 1.0000 </r> + <r> -0.9125 1.0000 </r> + <r> -0.9125 1.0000 </r> + <r> -0.8637 1.0000 </r> + <r> -0.0870 1.0000 </r> + <r> -0.0869 1.0000 </r> + <r> -0.0227 1.0000 </r> + <r> 0.0786 1.0000 </r> + <r> 0.0786 1.0000 </r> + <r> 0.1716 1.0000 </r> + <r> 0.2020 1.0000 </r> + <r> 0.2021 1.0000 </r> + <r> 0.3025 1.0000 </r> + <r> 0.3026 1.0000 </r> + <r> 0.3703 1.0000 </r> + <r> 0.9409 1.0000 </r> + <r> 1.7472 -0.0001 </r> + <r> 1.7571 -0.0001 </r> + <r> 1.7572 -0.0001 </r> + <r> 1.8341 -0.0000 </r> + <r> 1.8342 -0.0000 </r> + <r> 1.8465 -0.0000 </r> + <r> 1.9669 -0.0000 </r> + <r> 3.6111 -0.0000 </r> + <r> 3.6312 -0.0000 </r> + <r> 3.6312 -0.0000 </r> + <r> 3.7217 -0.0000 </r> + <r> 3.7217 -0.0000 </r> + <r> 3.7690 -0.0000 </r> + <r> 4.5126 0.0000 </r> + <r> 4.5134 0.0000 </r> + <r> 4.5134 0.0000 </r> + <r> 4.5601 0.0000 </r> + <r> 4.6344 0.0000 </r> + <r> 4.6344 0.0000 </r> + <r> 5.1767 0.0000 </r> + <r> 5.2052 0.0000 </r> + <r> 5.2052 0.0000 </r> + <r> 5.2833 0.0000 </r> + <r> 5.3236 0.0000 </r> + <r> 5.3812 0.0000 </r> + <r> 5.3813 0.0000 </r> + <r> 5.5643 0.0000 </r> + <r> 5.5860 0.0000 </r> + <r> 5.5860 0.0000 </r> + <r> 5.6245 0.0000 </r> + <r> 5.6245 0.0000 </r> + <r> 5.6837 0.0000 </r> + <r> 5.7159 0.0000 </r> + <r> 6.1003 0.0000 </r> + <r> 6.1363 0.0000 </r> + <r> 6.1363 0.0000 </r> + <r> 6.1618 0.0000 </r> + <r> 6.1947 0.0000 </r> + <r> 6.7155 0.0000 </r> + <r> 6.7155 0.0000 </r> + <r> 7.2235 0.0000 </r> + <r> 7.2368 0.0000 </r> + <r> 7.2368 0.0000 </r> + <r> 7.2524 0.0000 </r> + <r> 7.2525 0.0000 </r> + <r> 7.3387 0.0000 </r> + <r> 7.4934 0.0000 </r> + <r> 7.4941 0.0000 </r> + <r> 7.4941 0.0000 </r> + <r> 7.5835 0.0000 </r> + <r> 7.5987 0.0000 </r> + <r> 7.5987 0.0000 </r> + <r> 7.6079 0.0000 </r> + <r> 7.6079 0.0000 </r> + <r> 7.6191 0.0000 </r> + <r> 7.6544 0.0000 </r> + <r> 7.6544 0.0000 </r> + <r> 7.6848 0.0000 </r> + <r> 7.8081 0.0000 </r> + <r> 8.0387 0.0000 </r> + <r> 8.1105 0.0000 </r> + <r> 8.1107 0.0000 </r> + <r> 8.1278 0.0000 </r> + <r> 8.1433 0.0000 </r> + <r> 8.1453 0.0000 </r> + <r> 8.1457 0.0000 </r> + <r> 8.4016 0.0000 </r> + <r> 8.4113 0.0000 </r> + <r> 8.4148 0.0000 </r> + <r> 8.4171 0.0000 </r> + <r> 8.4396 0.0000 </r> + <r> 8.4871 0.0000 </r> + </set> + <set comment="kpoint 2"> + <r> -5.1610 1.0000 </r> + <r> -4.4949 1.0000 </r> + <r> -4.4509 1.0000 </r> + <r> -4.3974 1.0000 </r> + <r> -4.3351 1.0000 </r> + <r> -4.2720 1.0000 </r> + <r> -4.2629 1.0000 </r> + <r> -4.1789 1.0000 </r> + <r> -4.1770 1.0000 </r> + <r> -4.1611 1.0000 </r> + <r> -4.1597 1.0000 </r> + <r> -4.1210 1.0000 </r> + <r> -4.1051 1.0000 </r> + <r> -4.1027 1.0000 </r> + <r> -4.0757 1.0000 </r> + <r> -4.0731 1.0000 </r> + <r> -4.0629 1.0000 </r> + <r> -4.0613 1.0000 </r> + <r> -4.0431 1.0000 </r> + <r> -4.0127 1.0000 </r> + <r> -3.9748 1.0000 </r> + <r> -3.9398 1.0000 </r> + <r> -3.9287 1.0000 </r> + <r> -3.9272 1.0000 </r> + <r> -3.9173 1.0000 </r> + <r> -3.9156 1.0000 </r> + <r> -3.9063 1.0000 </r> + <r> -3.9004 1.0000 </r> + <r> -3.8962 1.0000 </r> + <r> -3.8924 1.0000 </r> + <r> -3.8840 1.0000 </r> + <r> -3.8436 1.0000 </r> + <r> -3.8428 1.0000 </r> + <r> -3.8349 1.0000 </r> + <r> -3.7816 1.0000 </r> + <r> -3.7659 1.0000 </r> + <r> -3.7619 1.0000 </r> + <r> -3.7235 1.0000 </r> + <r> -3.7203 1.0000 </r> + <r> -3.7169 1.0000 </r> + <r> -3.7114 1.0000 </r> + <r> -3.7029 1.0000 </r> + <r> -3.6924 1.0000 </r> + <r> -3.6918 1.0000 </r> + <r> -3.6392 1.0000 </r> + <r> -3.6389 1.0000 </r> + <r> -3.6042 1.0000 </r> + <r> -3.5997 1.0000 </r> + <r> -3.5931 1.0000 </r> + <r> -3.5817 1.0000 </r> + <r> -3.5796 1.0000 </r> + <r> -3.5618 1.0000 </r> + <r> -3.5605 1.0000 </r> + <r> -3.5260 1.0000 </r> + <r> -3.5253 1.0000 </r> + <r> -3.4976 1.0000 </r> + <r> -3.4450 1.0000 </r> + <r> -3.4426 1.0000 </r> + <r> -3.3804 1.0000 </r> + <r> -3.3761 1.0000 </r> + <r> -3.3751 1.0000 </r> + <r> -3.3527 1.0000 </r> + <r> -3.3516 1.0000 </r> + <r> -3.3453 1.0000 </r> + <r> -3.3354 1.0000 </r> + <r> -3.3287 1.0000 </r> + <r> -3.3126 1.0000 </r> + <r> -3.3118 1.0000 </r> + <r> -3.2859 1.0000 </r> + <r> -3.2537 1.0000 </r> + <r> -3.2263 1.0000 </r> + <r> -3.2149 1.0000 </r> + <r> -3.2143 1.0000 </r> + <r> -3.1812 1.0000 </r> + <r> -3.1753 1.0000 </r> + <r> -3.1683 1.0000 </r> + <r> -3.1625 1.0000 </r> + <r> -3.1578 1.0000 </r> + <r> -3.1421 1.0000 </r> + <r> -3.1341 1.0000 </r> + <r> -3.0949 1.0000 </r> + <r> -3.0881 1.0000 </r> + <r> -3.0867 1.0000 </r> + <r> -3.0703 1.0000 </r> + <r> -3.0586 1.0000 </r> + <r> -3.0333 1.0000 </r> + <r> -3.0282 1.0000 </r> + <r> -3.0220 1.0000 </r> + <r> -3.0189 1.0000 </r> + <r> -3.0139 1.0000 </r> + <r> -2.9697 1.0000 </r> + <r> -2.9642 1.0000 </r> + <r> -2.9556 1.0000 </r> + <r> -2.9511 1.0000 </r> + <r> -2.9429 1.0000 </r> + <r> -2.9255 1.0000 </r> + <r> -2.9253 1.0000 </r> + <r> -2.9157 1.0000 </r> + <r> -2.9115 1.0000 </r> + <r> -2.9045 1.0000 </r> + <r> -2.8849 1.0000 </r> + <r> -2.8805 1.0000 </r> + <r> -2.8607 1.0000 </r> + <r> -2.8568 1.0000 </r> + <r> -2.8210 1.0000 </r> + <r> -2.8181 1.0000 </r> + <r> -2.8167 1.0000 </r> + <r> -2.8020 1.0000 </r> + <r> -2.7960 1.0000 </r> + <r> -2.7860 1.0000 </r> + <r> -2.7686 1.0000 </r> + <r> -2.7586 1.0000 </r> + <r> -2.7311 1.0000 </r> + <r> -2.7191 1.0000 </r> + <r> -2.7117 1.0000 </r> + <r> -2.6979 1.0000 </r> + <r> -2.6948 1.0000 </r> + <r> -2.6907 1.0000 </r> + <r> -2.6870 1.0000 </r> + <r> -2.6772 1.0000 </r> + <r> -2.6611 1.0000 </r> + <r> -2.6553 1.0000 </r> + <r> -2.6383 1.0000 </r> + <r> -2.6367 1.0000 </r> + <r> -2.6266 1.0000 </r> + <r> -2.6178 1.0000 </r> + <r> -2.6105 1.0000 </r> + <r> -2.5942 1.0000 </r> + <r> -2.5498 1.0000 </r> + <r> -2.5357 1.0000 </r> + <r> -2.5279 1.0000 </r> + <r> -2.5095 1.0000 </r> + <r> -2.5057 1.0000 </r> + <r> -2.4883 1.0000 </r> + <r> -2.4539 1.0000 </r> + <r> -2.4491 1.0000 </r> + <r> -2.4308 1.0000 </r> + <r> -2.4220 1.0000 </r> + <r> -2.4187 1.0000 </r> + <r> -2.4021 1.0000 </r> + <r> -2.3996 1.0000 </r> + <r> -2.3843 1.0000 </r> + <r> -2.3825 1.0000 </r> + <r> -2.3558 1.0000 </r> + <r> -2.3556 1.0000 </r> + <r> -2.3468 1.0000 </r> + <r> -2.3433 1.0000 </r> + <r> -2.3314 1.0000 </r> + <r> -2.3210 1.0000 </r> + <r> -2.3169 1.0000 </r> + <r> -2.3134 1.0000 </r> + <r> -2.2974 1.0000 </r> + <r> -2.2869 1.0000 </r> + <r> -2.2776 1.0000 </r> + <r> -2.2728 1.0000 </r> + <r> -2.2655 1.0000 </r> + <r> -2.2376 1.0000 </r> + <r> -2.2279 1.0000 </r> + <r> -2.2097 1.0000 </r> + <r> -2.2005 1.0000 </r> + <r> -2.1766 1.0000 </r> + <r> -2.1746 1.0000 </r> + <r> -2.1526 1.0000 </r> + <r> -2.1392 1.0000 </r> + <r> -2.1299 1.0000 </r> + <r> -2.1127 1.0000 </r> + <r> -2.1003 1.0000 </r> + <r> -2.0921 1.0000 </r> + <r> -2.0864 1.0000 </r> + <r> -2.0766 1.0000 </r> + <r> -2.0649 1.0000 </r> + <r> -2.0535 1.0000 </r> + <r> -2.0053 1.0000 </r> + <r> -2.0021 1.0000 </r> + <r> -1.9981 1.0000 </r> + <r> -1.9832 1.0000 </r> + <r> -1.9726 1.0000 </r> + <r> -1.9696 1.0000 </r> + <r> -1.9518 1.0000 </r> + <r> -1.9437 1.0000 </r> + <r> -1.9285 1.0000 </r> + <r> -1.9275 1.0000 </r> + <r> -1.9201 1.0000 </r> + <r> -1.9116 1.0000 </r> + <r> -1.9093 1.0000 </r> + <r> -1.8886 1.0000 </r> + <r> -1.8808 1.0000 </r> + <r> -1.8658 1.0000 </r> + <r> -1.8563 1.0000 </r> + <r> -1.8476 1.0000 </r> + <r> -1.8334 1.0000 </r> + <r> -1.8314 1.0000 </r> + <r> -1.8179 1.0000 </r> + <r> -1.8067 1.0000 </r> + <r> -1.7927 1.0000 </r> + <r> -1.7771 1.0000 </r> + <r> -1.7666 1.0000 </r> + <r> -1.7456 1.0000 </r> + <r> -1.7329 1.0000 </r> + <r> -1.7205 1.0000 </r> + <r> -1.7136 1.0000 </r> + <r> -1.7008 1.0000 </r> + <r> -1.6865 1.0000 </r> + <r> -1.6830 1.0000 </r> + <r> -1.6637 1.0000 </r> + <r> -1.6598 1.0000 </r> + <r> -1.6369 1.0000 </r> + <r> -1.6358 1.0000 </r> + <r> -1.6280 1.0000 </r> + <r> -1.6151 1.0000 </r> + <r> -1.6126 1.0000 </r> + <r> -1.6012 1.0000 </r> + <r> -1.5997 1.0000 </r> + <r> -1.5778 1.0000 </r> + <r> -1.5656 1.0000 </r> + <r> -1.5558 1.0000 </r> + <r> -1.5488 1.0000 </r> + <r> -1.5479 1.0000 </r> + <r> -1.5138 1.0000 </r> + <r> -1.5101 1.0000 </r> + <r> -1.5068 1.0000 </r> + <r> -1.4939 1.0000 </r> + <r> -1.4716 1.0000 </r> + <r> -1.4648 1.0000 </r> + <r> -1.4641 1.0000 </r> + <r> -1.4112 1.0000 </r> + <r> -1.3836 1.0000 </r> + <r> -1.2409 1.0000 </r> + <r> -1.1934 1.0000 </r> + <r> -1.0185 1.0000 </r> + <r> -0.5601 1.0000 </r> + <r> -0.3981 1.0000 </r> + <r> -0.2694 1.0000 </r> + <r> -0.1888 1.0000 </r> + <r> -0.0525 1.0000 </r> + <r> -0.0320 1.0000 </r> + <r> 0.0177 1.0000 </r> + <r> 0.0915 1.0000 </r> + <r> 0.1455 1.0000 </r> + <r> 0.1755 1.0000 </r> + <r> 0.5329 1.0000 </r> + <r> 0.6191 1.0000 </r> + <r> 0.6856 1.0000 </r> + <r> 0.7565 1.0000 </r> + <r> 1.2909 1.0222 </r> + <r> 1.3390 1.0341 </r> + <r> 1.3423 1.0329 </r> + <r> 1.4175 0.7783 </r> + <r> 1.5526 -0.0250 </r> + <r> 1.5645 -0.0334 </r> + <r> 2.0835 -0.0000 </r> + <r> 2.0971 -0.0000 </r> + <r> 2.1048 -0.0000 </r> + <r> 2.3575 -0.0000 </r> + <r> 2.4640 -0.0000 </r> + <r> 2.7336 -0.0000 </r> + <r> 2.7348 -0.0000 </r> + <r> 2.9633 -0.0000 </r> + <r> 2.9850 -0.0000 </r> + <r> 3.1943 -0.0000 </r> + <r> 3.2248 -0.0000 </r> + <r> 3.2359 -0.0000 </r> + <r> 3.6327 -0.0000 </r> + <r> 3.6336 -0.0000 </r> + <r> 3.8790 -0.0000 </r> + <r> 3.9176 -0.0000 </r> + <r> 4.6555 0.0000 </r> + <r> 4.6891 0.0000 </r> + <r> 4.7107 0.0000 </r> + <r> 4.7255 0.0000 </r> + <r> 5.0161 0.0000 </r> + <r> 5.0292 0.0000 </r> + <r> 5.0735 0.0000 </r> + <r> 5.0757 0.0000 </r> + <r> 5.1128 0.0000 </r> + <r> 5.4102 0.0000 </r> + <r> 5.7189 0.0000 </r> + <r> 5.7427 0.0000 </r> + <r> 5.7996 0.0000 </r> + <r> 5.9669 0.0000 </r> + <r> 5.9673 0.0000 </r> + <r> 5.9774 0.0000 </r> + <r> 6.1121 0.0000 </r> + <r> 6.2952 0.0000 </r> + <r> 6.3976 0.0000 </r> + <r> 6.5166 0.0000 </r> + <r> 6.5286 0.0000 </r> + <r> 6.5581 0.0000 </r> + <r> 6.6101 0.0000 </r> + <r> 6.8029 0.0000 </r> + <r> 6.8317 0.0000 </r> + <r> 6.8661 0.0000 </r> + <r> 6.9571 0.0000 </r> + <r> 6.9903 0.0000 </r> + <r> 7.1012 0.0000 </r> + <r> 7.1487 0.0000 </r> + <r> 7.1685 0.0000 </r> + <r> 7.2778 0.0000 </r> + <r> 7.4138 0.0000 </r> + <r> 7.4268 0.0000 </r> + <r> 7.6430 0.0000 </r> + <r> 7.6469 0.0000 </r> + <r> 7.7710 0.0000 </r> + <r> 7.9494 0.0000 </r> + <r> 7.9530 0.0000 </r> + <r> 7.9532 0.0000 </r> + <r> 7.9927 0.0000 </r> + <r> 8.0075 0.0000 </r> + <r> 8.0528 0.0000 </r> + <r> 8.2901 0.0000 </r> + <r> 8.3426 0.0000 </r> + <r> 8.3549 0.0000 </r> + <r> 8.4551 0.0000 </r> + <r> 8.4739 0.0000 </r> + <r> 8.5135 0.0000 </r> + <r> 8.6147 0.0000 </r> + <r> 8.7431 0.0000 </r> + <r> 9.0457 0.0000 </r> + <r> 9.1233 0.0000 </r> + <r> 9.1716 0.0000 </r> + </set> + <set comment="kpoint 3"> + <r> -4.6243 1.0000 </r> + <r> -4.6239 1.0000 </r> + <r> -4.6105 1.0000 </r> + <r> -4.2888 1.0000 </r> + <r> -4.2871 1.0000 </r> + <r> -4.2861 1.0000 </r> + <r> -4.2385 1.0000 </r> + <r> -4.2383 1.0000 </r> + <r> -4.2374 1.0000 </r> + <r> -4.1860 1.0000 </r> + <r> -4.1856 1.0000 </r> + <r> -4.1839 1.0000 </r> + <r> -4.0645 1.0000 </r> + <r> -4.0638 1.0000 </r> + <r> -4.0306 1.0000 </r> + <r> -3.9874 1.0000 </r> + <r> -3.9851 1.0000 </r> + <r> -3.9792 1.0000 </r> + <r> -3.9718 1.0000 </r> + <r> -3.9688 1.0000 </r> + <r> -3.9673 1.0000 </r> + <r> -3.9642 1.0000 </r> + <r> -3.9632 1.0000 </r> + <r> -3.9558 1.0000 </r> + <r> -3.9391 1.0000 </r> + <r> -3.9383 1.0000 </r> + <r> -3.9330 1.0000 </r> + <r> -3.8548 1.0000 </r> + <r> -3.8494 1.0000 </r> + <r> -3.8451 1.0000 </r> + <r> -3.8141 1.0000 </r> + <r> -3.8095 1.0000 </r> + <r> -3.8084 1.0000 </r> + <r> -3.7681 1.0000 </r> + <r> -3.7647 1.0000 </r> + <r> -3.7642 1.0000 </r> + <r> -3.7605 1.0000 </r> + <r> -3.7545 1.0000 </r> + <r> -3.7478 1.0000 </r> + <r> -3.7161 1.0000 </r> + <r> -3.6616 1.0000 </r> + <r> -3.6517 1.0000 </r> + <r> -3.6265 1.0000 </r> + <r> -3.6232 1.0000 </r> + <r> -3.6175 1.0000 </r> + <r> -3.5921 1.0000 </r> + <r> -3.5851 1.0000 </r> + <r> -3.5771 1.0000 </r> + <r> -3.5649 1.0000 </r> + <r> -3.5636 1.0000 </r> + <r> -3.5478 1.0000 </r> + <r> -3.5448 1.0000 </r> + <r> -3.5400 1.0000 </r> + <r> -3.5261 1.0000 </r> + <r> -3.4281 1.0000 </r> + <r> -3.4234 1.0000 </r> + <r> -3.4088 1.0000 </r> + <r> -3.4025 1.0000 </r> + <r> -3.3971 1.0000 </r> + <r> -3.3924 1.0000 </r> + <r> -3.3921 1.0000 </r> + <r> -3.3898 1.0000 </r> + <r> -3.3775 1.0000 </r> + <r> -3.3747 1.0000 </r> + <r> -3.3669 1.0000 </r> + <r> -3.3658 1.0000 </r> + <r> -3.3380 1.0000 </r> + <r> -3.3359 1.0000 </r> + <r> -3.3353 1.0000 </r> + <r> -3.2750 1.0000 </r> + <r> -3.2715 1.0000 </r> + <r> -3.2661 1.0000 </r> + <r> -3.2614 1.0000 </r> + <r> -3.2590 1.0000 </r> + <r> -3.2337 1.0000 </r> + <r> -3.2044 1.0000 </r> + <r> -3.1946 1.0000 </r> + <r> -3.1842 1.0000 </r> + <r> -3.1768 1.0000 </r> + <r> -3.1636 1.0000 </r> + <r> -3.1516 1.0000 </r> + <r> -3.1288 1.0000 </r> + <r> -3.1063 1.0000 </r> + <r> -3.1033 1.0000 </r> + <r> -3.0781 1.0000 </r> + <r> -3.0626 1.0000 </r> + <r> -3.0623 1.0000 </r> + <r> -3.0573 1.0000 </r> + <r> -3.0521 1.0000 </r> + <r> -3.0427 1.0000 </r> + <r> -3.0127 1.0000 </r> + <r> -2.9943 1.0000 </r> + <r> -2.9912 1.0000 </r> + <r> -2.9645 1.0000 </r> + <r> -2.9619 1.0000 </r> + <r> -2.9515 1.0000 </r> + <r> -2.9484 1.0000 </r> + <r> -2.9283 1.0000 </r> + <r> -2.9136 1.0000 </r> + <r> -2.8996 1.0000 </r> + <r> -2.8991 1.0000 </r> + <r> -2.8939 1.0000 </r> + <r> -2.8719 1.0000 </r> + <r> -2.8709 1.0000 </r> + <r> -2.8611 1.0000 </r> + <r> -2.8523 1.0000 </r> + <r> -2.8505 1.0000 </r> + <r> -2.8396 1.0000 </r> + <r> -2.7973 1.0000 </r> + <r> -2.7938 1.0000 </r> + <r> -2.7920 1.0000 </r> + <r> -2.7904 1.0000 </r> + <r> -2.7885 1.0000 </r> + <r> -2.7777 1.0000 </r> + <r> -2.7462 1.0000 </r> + <r> -2.7286 1.0000 </r> + <r> -2.7274 1.0000 </r> + <r> -2.7166 1.0000 </r> + <r> -2.7080 1.0000 </r> + <r> -2.7068 1.0000 </r> + <r> -2.6667 1.0000 </r> + <r> -2.6652 1.0000 </r> + <r> -2.6596 1.0000 </r> + <r> -2.6589 1.0000 </r> + <r> -2.6587 1.0000 </r> + <r> -2.6541 1.0000 </r> + <r> -2.6267 1.0000 </r> + <r> -2.6170 1.0000 </r> + <r> -2.5880 1.0000 </r> + <r> -2.5738 1.0000 </r> + <r> -2.5582 1.0000 </r> + <r> -2.5561 1.0000 </r> + <r> -2.5342 1.0000 </r> + <r> -2.5225 1.0000 </r> + <r> -2.5184 1.0000 </r> + <r> -2.5097 1.0000 </r> + <r> -2.5005 1.0000 </r> + <r> -2.4937 1.0000 </r> + <r> -2.4708 1.0000 </r> + <r> -2.4630 1.0000 </r> + <r> -2.4541 1.0000 </r> + <r> -2.4539 1.0000 </r> + <r> -2.4473 1.0000 </r> + <r> -2.4362 1.0000 </r> + <r> -2.4333 1.0000 </r> + <r> -2.4222 1.0000 </r> + <r> -2.4113 1.0000 </r> + <r> -2.3923 1.0000 </r> + <r> -2.3870 1.0000 </r> + <r> -2.3673 1.0000 </r> + <r> -2.3629 1.0000 </r> + <r> -2.3310 1.0000 </r> + <r> -2.3143 1.0000 </r> + <r> -2.3111 1.0000 </r> + <r> -2.3003 1.0000 </r> + <r> -2.2982 1.0000 </r> + <r> -2.2769 1.0000 </r> + <r> -2.2753 1.0000 </r> + <r> -2.2690 1.0000 </r> + <r> -2.2503 1.0000 </r> + <r> -2.2259 1.0000 </r> + <r> -2.2102 1.0000 </r> + <r> -2.2004 1.0000 </r> + <r> -2.1791 1.0000 </r> + <r> -2.1629 1.0000 </r> + <r> -2.1137 1.0000 </r> + <r> -2.1096 1.0000 </r> + <r> -2.1041 1.0000 </r> + <r> -2.0930 1.0000 </r> + <r> -2.0600 1.0000 </r> + <r> -2.0557 1.0000 </r> + <r> -2.0398 1.0000 </r> + <r> -2.0386 1.0000 </r> + <r> -2.0339 1.0000 </r> + <r> -2.0155 1.0000 </r> + <r> -2.0013 1.0000 </r> + <r> -2.0010 1.0000 </r> + <r> -1.9965 1.0000 </r> + <r> -1.9914 1.0000 </r> + <r> -1.9560 1.0000 </r> + <r> -1.9497 1.0000 </r> + <r> -1.9326 1.0000 </r> + <r> -1.9280 1.0000 </r> + <r> -1.9077 1.0000 </r> + <r> -1.8998 1.0000 </r> + <r> -1.8813 1.0000 </r> + <r> -1.8779 1.0000 </r> + <r> -1.8548 1.0000 </r> + <r> -1.8349 1.0000 </r> + <r> -1.8218 1.0000 </r> + <r> -1.8207 1.0000 </r> + <r> -1.7946 1.0000 </r> + <r> -1.7830 1.0000 </r> + <r> -1.7653 1.0000 </r> + <r> -1.7611 1.0000 </r> + <r> -1.7607 1.0000 </r> + <r> -1.7545 1.0000 </r> + <r> -1.7510 1.0000 </r> + <r> -1.7392 1.0000 </r> + <r> -1.7253 1.0000 </r> + <r> -1.7100 1.0000 </r> + <r> -1.6872 1.0000 </r> + <r> -1.6776 1.0000 </r> + <r> -1.6550 1.0000 </r> + <r> -1.6532 1.0000 </r> + <r> -1.6241 1.0000 </r> + <r> -1.6217 1.0000 </r> + <r> -1.6200 1.0000 </r> + <r> -1.6004 1.0000 </r> + <r> -1.5920 1.0000 </r> + <r> -1.5917 1.0000 </r> + <r> -1.5832 1.0000 </r> + <r> -1.5802 1.0000 </r> + <r> -1.5750 1.0000 </r> + <r> -1.5533 1.0000 </r> + <r> -1.5487 1.0000 </r> + <r> -1.5435 1.0000 </r> + <r> -1.5417 1.0000 </r> + <r> -1.5403 1.0000 </r> + <r> -1.5135 1.0000 </r> + <r> -1.4997 1.0000 </r> + <r> -1.4915 1.0000 </r> + <r> -1.4766 1.0000 </r> + <r> -1.4529 1.0000 </r> + <r> -1.4391 1.0000 </r> + <r> -1.4270 1.0000 </r> + <r> -1.1944 1.0000 </r> + <r> -1.1749 1.0000 </r> + <r> -1.1720 1.0000 </r> + <r> -0.3307 1.0000 </r> + <r> -0.3303 1.0000 </r> + <r> -0.2129 1.0000 </r> + <r> -0.0683 1.0000 </r> + <r> -0.0469 1.0000 </r> + <r> 0.0240 1.0000 </r> + <r> 0.0267 1.0000 </r> + <r> 0.0642 1.0000 </r> + <r> 0.2063 1.0000 </r> + <r> 0.2543 1.0000 </r> + <r> 0.4307 1.0000 </r> + <r> 0.5472 1.0000 </r> + <r> 0.6131 1.0000 </r> + <r> 0.6310 1.0000 </r> + <r> 1.4532 0.4958 </r> + <r> 1.4614 0.4264 </r> + <r> 1.4990 0.1507 </r> + <r> 2.0423 -0.0000 </r> + <r> 2.0499 -0.0000 </r> + <r> 2.0812 -0.0000 </r> + <r> 2.0839 -0.0000 </r> + <r> 2.1025 -0.0000 </r> + <r> 2.1098 -0.0000 </r> + <r> 2.4988 -0.0000 </r> + <r> 2.5155 -0.0000 </r> + <r> 2.5415 -0.0000 </r> + <r> 2.8752 -0.0000 </r> + <r> 2.8778 -0.0000 </r> + <r> 2.8794 -0.0000 </r> + <r> 2.9017 -0.0000 </r> + <r> 2.9077 -0.0000 </r> + <r> 2.9327 -0.0000 </r> + <r> 3.3141 -0.0000 </r> + <r> 3.3299 -0.0000 </r> + <r> 3.3614 -0.0000 </r> + <r> 3.4336 -0.0000 </r> + <r> 3.4441 -0.0000 </r> + <r> 3.4918 -0.0000 </r> + <r> 3.6193 -0.0000 </r> + <r> 3.6206 -0.0000 </r> + <r> 3.7048 -0.0000 </r> + <r> 4.6329 0.0000 </r> + <r> 4.6387 0.0000 </r> + <r> 4.6544 0.0000 </r> + <r> 5.0007 0.0000 </r> + <r> 5.0168 0.0000 </r> + <r> 5.0207 0.0000 </r> + <r> 5.7522 0.0000 </r> + <r> 5.7844 0.0000 </r> + <r> 5.8101 0.0000 </r> + <r> 5.8527 0.0000 </r> + <r> 5.8561 0.0000 </r> + <r> 5.9220 0.0000 </r> + <r> 6.2577 0.0000 </r> + <r> 6.2642 0.0000 </r> + <r> 6.3772 0.0000 </r> + <r> 6.5177 0.0000 </r> + <r> 6.5182 0.0000 </r> + <r> 6.5526 0.0000 </r> + <r> 6.5906 0.0000 </r> + <r> 6.6125 0.0000 </r> + <r> 6.6517 0.0000 </r> + <r> 6.8831 0.0000 </r> + <r> 6.8863 0.0000 </r> + <r> 6.9435 0.0000 </r> + <r> 7.2322 0.0000 </r> + <r> 7.2628 0.0000 </r> + <r> 7.2959 0.0000 </r> + <r> 8.0306 0.0000 </r> + <r> 8.0438 0.0000 </r> + <r> 8.0591 0.0000 </r> + <r> 8.1148 0.0000 </r> + <r> 8.1747 0.0000 </r> + <r> 8.1755 0.0000 </r> + <r> 8.1902 0.0000 </r> + <r> 8.2020 0.0000 </r> + <r> 8.2068 0.0000 </r> + <r> 8.2280 0.0000 </r> + <r> 8.2294 0.0000 </r> + <r> 8.2430 0.0000 </r> + <r> 8.3239 0.0000 </r> + <r> 8.3248 0.0000 </r> + <r> 8.3675 0.0000 </r> + <r> 8.7720 0.0000 </r> + <r> 8.7732 0.0000 </r> + <r> 8.8165 0.0000 </r> + <r> 8.8313 0.0000 </r> + <r> 8.8568 0.0000 </r> + <r> 8.9165 0.0000 </r> + <r> 8.9505 0.0000 </r> + <r> 8.9593 0.0000 </r> + </set> + </set> + </set> + </array> + </eigenvalues> + <separator name="orbital magnetization" > + <v name="MAGDIPOLOUT"> 0.00000000 0.00000000 0.00000000</v> + </separator> + <dos> + <i name="efermi"> 1.45271927 </i> + <total> + <array> + <dimension dim="1">gridpoints</dimension> + <dimension dim="2">spin</dimension> + <field>energy</field> + <field>total</field> + <field>integrated</field> + <set> + <set comment="spin 1"> + <r> -6.4681 0.0000 0.0000 </r> + <r> -6.4126 0.0000 0.0000 </r> + <r> -6.3571 0.0000 0.0000 </r> + <r> -6.3017 -0.0000 -0.0000 </r> + <r> -6.2462 -0.0000 -0.0000 </r> + <r> -6.1908 -0.0000 -0.0000 </r> + <r> -6.1353 -0.0000 -0.0000 </r> + <r> -6.0798 -0.0000 -0.0000 </r> + <r> -6.0244 -0.0000 -0.0000 </r> + <r> -5.9689 -0.0000 -0.0000 </r> + <r> -5.9134 -0.0000 -0.0000 </r> + <r> -5.8580 -0.0000 -0.0000 </r> + <r> -5.8025 -0.0000 -0.0000 </r> + <r> -5.7470 -0.0006 -0.0000 </r> + <r> -5.6916 -0.0064 -0.0004 </r> + <r> -5.6361 -0.0319 -0.0022 </r> + <r> -5.5806 -0.0287 -0.0037 </r> + <r> -5.5252 0.2548 0.0104 </r> + <r> -5.4697 0.7862 0.0540 </r> + <r> -5.4142 0.7983 0.0983 </r> + <r> -5.3588 0.1929 0.1090 </r> + <r> -5.3033 -0.2911 0.0928 </r> + <r> -5.2478 0.2708 0.1079 </r> + <r> -5.1924 3.0449 0.2767 </r> + <r> -5.1369 5.3966 0.5761 </r> + <r> -5.0814 3.5030 0.7704 </r> + <r> -5.0260 0.5326 0.7999 </r> + <r> -4.9705 -0.2915 0.7837 </r> + <r> -4.9150 -0.1593 0.7749 </r> + <r> -4.8596 0.0531 0.7778 </r> + <r> -4.8041 0.4497 0.8028 </r> + <r> -4.7486 0.6279 0.8376 </r> + <r> -4.6932 1.1691 0.9025 </r> + <r> -4.6377 3.4578 1.0943 </r> + <r> -4.5822 5.0944 1.3768 </r> + <r> -4.5268 6.1823 1.7197 </r> + <r> -4.4713 10.1681 2.2837 </r> + <r> -4.4159 12.5193 2.9781 </r> + <r> -4.3604 12.1621 3.6527 </r> + <r> -4.3049 18.0769 4.6553 </r> + <r> -4.2495 31.4135 6.3977 </r> + <r> -4.1940 43.0611 8.7861 </r> + <r> -4.1385 50.0939 11.5646 </r> + <r> -4.0831 55.4277 14.6389 </r> + <r> -4.0276 58.1242 17.8628 </r> + <r> -3.9721 64.2211 21.4249 </r> + <r> -3.9167 77.6945 25.7343 </r> + <r> -3.8612 77.9421 30.0574 </r> + <r> -3.8057 66.7285 33.7585 </r> + <r> -3.7503 65.1002 37.3693 </r> + <r> -3.6948 68.4348 41.1651 </r> + <r> -3.6393 70.1226 45.0545 </r> + <r> -3.5839 76.1849 49.2802 </r> + <r> -3.5284 70.4636 53.1885 </r> + <r> -3.4729 47.3778 55.8163 </r> + <r> -3.4175 43.7717 58.2441 </r> + <r> -3.3620 67.4064 61.9829 </r> + <r> -3.3065 77.1740 66.2634 </r> + <r> -3.2511 67.1283 69.9867 </r> + <r> -3.1956 68.1556 73.7670 </r> + <r> -3.1401 76.7402 78.0234 </r> + <r> -3.0847 78.6384 82.3852 </r> + <r> -3.0292 80.9913 86.8774 </r> + <r> -2.9737 90.2466 91.8830 </r> + <r> -2.9183 100.0288 97.4312 </r> + <r> -2.8628 94.9520 102.6977 </r> + <r> -2.8073 82.4346 107.2700 </r> + <r> -2.7519 80.8481 111.7543 </r> + <r> -2.6964 92.3088 116.8743 </r> + <r> -2.6409 98.1017 122.3156 </r> + <r> -2.5855 83.2535 126.9333 </r> + <r> -2.5300 68.2515 130.7189 </r> + <r> -2.4746 69.7927 134.5900 </r> + <r> -2.4191 81.2233 139.0951 </r> + <r> -2.3636 93.4060 144.2759 </r> + <r> -2.3082 99.7828 149.8104 </r> + <r> -2.2527 93.2296 154.9815 </r> + <r> -2.1972 76.9449 159.2493 </r> + <r> -2.1418 68.4902 163.0481 </r> + <r> -2.0863 71.8345 167.0325 </r> + <r> -2.0308 78.1133 171.3651 </r> + <r> -1.9754 88.3993 176.2682 </r> + <r> -1.9199 98.6492 181.7398 </r> + <r> -1.8644 96.8860 187.1137 </r> + <r> -1.8090 89.2977 192.0666 </r> + <r> -1.7535 87.2852 196.9080 </r> + <r> -1.6980 90.8280 201.9458 </r> + <r> -1.6426 96.9499 207.3232 </r> + <r> -1.5871 101.6265 212.9600 </r> + <r> -1.5316 95.9218 218.2803 </r> + <r> -1.4762 76.8015 222.5402 </r> + <r> -1.4207 50.3437 225.3325 </r> + <r> -1.3652 24.5848 226.6962 </r> + <r> -1.3098 7.3622 227.1045 </r> + <r> -1.2543 5.4600 227.4073 </r> + <r> -1.1988 12.3858 228.0943 </r> + <r> -1.1434 12.5752 228.7918 </r> + <r> -1.0879 6.2947 229.1410 </r> + <r> -1.0324 4.7934 229.4068 </r> + <r> -0.9770 7.0157 229.7960 </r> + <r> -0.9215 6.5233 230.1578 </r> + <r> -0.8660 3.8816 230.3731 </r> + <r> -0.8106 1.3951 230.4505 </r> + <r> -0.7551 -0.0044 230.4502 </r> + <r> -0.6997 -0.4195 230.4269 </r> + <r> -0.6442 0.3118 230.4442 </r> + <r> -0.5887 3.0961 230.6160 </r> + <r> -0.5333 5.0749 230.8975 </r> + <r> -0.4778 3.6221 231.0984 </r> + <r> -0.4223 3.7626 231.3071 </r> + <r> -0.3669 6.7667 231.6824 </r> + <r> -0.3114 8.6499 232.1622 </r> + <r> -0.2559 9.6290 232.6962 </r> + <r> -0.2005 9.5151 233.2240 </r> + <r> -0.1450 7.5356 233.6420 </r> + <r> -0.0895 9.6583 234.1777 </r> + <r> -0.0341 17.8942 235.1702 </r> + <r> 0.0214 21.7713 236.3777 </r> + <r> 0.0769 19.2105 237.4433 </r> + <r> 0.1323 17.5795 238.4183 </r> + <r> 0.1878 16.8641 239.3537 </r> + <r> 0.2433 12.0995 240.0248 </r> + <r> 0.2987 5.7491 240.3437 </r> + <r> 0.3542 2.5221 240.4836 </r> + <r> 0.4097 1.8615 240.5868 </r> + <r> 0.4651 2.7324 240.7384 </r> + <r> 0.5206 5.9787 241.0700 </r> + <r> 0.5761 10.5174 241.6533 </r> + <r> 0.6315 13.3274 242.3926 </r> + <r> 0.6870 12.9545 243.1111 </r> + <r> 0.7425 10.2552 243.6799 </r> + <r> 0.7979 6.2656 244.0274 </r> + <r> 0.8534 2.0384 244.1405 </r> + <r> 0.9089 0.3240 244.1584 </r> + <r> 0.9643 0.6105 244.1923 </r> + <r> 1.0198 0.5152 244.2209 </r> + <r> 1.0752 0.0219 244.2221 </r> + <r> 1.1307 -0.3925 244.2003 </r> + <r> 1.1862 -0.6058 244.1667 </r> + <r> 1.2416 1.8015 244.2667 </r> + <r> 1.2971 9.2147 244.7778 </r> + <r> 1.3526 15.7618 245.6520 </r> + <r> 1.4080 14.9270 246.4799 </r> + <r> 1.4635 11.4663 247.1159 </r> + <r> 1.5190 11.3585 247.7459 </r> + <r> 1.5744 12.2012 248.4227 </r> + <r> 1.6299 7.6079 248.8446 </r> + <r> 1.6854 1.8330 248.9463 </r> + <r> 1.7408 1.5207 249.0307 </r> + <r> 1.7963 3.4735 249.2233 </r> + <r> 1.8518 3.5641 249.4210 </r> + <r> 1.9072 1.5918 249.5093 </r> + <r> 1.9627 0.2998 249.5259 </r> + <r> 2.0182 5.7931 249.8472 </r> + <r> 2.0736 19.6542 250.9374 </r> + <r> 2.1291 25.0642 252.3276 </r> + <r> 2.1846 12.5474 253.0235 </r> + <r> 2.2400 0.7170 253.0633 </r> + <r> 2.2955 -0.1321 253.0560 </r> + <r> 2.3510 3.7400 253.2634 </r> + <r> 2.4064 6.4118 253.6190 </r> + <r> 2.4619 8.3207 254.0806 </r> + <r> 2.5174 9.2760 254.5951 </r> + <r> 2.5728 5.7264 254.9127 </r> + <r> 2.6283 1.3859 254.9895 </r> + <r> 2.6838 3.3980 255.1780 </r> + <r> 2.7392 9.2415 255.6906 </r> + <r> 2.7947 9.0134 256.1905 </r> + <r> 2.8502 6.8095 256.5682 </r> + <r> 2.9056 11.3619 257.1984 </r> + <r> 2.9611 16.0371 258.0879 </r> + <r> 3.0165 12.4723 258.7797 </r> + <r> 3.0720 3.8187 258.9915 </r> + <r> 3.1275 0.7428 259.0327 </r> + <r> 3.1829 7.6165 259.4552 </r> + <r> 3.2384 15.3233 260.3051 </r> + <r> 3.2939 13.3509 261.0456 </r> + <r> 3.3493 7.4707 261.4600 </r> + <r> 3.4048 5.1678 261.7466 </r> + <r> 3.4603 4.6547 262.0048 </r> + <r> 3.5157 3.4140 262.1942 </r> + <r> 3.5712 6.0252 262.5284 </r> + <r> 3.6267 14.9051 263.3551 </r> + <r> 3.6821 17.1886 264.3085 </r> + <r> 3.7376 9.1682 264.8170 </r> + <r> 3.7931 2.9251 264.9792 </r> + <r> 3.8485 4.3620 265.2212 </r> + <r> 3.9040 9.2925 265.7366 </r> + <r> 3.9595 8.5533 266.2110 </r> + <r> 4.0149 2.8742 266.3704 </r> + <r> 4.0704 -0.2256 266.3579 </r> + <r> 4.1259 -0.3539 266.3383 </r> + <r> 4.1813 -0.0806 266.3338 </r> + <r> 4.2368 -0.0099 266.3332 </r> + <r> 4.2923 -0.0226 266.3320 </r> + <r> 4.3477 -0.1133 266.3257 </r> + <r> 4.4032 -0.1577 266.3170 </r> + <r> 4.4587 0.4975 266.3445 </r> + <r> 4.5141 1.8611 266.4478 </r> + <r> 4.5696 4.0539 266.6726 </r> + <r> 4.6251 11.4844 267.3096 </r> + <r> 4.6805 22.1913 268.5405 </r> + <r> 4.7360 22.3002 269.7774 </r> + <r> 4.7914 10.3130 270.3494 </r> + <r> 4.8469 0.3409 270.3683 </r> + <r> 4.9024 -1.9257 270.2615 </r> + <r> 4.9578 2.9678 270.4261 </r> + <r> 5.0133 15.9337 271.3099 </r> + <r> 5.0688 26.1198 272.7586 </r> + <r> 5.1242 21.5595 273.9544 </r> + <r> 5.1797 9.8121 274.4987 </r> + <r> 5.2352 2.9210 274.6607 </r> + <r> 5.2906 1.6253 274.7508 </r> + <r> 5.3461 3.6006 274.9505 </r> + <r> 5.4016 6.7820 275.3267 </r> + <r> 5.4570 6.1501 275.6678 </r> + <r> 5.5125 2.5360 275.8085 </r> + <r> 5.5680 1.8718 275.9123 </r> + <r> 5.6234 3.6010 276.1120 </r> + <r> 5.6789 7.3916 276.5220 </r> + <r> 5.7344 14.9886 277.3534 </r> + <r> 5.7898 19.1720 278.4168 </r> + <r> 5.8453 14.6900 279.2315 </r> + <r> 5.9008 10.5713 279.8179 </r> + <r> 5.9562 14.5823 280.6267 </r> + <r> 6.0117 16.0100 281.5147 </r> + <r> 6.0672 10.0668 282.0731 </r> + <r> 6.1226 7.7709 282.5041 </r> + <r> 6.1781 7.3772 282.9133 </r> + <r> 6.2336 6.4344 283.2702 </r> + <r> 6.2890 8.2939 283.7302 </r> + <r> 6.3445 9.3629 284.2495 </r> + <r> 6.4000 7.9030 284.6879 </r> + <r> 6.4554 7.8955 285.1258 </r> + <r> 6.5109 15.5696 285.9894 </r> + <r> 6.5663 24.3571 287.3404 </r> + <r> 6.6218 21.0190 288.5062 </r> + <r> 6.6773 10.1573 289.0696 </r> + <r> 6.7327 3.9231 289.2872 </r> + <r> 6.7882 7.4887 289.7025 </r> + <r> 6.8437 15.4077 290.5571 </r> + <r> 6.8991 17.7930 291.5440 </r> + <r> 6.9546 15.2328 292.3889 </r> + <r> 7.0101 11.4419 293.0236 </r> + <r> 7.0655 8.1014 293.4729 </r> + <r> 7.1210 10.6419 294.0632 </r> + <r> 7.1765 15.2827 294.9108 </r> + <r> 7.2319 16.5118 295.8267 </r> + <r> 7.2874 15.0803 296.6631 </r> + <r> 7.3429 10.7984 297.2620 </r> + <r> 7.3983 9.6204 297.7956 </r> + <r> 7.4538 11.0750 298.4099 </r> + <r> 7.5093 7.6388 298.8336 </r> + <r> 7.5647 6.0992 299.1719 </r> + <r> 7.6202 12.9642 299.8910 </r> + <r> 7.6757 16.9643 300.8319 </r> + <r> 7.7311 11.6181 301.4763 </r> + <r> 7.7866 6.1203 301.8158 </r> + <r> 7.8421 3.0074 301.9826 </r> + <r> 7.8975 5.8181 302.3053 </r> + <r> 7.9530 18.8606 303.3514 </r> + <r> 8.0085 28.8935 304.9540 </r> + <r> 8.0639 25.3974 306.3627 </r> + <r> 8.1194 17.2579 307.3199 </r> + <r> 8.1749 14.7876 308.1401 </r> + <r> 8.2303 15.9132 309.0228 </r> + <r> 8.2858 17.3863 309.9871 </r> + <r> 8.3413 20.3104 311.1136 </r> + <r> 8.3967 20.9533 312.2758 </r> + <r> 8.4522 19.5685 313.3612 </r> + <r> 8.5076 17.1780 314.3140 </r> + <r> 8.5631 11.2451 314.9377 </r> + <r> 8.6186 6.2602 315.2849 </r> + <r> 8.6740 4.5054 315.5348 </r> + <r> 8.7295 6.4144 315.8906 </r> + <r> 8.7850 10.3278 316.4635 </r> + <r> 8.8404 10.4121 317.0410 </r> + <r> 8.8959 7.2062 317.4407 </r> + <r> 8.9514 5.0545 317.7210 </r> + <r> 9.0068 5.9119 318.0489 </r> + <r> 9.0623 9.4976 318.5757 </r> + <r> 9.1178 12.1189 319.2479 </r> + <r> 9.1732 9.7303 319.7876 </r> + <r> 9.2287 4.1100 320.0156 </r> + <r> 9.2842 0.2981 320.0321 </r> + <r> 9.3396 -0.4094 320.0094 </r> + <r> 9.3951 -0.1472 320.0012 </r> + <r> 9.4506 -0.0205 320.0001 </r> + <r> 9.5060 -0.0014 320.0000 </r> + <r> 9.5615 -0.0000 320.0000 </r> + <r> 9.6170 -0.0000 320.0000 </r> + <r> 9.6724 -0.0000 320.0000 </r> + <r> 9.7279 -0.0000 320.0000 </r> + <r> 9.7834 -0.0000 320.0000 </r> + <r> 9.8388 0.0000 320.0000 </r> + <r> 9.8943 0.0000 320.0000 </r> + <r> 9.9498 0.0000 320.0000 </r> + <r> 10.0052 0.0000 320.0000 </r> + <r> 10.0607 0.0000 320.0000 </r> + <r> 10.1162 0.0000 320.0000 </r> + <r> 10.1716 0.0000 320.0000 </r> + </set> + <set comment="spin 2"> + <r> -6.4681 0.0000 0.0000 </r> + <r> -6.4126 0.0000 0.0000 </r> + <r> -6.3571 0.0000 0.0000 </r> + <r> -6.3017 -0.0000 -0.0000 </r> + <r> -6.2462 -0.0000 -0.0000 </r> + <r> -6.1908 -0.0000 -0.0000 </r> + <r> -6.1353 -0.0000 -0.0000 </r> + <r> -6.0798 -0.0000 -0.0000 </r> + <r> -6.0244 -0.0000 -0.0000 </r> + <r> -5.9689 -0.0000 -0.0000 </r> + <r> -5.9134 -0.0000 -0.0000 </r> + <r> -5.8580 -0.0000 -0.0000 </r> + <r> -5.8025 -0.0000 -0.0000 </r> + <r> -5.7470 -0.0006 -0.0000 </r> + <r> -5.6916 -0.0064 -0.0004 </r> + <r> -5.6361 -0.0319 -0.0022 </r> + <r> -5.5806 -0.0287 -0.0037 </r> + <r> -5.5252 0.2548 0.0104 </r> + <r> -5.4697 0.7862 0.0540 </r> + <r> -5.4142 0.7984 0.0983 </r> + <r> -5.3588 0.1930 0.1090 </r> + <r> -5.3033 -0.2910 0.0928 </r> + <r> -5.2478 0.2706 0.1078 </r> + <r> -5.1924 3.0445 0.2767 </r> + <r> -5.1369 5.3965 0.5760 </r> + <r> -5.0814 3.5035 0.7704 </r> + <r> -5.0260 0.5329 0.7999 </r> + <r> -4.9705 -0.2915 0.7837 </r> + <r> -4.9150 -0.1594 0.7749 </r> + <r> -4.8596 0.0530 0.7778 </r> + <r> -4.8041 0.4496 0.8028 </r> + <r> -4.7486 0.6279 0.8376 </r> + <r> -4.6932 1.1689 0.9024 </r> + <r> -4.6377 3.4575 1.0942 </r> + <r> -4.5822 5.0943 1.3768 </r> + <r> -4.5268 6.1821 1.7197 </r> + <r> -4.4713 10.1678 2.2836 </r> + <r> -4.4159 12.5198 2.9781 </r> + <r> -4.3604 12.1626 3.6527 </r> + <r> -4.3049 18.0770 4.6553 </r> + <r> -4.2495 31.4134 6.3977 </r> + <r> -4.1940 43.0611 8.7861 </r> + <r> -4.1385 50.0936 11.5646 </r> + <r> -4.0831 55.4270 14.6389 </r> + <r> -4.0276 58.1241 17.8628 </r> + <r> -3.9721 64.2215 21.4248 </r> + <r> -3.9167 77.6947 25.7342 </r> + <r> -3.8612 77.9424 30.0574 </r> + <r> -3.8057 66.7288 33.7585 </r> + <r> -3.7503 65.1001 37.3693 </r> + <r> -3.6948 68.4345 41.1651 </r> + <r> -3.6393 70.1224 45.0545 </r> + <r> -3.5839 76.1851 49.2801 </r> + <r> -3.5284 70.4640 53.1885 </r> + <r> -3.4729 47.3780 55.8163 </r> + <r> -3.4175 43.7720 58.2442 </r> + <r> -3.3620 67.4067 61.9829 </r> + <r> -3.3065 77.1740 66.2634 </r> + <r> -3.2511 67.1283 69.9868 </r> + <r> -3.1956 68.1558 73.7671 </r> + <r> -3.1401 76.7405 78.0235 </r> + <r> -3.0847 78.6386 82.3853 </r> + <r> -3.0292 80.9918 86.8775 </r> + <r> -2.9737 90.2472 91.8832 </r> + <r> -2.9183 100.0289 97.4313 </r> + <r> -2.8628 94.9516 102.6979 </r> + <r> -2.8073 82.4342 107.2701 </r> + <r> -2.7519 80.8483 111.7544 </r> + <r> -2.6964 92.3093 116.8744 </r> + <r> -2.6409 98.1016 122.3157 </r> + <r> -2.5855 83.2529 126.9334 </r> + <r> -2.5300 68.2513 130.7190 </r> + <r> -2.4746 69.7931 134.5901 </r> + <r> -2.4191 81.2239 139.0952 </r> + <r> -2.3636 93.4066 144.2761 </r> + <r> -2.3082 99.7830 149.8106 </r> + <r> -2.2527 93.2291 154.9816 </r> + <r> -2.1972 76.9444 159.2494 </r> + <r> -2.1418 68.4904 163.0483 </r> + <r> -2.0863 71.8349 167.0327 </r> + <r> -2.0308 78.1136 171.3653 </r> + <r> -1.9754 88.3998 176.2684 </r> + <r> -1.9199 98.6496 181.7401 </r> + <r> -1.8644 96.8858 187.1139 </r> + <r> -1.8090 89.2977 192.0669 </r> + <r> -1.7535 87.2856 196.9082 </r> + <r> -1.6980 90.8285 201.9461 </r> + <r> -1.6426 96.9503 207.3235 </r> + <r> -1.5871 101.6265 212.9603 </r> + <r> -1.5316 95.9209 218.2806 </r> + <r> -1.4762 76.7997 222.5404 </r> + <r> -1.4207 50.3421 225.3326 </r> + <r> -1.3652 24.5839 226.6962 </r> + <r> -1.3098 7.3617 227.1045 </r> + <r> -1.2543 5.4598 227.4073 </r> + <r> -1.1988 12.3858 228.0943 </r> + <r> -1.1434 12.5754 228.7918 </r> + <r> -1.0879 6.2948 229.1410 </r> + <r> -1.0324 4.7933 229.4068 </r> + <r> -0.9770 7.0155 229.7959 </r> + <r> -0.9215 6.5233 230.1578 </r> + <r> -0.8660 3.8817 230.3731 </r> + <r> -0.8106 1.3953 230.4505 </r> + <r> -0.7551 -0.0043 230.4502 </r> + <r> -0.6997 -0.4195 230.4270 </r> + <r> -0.6442 0.3118 230.4442 </r> + <r> -0.5887 3.0960 230.6160 </r> + <r> -0.5333 5.0749 230.8975 </r> + <r> -0.4778 3.6221 231.0984 </r> + <r> -0.4223 3.7624 231.3070 </r> + <r> -0.3669 6.7666 231.6824 </r> + <r> -0.3114 8.6499 232.1621 </r> + <r> -0.2559 9.6290 232.6962 </r> + <r> -0.2005 9.5152 233.2240 </r> + <r> -0.1450 7.5357 233.6419 </r> + <r> -0.0895 9.6581 234.1776 </r> + <r> -0.0341 17.8939 235.1701 </r> + <r> 0.0214 21.7713 236.3777 </r> + <r> 0.0769 19.2106 237.4432 </r> + <r> 0.1323 17.5795 238.4183 </r> + <r> 0.1878 16.8642 239.3537 </r> + <r> 0.2433 12.0997 240.0248 </r> + <r> 0.2987 5.7493 240.3437 </r> + <r> 0.3542 2.5222 240.4836 </r> + <r> 0.4097 1.8615 240.5868 </r> + <r> 0.4651 2.7324 240.7384 </r> + <r> 0.5206 5.9785 241.0700 </r> + <r> 0.5761 10.5171 241.6533 </r> + <r> 0.6315 13.3272 242.3925 </r> + <r> 0.6870 12.9546 243.1110 </r> + <r> 0.7425 10.2554 243.6799 </r> + <r> 0.7979 6.2659 244.0274 </r> + <r> 0.8534 2.0386 244.1405 </r> + <r> 0.9089 0.3240 244.1585 </r> + <r> 0.9643 0.6105 244.1923 </r> + <r> 1.0198 0.5152 244.2209 </r> + <r> 1.0752 0.0219 244.2221 </r> + <r> 1.1307 -0.3925 244.2003 </r> + <r> 1.1862 -0.6059 244.1667 </r> + <r> 1.2416 1.8012 244.2666 </r> + <r> 1.2971 9.2143 244.7777 </r> + <r> 1.3526 15.7618 245.6519 </r> + <r> 1.4080 14.9271 246.4799 </r> + <r> 1.4635 11.4662 247.1159 </r> + <r> 1.5190 11.3582 247.7459 </r> + <r> 1.5744 12.2012 248.4226 </r> + <r> 1.6299 7.6086 248.8446 </r> + <r> 1.6854 1.8334 248.9463 </r> + <r> 1.7408 1.5206 249.0307 </r> + <r> 1.7963 3.4734 249.2233 </r> + <r> 1.8518 3.5642 249.4210 </r> + <r> 1.9072 1.5920 249.5093 </r> + <r> 1.9627 0.2998 249.5259 </r> + <r> 2.0182 5.7923 249.8472 </r> + <r> 2.0736 19.6530 250.9373 </r> + <r> 2.1291 25.0645 252.3275 </r> + <r> 2.1846 12.5486 253.0235 </r> + <r> 2.2400 0.7175 253.0633 </r> + <r> 2.2955 -0.1321 253.0560 </r> + <r> 2.3510 3.7398 253.2634 </r> + <r> 2.4064 6.4114 253.6190 </r> + <r> 2.4619 8.3202 254.0805 </r> + <r> 2.5174 9.2761 254.5950 </r> + <r> 2.5728 5.7269 254.9127 </r> + <r> 2.6283 1.3861 254.9895 </r> + <r> 2.6838 3.3975 255.1780 </r> + <r> 2.7392 9.2412 255.6906 </r> + <r> 2.7947 9.0137 256.1905 </r> + <r> 2.8502 6.8094 256.5682 </r> + <r> 2.9056 11.3613 257.1984 </r> + <r> 2.9611 16.0370 258.0879 </r> + <r> 3.0165 12.4730 258.7797 </r> + <r> 3.0720 3.8194 258.9915 </r> + <r> 3.1275 0.7427 259.0327 </r> + <r> 3.1829 7.6159 259.4551 </r> + <r> 3.2384 15.3230 260.3050 </r> + <r> 3.2939 13.3511 261.0456 </r> + <r> 3.3493 7.4709 261.4599 </r> + <r> 3.4048 5.1678 261.7466 </r> + <r> 3.4603 4.6548 262.0048 </r> + <r> 3.5157 3.4141 262.1941 </r> + <r> 3.5712 6.0246 262.5283 </r> + <r> 3.6267 14.9043 263.3550 </r> + <r> 3.6821 17.1892 264.3084 </r> + <r> 3.7376 9.1692 264.8169 </r> + <r> 3.7931 2.9253 264.9792 </r> + <r> 3.8485 4.3614 265.2211 </r> + <r> 3.9040 9.2921 265.7365 </r> + <r> 3.9595 8.5538 266.2109 </r> + <r> 4.0149 2.8749 266.3704 </r> + <r> 4.0704 -0.2254 266.3579 </r> + <r> 4.1259 -0.3540 266.3383 </r> + <r> 4.1813 -0.0806 266.3338 </r> + <r> 4.2368 -0.0099 266.3332 </r> + <r> 4.2923 -0.0226 266.3320 </r> + <r> 4.3477 -0.1133 266.3257 </r> + <r> 4.4032 -0.1578 266.3170 </r> + <r> 4.4587 0.4974 266.3445 </r> + <r> 4.5141 1.8609 266.4478 </r> + <r> 4.5696 4.0537 266.6726 </r> + <r> 4.6251 11.4838 267.3096 </r> + <r> 4.6805 22.1907 268.5404 </r> + <r> 4.7360 22.3006 269.7773 </r> + <r> 4.7914 10.3140 270.3494 </r> + <r> 4.8469 0.3414 270.3683 </r> + <r> 4.9024 -1.9257 270.2615 </r> + <r> 4.9578 2.9670 270.4261 </r> + <r> 5.0133 15.9328 271.3098 </r> + <r> 5.0688 26.1171 272.7584 </r> + <r> 5.1242 21.5502 273.9537 </r> + <r> 5.1797 9.8072 274.4976 </r> + <r> 5.2352 2.9339 274.6604 </r> + <r> 5.2906 1.6287 274.7507 </r> + <r> 5.3461 3.5530 274.9478 </r> + <r> 5.4016 6.7293 275.3210 </r> + <r> 5.4570 6.1822 275.6639 </r> + <r> 5.5125 2.5962 275.8079 </r> + <r> 5.5680 1.8874 275.9126 </r> + <r> 5.6234 3.5924 276.1119 </r> + <r> 5.6789 7.3835 276.5214 </r> + <r> 5.7344 14.9880 277.3527 </r> + <r> 5.7898 19.1581 278.4153 </r> + <r> 5.8453 14.6536 279.2281 </r> + <r> 5.9008 10.5386 279.8126 </r> + <r> 5.9562 14.5804 280.6213 </r> + <r> 6.0117 16.0437 281.5112 </r> + <r> 6.0672 10.0543 282.0689 </r> + <r> 6.1226 7.7214 282.4972 </r> + <r> 6.1781 7.4123 282.9083 </r> + <r> 6.2336 6.5217 283.2700 </r> + <r> 6.2890 8.2685 283.7286 </r> + <r> 6.3445 9.1306 284.2351 </r> + <r> 6.4000 7.7485 284.6648 </r> + <r> 6.4554 8.0651 285.1122 </r> + <r> 6.5109 15.7419 285.9853 </r> + <r> 6.5663 24.3943 287.3384 </r> + <r> 6.6218 21.0427 288.5055 </r> + <r> 6.6773 10.1813 289.0702 </r> + <r> 6.7327 3.9055 289.2868 </r> + <r> 6.7882 7.3360 289.6937 </r> + <r> 6.8437 15.1437 290.5337 </r> + <r> 6.8991 17.7248 291.5168 </r> + <r> 6.9546 15.4692 292.3748 </r> + <r> 7.0101 11.6714 293.0222 </r> + <r> 7.0655 8.0585 293.4692 </r> + <r> 7.1210 10.3678 294.0442 </r> + <r> 7.1765 15.1961 294.8871 </r> + <r> 7.2319 16.7370 295.8154 </r> + <r> 7.2874 15.2538 296.6615 </r> + <r> 7.3429 10.8318 297.2623 </r> + <r> 7.3983 9.6093 297.7952 </r> + <r> 7.4538 11.0456 298.4079 </r> + <r> 7.5093 7.6270 298.8309 </r> + <r> 7.5647 6.0942 299.1689 </r> + <r> 7.6202 12.9308 299.8862 </r> + <r> 7.6757 16.9062 300.8239 </r> + <r> 7.7311 11.4951 301.4615 </r> + <r> 7.7866 6.1223 301.8010 </r> + <r> 7.8421 3.0921 301.9725 </r> + <r> 7.8975 5.4624 302.2755 </r> + <r> 7.9530 18.4706 303.3000 </r> + <r> 8.0085 29.1934 304.9192 </r> + <r> 8.0639 25.8695 306.3541 </r> + <r> 8.1194 17.4292 307.3208 </r> + <r> 8.1749 14.7830 308.1408 </r> + <r> 8.2303 15.7601 309.0149 </r> + <r> 8.2858 17.1340 309.9653 </r> + <r> 8.3413 20.1189 311.0812 </r> + <r> 8.3967 20.7411 312.2316 </r> + <r> 8.4522 19.4934 313.3128 </r> + <r> 8.5076 17.4902 314.2829 </r> + <r> 8.5631 11.4900 314.9202 </r> + <r> 8.6186 6.2829 315.2687 </r> + <r> 8.6740 4.6800 315.5283 </r> + <r> 8.7295 6.6428 315.8967 </r> + <r> 8.7850 10.2372 316.4645 </r> + <r> 8.8404 9.8521 317.0110 </r> + <r> 8.8959 6.9777 317.3980 </r> + <r> 8.9514 5.7748 317.7183 </r> + <r> 9.0068 6.1039 318.0569 </r> + <r> 9.0623 7.5733 318.4769 </r> + <r> 9.1178 9.9911 319.0311 </r> + <r> 9.1732 10.5141 319.6143 </r> + <r> 9.2287 6.3522 319.9666 </r> + <r> 9.2842 1.3033 320.0389 </r> + <r> 9.3396 -0.4113 320.0161 </r> + <r> 9.3951 -0.2429 320.0026 </r> + <r> 9.4506 -0.0432 320.0002 </r> + <r> 9.5060 -0.0035 320.0000 </r> + <r> 9.5615 -0.0001 320.0000 </r> + <r> 9.6170 -0.0000 320.0000 </r> + <r> 9.6724 -0.0000 320.0000 </r> + <r> 9.7279 -0.0000 320.0000 </r> + <r> 9.7834 -0.0000 320.0000 </r> + <r> 9.8388 0.0000 320.0000 </r> + <r> 9.8943 0.0000 320.0000 </r> + <r> 9.9498 0.0000 320.0000 </r> + <r> 10.0052 0.0000 320.0000 </r> + <r> 10.0607 0.0000 320.0000 </r> + <r> 10.1162 0.0000 320.0000 </r> + <r> 10.1716 0.0000 320.0000 </r> + </set> + </set> + </array> + </total> + </dos> + </calculation> + <structure name="finalpos" > + <crystal> + <varray name="basis" > + <v> 8.93075865 0.00000000 0.00000000 </v> + <v> 4.46537932 7.73426386 0.00000000 </v> + <v> 0.00000000 0.00000000 24.72257853 </v> + </varray> + <i name="volume"> 1707.65880700 </i> + <varray name="rec_basis" > + <v> 0.11197257 -0.06464739 0.00000000 </v> + <v> 0.00000000 0.12929479 0.00000000 </v> + <v> 0.00000000 0.00000000 0.04044886 </v> + </varray> + </crystal> + <varray name="positions" > + <v> 0.88888889 0.22222222 0.30336641 </v> + <v> 0.22222222 0.22222222 0.30336641 </v> + <v> 0.55555556 0.22222222 0.30336641 </v> + <v> 0.88888889 0.55555556 0.30336641 </v> + <v> 0.22222222 0.55555556 0.30336641 </v> + <v> 0.55555556 0.55555556 0.30336641 </v> + <v> 0.88888889 0.88888889 0.30336641 </v> + <v> 0.22222222 0.88888889 0.30336641 </v> + <v> 0.55555556 0.88888889 0.30336641 </v> + <v> 0.00000000 0.00000000 0.40168321 </v> + <v> 0.33333333 0.00000000 0.40168321 </v> + <v> 0.66666667 0.00000000 0.40168321 </v> + <v> 0.00000000 0.33333333 0.40168321 </v> + <v> 0.33333333 0.33333333 0.40168321 </v> + <v> 0.66666667 0.33333333 0.40168321 </v> + <v> 0.00000000 0.66666667 0.40168321 </v> + <v> 0.33333333 0.66666667 0.40168321 </v> + <v> 0.66666667 0.66666667 0.40168321 </v> + <v> 0.11123873 0.11123873 0.50060819 </v> + <v> 0.44452768 0.11094464 0.50000593 </v> + <v> 0.77752255 0.11123873 0.50060819 </v> + <v> 0.11094464 0.44452768 0.50000593 </v> + <v> 0.44452768 0.44452768 0.50000593 </v> + <v> 0.77805052 0.44389897 0.50072296 </v> + <v> 0.11123873 0.77752255 0.50060819 </v> + <v> 0.44389897 0.77805052 0.50072296 </v> + <v> 0.77805052 0.77805052 0.50072296 </v> + <v> 0.88887179 0.22225642 0.59901223 </v> + <v> 0.22213222 0.22213222 0.59794112 </v> + <v> 0.55573556 0.22213222 0.59794112 </v> + <v> 0.88934490 0.55532755 0.59863277 </v> + <v> 0.22213222 0.55573556 0.59794112 </v> + <v> 0.55532755 0.55532755 0.59863277 </v> + <v> 0.88887179 0.88887179 0.59901223 </v> + <v> 0.22225642 0.88887179 0.59901223 </v> + <v> 0.55532755 0.88934490 0.59863277 </v> + <v> 0.00000000 0.00000000 0.69825514 </v> + <v> 0.33340411 0.00229633 0.69745863 </v> + <v> 0.66429956 0.00229633 0.69745863 </v> + <v> 0.00229633 0.33340411 0.69745863 </v> + <v> 0.66429956 0.33340411 0.69745863 </v> + <v> 0.00229633 0.66429956 0.69745863 </v> + <v> 0.33340411 0.66429956 0.69745863 </v> + <v> 0.66666667 0.66666667 0.69755187 </v> + <v> 0.33333333 0.33333333 0.69043853 </v> + </varray> + <varray name="selective" type="logical" > + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > F F F </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + <v type="logical" > T T T </v> + </varray> + <nose> + <v> -3.00000000 0.00000000 0.00010000 0.00010000 </v> + </nose> + </structure> +</modeling> diff --git a/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu/INCAR b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu/INCAR new file mode 100644 index 0000000000000000000000000000000000000000..47ad996ab7749dac503a2fb6ae78461ddcc4cf7b --- /dev/null +++ b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu/INCAR @@ -0,0 +1,43 @@ +INCAR file from C:\Users\Matt\Documents\Materials Studio Projects\TempProject Files\Documents\PdAu_CH4_PRv2.xsd. Created by Matt Darby on 30-Nov-2017. +INCAR file. Created by M Darby on 30-Nov-2017. +NWRITE = 1 +LWAVE = .FALSE. # write WAVECAR? +LCHARG = .FALSE. # write CHGCAR? +LVTOT = .FALSE. # write LOCPOT? + +GGA = MK # OptB86b-vdW XC-functional used +PARAM1 = 0.1234 +PARAM2 = 1.0000 +LUSE_VDW = .TRUE. +AGGAC = 0.0000 + +IDIPOL = 3 +LDIPOL = .TRUE. + +# Electronic relaxation +ENCUT = 400 # Energy cutoff in eV +# IALGO = 48 # 8: CG, 48: DIIS algorithm for electrons +ALGO = FAST +VOSKOWN = 1 # Default for PBE, RPBE +PREC = ACCURATE +LREAL = AUTO +ROPT = 2e-4 2e-4 2e-4 2e-4 +ISTART = 0 +NELM = 100 +NELMDL = -10 +EDIFF = 1e-7 # This and EDIFFG are the tolerance parameters +ISYM = 2 + +# Ionic relaxation +NSW = 200 # number of steps in optimization (default 0!) +ISIF = 2 # 0: relax ions, 1,2:relax ions,calc stresses, 3:relax ion+cell +IBRION = 2 # 1: quasi-NR, 2:CG algorithm for ions +EDIFFG = -0.01 # For high accuracy, use -0.01 or -0.02 +POTIM = 0.125 # reduce trial step in optimization +ISMEAR = 1 # 0: Gaussian, electron smearing +SIGMA = 0.1 # If gas phase, set to 0.01 +NFREE = 10 # number of DIIS vectors to save + +# Parallel +NPAR = 8 +LPLANE = .TRUE. diff --git a/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu/OUTCAR b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu/OUTCAR new file mode 100644 index 0000000000000000000000000000000000000000..7e2ac631eb44b24c44b9d363cc8e033e4d97103a --- /dev/null +++ b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu/OUTCAR @@ -0,0 +1,1710 @@ + vasp.5.4.1 24Jun15 (build Dec 04 2015 16:58:54) complex + + executed on IFC91_ompi date 2018.01.13 19:33:20 + running on 32 total cores + distrk: each k-point on 32 cores, 1 groups + distr: one band on NCORES_PER_BAND= 4 cores, 8 groups + + +-------------------------------------------------------------------------------------------------------- + + + INCAR: + POTCAR: PAW_PBE Cu 05Jan2001 + POTCAR: PAW_PBE Rh 06Sep2000 + + ----------------------------------------------------------------------------- +| | +| ADVICE TO THIS USER RUNNING 'VASP/VAMP' (HEAR YOUR MASTER'S VOICE ...): | +| | +| You have switched on vdW-DFT. | +| This routine was written and supplied by Jiri Klimes. | +| We recommed that you carefully read and cite the following | +| publication | +| J. Klimes, D.R. Bowler, A. Michelides | +| J. Phys.: Cond Matt. 22 022201 (2010) | +| J. Klimes, D.R. Bowler, A. Michelides | +| Phys. Rev. B. 83, 195131 (2011) | +| and references therein. | +| | + ----------------------------------------------------------------------------- + + POTCAR: PAW_PBE Cu 05Jan2001 + local pseudopotential read in + partial core-charges read in + atomic valenz-charges read in + non local Contribution for L= 2 read in + real space projection operators read in + non local Contribution for L= 2 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + PAW grid and wavefunctions read in + + number of l-projection operators is LMAX = 6 + number of lm-projection operators is LMMAX = 18 + + POTCAR: PAW_PBE Rh 06Sep2000 + local pseudopotential read in + partial core-charges read in + atomic valenz-charges read in + non local Contribution for L= 2 read in + real space projection operators read in + non local Contribution for L= 2 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + PAW grid and wavefunctions read in + + number of l-projection operators is LMAX = 6 + number of lm-projection operators is LMMAX = 18 + + Optimization of the real space projectors (new method) + + maximal supplied QI-value = 16.25 + optimisation between [QCUT,QGAM] = [ 10.24, 20.48] = [ 29.35,117.42] Ry + Optimized for a Real-space Cutoff 1.55 Angstroem + + l n(q) QCUT max X(q) W(low)/X(q) W(high)/X(q) e(spline) + 2 9 10.239 4.977 0.78E-05 0.33E-04 0.53E-07 + 2 9 10.239 13.467 0.10E-03 0.30E-03 0.20E-06 + 0 10 10.239 13.303 0.19E-04 0.19E-05 0.69E-08 + 0 10 10.239 44.613 0.65E-04 0.24E-05 0.85E-07 + 1 9 10.239 5.276 0.25E-04 0.19E-04 0.22E-07 + 1 9 10.239 7.322 0.84E-04 0.97E-04 0.11E-06 + Optimization of the real space projectors (new method) + + maximal supplied QI-value = 15.12 + optimisation between [QCUT,QGAM] = [ 10.13, 20.41] = [ 28.73,116.64] Ry + Optimized for a Real-space Cutoff 1.70 Angstroem + + l n(q) QCUT max X(q) W(low)/X(q) W(high)/X(q) e(spline) + 2 9 10.129 3.971 0.16E-04 0.22E-05 0.64E-07 + 2 9 10.129 27.544 0.10E-03 0.24E-04 0.29E-06 + 0 10 10.129 20.781 0.20E-04 0.19E-06 0.11E-07 + 0 10 10.129 69.103 0.45E-04 0.21E-04 0.91E-07 + 1 10 10.129 7.864 0.65E-05 0.54E-05 0.31E-07 + 1 10 10.129 10.811 0.30E-04 0.39E-05 0.12E-06 + + ----------------------------------------------------------------------------- +| | +| ADVICE TO THIS USER RUNNING 'VASP/VAMP' (HEAR YOUR MASTER'S VOICE ...): | +| | +| You enforced a specific xc-type in the INCAR file, | +| a different type was found on the POTCAR file | +| I HOPE YOU KNOW, WHAT YOU ARE DOING | +| | + ----------------------------------------------------------------------------- + + PAW_PBE Cu 05Jan2001 : + energy of atom 1 EATOM=-1390.9800 + kinetic energy error for atom= 0.0117 (will be added to EATOM!!) + PAW_PBE Rh 06Sep2000 : + energy of atom 2 EATOM= -616.5493 + kinetic energy error for atom= 0.0043 (will be added to EATOM!!) + + + POSCAR: POSCAR file for Cu_3x3x5.xsd | Created o + positions in direct lattice + No initial velocities read in + exchange correlation table for LEXCH = 43 + RHO(1)= 0.500 N(1) = 2000 + RHO(2)= 100.500 N(2) = 4000 + + VTST: version 3.1, (03/28/14) + + CHAIN: initializing optimizer + + OPT: Using VASP Conjugate-Gradient optimizer + CHAIN: Read ICHAIN 0 + + POSCAR: POSCAR file for Cu_3x3x5.xsd | Created o + positions in direct lattice + No initial velocities read in + + + +-------------------------------------------------------------------------------------------------------- + + + ion position nearest neighbor table + 1 0.222 0.111 0.000- 2 2.55 7 2.55 5 2.55 9 2.55 4 2.55 3 2.55 10 2.55 14 2.55 + 13 2.55 + 2 0.222 0.444 0.000- 1 2.55 8 2.55 7 2.55 3 2.55 5 2.55 6 2.55 11 2.55 14 2.55 + 15 2.55 + 3 0.222 0.778 0.000- 9 2.55 8 2.55 6 2.55 1 2.55 2 2.55 4 2.55 12 2.55 13 2.55 + 15 2.55 + 4 0.556 0.111 0.000- 5 2.55 8 2.55 6 2.55 7 2.55 1 2.55 3 2.55 13 2.55 16 2.55 + 17 2.55 + 5 0.556 0.444 0.000- 4 2.55 1 2.55 17 2.55 6 2.55 8 2.55 2 2.55 9 2.55 14 2.55 + 18 2.55 + 6 0.556 0.778 0.000- 3 2.55 4 2.55 5 2.55 9 2.55 7 2.55 2 2.55 15 2.55 16 2.55 + 18 2.55 + 7 0.889 0.111 0.000- 1 2.55 8 2.55 2 2.55 4 2.55 9 2.55 6 2.55 10 2.55 11 2.55 + 16 2.55 + 8 0.889 0.444 0.000- 2 2.55 7 2.55 4 2.55 3 2.55 11 2.55 9 2.55 5 2.55 12 2.55 + 17 2.55 + 9 0.889 0.778 0.000- 3 2.55 1 2.55 6 2.55 7 2.55 8 2.55 5 2.55 10 2.55 12 2.55 + 18 2.55 + 10 0.000 0.000 0.114- 21 2.53 38 2.54 44 2.54 16 2.55 11 2.55 12 2.55 13 2.55 18 2.55 + 14 2.55 1 2.55 7 2.55 9 2.55 + 11 0.000 0.333 0.114- 21 2.53 30 2.54 27 2.54 12 2.55 15 2.55 8 2.55 14 2.55 10 2.55 + 17 2.55 16 2.55 2 2.55 7 2.55 + 12 0.000 0.667 0.114- 35 2.54 30 2.54 38 2.54 11 2.55 17 2.55 15 2.55 10 2.55 18 2.55 + 13 2.55 3 2.55 8 2.55 9 2.55 + 13 0.333 0.000 0.114- 24 2.53 38 2.54 41 2.54 16 2.55 17 2.55 15 2.55 10 2.55 14 2.55 + 12 2.55 4 2.55 3 2.55 1 2.55 + 14 0.333 0.333 0.114- 21 2.53 32 2.53 24 2.53 17 2.55 15 2.55 18 2.55 11 2.55 13 2.55 + 10 2.55 1 2.55 2 2.55 5 2.55 + 15 0.333 0.667 0.114- 32 2.53 30 2.54 41 2.54 18 2.55 14 2.55 11 2.55 16 2.55 12 2.55 + 13 2.55 6 2.55 2 2.55 3 2.55 + 16 0.667 0.000 0.114- 41 2.54 44 2.54 27 2.54 13 2.55 15 2.55 10 2.55 17 2.55 18 2.55 + 11 2.55 6 2.55 4 2.55 7 2.55 + 17 0.667 0.333 0.114- 24 2.53 35 2.54 27 2.54 18 2.55 14 2.55 13 2.55 12 2.55 5 2.55 + 11 2.55 16 2.55 4 2.55 8 2.55 + 18 0.667 0.667 0.114- 32 2.53 35 2.54 44 2.54 17 2.55 15 2.55 14 2.55 12 2.55 16 2.55 + 10 2.55 6 2.55 5 2.55 9 2.55 + 19 0.998 0.998 0.452- 42 2.51 43 2.53 26 2.54 36 2.54 25 2.54 20 2.55 22 2.57 45 2.58 + 28 2.58 + 20 0.223 0.112 0.339- 38 2.53 24 2.54 21 2.54 31 2.55 29 2.55 23 2.55 26 2.55 37 2.55 + 43 2.55 19 2.55 22 2.56 45 2.58 + 21 0.111 0.222 0.226- 10 2.53 11 2.53 14 2.53 20 2.54 29 2.54 26 2.55 38 2.55 44 2.55 + 27 2.55 30 2.55 32 2.56 24 2.56 + 22 0.334 0.998 0.452- 39 2.51 37 2.53 23 2.54 36 2.54 25 2.54 20 2.56 19 2.57 45 2.57 + 33 2.58 + 23 0.556 0.112 0.339- 25 2.53 22 2.54 27 2.54 33 2.54 41 2.54 24 2.55 20 2.55 31 2.55 + 37 2.55 34 2.55 40 2.55 26 2.55 + 24 0.445 0.222 0.226- 17 2.53 13 2.53 14 2.53 20 2.54 31 2.54 23 2.55 41 2.55 38 2.55 + 27 2.55 35 2.55 21 2.56 32 2.56 + 25 0.667 0.001 0.452- 26 2.53 23 2.53 40 2.53 42 2.54 33 2.54 19 2.54 28 2.54 39 2.54 + 22 2.54 + 26 0.890 0.112 0.339- 25 2.53 19 2.54 27 2.54 28 2.54 44 2.54 21 2.55 29 2.55 20 2.55 + 34 2.55 43 2.55 23 2.55 40 2.55 + 27 0.778 0.222 0.227- 34 2.53 26 2.54 23 2.54 11 2.54 17 2.54 16 2.54 24 2.55 21 2.55 + 30 2.55 35 2.55 41 2.55 44 2.55 + 28 0.998 0.334 0.452- 33 2.51 34 2.53 36 2.54 26 2.54 25 2.54 29 2.56 39 2.57 45 2.57 + 19 2.58 + 29 0.223 0.445 0.339- 30 2.53 32 2.54 21 2.54 20 2.55 31 2.55 26 2.55 40 2.55 37 2.55 + 34 2.55 28 2.56 39 2.56 45 2.58 + 30 0.112 0.555 0.227- 29 2.53 34 2.54 37 2.54 15 2.54 11 2.54 12 2.54 32 2.55 21 2.55 + 27 2.55 41 2.55 35 2.56 38 2.56 + 31 0.556 0.445 0.339- 35 2.53 32 2.54 24 2.54 20 2.55 29 2.55 23 2.55 40 2.55 34 2.55 + 43 2.55 42 2.56 33 2.56 45 2.58 + 32 0.445 0.556 0.226- 18 2.53 15 2.53 14 2.53 31 2.54 29 2.54 40 2.55 30 2.55 44 2.55 + 41 2.55 35 2.55 21 2.56 24 2.56 + 33 0.670 0.334 0.452- 28 2.51 34 2.53 23 2.54 36 2.54 25 2.54 31 2.56 42 2.57 45 2.57 + 22 2.58 + 34 0.889 0.445 0.339- 33 2.53 28 2.53 27 2.53 36 2.53 30 2.54 35 2.54 26 2.55 23 2.55 + 43 2.55 37 2.55 31 2.55 29 2.55 + 35 0.778 0.555 0.227- 31 2.53 43 2.54 34 2.54 18 2.54 17 2.54 12 2.54 24 2.55 32 2.55 + 27 2.55 44 2.55 30 2.56 38 2.56 + 36 0.001 0.667 0.452- 37 2.53 43 2.53 34 2.53 42 2.54 39 2.54 22 2.54 19 2.54 33 2.54 + 28 2.54 + 37 0.223 0.778 0.339- 39 2.53 22 2.53 36 2.53 41 2.53 38 2.54 30 2.54 23 2.55 40 2.55 + 43 2.55 34 2.55 20 2.55 29 2.55 + 38 0.112 0.890 0.227- 20 2.53 43 2.54 37 2.54 13 2.54 10 2.54 12 2.54 21 2.55 24 2.55 + 41 2.55 44 2.55 30 2.56 35 2.56 + 39 0.334 0.670 0.452- 22 2.51 37 2.53 36 2.54 40 2.54 25 2.54 29 2.56 28 2.57 45 2.57 + 42 2.58 + 40 0.556 0.778 0.339- 25 2.53 42 2.54 44 2.54 39 2.54 41 2.54 32 2.55 29 2.55 31 2.55 + 37 2.55 43 2.55 23 2.55 26 2.55 + 41 0.445 0.889 0.227- 37 2.53 40 2.54 23 2.54 16 2.54 13 2.54 15 2.54 24 2.55 32 2.55 + 38 2.55 30 2.55 44 2.55 27 2.55 + 42 0.670 0.670 0.452- 19 2.51 43 2.53 40 2.54 36 2.54 25 2.54 31 2.56 33 2.57 45 2.57 + 39 2.58 + 43 0.889 0.778 0.339- 42 2.53 19 2.53 44 2.53 36 2.53 38 2.54 35 2.54 40 2.55 26 2.55 + 34 2.55 37 2.55 31 2.55 20 2.55 + 44 0.778 0.889 0.227- 43 2.53 40 2.54 26 2.54 10 2.54 18 2.54 16 2.54 32 2.55 21 2.55 + 35 2.55 38 2.55 41 2.55 27 2.55 + 45 0.334 0.334 0.454- 42 2.57 33 2.57 39 2.57 22 2.57 28 2.57 19 2.58 31 2.58 29 2.58 + 20 2.58 + + LATTYP: Found a hexagonal cell. + ALAT = 7.6549965918 + C/A-ratio = 2.3949984178 + + Lattice vectors: + + A1 = ( 5.4129000000, -5.4129000000, -0.0000000000) + A2 = ( 0.0000000000, 5.4129000000, -5.4129000000) + A3 = ( 10.5849693586, 10.5849693586, 10.5849693586) + + +Analysis of symmetry for initial positions (statically): +===================================================================== + Subroutine PRICEL returns: + Original cell was already a primitive cell. + + + Routine SETGRP: Setting up the symmetry group for a + hexagonal supercell. + + + Subroutine GETGRP returns: Found 1 space group operations + (whereof 1 operations were pure point group operations) + out of a pool of 24 trial point group operations. + + +The static configuration has the point symmetry C_1 . + + +Analysis of symmetry for dynamics (positions and initial velocities): +===================================================================== + Subroutine PRICEL returns: + Original cell was already a primitive cell. + + + Routine SETGRP: Setting up the symmetry group for a + hexagonal supercell. + + + Subroutine GETGRP returns: Found 1 space group operations + (whereof 1 operations were pure point group operations) + out of a pool of 24 trial point group operations. + + +The dynamic configuration has the point symmetry C_1 . + + +Analysis of constrained symmetry for selective dynamics: +===================================================================== + Subroutine PRICEL returns: + Original cell was already a primitive cell. + + + Routine SETGRP: Setting up the symmetry group for a + hexagonal supercell. + + + Subroutine GETGRP returns: Found 1 space group operations + (whereof 1 operations were pure point group operations) + out of a pool of 24 trial point group operations. + + +The constrained configuration has the point symmetry C_1 . + + + KPOINTS: K-Point Grid Created by Matt Darby on 30 + +Automatic generation of k-mesh. +Space group operators: + irot det(A) alpha n_x n_y n_z tau_x tau_y tau_z + 1 1.000000 0.000000 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 + + Subroutine IBZKPT returns following result: + =========================================== + + Found 85 irreducible k-points: + + Following reciprocal coordinates: + Coordinates Weight + 0.000000 0.000000 0.000000 1.000000 + 0.076923 0.000000 0.000000 2.000000 + 0.153846 0.000000 0.000000 2.000000 + 0.230769 0.000000 0.000000 2.000000 + 0.307692 0.000000 0.000000 2.000000 + 0.384615 0.000000 0.000000 2.000000 + 0.461538 0.000000 0.000000 2.000000 + 0.000000 0.076923 0.000000 2.000000 + 0.076923 0.076923 0.000000 2.000000 + 0.153846 0.076923 0.000000 2.000000 + 0.230769 0.076923 -0.000000 2.000000 + 0.307692 0.076923 0.000000 2.000000 + 0.384615 0.076923 -0.000000 2.000000 + 0.461538 0.076923 -0.000000 2.000000 + -0.461538 0.076923 -0.000000 2.000000 + -0.384615 0.076923 -0.000000 2.000000 + -0.307692 0.076923 -0.000000 2.000000 + -0.230769 0.076923 0.000000 2.000000 + -0.153846 0.076923 -0.000000 2.000000 + -0.076923 0.076923 0.000000 2.000000 + -0.000000 0.153846 -0.000000 2.000000 + 0.076923 0.153846 0.000000 2.000000 + 0.153846 0.153846 0.000000 2.000000 + 0.230769 0.153846 0.000000 2.000000 + 0.307692 0.153846 0.000000 2.000000 + 0.384615 0.153846 0.000000 2.000000 + 0.461538 0.153846 0.000000 2.000000 + -0.461538 0.153846 0.000000 2.000000 + -0.384615 0.153846 0.000000 2.000000 + -0.307692 0.153846 -0.000000 2.000000 + -0.230769 0.153846 0.000000 2.000000 + -0.153846 0.153846 -0.000000 2.000000 + -0.076923 0.153846 -0.000000 2.000000 + -0.000000 0.230769 0.000000 2.000000 + 0.076923 0.230769 -0.000000 2.000000 + 0.153846 0.230769 0.000000 2.000000 + 0.230769 0.230769 0.000000 2.000000 + 0.307692 0.230769 0.000000 2.000000 + 0.384615 0.230769 -0.000000 2.000000 + 0.461538 0.230769 0.000000 2.000000 + -0.461538 0.230769 0.000000 2.000000 + -0.384615 0.230769 -0.000000 2.000000 + -0.307692 0.230769 0.000000 2.000000 + -0.230769 0.230769 -0.000000 2.000000 + -0.153846 0.230769 0.000000 2.000000 + -0.076923 0.230769 0.000000 2.000000 + -0.000000 0.307692 0.000000 2.000000 + 0.076923 0.307692 0.000000 2.000000 + 0.153846 0.307692 0.000000 2.000000 + 0.230769 0.307692 0.000000 2.000000 + 0.307692 0.307692 0.000000 2.000000 + 0.384615 0.307692 0.000000 2.000000 + 0.461538 0.307692 0.000000 2.000000 + -0.461538 0.307692 0.000000 2.000000 + -0.384615 0.307692 0.000000 2.000000 + -0.307692 0.307692 0.000000 2.000000 + -0.230769 0.307692 0.000000 2.000000 + -0.153846 0.307692 0.000000 2.000000 + -0.076923 0.307692 0.000000 2.000000 + -0.000000 0.384615 0.000000 2.000000 + 0.076923 0.384615 -0.000000 2.000000 + 0.153846 0.384615 0.000000 2.000000 + 0.230769 0.384615 -0.000000 2.000000 + 0.307692 0.384615 0.000000 2.000000 + 0.384615 0.384615 0.000000 2.000000 + 0.461538 0.384615 0.000000 2.000000 + -0.461538 0.384615 0.000000 2.000000 + -0.384615 0.384615 0.000000 2.000000 + -0.307692 0.384615 0.000000 2.000000 + -0.230769 0.384615 -0.000000 2.000000 + -0.153846 0.384615 0.000000 2.000000 + -0.076923 0.384615 -0.000000 2.000000 + -0.000000 0.461538 0.000000 2.000000 + 0.076923 0.461538 0.000000 2.000000 + 0.153846 0.461538 0.000000 2.000000 + 0.230769 0.461538 0.000000 2.000000 + 0.307692 0.461538 0.000000 2.000000 + 0.384615 0.461538 0.000000 2.000000 + 0.461538 0.461538 0.000000 2.000000 + -0.461538 0.461538 -0.000000 2.000000 + -0.384615 0.461538 0.000000 2.000000 + -0.307692 0.461538 0.000000 2.000000 + -0.230769 0.461538 0.000000 2.000000 + -0.153846 0.461538 -0.000000 2.000000 + -0.076923 0.461538 0.000000 2.000000 + + Following cartesian coordinates: + Coordinates Weight + 0.000000 0.000000 0.000000 1.000000 + 0.009474 -0.004737 -0.004737 2.000000 + 0.018948 -0.009474 -0.009474 2.000000 + 0.028422 -0.014211 -0.014211 2.000000 + 0.037896 -0.018948 -0.018948 2.000000 + 0.047370 -0.023685 -0.023685 2.000000 + 0.056844 -0.028422 -0.028422 2.000000 + 0.004737 0.004737 -0.009474 2.000000 + 0.014211 0.000000 -0.014211 2.000000 + 0.023685 -0.004737 -0.018948 2.000000 + 0.033159 -0.009474 -0.023685 2.000000 + 0.042633 -0.014211 -0.028422 2.000000 + 0.052107 -0.018948 -0.033159 2.000000 + 0.061581 -0.023685 -0.037896 2.000000 + -0.052107 0.033159 0.018948 2.000000 + -0.042633 0.028422 0.014211 2.000000 + -0.033159 0.023685 0.009474 2.000000 + -0.023685 0.018948 0.004737 2.000000 + -0.014211 0.014211 0.000000 2.000000 + -0.004737 0.009474 -0.004737 2.000000 + 0.009474 0.009474 -0.018948 2.000000 + 0.018948 0.004737 -0.023685 2.000000 + 0.028422 0.000000 -0.028422 2.000000 + 0.037896 -0.004737 -0.033159 2.000000 + 0.047370 -0.009474 -0.037896 2.000000 + 0.056844 -0.014211 -0.042633 2.000000 + 0.066318 -0.018948 -0.047370 2.000000 + -0.047370 0.037896 0.009474 2.000000 + -0.037896 0.033159 0.004737 2.000000 + -0.028422 0.028422 -0.000000 2.000000 + -0.018948 0.023685 -0.004737 2.000000 + -0.009474 0.018948 -0.009474 2.000000 + 0.000000 0.014211 -0.014211 2.000000 + 0.014211 0.014211 -0.028422 2.000000 + 0.023685 0.009474 -0.033159 2.000000 + 0.033159 0.004737 -0.037896 2.000000 + 0.042633 0.000000 -0.042633 2.000000 + 0.052107 -0.004737 -0.047370 2.000000 + 0.061581 -0.009474 -0.052107 2.000000 + 0.071055 -0.014211 -0.056844 2.000000 + -0.042633 0.042633 0.000000 2.000000 + -0.033159 0.037896 -0.004737 2.000000 + -0.023685 0.033159 -0.009474 2.000000 + -0.014211 0.028422 -0.014211 2.000000 + -0.004737 0.023685 -0.018948 2.000000 + 0.004737 0.018948 -0.023685 2.000000 + 0.018948 0.018948 -0.037896 2.000000 + 0.028422 0.014211 -0.042633 2.000000 + 0.037896 0.009474 -0.047370 2.000000 + 0.047370 0.004737 -0.052107 2.000000 + 0.056844 0.000000 -0.056844 2.000000 + 0.066318 -0.004737 -0.061581 2.000000 + 0.075792 -0.009474 -0.066318 2.000000 + -0.037896 0.047370 -0.009474 2.000000 + -0.028422 0.042633 -0.014211 2.000000 + -0.018948 0.037896 -0.018948 2.000000 + -0.009474 0.033159 -0.023685 2.000000 + -0.000000 0.028422 -0.028422 2.000000 + 0.009474 0.023685 -0.033159 2.000000 + 0.023685 0.023685 -0.047370 2.000000 + 0.033159 0.018948 -0.052107 2.000000 + 0.042633 0.014211 -0.056844 2.000000 + 0.052107 0.009474 -0.061581 2.000000 + 0.061581 0.004737 -0.066318 2.000000 + 0.071055 0.000000 -0.071055 2.000000 + 0.080529 -0.004737 -0.075792 2.000000 + -0.033159 0.052107 -0.018948 2.000000 + -0.023685 0.047370 -0.023685 2.000000 + -0.014211 0.042633 -0.028422 2.000000 + -0.004737 0.037896 -0.033159 2.000000 + 0.004737 0.033159 -0.037896 2.000000 + 0.014211 0.028422 -0.042633 2.000000 + 0.028422 0.028422 -0.056844 2.000000 + 0.037896 0.023685 -0.061581 2.000000 + 0.047370 0.018948 -0.066318 2.000000 + 0.056844 0.014211 -0.071055 2.000000 + 0.066318 0.009474 -0.075792 2.000000 + 0.075792 0.004737 -0.080529 2.000000 + 0.085266 0.000000 -0.085266 2.000000 + -0.028422 0.056844 -0.028422 2.000000 + -0.018948 0.052107 -0.033159 2.000000 + -0.009474 0.047370 -0.037896 2.000000 + 0.000000 0.042633 -0.042633 2.000000 + 0.009474 0.037896 -0.047370 2.000000 + 0.018948 0.033159 -0.052107 2.000000 + + + +-------------------------------------------------------------------------------------------------------- + + + + + Dimension of arrays: + k-points NKPTS = 85 k-points in BZ NKDIM = 85 number of bands NBANDS= 296 + number of dos NEDOS = 301 number of ions NIONS = 45 + non local maximal LDIM = 6 non local SUM 2l+1 LMDIM = 18 + total plane-waves NPLWV = 300000 + max r-space proj IRMAX = 6660 max aug-charges IRDMAX= 18523 + dimension x,y,z NGX = 50 NGY = 50 NGZ = 120 + dimension x,y,z NGXF= 100 NGYF= 100 NGZF= 240 + support grid NGXF= 100 NGYF= 100 NGZF= 240 + ions per type = 44 1 + NGX,Y,Z is equivalent to a cutoff of 10.86, 10.86, 10.88 a.u. + NGXF,Y,Z is equivalent to a cutoff of 21.72, 21.72, 21.76 a.u. + + + I would recommend the setting: + dimension x,y,z NGX = 50 NGY = 50 NGZ = 120 + SYSTEM = unknown system + POSCAR = POSCAR file for Cu_3x3x5.xsd | Created o + + Startparameter for this run: + NWRITE = 1 write-flag & timer + PREC = accura normal or accurate (medium, high low for compatibility) + ISTART = 0 job : 0-new 1-cont 2-samecut + ICHARG = 2 charge: 1-file 2-atom 10-const + ISPIN = 1 spin polarized calculation? + LNONCOLLINEAR = F non collinear calculations + LSORBIT = F spin-orbit coupling + INIWAV = 1 electr: 0-lowe 1-rand 2-diag + LASPH = F aspherical Exc in radial PAW + METAGGA= F non-selfconsistent MetaGGA calc. + + Electronic Relaxation 1 + ENCUT = 400.0 eV 29.40 Ry 5.42 a.u. 12.48 12.48 29.90*2*pi/ulx,y,z + ENINI = 400.0 initial cutoff + ENAUG = 516.5 eV augmentation charge cutoff + NELM = 100; NELMIN= 2; NELMDL=-10 # of ELM steps + EDIFF = 0.1E-06 stopping-criterion for ELM + LREAL = T real-space projection + NLSPLINE = F spline interpolate recip. space projectors + LCOMPAT= F compatible to vasp.4.4 + GGA_COMPAT = T GGA compatible to vasp.4.4-vasp.4.6 + LMAXPAW = -100 max onsite density + LMAXMIX = 2 max onsite mixed and CHGCAR + VOSKOWN= 1 Vosko Wilk Nusair interpolation + ROPT = -0.00020 -0.00020 + Ionic relaxation + EDIFFG = -.1E-01 stopping-criterion for IOM + NSW = 200 number of steps for IOM + NBLOCK = 1; KBLOCK = 200 inner block; outer block + IBRION = 2 ionic relax: 0-MD 1-quasi-New 2-CG + NFREE = 10 steps in history (QN), initial steepest desc. (CG) + ISIF = 2 stress and relaxation + IWAVPR = 11 prediction: 0-non 1-charg 2-wave 3-comb + ISYM = 2 0-nonsym 1-usesym 2-fastsym + LCORR = T Harris-Foulkes like correction to forces + + POTIM = 0.1250 time-step for ionic-motion + TEIN = 0.0 initial temperature + TEBEG = 0.0; TEEND = 0.0 temperature during run + SMASS = -3.00 Nose mass-parameter (am) + estimated Nose-frequenzy (Omega) = 0.10E-29 period in steps =****** mass= -0.134E-26a.u. + SCALEE = 1.0000 scale energy and forces + NPACO = 256; APACO = 16.0 distance and # of slots for P.C. + PSTRESS= 0.0 pullay stress + + Mass of Ions in am + POMASS = 63.55102.91 + Ionic Valenz + ZVAL = 11.00 9.00 + Atomic Wigner-Seitz radii + RWIGS = -1.00 -1.00 + virtual crystal weights + VCA = 1.00 1.00 + NELECT = 493.0000 total number of electrons + NUPDOWN= -1.0000 fix difference up-down + + DOS related values: + EMIN = 10.00; EMAX =-10.00 energy-range for DOS + EFERMI = 0.00 + ISMEAR = 1; SIGMA = 0.10 broadening in eV -4-tet -1-fermi 0-gaus + + Electronic relaxation 2 (details) + IALGO = 68 algorithm + LDIAG = T sub-space diagonalisation (order eigenvalues) + LSUBROT= F optimize rotation matrix (better conditioning) + TURBO = 0 0=normal 1=particle mesh + IRESTART = 0 0=no restart 2=restart with 2 vectors + NREBOOT = 0 no. of reboots + NMIN = 0 reboot dimension + EREF = 0.00 reference energy to select bands + IMIX = 4 mixing-type and parameters + AMIX = 0.40; BMIX = 1.00 + AMIX_MAG = 1.60; BMIX_MAG = 1.00 + AMIN = 0.10 + WC = 100.; INIMIX= 1; MIXPRE= 1; MAXMIX= -45 + + Intra band minimization: + WEIMIN = 0.0010 energy-eigenvalue tresh-hold + EBREAK = 0.84E-10 absolut break condition + DEPER = 0.30 relativ break condition + + TIME = 0.40 timestep for ELM + + volume/ion in A,a.u. = 20.68 139.53 + Fermi-wavevector in a.u.,A,eV,Ry = 1.324749 2.503412 23.877670 1.754959 + Thomas-Fermi vector in A = 2.454260 + + Write flags + LWAVE = F write WAVECAR + LCHARG = F write CHGCAR + LVTOT = F write LOCPOT, total local potential + LVHAR = F write LOCPOT, Hartree potential only + LELF = F write electronic localiz. function (ELF) + LORBIT = 0 0 simple, 1 ext, 2 COOP (PROOUT) + + + Dipole corrections + LMONO = F monopole corrections only (constant potential shift) + LDIPOL = T correct potential (dipole corrections) + IDIPOL = 3 1-x, 2-y, 3-z, 4-all directions + EPSILON= 1.0000000 bulk dielectric constant + + Exchange correlation treatment: + GGA = MK GGA type + LEXCH = 43 internal setting for exchange type + VOSKOWN= 1 Vosko Wilk Nusair interpolation + LHFCALC = F Hartree Fock is set to + LHFONE = F Hartree Fock one center treatment + AEXX = 0.0000 exact exchange contribution + + vdW DFT: + LUSE_VDW = T switch on vdW DFT + Zab_VDW =-.8491 correlation parameter + PARAM1 =0.1234 + PARAM2 =1.0000 + PARAM3 =0.0000 + + Linear response parameters + LEPSILON= F determine dielectric tensor + LRPA = F only Hartree local field effects (RPA) + LNABLA = F use nabla operator in PAW spheres + LVEL = F velocity operator in full k-point grid + LINTERFAST= F fast interpolation + KINTER = 0 interpolate to denser k-point grid + CSHIFT =0.1000 complex shift for real part using Kramers Kronig + OMEGAMAX= -1.0 maximum frequency + DEG_THRESHOLD= 0.2000000E-02 threshold for treating states as degnerate + RTIME = 0.100 relaxation time in fs + + Orbital magnetization related: + ORBITALMAG= F switch on orbital magnetization + LCHIMAG = F perturbation theory with respect to B field + DQ = 0.001000 dq finite difference perturbation B field + + + +-------------------------------------------------------------------------------------------------------- + + + conjugate gradient relaxation of ions + using selective dynamics as specified on POSCAR + charge density and potential will be updated during run + non-spin polarized calculation + RMM-DIIS sequential band-by-band and + variant of blocked Davidson during initial phase + perform sub-space diagonalisation + before iterative eigenvector-optimisation + modified Broyden-mixing scheme, WC = 100.0 + initial mixing is a Kerker type mixing with AMIX = 0.4000 and BMIX = 1.0000 + Hartree-type preconditioning will be used + using additional bands 49 + real space projection scheme for non local part + use partial core corrections + calculate Harris-corrections to forces + (improved forces if not selfconsistent) + use gradient corrections + use of overlap-Matrix (Vanderbilt PP) + Methfessel and Paxton Order N= 1 SIGMA = 0.10 + + +-------------------------------------------------------------------------------------------------------- + + + energy-cutoff : 400.00 + volume of cell : 930.40 + direct lattice vectors reciprocal lattice vectors + 5.412900000 -5.412900000 -0.000000000 0.123162568 -0.061581284 -0.061581284 + 0.000000000 5.412900000 -5.412900000 0.061581284 0.061581284 -0.123162568 + 10.584969359 10.584969359 10.584969359 0.031491195 0.031491195 0.031491195 + + length of vectors + 7.654996592 7.654996592 18.333704726 0.150842724 0.150842724 0.054544350 + + + + k-points in units of 2pi/SCALE and weight: K-Point Grid Created by Matt Darby on 30 + 0.00000000 0.00000000 0.00000000 0.006 + 0.00947404 -0.00473702 -0.00473702 0.012 + 0.01894809 -0.00947404 -0.00947404 0.012 + 0.02842213 -0.01421107 -0.01421107 0.012 + 0.03789617 -0.01894809 -0.01894809 0.012 + 0.04737022 -0.02368511 -0.02368511 0.012 + 0.05684426 -0.02842213 -0.02842213 0.012 + 0.00473702 0.00473702 -0.00947404 0.012 + 0.01421107 0.00000000 -0.01421107 0.012 + 0.02368511 -0.00473702 -0.01894809 0.012 + 0.03315915 -0.00947404 -0.02368511 0.012 + 0.04263320 -0.01421107 -0.02842213 0.012 + 0.05210724 -0.01894809 -0.03315915 0.012 + 0.06158128 -0.02368511 -0.03789617 0.012 + -0.05210724 0.03315915 0.01894809 0.012 + -0.04263320 0.02842213 0.01421107 0.012 + -0.03315915 0.02368511 0.00947404 0.012 + -0.02368511 0.01894809 0.00473702 0.012 + -0.01421107 0.01421107 0.00000000 0.012 + -0.00473702 0.00947404 -0.00473702 0.012 + 0.00947404 0.00947404 -0.01894809 0.012 + 0.01894809 0.00473702 -0.02368511 0.012 + 0.02842213 0.00000000 -0.02842213 0.012 + 0.03789617 -0.00473702 -0.03315915 0.012 + 0.04737022 -0.00947404 -0.03789617 0.012 + 0.05684426 -0.01421107 -0.04263320 0.012 + 0.06631831 -0.01894809 -0.04737022 0.012 + -0.04737022 0.03789617 0.00947404 0.012 + -0.03789617 0.03315915 0.00473702 0.012 + -0.02842213 0.02842213 -0.00000000 0.012 + -0.01894809 0.02368511 -0.00473702 0.012 + -0.00947404 0.01894809 -0.00947404 0.012 + 0.00000000 0.01421107 -0.01421107 0.012 + 0.01421107 0.01421107 -0.02842213 0.012 + 0.02368511 0.00947404 -0.03315915 0.012 + 0.03315915 0.00473702 -0.03789617 0.012 + 0.04263320 0.00000000 -0.04263320 0.012 + 0.05210724 -0.00473702 -0.04737022 0.012 + 0.06158128 -0.00947404 -0.05210724 0.012 + 0.07105533 -0.01421107 -0.05684426 0.012 + -0.04263320 0.04263320 0.00000000 0.012 + -0.03315915 0.03789617 -0.00473702 0.012 + -0.02368511 0.03315915 -0.00947404 0.012 + -0.01421107 0.02842213 -0.01421107 0.012 + -0.00473702 0.02368511 -0.01894809 0.012 + 0.00473702 0.01894809 -0.02368511 0.012 + 0.01894809 0.01894809 -0.03789617 0.012 + 0.02842213 0.01421107 -0.04263320 0.012 + 0.03789617 0.00947404 -0.04737022 0.012 + 0.04737022 0.00473702 -0.05210724 0.012 + 0.05684426 0.00000000 -0.05684426 0.012 + 0.06631831 -0.00473702 -0.06158128 0.012 + 0.07579235 -0.00947404 -0.06631831 0.012 + -0.03789617 0.04737022 -0.00947404 0.012 + -0.02842213 0.04263320 -0.01421107 0.012 + -0.01894809 0.03789617 -0.01894809 0.012 + -0.00947404 0.03315915 -0.02368511 0.012 + -0.00000000 0.02842213 -0.02842213 0.012 + 0.00947404 0.02368511 -0.03315915 0.012 + 0.02368511 0.02368511 -0.04737022 0.012 + 0.03315915 0.01894809 -0.05210724 0.012 + 0.04263320 0.01421107 -0.05684426 0.012 + 0.05210724 0.00947404 -0.06158128 0.012 + 0.06158128 0.00473702 -0.06631831 0.012 + 0.07105533 0.00000000 -0.07105533 0.012 + 0.08052937 -0.00473702 -0.07579235 0.012 + -0.03315915 0.05210724 -0.01894809 0.012 + -0.02368511 0.04737022 -0.02368511 0.012 + -0.01421107 0.04263320 -0.02842213 0.012 + -0.00473702 0.03789617 -0.03315915 0.012 + 0.00473702 0.03315915 -0.03789617 0.012 + 0.01421107 0.02842213 -0.04263320 0.012 + 0.02842213 0.02842213 -0.05684426 0.012 + 0.03789617 0.02368511 -0.06158128 0.012 + 0.04737022 0.01894809 -0.06631831 0.012 + 0.05684426 0.01421107 -0.07105533 0.012 + 0.06631831 0.00947404 -0.07579235 0.012 + 0.07579235 0.00473702 -0.08052937 0.012 + 0.08526639 0.00000000 -0.08526639 0.012 + -0.02842213 0.05684426 -0.02842213 0.012 + -0.01894809 0.05210724 -0.03315915 0.012 + -0.00947404 0.04737022 -0.03789617 0.012 + 0.00000000 0.04263320 -0.04263320 0.012 + 0.00947404 0.03789617 -0.04737022 0.012 + 0.01894809 0.03315915 -0.05210724 0.012 + + k-points in reciprocal lattice and weights: K-Point Grid Created by Matt Darby on 30 + 0.00000000 0.00000000 0.00000000 0.006 + 0.07692308 0.00000000 0.00000000 0.012 + 0.15384615 0.00000000 0.00000000 0.012 + 0.23076923 0.00000000 0.00000000 0.012 + 0.30769231 0.00000000 0.00000000 0.012 + 0.38461538 0.00000000 0.00000000 0.012 + 0.46153846 0.00000000 0.00000000 0.012 + 0.00000000 0.07692308 0.00000000 0.012 + 0.07692308 0.07692308 0.00000000 0.012 + 0.15384615 0.07692308 0.00000000 0.012 + 0.23076923 0.07692308 -0.00000000 0.012 + 0.30769231 0.07692308 0.00000000 0.012 + 0.38461538 0.07692308 -0.00000000 0.012 + 0.46153846 0.07692308 -0.00000000 0.012 + -0.46153846 0.07692308 -0.00000000 0.012 + -0.38461538 0.07692308 -0.00000000 0.012 + -0.30769231 0.07692308 -0.00000000 0.012 + -0.23076923 0.07692308 0.00000000 0.012 + -0.15384615 0.07692308 -0.00000000 0.012 + -0.07692308 0.07692308 0.00000000 0.012 + -0.00000000 0.15384615 -0.00000000 0.012 + 0.07692308 0.15384615 0.00000000 0.012 + 0.15384615 0.15384615 0.00000000 0.012 + 0.23076923 0.15384615 0.00000000 0.012 + 0.30769231 0.15384615 0.00000000 0.012 + 0.38461538 0.15384615 0.00000000 0.012 + 0.46153846 0.15384615 0.00000000 0.012 + -0.46153846 0.15384615 0.00000000 0.012 + -0.38461538 0.15384615 0.00000000 0.012 + -0.30769231 0.15384615 -0.00000000 0.012 + -0.23076923 0.15384615 0.00000000 0.012 + -0.15384615 0.15384615 -0.00000000 0.012 + -0.07692308 0.15384615 -0.00000000 0.012 + -0.00000000 0.23076923 0.00000000 0.012 + 0.07692308 0.23076923 -0.00000000 0.012 + 0.15384615 0.23076923 0.00000000 0.012 + 0.23076923 0.23076923 0.00000000 0.012 + 0.30769231 0.23076923 0.00000000 0.012 + 0.38461538 0.23076923 -0.00000000 0.012 + 0.46153846 0.23076923 0.00000000 0.012 + -0.46153846 0.23076923 0.00000000 0.012 + -0.38461538 0.23076923 -0.00000000 0.012 + -0.30769231 0.23076923 0.00000000 0.012 + -0.23076923 0.23076923 -0.00000000 0.012 + -0.15384615 0.23076923 0.00000000 0.012 + -0.07692308 0.23076923 0.00000000 0.012 + -0.00000000 0.30769231 0.00000000 0.012 + 0.07692308 0.30769231 0.00000000 0.012 + 0.15384615 0.30769231 0.00000000 0.012 + 0.23076923 0.30769231 0.00000000 0.012 + 0.30769231 0.30769231 0.00000000 0.012 + 0.38461538 0.30769231 0.00000000 0.012 + 0.46153846 0.30769231 0.00000000 0.012 + -0.46153846 0.30769231 0.00000000 0.012 + -0.38461538 0.30769231 0.00000000 0.012 + -0.30769231 0.30769231 0.00000000 0.012 + -0.23076923 0.30769231 0.00000000 0.012 + -0.15384615 0.30769231 0.00000000 0.012 + -0.07692308 0.30769231 0.00000000 0.012 + -0.00000000 0.38461538 0.00000000 0.012 + 0.07692308 0.38461538 -0.00000000 0.012 + 0.15384615 0.38461538 0.00000000 0.012 + 0.23076923 0.38461538 -0.00000000 0.012 + 0.30769231 0.38461538 0.00000000 0.012 + 0.38461538 0.38461538 0.00000000 0.012 + 0.46153846 0.38461538 0.00000000 0.012 + -0.46153846 0.38461538 0.00000000 0.012 + -0.38461538 0.38461538 0.00000000 0.012 + -0.30769231 0.38461538 0.00000000 0.012 + -0.23076923 0.38461538 -0.00000000 0.012 + -0.15384615 0.38461538 0.00000000 0.012 + -0.07692308 0.38461538 -0.00000000 0.012 + -0.00000000 0.46153846 0.00000000 0.012 + 0.07692308 0.46153846 0.00000000 0.012 + 0.15384615 0.46153846 0.00000000 0.012 + 0.23076923 0.46153846 0.00000000 0.012 + 0.30769231 0.46153846 0.00000000 0.012 + 0.38461538 0.46153846 0.00000000 0.012 + 0.46153846 0.46153846 0.00000000 0.012 + -0.46153846 0.46153846 -0.00000000 0.012 + -0.38461538 0.46153846 0.00000000 0.012 + -0.30769231 0.46153846 0.00000000 0.012 + -0.23076923 0.46153846 0.00000000 0.012 + -0.15384615 0.46153846 -0.00000000 0.012 + -0.07692308 0.46153846 0.00000000 0.012 + + position of ions in fractional coordinates (direct lattice) + 0.22222222 0.11111111 0.00000000 + 0.22222222 0.44444444 0.00000000 + 0.22222222 0.77777778 0.00000000 + 0.55555556 0.11111111 0.00000000 + 0.55555556 0.44444444 0.00000000 + 0.55555556 0.77777778 0.00000000 + 0.88888889 0.11111111 0.00000000 + 0.88888889 0.44444444 0.00000000 + 0.88888889 0.77777778 0.00000000 + 0.00000000 0.00000000 0.11363913 + 0.00000000 0.33333333 0.11363913 + 0.00000000 0.66666667 0.11363913 + 0.33333333 0.00000000 0.11363913 + 0.33333333 0.33333333 0.11363913 + 0.33333333 0.66666667 0.11363913 + 0.66666667 0.00000000 0.11363913 + 0.66666667 0.33333333 0.11363913 + 0.66666667 0.66666667 0.11363913 + 0.99812173 0.99766504 0.45202130 + 0.22296876 0.11187016 0.33885197 + 0.11088820 0.22209931 0.22589260 + 0.33368636 0.99764800 0.45225124 + 0.55587035 0.11156162 0.33945346 + 0.44497879 0.22210166 0.22588895 + 0.66737786 0.00051300 0.45158301 + 0.88961391 0.11160025 0.33940326 + 0.77808600 0.22244502 0.22665503 + 0.99810880 0.33417263 0.45216161 + 0.22285453 0.44458611 0.33886336 + 0.11161811 0.55544377 0.22657095 + 0.55563393 0.44456141 0.33879481 + 0.44493188 0.55619682 0.22588855 + 0.67031799 0.33407511 0.45217802 + 0.88925417 0.44466183 0.33914602 + 0.77753042 0.55544052 0.22653065 + 0.00068018 0.66722655 0.45157462 + 0.22282484 0.77819076 0.33916877 + 0.11165052 0.88956583 0.22655910 + 0.33363614 0.66984304 0.45219547 + 0.55586394 0.77784246 0.33942200 + 0.44465095 0.88901717 0.22665391 + 0.67042657 0.66997827 0.45209101 + 0.88930822 0.77813344 0.33907798 + 0.77805555 0.88898302 0.22663478 + 0.33432948 0.33415405 0.45441871 + + position of ions in cartesian coordinates (Angst): + 1.20286667 -0.60143333 -0.60143333 + 1.20286667 1.20286667 -2.40573333 + 1.20286667 3.00716667 -4.21003333 + 3.00716667 -2.40573333 -0.60143333 + 3.00716667 -0.60143333 -2.40573333 + 3.00716667 1.20286667 -4.21003333 + 4.81146667 -4.21003333 -0.60143333 + 4.81146667 -2.40573333 -2.40573333 + 4.81146667 -0.60143333 -4.21003333 + 1.20286667 1.20286667 1.20286667 + 1.20286667 3.00716667 -0.60143333 + 1.20286667 4.81146667 -2.40573333 + 3.00716667 -0.60143333 1.20286667 + 3.00716667 1.20286667 -0.60143333 + 3.00716667 3.00716667 -2.40573333 + 4.81146667 -2.40573333 1.20286667 + 4.81146667 -0.60143333 -0.60143333 + 4.81146667 1.20286667 -2.40573333 + 10.18736471 4.78215954 -0.61562949 + 4.79364537 2.98537214 2.98119578 + 2.99129301 2.99304083 1.18886491 + 6.59327638 8.38102348 -0.61310339 + 6.60197512 1.18810576 2.98923258 + 4.79965328 1.18461599 1.18881355 + 8.39244192 1.17031948 4.77721547 + 8.40796426 -0.61873704 2.98849216 + 6.61083826 -0.60849255 1.19506391 + 10.18877994 1.19229674 2.97727378 + 4.79314757 4.78706913 1.18035815 + 3.00242422 4.80063041 -0.60831504 + 6.59372356 2.98490827 1.17976620 + 4.79939515 2.99328935 -0.61961437 + 8.41465470 2.96624142 2.97797528 + 8.40329408 1.18331634 1.18294016 + 6.60651441 1.19566966 -0.60872399 + 4.78358531 8.38785236 1.16827297 + 4.79621955 6.59623120 -0.62217778 + 3.00247424 6.60889895 -2.41700972 + 6.59241425 6.60632953 1.16068184 + 6.60160739 4.79431904 -0.61761196 + 4.80597582 4.80443462 -2.41303630 + 8.41432151 4.78294293 1.15884414 + 8.40286651 2.98735212 -0.62282841 + 6.61045906 2.99936146 -2.41305403 + 6.61970011 4.80905851 3.00126564 + + + +-------------------------------------------------------------------------------------------------------- + + + k-point 1 : 0.0000 0.0000 0.0000 plane waves: 16943 + k-point 2 : 0.0769 0.0000 0.0000 plane waves: 16935 + k-point 3 : 0.1538 0.0000 0.0000 plane waves: 16955 + k-point 4 : 0.2308 0.0000 0.0000 plane waves: 16932 + k-point 5 : 0.3077 0.0000 0.0000 plane waves: 16886 + k-point 6 : 0.3846 0.0000 0.0000 plane waves: 16874 + k-point 7 : 0.4615 0.0000 0.0000 plane waves: 16856 + k-point 8 : 0.0000 0.0769 0.0000 plane waves: 16935 + k-point 9 : 0.0769 0.0769 0.0000 plane waves: 16959 + k-point 10 : 0.1538 0.0769 0.0000 plane waves: 16930 + k-point 11 : 0.2308 0.0769-0.0000 plane waves: 16910 + k-point 12 : 0.3077 0.0769 0.0000 plane waves: 16914 + k-point 13 : 0.3846 0.0769-0.0000 plane waves: 16868 + k-point 14 : 0.4615 0.0769-0.0000 plane waves: 16856 + k-point 15 : -0.4615 0.0769-0.0000 plane waves: 16868 + k-point 16 : -0.3846 0.0769-0.0000 plane waves: 16914 + k-point 17 : -0.3077 0.0769-0.0000 plane waves: 16910 + k-point 18 : -0.2308 0.0769 0.0000 plane waves: 16930 + k-point 19 : -0.1538 0.0769-0.0000 plane waves: 16959 + k-point 20 : -0.0769 0.0769 0.0000 plane waves: 16935 + k-point 21 : -0.0000 0.1538-0.0000 plane waves: 16955 + k-point 22 : 0.0769 0.1538 0.0000 plane waves: 16930 + k-point 23 : 0.1538 0.1538 0.0000 plane waves: 16933 + k-point 24 : 0.2308 0.1538 0.0000 plane waves: 16913 + k-point 25 : 0.3077 0.1538 0.0000 plane waves: 16897 + k-point 26 : 0.3846 0.1538 0.0000 plane waves: 16850 + k-point 27 : 0.4615 0.1538 0.0000 plane waves: 16850 + k-point 28 : -0.4615 0.1538 0.0000 plane waves: 16897 + k-point 29 : -0.3846 0.1538 0.0000 plane waves: 16913 + k-point 30 : -0.3077 0.1538-0.0000 plane waves: 16933 + k-point 31 : -0.2308 0.1538 0.0000 plane waves: 16930 + k-point 32 : -0.1538 0.1538-0.0000 plane waves: 16955 + k-point 33 : -0.0769 0.1538-0.0000 plane waves: 16959 + k-point 34 : -0.0000 0.2308 0.0000 plane waves: 16932 + k-point 35 : 0.0769 0.2308-0.0000 plane waves: 16910 + k-point 36 : 0.1538 0.2308 0.0000 plane waves: 16913 + k-point 37 : 0.2308 0.2308 0.0000 plane waves: 16885 + k-point 38 : 0.3077 0.2308 0.0000 plane waves: 16884 + k-point 39 : 0.3846 0.2308-0.0000 plane waves: 16872 + k-point 40 : 0.4615 0.2308 0.0000 plane waves: 16884 + k-point 41 : -0.4615 0.2308 0.0000 plane waves: 16885 + k-point 42 : -0.3846 0.2308-0.0000 plane waves: 16913 + k-point 43 : -0.3077 0.2308 0.0000 plane waves: 16910 + k-point 44 : -0.2308 0.2308-0.0000 plane waves: 16932 + k-point 45 : -0.1538 0.2308 0.0000 plane waves: 16930 + k-point 46 : -0.0769 0.2308 0.0000 plane waves: 16930 + k-point 47 : -0.0000 0.3077 0.0000 plane waves: 16886 + k-point 48 : 0.0769 0.3077 0.0000 plane waves: 16914 + k-point 49 : 0.1538 0.3077 0.0000 plane waves: 16897 + k-point 50 : 0.2308 0.3077 0.0000 plane waves: 16884 + k-point 51 : 0.3077 0.3077 0.0000 plane waves: 16896 + k-point 52 : 0.3846 0.3077 0.0000 plane waves: 16896 + k-point 53 : 0.4615 0.3077 0.0000 plane waves: 16884 + k-point 54 : -0.4615 0.3077 0.0000 plane waves: 16897 + k-point 55 : -0.3846 0.3077 0.0000 plane waves: 16914 + k-point 56 : -0.3077 0.3077 0.0000 plane waves: 16886 + k-point 57 : -0.2308 0.3077 0.0000 plane waves: 16910 + k-point 58 : -0.1538 0.3077 0.0000 plane waves: 16933 + k-point 59 : -0.0769 0.3077 0.0000 plane waves: 16910 + k-point 60 : -0.0000 0.3846 0.0000 plane waves: 16874 + k-point 61 : 0.0769 0.3846-0.0000 plane waves: 16868 + k-point 62 : 0.1538 0.3846 0.0000 plane waves: 16850 + k-point 63 : 0.2308 0.3846-0.0000 plane waves: 16872 + k-point 64 : 0.3077 0.3846 0.0000 plane waves: 16896 + k-point 65 : 0.3846 0.3846 0.0000 plane waves: 16872 + k-point 66 : 0.4615 0.3846 0.0000 plane waves: 16850 + k-point 67 : -0.4615 0.3846 0.0000 plane waves: 16868 + k-point 68 : -0.3846 0.3846 0.0000 plane waves: 16874 + k-point 69 : -0.3077 0.3846 0.0000 plane waves: 16914 + k-point 70 : -0.2308 0.3846-0.0000 plane waves: 16913 + k-point 71 : -0.1538 0.3846 0.0000 plane waves: 16913 + k-point 72 : -0.0769 0.3846-0.0000 plane waves: 16914 + k-point 73 : -0.0000 0.4615 0.0000 plane waves: 16856 + k-point 74 : 0.0769 0.4615 0.0000 plane waves: 16856 + k-point 75 : 0.1538 0.4615 0.0000 plane waves: 16850 + k-point 76 : 0.2308 0.4615 0.0000 plane waves: 16884 + k-point 77 : 0.3077 0.4615 0.0000 plane waves: 16884 + k-point 78 : 0.3846 0.4615 0.0000 plane waves: 16850 + k-point 79 : 0.4615 0.4615 0.0000 plane waves: 16856 + k-point 80 : -0.4615 0.4615-0.0000 plane waves: 16856 + k-point 81 : -0.3846 0.4615 0.0000 plane waves: 16868 + k-point 82 : -0.3077 0.4615 0.0000 plane waves: 16897 + k-point 83 : -0.2308 0.4615 0.0000 plane waves: 16885 + k-point 84 : -0.1538 0.4615-0.0000 plane waves: 16897 + k-point 85 : -0.0769 0.4615 0.0000 plane waves: 16868 + + maximum and minimum number of plane-waves per node : 4265 4197 + + maximum number of plane-waves: 16959 + maximum index in each direction: + IXMAX= 12 IYMAX= 12 IZMAX= 29 + IXMIN= -12 IYMIN= -12 IZMIN= -29 + + NGX is ok and might be reduce to 50 + NGY is ok and might be reduce to 50 + NGZ is ok and might be reduce to 118 + + real space projection operators: + total allocation : 31324.50 KBytes + max/ min on nodes : 8136.42 7528.78 + + + parallel 3D FFT for wavefunctions: + minimum data exchange during FFTs selected (reduces bandwidth) + parallel 3D FFT for charge: + minimum data exchange during FFTs selected (reduces bandwidth) + + + total amount of memory used by VASP on root node 283415. kBytes +======================================================================== + + base : 30000. kBytes + nonlr-proj: 15092. kBytes + fftplans : 5374. kBytes + grid : 8538. kBytes + one-center: 186. kBytes + wavefun : 224225. kBytes + + INWAV: cpu time 0.0001: real time 0.0002 + Broyden mixing: mesh for mixing (old mesh) + NGX = 25 NGY = 25 NGZ = 59 + (NGX =100 NGY =100 NGZ =240) + gives a total of 36875 points + + initial charge density was supplied: + charge density of overlapping atoms calculated + number of electron 493.0000000 magnetization + keeping initial charge density in first step + + +-------------------------------------------------------------------------------------------------------- + + + Maximum index for non-local projection operator 1599 + Maximum index for augmentation-charges 1057 (set IRDMAX) + + +-------------------------------------------------------------------------------------------------------- + + + First call to EWALD: gamma= 0.182 + Maximum number of real-space cells 4x 4x 2 + Maximum number of reciprocal cells 2x 2x 5 + + FEWALD executed in parallel + FEWALD: cpu time 0.0028: real time 0.0031 + + +----------------------------------------- Iteration 9( 1) --------------------------------------- + + + POTLOK: cpu time 3.3471: real time 3.3550 + SETDIJ: cpu time 0.0098: real time 0.0098 + EDDAV: cpu time 114.7221: real time 114.9403 + DOS: cpu time 0.0140: real time 0.0140 + CHARGE: cpu time 3.9644: real time 3.9669 + MIXING: cpu time 0.0013: real time 0.0013 + -------------------------------------------- + LOOP: cpu time 122.0606: real time 122.2924 + + eigenvalue-minimisations : 50512 + total energy-change (2. order) :-0.1828837E-03 (-0.8101604E-02) + number of electron 492.9999935 magnetization + augmentation part 320.1990901 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 175, + dipolmoment 0.007876 0.007876 0.007876 electrons x Angstroem + Tr[quadrupol] -4759.793254 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000018 eV + added-field ion interaction -0.008004 eV (added to PSCEN) + + + free energy = -0.619854430311E+02 energy without entropy= -0.619716644593E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 2) --------------------------------------- + + + POTLOK: cpu time 3.0419: real time 3.0412 + SETDIJ: cpu time 0.0097: real time 0.0097 + EDDIAG: cpu time 16.8908: real time 16.8985 + RMM-DIIS: cpu time 48.2608: real time 48.2987 + ORTHCH: cpu time 2.4787: real time 2.4869 + DOS: cpu time 0.0142: real time 0.0142 + CHARGE: cpu time 3.8998: real time 3.8983 + MIXING: cpu time 0.0014: real time 0.0014 + -------------------------------------------- + LOOP: cpu time 74.6010: real time 74.6553 + + eigenvalue-minimisations : 50455 + total energy-change (2. order) :-0.4134508E-04 (-0.4157693E-04) + number of electron 492.9999935 magnetization + augmentation part 320.1994805 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 175, + dipolmoment 0.007629 0.007629 0.007629 electrons x Angstroem + Tr[quadrupol] -4759.794694 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000017 eV + added-field ion interaction -0.007753 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.3292 + 0.3292 + + free energy = -0.619854843762E+02 energy without entropy= -0.619716855826E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 3) --------------------------------------- + + + POTLOK: cpu time 3.0963: real time 3.0956 + SETDIJ: cpu time 0.0097: real time 0.0098 + EDDIAG: cpu time 16.8912: real time 16.8882 + RMM-DIIS: cpu time 50.8439: real time 50.9052 + ORTHCH: cpu time 2.4859: real time 2.4889 + DOS: cpu time 0.0135: real time 0.0143 + CHARGE: cpu time 3.9012: real time 3.9059 + MIXING: cpu time 0.0015: real time 0.0015 + -------------------------------------------- + LOOP: cpu time 77.2468: real time 77.3159 + + eigenvalue-minimisations : 54058 + total energy-change (2. order) : 0.4826732E-05 (-0.4789778E-05) + number of electron 492.9999935 magnetization + augmentation part 320.1987702 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 175, + dipolmoment 0.008170 0.008170 0.008170 electrons x Angstroem + Tr[quadrupol] -4759.793501 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000019 eV + added-field ion interaction -0.008302 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.5705 + 0.9463 0.1946 + + free energy = -0.619854795495E+02 energy without entropy= -0.619717214074E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 4) --------------------------------------- + + + POTLOK: cpu time 3.1004: real time 3.0988 + SETDIJ: cpu time 0.0097: real time 0.0097 + EDDIAG: cpu time 16.9916: real time 17.0074 + RMM-DIIS: cpu time 48.1956: real time 48.2314 + ORTHCH: cpu time 2.4676: real time 2.5054 + DOS: cpu time 0.0142: real time 0.0142 + CHARGE: cpu time 3.9096: real time 3.9082 + MIXING: cpu time 0.0015: real time 0.0015 + -------------------------------------------- + LOOP: cpu time 74.6922: real time 74.7822 + + eigenvalue-minimisations : 50762 + total energy-change (2. order) : 0.2076449E-05 (-0.9511754E-06) + number of electron 492.9999935 magnetization + augmentation part 320.1995296 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 175, + dipolmoment 0.007552 0.007552 0.007552 electrons x Angstroem + Tr[quadrupol] -4759.793422 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000017 eV + added-field ion interaction -0.007674 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.6047 + 1.3158 0.3497 0.1485 + + free energy = -0.619854774730E+02 energy without entropy= -0.619716882665E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 5) --------------------------------------- + + + POTLOK: cpu time 3.0885: real time 3.0881 + SETDIJ: cpu time 0.0097: real time 0.0096 + EDDIAG: cpu time 17.0982: real time 17.1056 + RMM-DIIS: cpu time 48.1724: real time 48.2545 + ORTHCH: cpu time 2.4909: real time 2.4899 + DOS: cpu time 0.0140: real time 0.0140 + CHARGE: cpu time 3.8901: real time 3.9047 + MIXING: cpu time 0.0016: real time 0.0016 + -------------------------------------------- + LOOP: cpu time 74.7676: real time 74.8757 + + eigenvalue-minimisations : 50513 + total energy-change (2. order) : 0.7350405E-05 (-0.5220054E-06) + number of electron 492.9999935 magnetization + augmentation part 320.1992465 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 175, + dipolmoment 0.007943 0.007943 0.007943 electrons x Angstroem + Tr[quadrupol] -4759.793814 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000018 eV + added-field ion interaction -0.008071 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.8172 + 1.8603 0.9811 0.2890 0.1385 + + free energy = -0.619854701226E+02 energy without entropy= -0.619716933757E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 6) --------------------------------------- + + + POTLOK: cpu time 3.0310: real time 3.0315 + SETDIJ: cpu time 0.0096: real time 0.0096 + EDDIAG: cpu time 16.7839: real time 16.7787 + RMM-DIIS: cpu time 48.2978: real time 48.3536 + ORTHCH: cpu time 2.4907: real time 2.4893 + DOS: cpu time 0.0142: real time 0.0142 + CHARGE: cpu time 3.9123: real time 3.9108 + MIXING: cpu time 0.0016: real time 0.0016 + -------------------------------------------- + LOOP: cpu time 74.5434: real time 74.5951 + + eigenvalue-minimisations : 50629 + total energy-change (2. order) : 0.5110487E-06 (-0.5520630E-06) + number of electron 492.9999935 magnetization + augmentation part 320.1991623 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 175, + dipolmoment 0.007852 0.007852 0.007852 electrons x Angstroem + Tr[quadrupol] -4759.793001 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000018 eV + added-field ion interaction -0.007979 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.8626 + 2.3597 1.1195 0.1382 0.2805 0.4153 + + free energy = -0.619854696116E+02 energy without entropy= -0.619717019558E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 7) --------------------------------------- + + + POTLOK: cpu time 3.2750: real time 3.2876 + SETDIJ: cpu time 0.0095: real time 0.0098 + EDDIAG: cpu time 16.9478: real time 16.9705 + RMM-DIIS: cpu time 48.1214: real time 48.1793 + ORTHCH: cpu time 2.4797: real time 2.4787 + DOS: cpu time 0.0142: real time 0.0142 + CHARGE: cpu time 3.8430: real time 3.8416 + MIXING: cpu time 0.0017: real time 0.0017 + -------------------------------------------- + LOOP: cpu time 74.6959: real time 74.7895 + + eigenvalue-minimisations : 50610 + total energy-change (2. order) : 0.8071147E-06 (-0.2336535E-06) + number of electron 492.9999935 magnetization + augmentation part 320.1990407 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 175, + dipolmoment 0.007878 0.007878 0.007878 electrons x Angstroem + Tr[quadrupol] -4759.793975 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000018 eV + added-field ion interaction -0.008006 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.8157 + 2.4176 0.9714 0.7102 0.1381 0.2774 0.3795 + + free energy = -0.619854688045E+02 energy without entropy= -0.619716897597E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 8) --------------------------------------- + + + POTLOK: cpu time 3.1134: real time 3.1124 + SETDIJ: cpu time 0.0096: real time 0.0096 + EDDIAG: cpu time 16.9390: real time 16.9706 + RMM-DIIS: cpu time 28.7119: real time 28.7164 + ORTHCH: cpu time 2.5090: real time 2.5077 + DOS: cpu time 0.0136: real time 0.0136 + -------------------------------------------- + LOOP: cpu time 51.2982: real time 51.3350 + + eigenvalue-minimisations : 28243 + total energy-change (2. order) :-0.5064066E-08 (-0.1501911E-07) + number of electron 492.9999935 magnetization + augmentation part 320.1990407 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 175, + dipolmoment 0.007869 0.007869 0.007869 electrons x Angstroem + Tr[quadrupol] -4759.793724 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000018 eV + added-field ion interaction -0.007996 eV (added to PSCEN) + + + free energy = -0.619854688095E+02 energy without entropy= -0.619716935061E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + + average (electrostatic) potential at core + the test charge radii are 1.0053 1.1806 + (the norm of the test charge is 1.0000) + 1 -43.2210 2 -43.2210 3 -43.2236 4 -43.2115 5 -43.2210 + 6 -43.2115 7 -43.2115 8 -43.2237 9 -43.2236 10 -43.4958 + 11 -43.4957 12 -43.5079 13 -43.4957 14 -43.5002 15 -43.4957 + 16 -43.5017 17 -43.4957 18 -43.4958 19 -43.1782 20 -43.4250 + 21 -43.4994 22 -43.1779 23 -43.4847 24 -43.4993 25 -43.2258 + 26 -43.4849 27 -43.5081 28 -43.1781 29 -43.4248 30 -43.5178 + 31 -43.4249 32 -43.4993 33 -43.1782 34 -43.4754 35 -43.5179 + 36 -43.2188 37 -43.4753 38 -43.5181 39 -43.1779 40 -43.4846 + 41 -43.5081 42 -43.1784 43 -43.4754 44 -43.5083 45 -54.0809 + + + + E-fermi : 0.0637 XC(G=0): -8.5769 alpha+bet : -5.5944 + + +-------------------------------------------------------------------------------------------------------- + + + soft charge-density along one line, spin component 1 + 0 1 2 3 4 5 6 7 8 9 + total charge-density along one line + + pseudopotential strength for first ion, spin component: 1 + -9.030 0.013 -0.016 0.013 0.000 0.914 -0.006 0.007 + 0.013 -9.031 0.008 0.013 -0.014 -0.006 0.915 -0.004 + -0.016 0.008 -9.020 0.008 -0.000 0.007 -0.004 0.910 + 0.013 0.013 0.008 -9.031 0.014 -0.006 -0.006 -0.004 + 0.000 -0.014 -0.000 0.014 -9.020 -0.000 0.007 0.000 + 0.914 -0.006 0.007 -0.006 -0.000 1.151 0.003 -0.003 + -0.006 0.915 -0.004 -0.006 0.007 0.003 1.151 0.002 + 0.007 -0.004 0.910 -0.004 0.000 -0.003 0.002 1.153 + -0.006 -0.006 -0.004 0.915 -0.007 0.003 0.003 0.002 + -0.000 0.007 0.000 -0.007 0.910 0.000 -0.003 -0.000 + -0.004 -0.004 0.000 -0.004 -0.000 0.001 0.001 -0.000 + 0.000 0.000 -0.000 0.000 0.000 -0.000 -0.000 0.000 + -0.004 -0.004 0.003 0.000 0.005 0.003 0.002 -0.002 + 0.000 -0.004 -0.005 -0.004 -0.000 -0.000 0.003 0.003 + -0.004 0.000 0.003 -0.004 -0.005 0.003 -0.000 -0.002 + 0.002 0.002 -0.001 -0.000 -0.002 -0.001 -0.001 0.001 + -0.000 0.002 0.002 0.002 0.000 0.000 -0.001 -0.001 + 0.002 -0.000 -0.001 0.002 0.002 -0.001 0.000 0.001 + total augmentation occupancy for first ion, spin component: 1 + 1.917 0.003 -0.002 0.003 -0.000 -0.024 -0.008 0.012 -0.008 -0.000 0.007 0.021 0.015 0.008 0.015 -0.003 + 0.003 1.916 0.001 0.003 -0.002 -0.008 -0.024 -0.006 -0.008 0.011 0.007 0.021 0.015 0.014 0.009 -0.003 + -0.002 0.001 1.921 0.001 0.000 0.012 -0.006 -0.049 -0.006 0.000 -0.002 -0.000 0.001 -0.001 0.001 0.001 + 0.003 0.003 0.001 1.916 0.002 -0.008 -0.008 -0.006 -0.024 -0.011 0.007 0.021 0.009 0.014 0.015 -0.000 + -0.000 -0.002 0.000 0.002 1.921 -0.000 0.011 0.000 -0.011 -0.049 -0.000 -0.000 0.002 -0.000 -0.002 0.002 + -0.024 -0.008 0.012 -0.008 -0.000 0.061 0.001 0.008 0.001 -0.000 -0.049 0.008 0.023 0.001 0.023 -0.001 + -0.008 -0.024 -0.006 -0.008 0.011 0.001 0.061 -0.004 0.001 0.006 -0.049 0.008 0.023 0.023 0.000 -0.001 + 0.012 -0.006 -0.049 -0.006 0.000 0.008 -0.004 0.051 -0.004 0.000 0.001 0.000 -0.010 0.019 -0.010 0.001 + -0.008 -0.008 -0.006 -0.024 -0.011 0.001 0.001 -0.004 0.061 -0.006 -0.049 0.008 0.000 0.023 0.023 0.000 + -0.000 0.011 0.000 -0.011 -0.049 -0.000 0.006 0.000 -0.006 0.051 0.000 -0.000 -0.016 -0.000 0.016 0.001 + 0.007 0.007 -0.002 0.007 -0.000 -0.049 -0.049 0.001 -0.049 0.000 1.258 -0.282 0.039 0.037 0.039 -0.007 + 0.021 0.021 -0.000 0.021 -0.000 0.008 0.008 0.000 0.008 -0.000 -0.282 0.110 -0.028 -0.028 -0.028 0.003 + 0.015 0.015 0.001 0.009 0.002 0.023 0.023 -0.010 0.000 -0.016 0.039 -0.028 0.149 -0.023 -0.023 -0.009 + 0.008 0.014 -0.001 0.014 -0.000 0.001 0.023 0.019 0.023 -0.000 0.037 -0.028 -0.023 0.151 -0.023 0.001 + 0.015 0.009 0.001 0.015 -0.002 0.023 0.000 -0.010 0.023 0.016 0.039 -0.028 -0.023 -0.023 0.149 0.001 + -0.003 -0.003 0.001 -0.000 0.002 -0.001 -0.001 0.001 0.000 0.001 -0.007 0.003 -0.009 0.001 0.001 0.001 + -0.000 -0.003 -0.002 -0.003 -0.000 0.000 -0.001 -0.002 -0.001 -0.000 -0.007 0.003 0.001 -0.009 0.001 -0.000 + -0.003 -0.000 0.001 -0.003 -0.002 -0.001 0.000 0.001 -0.001 -0.001 -0.007 0.003 0.001 0.001 -0.009 -0.000 + + +------------------------ aborting loop because EDIFF is reached ---------------------------------------- + + + CHARGE: cpu time 3.8733: real time 3.8715 + FORLOC: cpu time 0.0185: real time 0.0184 + FORNL : cpu time 22.8747: real time 22.8990 + STRESS: cpu time 68.8149: real time 68.9064 + FORCOR: cpu time 3.1839: real time 3.1885 + FORHAR: cpu time 0.0333: real time 0.0333 + MIXING: cpu time 0.0021: real time 0.0021 + OFIELD: cpu time 0.0001: real time 0.0001 + + FORCE on cell =-STRESS in cart. coord. units (eV): + Direction XX YY ZZ XY YZ ZX + -------------------------------------------------------------------------------------- + Alpha Z 2770.01282 2770.01282 2770.01282 + Ewald 27674.75125 27675.35802 27675.60290-88145.43488-88141.75807-88144.25724 + Hartree 47328.57790 47328.83325 47328.91378-85595.54576-85593.64910-85594.93965 + E(xc) -2804.13439 -2804.13420 -2804.13489 -0.05203 -0.05111 -0.05128 + Local -79416.97593-79417.78560-79418.09362173732.40948173726.97109173730.67508 + n-local -1665.11530 -1665.10880 -1665.10425 -2.63890 -2.60323 -2.62770 + augment 2521.58928 2521.57077 2521.56758 4.80291 4.75423 4.78294 + Kinetic 3579.73585 3579.73942 3579.73966 9.93071 9.90434 9.92250 + Fock 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + ------------------------------------------------------------------------------------- + Total -11.55852 -11.51433 -11.49602 3.47153 3.56816 3.50465 + in kB -19.90407 -19.82797 -19.79644 5.97806 6.14447 6.03510 + external pressure = -19.84 kB Pullay stress = 0.00 kB + + + VOLUME and BASIS-vectors are now : + ----------------------------------------------------------------------------- + energy-cutoff : 400.00 + volume of cell : 930.40 + direct lattice vectors reciprocal lattice vectors + 5.412900000 -5.412900000 -0.000000000 0.123162568 -0.061581284 -0.061581284 + 0.000000000 5.412900000 -5.412900000 0.061581284 0.061581284 -0.123162568 + 10.584969359 10.584969359 10.584969359 0.031491195 0.031491195 0.031491195 + + length of vectors + 7.654996592 7.654996592 18.333704726 0.150842724 0.150842724 0.054544350 + + + FORCES acting on ions + electron-ion (+dipol) ewald-force non-local-force convergence-correction + ----------------------------------------------------------------------------------------------- + 0.194E+04 0.194E+04 0.194E+04 -.194E+04 -.194E+04 -.194E+04 -.402E+00 -.399E+00 -.251E+00 0.122E-02 0.120E-02 0.125E-02 + 0.194E+04 0.194E+04 0.194E+04 -.194E+04 -.194E+04 -.194E+04 -.401E+00 -.252E+00 -.399E+00 0.121E-02 0.125E-02 0.121E-02 + 0.194E+04 0.194E+04 0.194E+04 -.194E+04 -.194E+04 -.194E+04 -.324E+00 -.398E+00 -.399E+00 0.134E-02 0.121E-02 0.120E-02 + 0.194E+04 0.194E+04 0.194E+04 -.194E+04 -.194E+04 -.194E+04 -.396E+00 -.358E+00 -.396E+00 0.131E-02 0.118E-02 0.130E-02 + 0.194E+04 0.194E+04 0.194E+04 -.194E+04 -.194E+04 -.194E+04 -.251E+00 -.401E+00 -.400E+00 0.125E-02 0.120E-02 0.121E-02 + 0.194E+04 0.194E+04 0.194E+04 -.194E+04 -.194E+04 -.194E+04 -.395E+00 -.396E+00 -.358E+00 0.130E-02 0.130E-02 0.117E-02 + 0.194E+04 0.194E+04 0.194E+04 -.194E+04 -.194E+04 -.194E+04 -.357E+00 -.398E+00 -.395E+00 0.117E-02 0.131E-02 0.130E-02 + 0.194E+04 0.194E+04 0.194E+04 -.194E+04 -.194E+04 -.194E+04 -.398E+00 -.397E+00 -.325E+00 0.120E-02 0.121E-02 0.134E-02 + 0.194E+04 0.194E+04 0.194E+04 -.194E+04 -.194E+04 -.194E+04 -.397E+00 -.323E+00 -.399E+00 0.120E-02 0.133E-02 0.121E-02 + 0.973E+03 0.973E+03 0.971E+03 -.973E+03 -.972E+03 -.971E+03 -.330E+00 -.391E+00 -.368E+00 0.109E-02 0.105E-02 0.942E-03 + 0.973E+03 0.971E+03 0.973E+03 -.973E+03 -.971E+03 -.972E+03 -.329E+00 -.368E+00 -.390E+00 0.107E-02 0.959E-03 0.105E-02 + 0.972E+03 0.972E+03 0.972E+03 -.972E+03 -.972E+03 -.972E+03 -.570E+00 -.569E+00 -.570E+00 0.982E-03 0.968E-03 0.983E-03 + 0.973E+03 0.973E+03 0.971E+03 -.972E+03 -.973E+03 -.971E+03 -.391E+00 -.328E+00 -.367E+00 0.108E-02 0.108E-02 0.944E-03 + 0.972E+03 0.973E+03 0.973E+03 -.972E+03 -.972E+03 -.972E+03 -.381E+00 -.380E+00 -.379E+00 0.111E-02 0.109E-02 0.110E-02 + 0.973E+03 0.971E+03 0.973E+03 -.972E+03 -.971E+03 -.973E+03 -.389E+00 -.367E+00 -.328E+00 0.106E-02 0.956E-03 0.107E-02 + 0.971E+03 0.971E+03 0.971E+03 -.971E+03 -.971E+03 -.971E+03 -.432E+00 -.434E+00 -.433E+00 0.953E-03 0.100E-02 0.965E-03 + 0.971E+03 0.973E+03 0.973E+03 -.971E+03 -.973E+03 -.972E+03 -.368E+00 -.327E+00 -.389E+00 0.935E-03 0.107E-02 0.107E-02 + 0.971E+03 0.973E+03 0.973E+03 -.971E+03 -.972E+03 -.973E+03 -.368E+00 -.389E+00 -.328E+00 0.934E-03 0.106E-02 0.109E-02 + -.198E+04 -.194E+04 -.190E+04 0.198E+04 0.194E+04 0.190E+04 -.774E-01 0.669E-01 0.613E+00 -.645E-03 -.953E-03 -.160E-02 + -.102E+04 -.102E+04 -.975E+03 0.102E+04 0.102E+04 0.975E+03 -.590E+00 -.587E+00 0.243E+00 -.244E-02 -.254E-02 -.200E-02 + -.157E+02 -.989E+01 -.971E+01 0.157E+02 0.993E+01 0.974E+01 0.121E-01 -.386E-01 -.361E-01 0.880E-04 -.405E-03 -.404E-03 + -.194E+04 -.198E+04 -.190E+04 0.194E+04 0.198E+04 0.190E+04 0.668E-01 -.785E-01 0.614E+00 -.736E-03 -.480E-03 -.154E-02 + -.985E+03 -.101E+04 -.985E+03 0.985E+03 0.101E+04 0.985E+03 0.332E+00 0.763E+00 0.330E+00 -.282E-02 -.233E-02 -.280E-02 + -.995E+01 -.157E+02 -.993E+01 0.999E+01 0.157E+02 0.996E+01 -.367E-01 0.152E-01 -.366E-01 -.368E-03 0.436E-04 -.380E-03 + -.194E+04 -.194E+04 -.194E+04 0.194E+04 0.194E+04 0.194E+04 0.608E+00 0.608E+00 0.609E+00 -.176E-02 -.183E-02 -.183E-02 + -.101E+04 -.985E+03 -.985E+03 0.101E+04 0.985E+03 0.984E+03 0.764E+00 0.331E+00 0.331E+00 -.235E-02 -.285E-02 -.284E-02 + -.122E+02 -.123E+02 -.132E+02 0.122E+02 0.123E+02 0.132E+02 -.405E-01 -.421E-01 0.105E-01 -.115E-02 -.111E-02 -.129E-02 + -.198E+04 -.190E+04 -.194E+04 0.198E+04 0.190E+04 0.194E+04 -.792E-01 0.613E+00 0.654E-01 -.334E-03 -.162E-02 -.940E-03 + -.102E+04 -.976E+03 -.102E+04 0.102E+04 0.975E+03 0.102E+04 -.589E+00 0.242E+00 -.588E+00 -.226E-02 -.184E-02 -.239E-02 + -.105E+02 -.104E+02 -.105E+02 0.107E+02 0.104E+02 0.108E+02 -.231E+00 0.148E-01 -.232E+00 -.644E-03 -.869E-03 -.684E-03 + -.975E+03 -.102E+04 -.102E+04 0.975E+03 0.102E+04 0.102E+04 0.243E+00 -.591E+00 -.590E+00 -.186E-02 -.229E-02 -.236E-02 + -.984E+01 -.988E+01 -.157E+02 0.987E+01 0.992E+01 0.156E+02 -.369E-01 -.374E-01 0.149E-01 -.376E-03 -.373E-03 0.118E-03 + -.190E+04 -.198E+04 -.194E+04 0.190E+04 0.198E+04 0.194E+04 0.614E+00 -.786E-01 0.655E-01 -.164E-02 -.267E-03 -.936E-03 + -.987E+03 -.987E+03 -.989E+03 0.986E+03 0.986E+03 0.989E+03 0.440E+00 0.441E+00 0.346E+00 -.270E-02 -.272E-02 -.205E-02 + -.103E+02 -.104E+02 -.105E+02 0.103E+02 0.106E+02 0.107E+02 0.158E-01 -.231E+00 -.233E+00 -.892E-03 -.713E-03 -.641E-03 + -.194E+04 -.194E+04 -.194E+04 0.194E+04 0.194E+04 0.194E+04 0.437E+00 0.439E+00 0.438E+00 -.185E-02 -.192E-02 -.196E-02 + -.989E+03 -.987E+03 -.987E+03 0.989E+03 0.986E+03 0.986E+03 0.345E+00 0.441E+00 0.440E+00 -.200E-02 -.264E-02 -.265E-02 + -.105E+02 -.103E+02 -.103E+02 0.107E+02 0.106E+02 0.103E+02 -.232E+00 -.230E+00 0.143E-01 -.608E-03 -.718E-03 -.865E-03 + -.194E+04 -.190E+04 -.198E+04 0.194E+04 0.190E+04 0.198E+04 0.666E-01 0.615E+00 -.789E-01 -.745E-03 -.187E-02 -.221E-03 + -.985E+03 -.985E+03 -.101E+04 0.984E+03 0.985E+03 0.101E+04 0.332E+00 0.330E+00 0.762E+00 -.285E-02 -.285E-02 -.225E-02 + -.133E+02 -.122E+02 -.122E+02 0.132E+02 0.123E+02 0.122E+02 0.915E-02 -.426E-01 -.417E-01 -.128E-02 -.110E-02 -.110E-02 + -.190E+04 -.194E+04 -.198E+04 0.190E+04 0.194E+04 0.198E+04 0.612E+00 0.652E-01 -.790E-01 -.193E-02 -.956E-03 -.302E-03 + -.986E+03 -.989E+03 -.987E+03 0.986E+03 0.989E+03 0.986E+03 0.440E+00 0.346E+00 0.440E+00 -.273E-02 -.216E-02 -.282E-02 + -.120E+02 -.132E+02 -.121E+02 0.120E+02 0.132E+02 0.121E+02 -.410E-01 0.978E-02 -.416E-01 -.116E-02 -.132E-02 -.112E-02 + -.159E+04 -.159E+04 -.158E+04 0.158E+04 0.158E+04 0.158E+04 0.987E+00 0.987E+00 0.986E+00 0.445E-02 0.390E-02 0.268E-02 + ----------------------------------------------------------------------------------------------- + 0.251E+01 0.251E+01 0.251E+01 0.909E-12 0.909E-11 0.250E-11 -.251E+01 -.251E+01 -.251E+01 -.132E-01 -.144E-01 -.147E-01 + + + POSITION TOTAL-FORCE (eV/Angst) + ----------------------------------------------------------------------------------- + 1.20287 -0.60143 -0.60143 0.060156 0.062695 0.043997 + 1.20287 1.20287 -2.40573 0.061702 0.042919 0.062354 + 1.20287 3.00717 -4.21003 0.049043 0.056724 0.056376 + 3.00717 -2.40573 -0.60143 0.057516 0.054039 0.057705 + 3.00717 -0.60143 -2.40573 0.042916 0.061871 0.061888 + 3.00717 1.20287 -4.21003 0.057911 0.057521 0.054149 + 4.81147 -4.21003 -0.60143 0.054788 0.056007 0.058547 + 4.81147 -2.40573 -2.40573 0.056424 0.056366 0.049128 + 4.81147 -0.60143 -4.21003 0.057178 0.049980 0.054822 + 1.20287 1.20287 1.20287 -0.071365 -0.054607 -0.042166 + 1.20287 3.00717 -0.60143 -0.070464 -0.041176 -0.053724 + 1.20287 4.81147 -2.40573 -0.047763 -0.049271 -0.049758 + 3.00717 -0.60143 1.20287 -0.052327 -0.071716 -0.041564 + 3.00717 1.20287 -0.60143 -0.056767 -0.058271 -0.057802 + 3.00717 3.00717 -2.40573 -0.051979 -0.040959 -0.071831 + 4.81147 -2.40573 1.20287 -0.045362 -0.046999 -0.047350 + 4.81147 -0.60143 -0.60143 -0.039294 -0.071332 -0.053468 + 4.81147 1.20287 -2.40573 -0.039801 -0.054042 -0.072310 + 10.19434 4.78581 -0.61327 0.002333 -0.002246 -0.003614 + 4.78353 2.97627 2.98251 -0.003104 -0.002665 -0.002366 + 2.99007 2.99357 1.18907 -0.000662 -0.001251 -0.000870 + 6.59446 8.38577 -0.61318 -0.003715 0.001941 -0.003612 + 6.60314 1.18884 2.99015 0.000356 -0.001685 0.000688 + 4.79993 1.18418 1.18915 -0.001227 -0.000481 -0.001229 + 8.39122 1.16948 4.77646 0.000139 0.001574 0.002020 + 8.40912 -0.61752 2.98999 -0.002106 0.000925 0.000781 + 6.61023 -0.60877 1.19514 0.001747 0.001348 0.002991 + 10.19418 1.19305 2.97943 0.001705 -0.003807 -0.002607 + 4.78374 4.78783 1.17075 -0.003427 -0.002515 -0.002751 + 2.99936 4.80147 -0.61150 0.002371 -0.001867 0.002356 + 6.59559 2.97578 1.17041 -0.002908 -0.002223 -0.001952 + 4.79973 2.99363 -0.62046 -0.001463 -0.001053 -0.001344 + 8.41465 2.97274 2.97964 -0.004625 0.002237 -0.002911 + 8.40495 1.18444 1.18546 0.000489 0.000574 -0.003908 + 6.60769 1.19314 -0.61160 -0.001748 0.002678 0.002362 + 4.78426 8.38898 1.16959 0.001455 0.002245 0.003185 + 4.79840 6.59752 -0.62096 -0.004289 0.000316 0.000153 + 2.99916 6.60601 -2.41630 0.002182 0.002678 -0.001780 + 6.59425 6.60625 1.16656 -0.003415 -0.003876 0.002150 + 6.60294 4.79535 -0.61685 0.000680 0.001053 -0.001673 + 4.80578 4.80409 -2.41341 0.002693 0.001143 0.001165 + 8.41441 4.78570 1.16642 -0.004392 -0.002485 0.003113 + 8.40493 2.99091 -0.62131 0.000442 -0.003403 0.001202 + 6.60996 2.99959 -2.41366 0.001648 0.004002 0.002064 + 6.59184 4.78314 2.97683 -0.003670 -0.002906 -0.002603 + ----------------------------------------------------------------------------------- + total drift: -0.013784 -0.013988 -0.018306 + + +-------------------------------------------------------------------------------------------------------- + + + + FREE ENERGIE OF THE ION-ELECTRON SYSTEM (eV) + --------------------------------------------------- + free energy TOTEN = -61.98570046 eV + + energy without entropy= -61.97195010 energy(sigma->0) = -61.98111700 + + d Force = 0.7888641E-04[ 0.553E-04, 0.102E-03] d Energy = 0.8331632E-04-0.443E-05 + d Force =-0.6463147E+01[-0.646E+01,-0.646E+01] d Ewald =-0.6463146E+01-0.115E-05 + + +-------------------------------------------------------------------------------------------------------- + + + POTLOK: cpu time 3.1127: real time 3.1119 + + +-------------------------------------------------------------------------------------------------------- + + + stress matrix after NEB project (eV) + -11.55852 3.47153 3.50465 + 3.47153 -11.51433 3.56816 + 3.50465 3.56816 -11.49602 + FORCES: max atom, RMS 0.005929 0.003205 + FORCE total and by dimension 0.021497 0.004625 + Stress total and by dimension 21.736359 11.558519 + Conjugate gradient step on ions: + trial-energy change: -0.000083 1 .order -0.000079 -0.000102 -0.000055 + (g-gl).g = 0.167E-04 g.g = 0.162E-04 gl.gl = 0.543E-04 + g(Force) = 0.162E-04 g(Stress)= 0.000E+00 ortho =-0.202E-06 + gamma = 0.30764 + trial = 6.35094 + opt step = 10.25119 (harmonic = 13.79954) maximal distance =0.00089013 + next E = -61.985718 (d E = -0.00010) + + +-------------------------------------------------------------------------------------------------------- + + + + reached required accuracy - stopping structural energy minimisation + LOOP+: cpu time 730.8608: real time 732.3733 + 4ORBIT: cpu time 0.0000: real time 0.0000 + + total amount of memory used by VASP on root node 283415. kBytes +======================================================================== + + base : 30000. kBytes + nonlr-proj: 15092. kBytes + fftplans : 5374. kBytes + grid : 8538. kBytes + one-center: 186. kBytes + wavefun : 224225. kBytes + + + + General timing and accounting informations for this job: + ======================================================== + + Total CPU time used (sec): 12559.207 + User time (sec): 11991.824 + System time (sec): 567.384 + Elapsed time (sec): 12580.039 + + Maximum memory used (kb): 521544. + Average memory used (kb): 0. + + Minor page faults: 1651814 + Major page faults: 5 + Voluntary context switches: 598500 diff --git a/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu_CH3/INCAR b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu_CH3/INCAR new file mode 100644 index 0000000000000000000000000000000000000000..05d7bac56b76b04368d92324f1577fa8c3a4c9d4 --- /dev/null +++ b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu_CH3/INCAR @@ -0,0 +1,42 @@ +INCAR file from C:\Users\Matt\Documents\Materials Studio Projects\TempProject Files\Documents\PdAu_CH4_PRv2.xsd. Created by Matt Darby on 30-Nov-2017. +INCAR file. Created by M Darby on 30-Nov-2017. +NWRITE = 1 +LWAVE = .FALSE. # write WAVECAR? +LCHARG = .FALSE. # write CHGCAR? +LVTOT = .FALSE. # write LOCPOT? + +GGA = MK # OptB86b-vdW XC-functional used +PARAM1 = 0.1234 +PARAM2 = 1.0000 +LUSE_VDW = .TRUE. +AGGAC = 0.0000 + +IDIPOL = 3 +LDIPOL = .TRUE. + +# Electronic relaxation +ENCUT = 400 # Energy cutoff in eV +# IALGO = 48 # 8: CG, 48: DIIS algorithm for electrons +ALGO = FAST +VOSKOWN = 1 # Default for PBE, RPBE +PREC = ACCURATE +LREAL = AUTO +ROPT = 2e-4 2e-4 2e-4 2e-4 +ISTART = 0 +NELM = 100 +NELMDL = -10 +EDIFF = 1e-7 # This and EDIFFG are the tolerance parameters +ISYM = 2 + +# Ionic relaxation +NSW = 200 # number of steps in optimization (default 0!) +ISIF = 2 # 0: relax ions, 1,2:relax ions,calc stresses, 3:relax ion+cell +IBRION = 2 # 1: quasi-NR, 2:CG algorithm for ions +EDIFFG = -0.01 # For high accuracy, use -0.01 or -0.02 +POTIM = 0.25 # reduce trial step in optimization +ISMEAR = 1 # 0: Gaussian, electron smearing +SIGMA = 0.1 # If gas phase, set to 0.01 + +# Parallel +NPAR = 8 +LPLANE = .TRUE. diff --git a/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu_CH3/OUTCAR b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu_CH3/OUTCAR new file mode 100644 index 0000000000000000000000000000000000000000..8044c060e9ea441d7d7ef22e1c8d531c5c8b7dca --- /dev/null +++ b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu_CH3/OUTCAR @@ -0,0 +1,1905 @@ + vasp.5.4.1 24Jun15 (build Dec 04 2015 16:58:54) complex + + executed on IFC91_ompi date 2018.07.16 14:54:21 + running on 32 total cores + distrk: each k-point on 32 cores, 1 groups + distr: one band on NCORES_PER_BAND= 4 cores, 8 groups + + +-------------------------------------------------------------------------------------------------------- + + + INCAR: + POTCAR: PAW_PBE Cu 05Jan2001 + POTCAR: PAW_PBE Rh 06Sep2000 + POTCAR: PAW_PBE C 08Apr2002 + POTCAR: PAW_PBE H 15Jun2001 + + ----------------------------------------------------------------------------- +| | +| ADVICE TO THIS USER RUNNING 'VASP/VAMP' (HEAR YOUR MASTER'S VOICE ...): | +| | +| You have switched on vdW-DFT. | +| This routine was written and supplied by Jiri Klimes. | +| We recommed that you carefully read and cite the following | +| publication | +| J. Klimes, D.R. Bowler, A. Michelides | +| J. Phys.: Cond Matt. 22 022201 (2010) | +| J. Klimes, D.R. Bowler, A. Michelides | +| Phys. Rev. B. 83, 195131 (2011) | +| and references therein. | +| | + ----------------------------------------------------------------------------- + + POTCAR: PAW_PBE Cu 05Jan2001 + local pseudopotential read in + partial core-charges read in + atomic valenz-charges read in + non local Contribution for L= 2 read in + real space projection operators read in + non local Contribution for L= 2 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + PAW grid and wavefunctions read in + + number of l-projection operators is LMAX = 6 + number of lm-projection operators is LMMAX = 18 + + POTCAR: PAW_PBE Rh 06Sep2000 + local pseudopotential read in + partial core-charges read in + atomic valenz-charges read in + non local Contribution for L= 2 read in + real space projection operators read in + non local Contribution for L= 2 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + PAW grid and wavefunctions read in + + number of l-projection operators is LMAX = 6 + number of lm-projection operators is LMMAX = 18 + + POTCAR: PAW_PBE C 08Apr2002 + local pseudopotential read in + atomic valenz-charges read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + PAW grid and wavefunctions read in + + number of l-projection operators is LMAX = 4 + number of lm-projection operators is LMMAX = 8 + + POTCAR: PAW_PBE H 15Jun2001 + local pseudopotential read in + atomic valenz-charges read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + PAW grid and wavefunctions read in + + number of l-projection operators is LMAX = 3 + number of lm-projection operators is LMMAX = 5 + + Optimization of the real space projectors (new method) + + maximal supplied QI-value = 16.25 + optimisation between [QCUT,QGAM] = [ 10.24, 20.48] = [ 29.35,117.42] Ry + Optimized for a Real-space Cutoff 1.55 Angstroem + + l n(q) QCUT max X(q) W(low)/X(q) W(high)/X(q) e(spline) + 2 9 10.239 4.977 0.78E-05 0.33E-04 0.53E-07 + 2 9 10.239 13.467 0.10E-03 0.30E-03 0.20E-06 + 0 10 10.239 13.303 0.19E-04 0.19E-05 0.69E-08 + 0 10 10.239 44.613 0.65E-04 0.24E-05 0.85E-07 + 1 9 10.239 5.276 0.25E-04 0.19E-04 0.22E-07 + 1 9 10.239 7.322 0.84E-04 0.97E-04 0.11E-06 + Optimization of the real space projectors (new method) + + maximal supplied QI-value = 15.12 + optimisation between [QCUT,QGAM] = [ 10.13, 20.41] = [ 28.73,116.64] Ry + Optimized for a Real-space Cutoff 1.70 Angstroem + + l n(q) QCUT max X(q) W(low)/X(q) W(high)/X(q) e(spline) + 2 9 10.129 3.971 0.16E-04 0.22E-05 0.64E-07 + 2 9 10.129 27.544 0.10E-03 0.24E-04 0.29E-06 + 0 10 10.129 20.781 0.20E-04 0.19E-06 0.11E-07 + 0 10 10.129 69.103 0.45E-04 0.21E-04 0.91E-07 + 1 10 10.129 7.864 0.65E-05 0.54E-05 0.31E-07 + 1 10 10.129 10.811 0.30E-04 0.39E-05 0.12E-06 + Optimization of the real space projectors (new method) + + maximal supplied QI-value = 25.13 + optimisation between [QCUT,QGAM] = [ 10.05, 20.36] = [ 28.30,116.06] Ry + Optimized for a Real-space Cutoff 1.51 Angstroem + + l n(q) QCUT max X(q) W(low)/X(q) W(high)/X(q) e(spline) + 0 9 10.053 5.582 0.29E-04 0.95E-05 0.10E-06 + 0 9 10.053 69.432 0.19E-03 0.21E-03 0.38E-06 + 1 9 10.053 2.780 0.26E-04 0.49E-04 0.22E-06 + 1 9 10.053 4.549 0.59E-04 0.62E-04 0.43E-06 + Optimization of the real space projectors (new method) + + maximal supplied QI-value = 34.20 + optimisation between [QCUT,QGAM] = [ 9.92, 20.18] = [ 27.55,114.04] Ry + Optimized for a Real-space Cutoff 1.34 Angstroem + + l n(q) QCUT max X(q) W(low)/X(q) W(high)/X(q) e(spline) + 0 8 9.919 4.436 0.31E-04 0.59E-04 0.66E-07 + 0 8 9.919 16.131 0.16E-03 0.20E-03 0.35E-06 + 1 8 9.919 4.654 0.19E-03 0.46E-03 0.40E-06 + + ----------------------------------------------------------------------------- +| | +| ADVICE TO THIS USER RUNNING 'VASP/VAMP' (HEAR YOUR MASTER'S VOICE ...): | +| | +| You enforced a specific xc-type in the INCAR file, | +| a different type was found on the POTCAR file | +| I HOPE YOU KNOW, WHAT YOU ARE DOING | +| | + ----------------------------------------------------------------------------- + + PAW_PBE Cu 05Jan2001 : + energy of atom 1 EATOM=-1390.9800 + kinetic energy error for atom= 0.0117 (will be added to EATOM!!) + PAW_PBE Rh 06Sep2000 : + energy of atom 2 EATOM= -616.5493 + kinetic energy error for atom= 0.0043 (will be added to EATOM!!) + PAW_PBE C 08Apr2002 : + energy of atom 3 EATOM= -147.1560 + kinetic energy error for atom= 0.0288 (will be added to EATOM!!) + PAW_PBE H 15Jun2001 : + energy of atom 4 EATOM= -12.4884 + kinetic energy error for atom= 0.0098 (will be added to EATOM!!) + + + POSCAR: POSCAR file for Cu_3x3x5.xsd | Created o + positions in direct lattice + velocities in cartesian coordinates + exchange correlation table for LEXCH = 43 + RHO(1)= 0.500 N(1) = 2000 + RHO(2)= 100.500 N(2) = 4000 + + VTST: version 3.1, (03/28/14) + + CHAIN: initializing optimizer + + OPT: Using VASP Conjugate-Gradient optimizer + CHAIN: Read ICHAIN 0 + + POSCAR: POSCAR file for Cu_3x3x5.xsd | Created o + positions in direct lattice + velocities in cartesian coordinates + + + +-------------------------------------------------------------------------------------------------------- + + + ion position nearest neighbor table + 1 0.222 0.111 0.000- 2 2.55 7 2.55 5 2.55 9 2.55 4 2.55 3 2.55 10 2.55 14 2.55 + 13 2.55 + 2 0.222 0.444 0.000- 1 2.55 8 2.55 7 2.55 3 2.55 5 2.55 6 2.55 11 2.55 14 2.55 + 15 2.55 + 3 0.222 0.778 0.000- 9 2.55 8 2.55 6 2.55 1 2.55 2 2.55 4 2.55 12 2.55 13 2.55 + 15 2.55 + 4 0.556 0.111 0.000- 5 2.55 8 2.55 6 2.55 7 2.55 1 2.55 3 2.55 13 2.55 16 2.55 + 17 2.55 + 5 0.556 0.444 0.000- 4 2.55 1 2.55 17 2.55 6 2.55 8 2.55 2 2.55 9 2.55 14 2.55 + 18 2.55 + 6 0.556 0.778 0.000- 3 2.55 4 2.55 5 2.55 9 2.55 7 2.55 2 2.55 15 2.55 16 2.55 + 18 2.55 + 7 0.889 0.111 0.000- 1 2.55 8 2.55 2 2.55 4 2.55 9 2.55 6 2.55 10 2.55 11 2.55 + 16 2.55 + 8 0.889 0.444 0.000- 2 2.55 7 2.55 4 2.55 3 2.55 11 2.55 9 2.55 5 2.55 12 2.55 + 17 2.55 + 9 0.889 0.778 0.000- 3 2.55 1 2.55 6 2.55 7 2.55 8 2.55 5 2.55 10 2.55 12 2.55 + 18 2.55 + 10 0.000 0.000 0.114- 21 2.55 44 2.55 13 2.55 16 2.55 11 2.55 12 2.55 14 2.55 18 2.55 + 9 2.55 1 2.55 7 2.55 38 2.55 + 11 0.000 0.333 0.114- 21 2.55 30 2.55 27 2.55 12 2.55 15 2.55 8 2.55 14 2.55 10 2.55 + 17 2.55 16 2.55 2 2.55 7 2.55 + 12 0.000 0.667 0.114- 38 2.55 30 2.55 35 2.55 11 2.55 17 2.55 15 2.55 10 2.55 18 2.55 + 13 2.55 3 2.55 8 2.55 9 2.55 + 13 0.333 0.000 0.114- 24 2.55 41 2.55 16 2.55 17 2.55 14 2.55 15 2.55 10 2.55 12 2.55 + 3 2.55 4 2.55 1 2.55 38 2.55 + 14 0.333 0.333 0.114- 32 2.54 24 2.55 21 2.55 17 2.55 15 2.55 18 2.55 11 2.55 13 2.55 + 10 2.55 1 2.55 2 2.55 5 2.55 + 15 0.333 0.667 0.114- 32 2.55 41 2.55 14 2.55 18 2.55 16 2.55 11 2.55 13 2.55 12 2.55 + 2 2.55 6 2.55 3 2.55 30 2.55 + 16 0.667 0.000 0.114- 27 2.55 44 2.55 41 2.55 13 2.55 15 2.55 10 2.55 17 2.55 18 2.55 + 11 2.55 6 2.55 4 2.55 7 2.55 + 17 0.667 0.333 0.114- 24 2.55 27 2.55 35 2.55 18 2.55 14 2.55 13 2.55 12 2.55 5 2.55 + 11 2.55 16 2.55 4 2.55 8 2.55 + 18 0.667 0.667 0.114- 44 2.55 32 2.55 15 2.55 17 2.55 14 2.55 16 2.55 12 2.55 10 2.55 + 5 2.55 6 2.55 9 2.55 35 2.55 + 19 0.997 0.997 0.453- 42 2.52 43 2.53 36 2.54 25 2.54 26 2.55 22 2.57 20 2.57 28 2.57 + 45 2.57 + 20 0.222 0.111 0.339- 38 2.53 24 2.53 21 2.53 23 2.55 31 2.55 26 2.55 29 2.55 37 2.55 + 43 2.55 19 2.57 22 2.57 45 2.67 + 21 0.111 0.222 0.227- 29 2.53 20 2.53 26 2.54 10 2.55 14 2.55 11 2.55 32 2.55 24 2.55 + 27 2.55 44 2.55 38 2.55 30 2.55 + 22 0.333 0.997 0.454- 39 2.52 37 2.53 36 2.54 25 2.54 23 2.55 19 2.57 20 2.57 45 2.57 + 33 2.57 + 23 0.555 0.111 0.340- 25 2.54 41 2.54 27 2.54 24 2.54 34 2.55 37 2.55 20 2.55 33 2.55 + 31 2.55 22 2.55 40 2.56 26 2.56 + 24 0.444 0.222 0.227- 31 2.53 20 2.53 23 2.54 13 2.55 14 2.55 17 2.55 21 2.55 32 2.55 + 41 2.55 27 2.55 38 2.55 35 2.56 + 25 0.666 0.999 0.452- 40 2.54 26 2.54 23 2.54 33 2.54 19 2.54 39 2.54 42 2.54 22 2.54 + 28 2.55 + 26 0.889 0.111 0.340- 25 2.54 44 2.54 21 2.54 27 2.54 43 2.55 34 2.55 29 2.55 20 2.55 + 28 2.55 19 2.55 40 2.56 23 2.56 + 27 0.778 0.222 0.227- 23 2.54 34 2.54 26 2.54 16 2.55 17 2.55 11 2.55 30 2.55 35 2.55 + 41 2.55 21 2.55 44 2.55 24 2.55 + 28 0.998 0.333 0.454- 33 2.52 34 2.53 36 2.54 25 2.55 26 2.55 39 2.57 29 2.57 45 2.57 + 19 2.57 + 29 0.222 0.444 0.339- 21 2.53 30 2.53 32 2.53 40 2.55 26 2.55 31 2.55 20 2.55 34 2.55 + 37 2.55 39 2.57 28 2.57 45 2.67 + 30 0.111 0.555 0.227- 29 2.53 37 2.54 35 2.55 38 2.55 34 2.55 12 2.55 11 2.55 27 2.55 + 41 2.55 15 2.55 32 2.55 21 2.55 + 31 0.555 0.444 0.339- 24 2.53 35 2.53 32 2.53 40 2.55 20 2.55 29 2.55 23 2.55 43 2.55 + 34 2.55 42 2.57 33 2.57 45 2.67 + 32 0.444 0.555 0.227- 29 2.53 31 2.53 40 2.54 14 2.54 15 2.55 18 2.55 21 2.55 24 2.55 + 41 2.55 44 2.55 30 2.55 35 2.56 + 33 0.669 0.333 0.453- 28 2.52 34 2.53 36 2.54 25 2.54 23 2.55 42 2.57 31 2.57 22 2.57 + 45 2.57 + 34 0.888 0.443 0.340- 33 2.53 28 2.53 36 2.54 27 2.54 30 2.55 35 2.55 23 2.55 26 2.55 + 29 2.55 31 2.55 37 2.56 43 2.56 + 35 0.778 0.555 0.227- 31 2.53 43 2.54 30 2.55 38 2.55 34 2.55 12 2.55 17 2.55 44 2.55 + 27 2.55 18 2.55 32 2.56 24 2.56 + 36 1.000 0.666 0.453- 33 2.54 39 2.54 19 2.54 34 2.54 43 2.54 28 2.54 22 2.54 42 2.54 + 37 2.54 + 37 0.223 0.777 0.340- 39 2.53 22 2.53 36 2.54 41 2.54 30 2.54 38 2.55 23 2.55 40 2.55 + 20 2.55 29 2.55 43 2.56 34 2.56 + 38 0.111 0.888 0.227- 20 2.53 35 2.55 30 2.55 37 2.55 43 2.55 12 2.55 44 2.55 41 2.55 + 10 2.55 13 2.55 21 2.55 24 2.55 + 39 0.333 0.668 0.453- 22 2.52 37 2.53 36 2.54 25 2.54 40 2.55 28 2.57 29 2.57 42 2.57 + 45 2.57 + 40 0.555 0.776 0.340- 25 2.54 32 2.54 44 2.54 41 2.54 43 2.55 31 2.55 37 2.55 29 2.55 + 39 2.55 42 2.55 23 2.56 26 2.56 + 41 0.444 0.888 0.227- 23 2.54 40 2.54 37 2.54 15 2.55 13 2.55 16 2.55 30 2.55 38 2.55 + 44 2.55 27 2.55 32 2.55 24 2.55 + 42 0.669 0.668 0.454- 19 2.52 43 2.53 36 2.54 25 2.54 40 2.55 33 2.57 31 2.57 45 2.57 + 39 2.57 + 43 0.888 0.777 0.341- 19 2.53 42 2.53 36 2.54 35 2.54 44 2.55 38 2.55 26 2.55 40 2.55 + 31 2.55 20 2.55 37 2.56 34 2.56 + 44 0.778 0.888 0.227- 26 2.54 40 2.54 43 2.55 18 2.55 16 2.55 10 2.55 35 2.55 38 2.55 + 41 2.55 21 2.55 27 2.55 32 2.55 + 45 0.333 0.332 0.461- 46 2.09 28 2.57 42 2.57 22 2.57 19 2.57 33 2.57 39 2.57 20 2.67 + 31 2.67 29 2.67 + 46 0.333 0.331 0.575- 47 1.10 48 1.10 49 1.10 45 2.09 + 47 0.386 0.486 0.595- 46 1.10 + 48 0.435 0.279 0.595- 46 1.10 + 49 0.179 0.229 0.595- 46 1.10 + + LATTYP: Found a hexagonal cell. + ALAT = 7.6549965918 + C/A-ratio = 2.3949984178 + + Lattice vectors: + + A1 = ( 5.4129000000, -5.4129000000, -0.0000000000) + A2 = ( 0.0000000000, 5.4129000000, -5.4129000000) + A3 = ( 10.5849693586, 10.5849693586, 10.5849693586) + + +Analysis of symmetry for initial positions (statically): +===================================================================== + Subroutine PRICEL returns: + Original cell was already a primitive cell. + + + Routine SETGRP: Setting up the symmetry group for a + hexagonal supercell. + + + Subroutine GETGRP returns: Found 1 space group operations + (whereof 1 operations were pure point group operations) + out of a pool of 24 trial point group operations. + + +The static configuration has the point symmetry C_1 . + + +Analysis of symmetry for dynamics (positions and initial velocities): +===================================================================== + Subroutine PRICEL returns: + Original cell was already a primitive cell. + + + Routine SETGRP: Setting up the symmetry group for a + hexagonal supercell. + + + Subroutine GETGRP returns: Found 1 space group operations + (whereof 1 operations were pure point group operations) + out of a pool of 24 trial point group operations. + + +The dynamic configuration has the point symmetry C_1 . + + +Analysis of constrained symmetry for selective dynamics: +===================================================================== + Subroutine PRICEL returns: + Original cell was already a primitive cell. + + + Routine SETGRP: Setting up the symmetry group for a + hexagonal supercell. + + + Subroutine GETGRP returns: Found 1 space group operations + (whereof 1 operations were pure point group operations) + out of a pool of 24 trial point group operations. + + +The constrained configuration has the point symmetry C_1 . + + + KPOINTS: K-Point Grid Created by Matt Darby on 30 + +Automatic generation of k-mesh. +Space group operators: + irot det(A) alpha n_x n_y n_z tau_x tau_y tau_z + 1 1.000000 0.000000 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 + + Subroutine IBZKPT returns following result: + =========================================== + + Found 85 irreducible k-points: + + Following reciprocal coordinates: + Coordinates Weight + 0.000000 0.000000 0.000000 1.000000 + 0.076923 0.000000 0.000000 2.000000 + 0.153846 0.000000 0.000000 2.000000 + 0.230769 0.000000 0.000000 2.000000 + 0.307692 0.000000 0.000000 2.000000 + 0.384615 0.000000 0.000000 2.000000 + 0.461538 0.000000 0.000000 2.000000 + 0.000000 0.076923 0.000000 2.000000 + 0.076923 0.076923 0.000000 2.000000 + 0.153846 0.076923 0.000000 2.000000 + 0.230769 0.076923 -0.000000 2.000000 + 0.307692 0.076923 0.000000 2.000000 + 0.384615 0.076923 -0.000000 2.000000 + 0.461538 0.076923 -0.000000 2.000000 + -0.461538 0.076923 -0.000000 2.000000 + -0.384615 0.076923 -0.000000 2.000000 + -0.307692 0.076923 -0.000000 2.000000 + -0.230769 0.076923 0.000000 2.000000 + -0.153846 0.076923 -0.000000 2.000000 + -0.076923 0.076923 0.000000 2.000000 + -0.000000 0.153846 -0.000000 2.000000 + 0.076923 0.153846 0.000000 2.000000 + 0.153846 0.153846 0.000000 2.000000 + 0.230769 0.153846 0.000000 2.000000 + 0.307692 0.153846 0.000000 2.000000 + 0.384615 0.153846 0.000000 2.000000 + 0.461538 0.153846 0.000000 2.000000 + -0.461538 0.153846 0.000000 2.000000 + -0.384615 0.153846 0.000000 2.000000 + -0.307692 0.153846 -0.000000 2.000000 + -0.230769 0.153846 0.000000 2.000000 + -0.153846 0.153846 -0.000000 2.000000 + -0.076923 0.153846 -0.000000 2.000000 + -0.000000 0.230769 0.000000 2.000000 + 0.076923 0.230769 -0.000000 2.000000 + 0.153846 0.230769 0.000000 2.000000 + 0.230769 0.230769 0.000000 2.000000 + 0.307692 0.230769 0.000000 2.000000 + 0.384615 0.230769 -0.000000 2.000000 + 0.461538 0.230769 0.000000 2.000000 + -0.461538 0.230769 0.000000 2.000000 + -0.384615 0.230769 -0.000000 2.000000 + -0.307692 0.230769 0.000000 2.000000 + -0.230769 0.230769 -0.000000 2.000000 + -0.153846 0.230769 0.000000 2.000000 + -0.076923 0.230769 0.000000 2.000000 + -0.000000 0.307692 0.000000 2.000000 + 0.076923 0.307692 0.000000 2.000000 + 0.153846 0.307692 0.000000 2.000000 + 0.230769 0.307692 0.000000 2.000000 + 0.307692 0.307692 0.000000 2.000000 + 0.384615 0.307692 0.000000 2.000000 + 0.461538 0.307692 0.000000 2.000000 + -0.461538 0.307692 0.000000 2.000000 + -0.384615 0.307692 0.000000 2.000000 + -0.307692 0.307692 0.000000 2.000000 + -0.230769 0.307692 0.000000 2.000000 + -0.153846 0.307692 0.000000 2.000000 + -0.076923 0.307692 0.000000 2.000000 + -0.000000 0.384615 0.000000 2.000000 + 0.076923 0.384615 -0.000000 2.000000 + 0.153846 0.384615 0.000000 2.000000 + 0.230769 0.384615 -0.000000 2.000000 + 0.307692 0.384615 0.000000 2.000000 + 0.384615 0.384615 0.000000 2.000000 + 0.461538 0.384615 0.000000 2.000000 + -0.461538 0.384615 0.000000 2.000000 + -0.384615 0.384615 0.000000 2.000000 + -0.307692 0.384615 0.000000 2.000000 + -0.230769 0.384615 -0.000000 2.000000 + -0.153846 0.384615 0.000000 2.000000 + -0.076923 0.384615 -0.000000 2.000000 + -0.000000 0.461538 0.000000 2.000000 + 0.076923 0.461538 0.000000 2.000000 + 0.153846 0.461538 0.000000 2.000000 + 0.230769 0.461538 0.000000 2.000000 + 0.307692 0.461538 0.000000 2.000000 + 0.384615 0.461538 0.000000 2.000000 + 0.461538 0.461538 0.000000 2.000000 + -0.461538 0.461538 -0.000000 2.000000 + -0.384615 0.461538 0.000000 2.000000 + -0.307692 0.461538 0.000000 2.000000 + -0.230769 0.461538 0.000000 2.000000 + -0.153846 0.461538 -0.000000 2.000000 + -0.076923 0.461538 0.000000 2.000000 + + Following cartesian coordinates: + Coordinates Weight + 0.000000 0.000000 0.000000 1.000000 + 0.009474 -0.004737 -0.004737 2.000000 + 0.018948 -0.009474 -0.009474 2.000000 + 0.028422 -0.014211 -0.014211 2.000000 + 0.037896 -0.018948 -0.018948 2.000000 + 0.047370 -0.023685 -0.023685 2.000000 + 0.056844 -0.028422 -0.028422 2.000000 + 0.004737 0.004737 -0.009474 2.000000 + 0.014211 0.000000 -0.014211 2.000000 + 0.023685 -0.004737 -0.018948 2.000000 + 0.033159 -0.009474 -0.023685 2.000000 + 0.042633 -0.014211 -0.028422 2.000000 + 0.052107 -0.018948 -0.033159 2.000000 + 0.061581 -0.023685 -0.037896 2.000000 + -0.052107 0.033159 0.018948 2.000000 + -0.042633 0.028422 0.014211 2.000000 + -0.033159 0.023685 0.009474 2.000000 + -0.023685 0.018948 0.004737 2.000000 + -0.014211 0.014211 0.000000 2.000000 + -0.004737 0.009474 -0.004737 2.000000 + 0.009474 0.009474 -0.018948 2.000000 + 0.018948 0.004737 -0.023685 2.000000 + 0.028422 0.000000 -0.028422 2.000000 + 0.037896 -0.004737 -0.033159 2.000000 + 0.047370 -0.009474 -0.037896 2.000000 + 0.056844 -0.014211 -0.042633 2.000000 + 0.066318 -0.018948 -0.047370 2.000000 + -0.047370 0.037896 0.009474 2.000000 + -0.037896 0.033159 0.004737 2.000000 + -0.028422 0.028422 -0.000000 2.000000 + -0.018948 0.023685 -0.004737 2.000000 + -0.009474 0.018948 -0.009474 2.000000 + 0.000000 0.014211 -0.014211 2.000000 + 0.014211 0.014211 -0.028422 2.000000 + 0.023685 0.009474 -0.033159 2.000000 + 0.033159 0.004737 -0.037896 2.000000 + 0.042633 0.000000 -0.042633 2.000000 + 0.052107 -0.004737 -0.047370 2.000000 + 0.061581 -0.009474 -0.052107 2.000000 + 0.071055 -0.014211 -0.056844 2.000000 + -0.042633 0.042633 0.000000 2.000000 + -0.033159 0.037896 -0.004737 2.000000 + -0.023685 0.033159 -0.009474 2.000000 + -0.014211 0.028422 -0.014211 2.000000 + -0.004737 0.023685 -0.018948 2.000000 + 0.004737 0.018948 -0.023685 2.000000 + 0.018948 0.018948 -0.037896 2.000000 + 0.028422 0.014211 -0.042633 2.000000 + 0.037896 0.009474 -0.047370 2.000000 + 0.047370 0.004737 -0.052107 2.000000 + 0.056844 0.000000 -0.056844 2.000000 + 0.066318 -0.004737 -0.061581 2.000000 + 0.075792 -0.009474 -0.066318 2.000000 + -0.037896 0.047370 -0.009474 2.000000 + -0.028422 0.042633 -0.014211 2.000000 + -0.018948 0.037896 -0.018948 2.000000 + -0.009474 0.033159 -0.023685 2.000000 + -0.000000 0.028422 -0.028422 2.000000 + 0.009474 0.023685 -0.033159 2.000000 + 0.023685 0.023685 -0.047370 2.000000 + 0.033159 0.018948 -0.052107 2.000000 + 0.042633 0.014211 -0.056844 2.000000 + 0.052107 0.009474 -0.061581 2.000000 + 0.061581 0.004737 -0.066318 2.000000 + 0.071055 0.000000 -0.071055 2.000000 + 0.080529 -0.004737 -0.075792 2.000000 + -0.033159 0.052107 -0.018948 2.000000 + -0.023685 0.047370 -0.023685 2.000000 + -0.014211 0.042633 -0.028422 2.000000 + -0.004737 0.037896 -0.033159 2.000000 + 0.004737 0.033159 -0.037896 2.000000 + 0.014211 0.028422 -0.042633 2.000000 + 0.028422 0.028422 -0.056844 2.000000 + 0.037896 0.023685 -0.061581 2.000000 + 0.047370 0.018948 -0.066318 2.000000 + 0.056844 0.014211 -0.071055 2.000000 + 0.066318 0.009474 -0.075792 2.000000 + 0.075792 0.004737 -0.080529 2.000000 + 0.085266 0.000000 -0.085266 2.000000 + -0.028422 0.056844 -0.028422 2.000000 + -0.018948 0.052107 -0.033159 2.000000 + -0.009474 0.047370 -0.037896 2.000000 + 0.000000 0.042633 -0.042633 2.000000 + 0.009474 0.037896 -0.047370 2.000000 + 0.018948 0.033159 -0.052107 2.000000 + + + +-------------------------------------------------------------------------------------------------------- + + + + + Dimension of arrays: + k-points NKPTS = 85 k-points in BZ NKDIM = 85 number of bands NBANDS= 304 + number of dos NEDOS = 301 number of ions NIONS = 49 + non local maximal LDIM = 6 non local SUM 2l+1 LMDIM = 18 + total plane-waves NPLWV = 300000 + max r-space proj IRMAX = 6660 max aug-charges IRDMAX= 18523 + dimension x,y,z NGX = 50 NGY = 50 NGZ = 120 + dimension x,y,z NGXF= 100 NGYF= 100 NGZF= 240 + support grid NGXF= 100 NGYF= 100 NGZF= 240 + ions per type = 44 1 1 3 + NGX,Y,Z is equivalent to a cutoff of 10.86, 10.86, 10.88 a.u. + NGXF,Y,Z is equivalent to a cutoff of 21.72, 21.72, 21.76 a.u. + + + I would recommend the setting: + dimension x,y,z NGX = 50 NGY = 50 NGZ = 120 + SYSTEM = unknown system + POSCAR = POSCAR file for Cu_3x3x5.xsd | Created o + + Startparameter for this run: + NWRITE = 1 write-flag & timer + PREC = accura normal or accurate (medium, high low for compatibility) + ISTART = 0 job : 0-new 1-cont 2-samecut + ICHARG = 2 charge: 1-file 2-atom 10-const + ISPIN = 1 spin polarized calculation? + LNONCOLLINEAR = F non collinear calculations + LSORBIT = F spin-orbit coupling + INIWAV = 1 electr: 0-lowe 1-rand 2-diag + LASPH = F aspherical Exc in radial PAW + METAGGA= F non-selfconsistent MetaGGA calc. + + Electronic Relaxation 1 + ENCUT = 400.0 eV 29.40 Ry 5.42 a.u. 12.48 12.48 29.90*2*pi/ulx,y,z + ENINI = 400.0 initial cutoff + ENAUG = 644.9 eV augmentation charge cutoff + NELM = 100; NELMIN= 2; NELMDL=-10 # of ELM steps + EDIFF = 0.1E-06 stopping-criterion for ELM + LREAL = T real-space projection + NLSPLINE = F spline interpolate recip. space projectors + LCOMPAT= F compatible to vasp.4.4 + GGA_COMPAT = T GGA compatible to vasp.4.4-vasp.4.6 + LMAXPAW = -100 max onsite density + LMAXMIX = 2 max onsite mixed and CHGCAR + VOSKOWN= 1 Vosko Wilk Nusair interpolation + ROPT = -0.00020 -0.00020 -0.00020 -0.00020 + Ionic relaxation + EDIFFG = -.1E-01 stopping-criterion for IOM + NSW = 200 number of steps for IOM + NBLOCK = 1; KBLOCK = 200 inner block; outer block + IBRION = 2 ionic relax: 0-MD 1-quasi-New 2-CG + NFREE = 1 steps in history (QN), initial steepest desc. (CG) + ISIF = 2 stress and relaxation + IWAVPR = 11 prediction: 0-non 1-charg 2-wave 3-comb + ISYM = 2 0-nonsym 1-usesym 2-fastsym + LCORR = T Harris-Foulkes like correction to forces + + POTIM = 0.2500 time-step for ionic-motion + TEIN = 0.0 initial temperature + TEBEG = 0.0; TEEND = 0.0 temperature during run + SMASS = -3.00 Nose mass-parameter (am) + estimated Nose-frequenzy (Omega) = 0.10E-29 period in steps =****** mass= -0.134E-26a.u. + SCALEE = 1.0000 scale energy and forces + NPACO = 256; APACO = 16.0 distance and # of slots for P.C. + PSTRESS= 0.0 pullay stress + + Mass of Ions in am + POMASS = 63.55102.91 12.01 1.00 + Ionic Valenz + ZVAL = 11.00 9.00 4.00 1.00 + Atomic Wigner-Seitz radii + RWIGS = -1.00 -1.00 -1.00 -1.00 + virtual crystal weights + VCA = 1.00 1.00 1.00 1.00 + NELECT = 500.0000 total number of electrons + NUPDOWN= -1.0000 fix difference up-down + + DOS related values: + EMIN = 10.00; EMAX =-10.00 energy-range for DOS + EFERMI = 0.00 + ISMEAR = 1; SIGMA = 0.10 broadening in eV -4-tet -1-fermi 0-gaus + + Electronic relaxation 2 (details) + IALGO = 68 algorithm + LDIAG = T sub-space diagonalisation (order eigenvalues) + LSUBROT= F optimize rotation matrix (better conditioning) + TURBO = 0 0=normal 1=particle mesh + IRESTART = 0 0=no restart 2=restart with 2 vectors + NREBOOT = 0 no. of reboots + NMIN = 0 reboot dimension + EREF = 0.00 reference energy to select bands + IMIX = 4 mixing-type and parameters + AMIX = 0.40; BMIX = 1.00 + AMIX_MAG = 1.60; BMIX_MAG = 1.00 + AMIN = 0.10 + WC = 100.; INIMIX= 1; MIXPRE= 1; MAXMIX= -45 + + Intra band minimization: + WEIMIN = 0.0010 energy-eigenvalue tresh-hold + EBREAK = 0.82E-10 absolut break condition + DEPER = 0.30 relativ break condition + + TIME = 0.40 timestep for ELM + + volume/ion in A,a.u. = 18.99 128.14 + Fermi-wavevector in a.u.,A,eV,Ry = 1.330989 2.515205 24.103161 1.771532 + Thomas-Fermi vector in A = 2.460034 + + Write flags + LWAVE = F write WAVECAR + LCHARG = F write CHGCAR + LVTOT = F write LOCPOT, total local potential + LVHAR = F write LOCPOT, Hartree potential only + LELF = F write electronic localiz. function (ELF) + LORBIT = 0 0 simple, 1 ext, 2 COOP (PROOUT) + + + Dipole corrections + LMONO = F monopole corrections only (constant potential shift) + LDIPOL = T correct potential (dipole corrections) + IDIPOL = 3 1-x, 2-y, 3-z, 4-all directions + EPSILON= 1.0000000 bulk dielectric constant + + Exchange correlation treatment: + GGA = MK GGA type + LEXCH = 43 internal setting for exchange type + VOSKOWN= 1 Vosko Wilk Nusair interpolation + LHFCALC = F Hartree Fock is set to + LHFONE = F Hartree Fock one center treatment + AEXX = 0.0000 exact exchange contribution + + vdW DFT: + LUSE_VDW = T switch on vdW DFT + Zab_VDW =-.8491 correlation parameter + PARAM1 =0.1234 + PARAM2 =1.0000 + PARAM3 =0.0000 + + Linear response parameters + LEPSILON= F determine dielectric tensor + LRPA = F only Hartree local field effects (RPA) + LNABLA = F use nabla operator in PAW spheres + LVEL = F velocity operator in full k-point grid + LINTERFAST= F fast interpolation + KINTER = 0 interpolate to denser k-point grid + CSHIFT =0.1000 complex shift for real part using Kramers Kronig + OMEGAMAX= -1.0 maximum frequency + DEG_THRESHOLD= 0.2000000E-02 threshold for treating states as degnerate + RTIME = 0.100 relaxation time in fs + + Orbital magnetization related: + ORBITALMAG= F switch on orbital magnetization + LCHIMAG = F perturbation theory with respect to B field + DQ = 0.001000 dq finite difference perturbation B field + + + +-------------------------------------------------------------------------------------------------------- + + + conjugate gradient relaxation of ions + using selective dynamics as specified on POSCAR + charge density and potential will be updated during run + non-spin polarized calculation + RMM-DIIS sequential band-by-band and + variant of blocked Davidson during initial phase + perform sub-space diagonalisation + before iterative eigenvector-optimisation + modified Broyden-mixing scheme, WC = 100.0 + initial mixing is a Kerker type mixing with AMIX = 0.4000 and BMIX = 1.0000 + Hartree-type preconditioning will be used + using additional bands 54 + real space projection scheme for non local part + use partial core corrections + calculate Harris-corrections to forces + (improved forces if not selfconsistent) + use gradient corrections + use of overlap-Matrix (Vanderbilt PP) + Methfessel and Paxton Order N= 1 SIGMA = 0.10 + + +-------------------------------------------------------------------------------------------------------- + + + energy-cutoff : 400.00 + volume of cell : 930.40 + direct lattice vectors reciprocal lattice vectors + 5.412900000 -5.412900000 -0.000000000 0.123162568 -0.061581284 -0.061581284 + 0.000000000 5.412900000 -5.412900000 0.061581284 0.061581284 -0.123162568 + 10.584969359 10.584969359 10.584969359 0.031491195 0.031491195 0.031491195 + + length of vectors + 7.654996592 7.654996592 18.333704726 0.150842724 0.150842724 0.054544350 + + + + k-points in units of 2pi/SCALE and weight: K-Point Grid Created by Matt Darby on 30 + 0.00000000 0.00000000 0.00000000 0.006 + 0.00947404 -0.00473702 -0.00473702 0.012 + 0.01894809 -0.00947404 -0.00947404 0.012 + 0.02842213 -0.01421107 -0.01421107 0.012 + 0.03789617 -0.01894809 -0.01894809 0.012 + 0.04737022 -0.02368511 -0.02368511 0.012 + 0.05684426 -0.02842213 -0.02842213 0.012 + 0.00473702 0.00473702 -0.00947404 0.012 + 0.01421107 0.00000000 -0.01421107 0.012 + 0.02368511 -0.00473702 -0.01894809 0.012 + 0.03315915 -0.00947404 -0.02368511 0.012 + 0.04263320 -0.01421107 -0.02842213 0.012 + 0.05210724 -0.01894809 -0.03315915 0.012 + 0.06158128 -0.02368511 -0.03789617 0.012 + -0.05210724 0.03315915 0.01894809 0.012 + -0.04263320 0.02842213 0.01421107 0.012 + -0.03315915 0.02368511 0.00947404 0.012 + -0.02368511 0.01894809 0.00473702 0.012 + -0.01421107 0.01421107 0.00000000 0.012 + -0.00473702 0.00947404 -0.00473702 0.012 + 0.00947404 0.00947404 -0.01894809 0.012 + 0.01894809 0.00473702 -0.02368511 0.012 + 0.02842213 0.00000000 -0.02842213 0.012 + 0.03789617 -0.00473702 -0.03315915 0.012 + 0.04737022 -0.00947404 -0.03789617 0.012 + 0.05684426 -0.01421107 -0.04263320 0.012 + 0.06631831 -0.01894809 -0.04737022 0.012 + -0.04737022 0.03789617 0.00947404 0.012 + -0.03789617 0.03315915 0.00473702 0.012 + -0.02842213 0.02842213 -0.00000000 0.012 + -0.01894809 0.02368511 -0.00473702 0.012 + -0.00947404 0.01894809 -0.00947404 0.012 + 0.00000000 0.01421107 -0.01421107 0.012 + 0.01421107 0.01421107 -0.02842213 0.012 + 0.02368511 0.00947404 -0.03315915 0.012 + 0.03315915 0.00473702 -0.03789617 0.012 + 0.04263320 0.00000000 -0.04263320 0.012 + 0.05210724 -0.00473702 -0.04737022 0.012 + 0.06158128 -0.00947404 -0.05210724 0.012 + 0.07105533 -0.01421107 -0.05684426 0.012 + -0.04263320 0.04263320 0.00000000 0.012 + -0.03315915 0.03789617 -0.00473702 0.012 + -0.02368511 0.03315915 -0.00947404 0.012 + -0.01421107 0.02842213 -0.01421107 0.012 + -0.00473702 0.02368511 -0.01894809 0.012 + 0.00473702 0.01894809 -0.02368511 0.012 + 0.01894809 0.01894809 -0.03789617 0.012 + 0.02842213 0.01421107 -0.04263320 0.012 + 0.03789617 0.00947404 -0.04737022 0.012 + 0.04737022 0.00473702 -0.05210724 0.012 + 0.05684426 0.00000000 -0.05684426 0.012 + 0.06631831 -0.00473702 -0.06158128 0.012 + 0.07579235 -0.00947404 -0.06631831 0.012 + -0.03789617 0.04737022 -0.00947404 0.012 + -0.02842213 0.04263320 -0.01421107 0.012 + -0.01894809 0.03789617 -0.01894809 0.012 + -0.00947404 0.03315915 -0.02368511 0.012 + -0.00000000 0.02842213 -0.02842213 0.012 + 0.00947404 0.02368511 -0.03315915 0.012 + 0.02368511 0.02368511 -0.04737022 0.012 + 0.03315915 0.01894809 -0.05210724 0.012 + 0.04263320 0.01421107 -0.05684426 0.012 + 0.05210724 0.00947404 -0.06158128 0.012 + 0.06158128 0.00473702 -0.06631831 0.012 + 0.07105533 0.00000000 -0.07105533 0.012 + 0.08052937 -0.00473702 -0.07579235 0.012 + -0.03315915 0.05210724 -0.01894809 0.012 + -0.02368511 0.04737022 -0.02368511 0.012 + -0.01421107 0.04263320 -0.02842213 0.012 + -0.00473702 0.03789617 -0.03315915 0.012 + 0.00473702 0.03315915 -0.03789617 0.012 + 0.01421107 0.02842213 -0.04263320 0.012 + 0.02842213 0.02842213 -0.05684426 0.012 + 0.03789617 0.02368511 -0.06158128 0.012 + 0.04737022 0.01894809 -0.06631831 0.012 + 0.05684426 0.01421107 -0.07105533 0.012 + 0.06631831 0.00947404 -0.07579235 0.012 + 0.07579235 0.00473702 -0.08052937 0.012 + 0.08526639 0.00000000 -0.08526639 0.012 + -0.02842213 0.05684426 -0.02842213 0.012 + -0.01894809 0.05210724 -0.03315915 0.012 + -0.00947404 0.04737022 -0.03789617 0.012 + 0.00000000 0.04263320 -0.04263320 0.012 + 0.00947404 0.03789617 -0.04737022 0.012 + 0.01894809 0.03315915 -0.05210724 0.012 + + k-points in reciprocal lattice and weights: K-Point Grid Created by Matt Darby on 30 + 0.00000000 0.00000000 0.00000000 0.006 + 0.07692308 0.00000000 0.00000000 0.012 + 0.15384615 0.00000000 0.00000000 0.012 + 0.23076923 0.00000000 0.00000000 0.012 + 0.30769231 0.00000000 0.00000000 0.012 + 0.38461538 0.00000000 0.00000000 0.012 + 0.46153846 0.00000000 0.00000000 0.012 + 0.00000000 0.07692308 0.00000000 0.012 + 0.07692308 0.07692308 0.00000000 0.012 + 0.15384615 0.07692308 0.00000000 0.012 + 0.23076923 0.07692308 -0.00000000 0.012 + 0.30769231 0.07692308 0.00000000 0.012 + 0.38461538 0.07692308 -0.00000000 0.012 + 0.46153846 0.07692308 -0.00000000 0.012 + -0.46153846 0.07692308 -0.00000000 0.012 + -0.38461538 0.07692308 -0.00000000 0.012 + -0.30769231 0.07692308 -0.00000000 0.012 + -0.23076923 0.07692308 0.00000000 0.012 + -0.15384615 0.07692308 -0.00000000 0.012 + -0.07692308 0.07692308 0.00000000 0.012 + -0.00000000 0.15384615 -0.00000000 0.012 + 0.07692308 0.15384615 0.00000000 0.012 + 0.15384615 0.15384615 0.00000000 0.012 + 0.23076923 0.15384615 0.00000000 0.012 + 0.30769231 0.15384615 0.00000000 0.012 + 0.38461538 0.15384615 0.00000000 0.012 + 0.46153846 0.15384615 0.00000000 0.012 + -0.46153846 0.15384615 0.00000000 0.012 + -0.38461538 0.15384615 0.00000000 0.012 + -0.30769231 0.15384615 -0.00000000 0.012 + -0.23076923 0.15384615 0.00000000 0.012 + -0.15384615 0.15384615 -0.00000000 0.012 + -0.07692308 0.15384615 -0.00000000 0.012 + -0.00000000 0.23076923 0.00000000 0.012 + 0.07692308 0.23076923 -0.00000000 0.012 + 0.15384615 0.23076923 0.00000000 0.012 + 0.23076923 0.23076923 0.00000000 0.012 + 0.30769231 0.23076923 0.00000000 0.012 + 0.38461538 0.23076923 -0.00000000 0.012 + 0.46153846 0.23076923 0.00000000 0.012 + -0.46153846 0.23076923 0.00000000 0.012 + -0.38461538 0.23076923 -0.00000000 0.012 + -0.30769231 0.23076923 0.00000000 0.012 + -0.23076923 0.23076923 -0.00000000 0.012 + -0.15384615 0.23076923 0.00000000 0.012 + -0.07692308 0.23076923 0.00000000 0.012 + -0.00000000 0.30769231 0.00000000 0.012 + 0.07692308 0.30769231 0.00000000 0.012 + 0.15384615 0.30769231 0.00000000 0.012 + 0.23076923 0.30769231 0.00000000 0.012 + 0.30769231 0.30769231 0.00000000 0.012 + 0.38461538 0.30769231 0.00000000 0.012 + 0.46153846 0.30769231 0.00000000 0.012 + -0.46153846 0.30769231 0.00000000 0.012 + -0.38461538 0.30769231 0.00000000 0.012 + -0.30769231 0.30769231 0.00000000 0.012 + -0.23076923 0.30769231 0.00000000 0.012 + -0.15384615 0.30769231 0.00000000 0.012 + -0.07692308 0.30769231 0.00000000 0.012 + -0.00000000 0.38461538 0.00000000 0.012 + 0.07692308 0.38461538 -0.00000000 0.012 + 0.15384615 0.38461538 0.00000000 0.012 + 0.23076923 0.38461538 -0.00000000 0.012 + 0.30769231 0.38461538 0.00000000 0.012 + 0.38461538 0.38461538 0.00000000 0.012 + 0.46153846 0.38461538 0.00000000 0.012 + -0.46153846 0.38461538 0.00000000 0.012 + -0.38461538 0.38461538 0.00000000 0.012 + -0.30769231 0.38461538 0.00000000 0.012 + -0.23076923 0.38461538 -0.00000000 0.012 + -0.15384615 0.38461538 0.00000000 0.012 + -0.07692308 0.38461538 -0.00000000 0.012 + -0.00000000 0.46153846 0.00000000 0.012 + 0.07692308 0.46153846 0.00000000 0.012 + 0.15384615 0.46153846 0.00000000 0.012 + 0.23076923 0.46153846 0.00000000 0.012 + 0.30769231 0.46153846 0.00000000 0.012 + 0.38461538 0.46153846 0.00000000 0.012 + 0.46153846 0.46153846 0.00000000 0.012 + -0.46153846 0.46153846 -0.00000000 0.012 + -0.38461538 0.46153846 0.00000000 0.012 + -0.30769231 0.46153846 0.00000000 0.012 + -0.23076923 0.46153846 0.00000000 0.012 + -0.15384615 0.46153846 -0.00000000 0.012 + -0.07692308 0.46153846 0.00000000 0.012 + + position of ions in fractional coordinates (direct lattice) + 0.22222222 0.11111111 0.00000000 + 0.22222222 0.44444444 0.00000000 + 0.22222222 0.77777778 0.00000000 + 0.55555556 0.11111111 0.00000000 + 0.55555556 0.44444444 0.00000000 + 0.55555556 0.77777778 0.00000000 + 0.88888889 0.11111111 0.00000000 + 0.88888889 0.44444444 0.00000000 + 0.88888889 0.77777778 0.00000000 + 0.00000000 0.00000000 0.11363913 + 0.00000000 0.33333333 0.11363913 + 0.00000000 0.66666667 0.11363913 + 0.33333333 0.00000000 0.11363913 + 0.33333333 0.33333333 0.11363913 + 0.33333333 0.66666667 0.11363913 + 0.66666667 0.00000000 0.11363913 + 0.66666667 0.33333333 0.11363913 + 0.66666667 0.66666667 0.11363913 + 0.99737439 0.99651193 0.45349770 + 0.22211066 0.11067651 0.33948353 + 0.11093400 0.22180190 0.22699157 + 0.33269116 0.99670789 0.45355349 + 0.55488083 0.11063740 0.34005322 + 0.44409012 0.22180237 0.22695509 + 0.66629719 0.99904720 0.45249039 + 0.88918292 0.11064072 0.34007437 + 0.77752593 0.22180564 0.22714985 + 0.99764157 0.33265663 0.45356889 + 0.22199655 0.44355954 0.33945819 + 0.11051904 0.55536259 0.22724488 + 0.55488401 0.44357348 0.33944728 + 0.44407655 0.55496595 0.22693198 + 0.66886723 0.33263836 0.45348437 + 0.88811887 0.44285973 0.34048281 + 0.77807843 0.55541593 0.22726472 + 0.99956423 0.66568487 0.45325496 + 0.22256693 0.77738940 0.34043388 + 0.11053086 0.88790186 0.22726414 + 0.33262479 0.66802405 0.45348338 + 0.55489311 0.77637527 0.34004720 + 0.44414371 0.88839754 0.22714000 + 0.66852098 0.66774864 0.45358736 + 0.88812808 0.77738611 0.34051982 + 0.77752075 0.88837583 0.22714196 + 0.33294880 0.33236999 0.46109653 + 0.33319580 0.33127591 0.57532089 + 0.38582322 0.48572865 0.59505925 + 0.43528861 0.27861520 0.59472415 + 0.17868367 0.22911506 0.59494689 + + position of ions in cartesian coordinates (Angst): + 1.20286667 -0.60143333 -0.60143333 + 1.20286667 1.20286667 -2.40573333 + 1.20286667 3.00716667 -4.21003333 + 3.00716667 -2.40573333 -0.60143333 + 3.00716667 -0.60143333 -2.40573333 + 3.00716667 1.20286667 -4.21003333 + 4.81146667 -4.21003333 -0.60143333 + 4.81146667 -2.40573333 -2.40573333 + 4.81146667 -0.60143333 -4.21003333 + 1.20286667 1.20286667 1.20286667 + 1.20286667 3.00716667 -0.60143333 + 1.20286667 4.81146667 -2.40573333 + 3.00716667 -0.60143333 1.20286667 + 3.00716667 1.20286667 -0.60143333 + 3.00716667 3.00716667 -2.40573333 + 4.81146667 -2.40573333 1.20286667 + 4.81146667 -0.60143333 -0.60143333 + 4.81146667 1.20286667 -2.40573333 + 10.19894706 4.79559083 -0.59376023 + 4.79568559 2.99024082 2.99434191 + 3.00317348 3.00281563 1.20210730 + 6.60167379 8.39510595 -0.59423035 + 6.60296731 1.19480765 3.00058372 + 4.80612803 1.19909125 1.20171860 + 8.39619697 6.59073947 -0.61814567 + 8.41273500 -0.61449432 3.00078964 + 6.61304437 -0.60368413 1.20376252 + 10.20114684 1.20151575 3.00037570 + 4.79479966 4.79245286 1.19221114 + 3.00360857 4.81327373 -0.60074212 + 6.59657072 2.99052625 1.19202014 + 4.80580997 3.00230129 -0.60190717 + 8.42062960 2.98014489 2.99958002 + 8.41129871 1.19385689 1.20684466 + 6.61725088 1.20034026 -0.60082076 + 10.20823114 2.99043434 1.19440426 + 4.80821471 6.60668075 -0.60444889 + 3.00387647 6.61341548 -2.40053996 + 6.60057240 6.61559034 1.18416032 + 6.60297014 4.79824999 -0.60305245 + 4.80837549 4.80897156 -2.40453708 + 8.41984556 4.79702772 1.18675173 + 8.41174041 3.00495665 -0.60352135 + 6.61293272 3.00433813 -2.40439883 + 6.68291124 4.87755967 3.08160717 + 7.89330949 6.07936177 4.29659057 + 8.38710646 6.83946205 3.66948331 + 8.65131065 5.44707948 4.78702073 + 7.26469145 6.57047475 5.05731772 + + + +-------------------------------------------------------------------------------------------------------- + + + k-point 1 : 0.0000 0.0000 0.0000 plane waves: 16943 + k-point 2 : 0.0769 0.0000 0.0000 plane waves: 16935 + k-point 3 : 0.1538 0.0000 0.0000 plane waves: 16955 + k-point 4 : 0.2308 0.0000 0.0000 plane waves: 16932 + k-point 5 : 0.3077 0.0000 0.0000 plane waves: 16886 + k-point 6 : 0.3846 0.0000 0.0000 plane waves: 16874 + k-point 7 : 0.4615 0.0000 0.0000 plane waves: 16856 + k-point 8 : 0.0000 0.0769 0.0000 plane waves: 16935 + k-point 9 : 0.0769 0.0769 0.0000 plane waves: 16959 + k-point 10 : 0.1538 0.0769 0.0000 plane waves: 16930 + k-point 11 : 0.2308 0.0769-0.0000 plane waves: 16910 + k-point 12 : 0.3077 0.0769 0.0000 plane waves: 16914 + k-point 13 : 0.3846 0.0769-0.0000 plane waves: 16868 + k-point 14 : 0.4615 0.0769-0.0000 plane waves: 16856 + k-point 15 : -0.4615 0.0769-0.0000 plane waves: 16868 + k-point 16 : -0.3846 0.0769-0.0000 plane waves: 16914 + k-point 17 : -0.3077 0.0769-0.0000 plane waves: 16910 + k-point 18 : -0.2308 0.0769 0.0000 plane waves: 16930 + k-point 19 : -0.1538 0.0769-0.0000 plane waves: 16959 + k-point 20 : -0.0769 0.0769 0.0000 plane waves: 16935 + k-point 21 : -0.0000 0.1538-0.0000 plane waves: 16955 + k-point 22 : 0.0769 0.1538 0.0000 plane waves: 16930 + k-point 23 : 0.1538 0.1538 0.0000 plane waves: 16933 + k-point 24 : 0.2308 0.1538 0.0000 plane waves: 16913 + k-point 25 : 0.3077 0.1538 0.0000 plane waves: 16897 + k-point 26 : 0.3846 0.1538 0.0000 plane waves: 16850 + k-point 27 : 0.4615 0.1538 0.0000 plane waves: 16850 + k-point 28 : -0.4615 0.1538 0.0000 plane waves: 16897 + k-point 29 : -0.3846 0.1538 0.0000 plane waves: 16913 + k-point 30 : -0.3077 0.1538-0.0000 plane waves: 16933 + k-point 31 : -0.2308 0.1538 0.0000 plane waves: 16930 + k-point 32 : -0.1538 0.1538-0.0000 plane waves: 16955 + k-point 33 : -0.0769 0.1538-0.0000 plane waves: 16959 + k-point 34 : -0.0000 0.2308 0.0000 plane waves: 16932 + k-point 35 : 0.0769 0.2308-0.0000 plane waves: 16910 + k-point 36 : 0.1538 0.2308 0.0000 plane waves: 16913 + k-point 37 : 0.2308 0.2308 0.0000 plane waves: 16885 + k-point 38 : 0.3077 0.2308 0.0000 plane waves: 16884 + k-point 39 : 0.3846 0.2308-0.0000 plane waves: 16872 + k-point 40 : 0.4615 0.2308 0.0000 plane waves: 16884 + k-point 41 : -0.4615 0.2308 0.0000 plane waves: 16885 + k-point 42 : -0.3846 0.2308-0.0000 plane waves: 16913 + k-point 43 : -0.3077 0.2308 0.0000 plane waves: 16910 + k-point 44 : -0.2308 0.2308-0.0000 plane waves: 16932 + k-point 45 : -0.1538 0.2308 0.0000 plane waves: 16930 + k-point 46 : -0.0769 0.2308 0.0000 plane waves: 16930 + k-point 47 : -0.0000 0.3077 0.0000 plane waves: 16886 + k-point 48 : 0.0769 0.3077 0.0000 plane waves: 16914 + k-point 49 : 0.1538 0.3077 0.0000 plane waves: 16897 + k-point 50 : 0.2308 0.3077 0.0000 plane waves: 16884 + k-point 51 : 0.3077 0.3077 0.0000 plane waves: 16896 + k-point 52 : 0.3846 0.3077 0.0000 plane waves: 16896 + k-point 53 : 0.4615 0.3077 0.0000 plane waves: 16884 + k-point 54 : -0.4615 0.3077 0.0000 plane waves: 16897 + k-point 55 : -0.3846 0.3077 0.0000 plane waves: 16914 + k-point 56 : -0.3077 0.3077 0.0000 plane waves: 16886 + k-point 57 : -0.2308 0.3077 0.0000 plane waves: 16910 + k-point 58 : -0.1538 0.3077 0.0000 plane waves: 16933 + k-point 59 : -0.0769 0.3077 0.0000 plane waves: 16910 + k-point 60 : -0.0000 0.3846 0.0000 plane waves: 16874 + k-point 61 : 0.0769 0.3846-0.0000 plane waves: 16868 + k-point 62 : 0.1538 0.3846 0.0000 plane waves: 16850 + k-point 63 : 0.2308 0.3846-0.0000 plane waves: 16872 + k-point 64 : 0.3077 0.3846 0.0000 plane waves: 16896 + k-point 65 : 0.3846 0.3846 0.0000 plane waves: 16872 + k-point 66 : 0.4615 0.3846 0.0000 plane waves: 16850 + k-point 67 : -0.4615 0.3846 0.0000 plane waves: 16868 + k-point 68 : -0.3846 0.3846 0.0000 plane waves: 16874 + k-point 69 : -0.3077 0.3846 0.0000 plane waves: 16914 + k-point 70 : -0.2308 0.3846-0.0000 plane waves: 16913 + k-point 71 : -0.1538 0.3846 0.0000 plane waves: 16913 + k-point 72 : -0.0769 0.3846-0.0000 plane waves: 16914 + k-point 73 : -0.0000 0.4615 0.0000 plane waves: 16856 + k-point 74 : 0.0769 0.4615 0.0000 plane waves: 16856 + k-point 75 : 0.1538 0.4615 0.0000 plane waves: 16850 + k-point 76 : 0.2308 0.4615 0.0000 plane waves: 16884 + k-point 77 : 0.3077 0.4615 0.0000 plane waves: 16884 + k-point 78 : 0.3846 0.4615 0.0000 plane waves: 16850 + k-point 79 : 0.4615 0.4615 0.0000 plane waves: 16856 + k-point 80 : -0.4615 0.4615-0.0000 plane waves: 16856 + k-point 81 : -0.3846 0.4615 0.0000 plane waves: 16868 + k-point 82 : -0.3077 0.4615 0.0000 plane waves: 16897 + k-point 83 : -0.2308 0.4615 0.0000 plane waves: 16885 + k-point 84 : -0.1538 0.4615-0.0000 plane waves: 16897 + k-point 85 : -0.0769 0.4615 0.0000 plane waves: 16868 + + maximum and minimum number of plane-waves per node : 4265 4197 + + maximum number of plane-waves: 16959 + maximum index in each direction: + IXMAX= 12 IYMAX= 12 IZMAX= 29 + IXMIN= -12 IYMIN= -12 IZMIN= -29 + + NGX is ok and might be reduce to 50 + NGY is ok and might be reduce to 50 + NGZ is ok and might be reduce to 118 + + real space projection operators: + total allocation : 31973.22 KBytes + max/ min on nodes : 8299.47 7691.30 + + + parallel 3D FFT for wavefunctions: + minimum data exchange during FFTs selected (reduces bandwidth) + parallel 3D FFT for charge: + minimum data exchange during FFTs selected (reduces bandwidth) + + + total amount of memory used by VASP on root node 292098. kBytes +======================================================================== + + base : 30000. kBytes + nonlr-proj: 15736. kBytes + fftplans : 5374. kBytes + grid : 10087. kBytes + one-center: 202. kBytes + wavefun : 230699. kBytes + + INWAV: cpu time 0.0000: real time 0.0000 + Broyden mixing: mesh for mixing (old mesh) + NGX = 25 NGY = 25 NGZ = 59 + (NGX =100 NGY =100 NGZ =240) + gives a total of 36875 points + + initial charge density was supplied: + charge density of overlapping atoms calculated + number of electron 500.0000000 magnetization + keeping initial charge density in first step + + +-------------------------------------------------------------------------------------------------------- + + + Maximum index for non-local projection operator 1594 + Maximum index for augmentation-charges 1056 (set IRDMAX) + + +-------------------------------------------------------------------------------------------------------- + + + First call to EWALD: gamma= 0.182 + Maximum number of real-space cells 4x 4x 2 + Maximum number of reciprocal cells 2x 2x 5 + + FEWALD executed in parallel + FEWALD: cpu time 0.0031: real time 0.0122 + + +----------------------------------------- Iteration 9( 1) --------------------------------------- + + + POTLOK: cpu time 3.7702: real time 3.7707 + SETDIJ: cpu time 0.0106: real time 0.0106 + EDDAV: cpu time 133.1438: real time 133.2979 + DOS: cpu time 0.0135: real time 0.0135 + CHARGE: cpu time 4.2500: real time 4.2507 + MIXING: cpu time 0.0013: real time 0.0013 + -------------------------------------------- + LOOP: cpu time 141.1919: real time 141.3499 + + eigenvalue-minimisations : 51680 + total energy-change (2. order) : 0.1973548E-03 (-0.2400216E+00) + number of electron 499.9999835 magnetization + augmentation part 320.3219921 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 180, + dipolmoment -0.017451 -0.017451 -0.017451 electrons x Angstroem + Tr[quadrupol] -4854.421746 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000089 eV + added-field ion interaction -0.811776 eV (added to PSCEN) + + + free energy = -0.816911557145E+02 energy without entropy= -0.816793255056E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 2) --------------------------------------- + + + POTLOK: cpu time 3.6261: real time 3.6268 + SETDIJ: cpu time 0.0099: real time 0.0099 + EDDIAG: cpu time 19.0673: real time 19.0850 + RMM-DIIS: cpu time 50.7013: real time 50.7609 + ORTHCH: cpu time 3.0367: real time 3.0372 + DOS: cpu time 0.0134: real time 0.0134 + CHARGE: cpu time 4.1376: real time 4.1380 + MIXING: cpu time 0.0014: real time 0.0014 + -------------------------------------------- + LOOP: cpu time 80.5963: real time 80.6866 + + eigenvalue-minimisations : 51805 + total energy-change (2. order) :-0.7698074E-03 (-0.9585791E-03) + number of electron 499.9999835 magnetization + augmentation part 320.3376179 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 180, + dipolmoment -0.019060 -0.019060 -0.019060 electrons x Angstroem + Tr[quadrupol] -4854.425170 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000106 eV + added-field ion interaction -0.886637 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.4260 + 0.4260 + + free energy = -0.816919255219E+02 energy without entropy= -0.816797197076E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 3) --------------------------------------- + + + POTLOK: cpu time 3.3023: real time 3.3028 + SETDIJ: cpu time 0.0104: real time 0.0146 + EDDIAG: cpu time 19.6335: real time 19.6661 + RMM-DIIS: cpu time 52.1911: real time 52.2286 + ORTHCH: cpu time 2.8567: real time 2.8571 + DOS: cpu time 0.0136: real time 0.0136 + CHARGE: cpu time 4.1078: real time 4.1082 + MIXING: cpu time 0.0015: real time 0.0015 + -------------------------------------------- + LOOP: cpu time 82.1196: real time 82.2000 + + eigenvalue-minimisations : 52930 + total energy-change (2. order) : 0.2721252E-04 (-0.8821947E-04) + number of electron 499.9999835 magnetization + augmentation part 320.3328055 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 180, + dipolmoment -0.014870 -0.014870 -0.014870 electrons x Angstroem + Tr[quadrupol] -4854.421262 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000065 eV + added-field ion interaction -0.691733 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.6394 + 1.0672 0.2116 + + free energy = -0.816918983094E+02 energy without entropy= -0.816801497565E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 4) --------------------------------------- + + + POTLOK: cpu time 3.8186: real time 3.8192 + SETDIJ: cpu time 0.0104: real time 0.0146 + EDDIAG: cpu time 20.4624: real time 20.4801 + RMM-DIIS: cpu time 51.5072: real time 51.5457 + ORTHCH: cpu time 2.9693: real time 2.9698 + DOS: cpu time 0.0137: real time 0.0137 + CHARGE: cpu time 4.1459: real time 4.1467 + MIXING: cpu time 0.0015: real time 0.0015 + -------------------------------------------- + LOOP: cpu time 82.9316: real time 82.9984 + + eigenvalue-minimisations : 52018 + total energy-change (2. order) : 0.3052081E-03 (-0.3188239E-04) + number of electron 499.9999835 magnetization + augmentation part 320.3304713 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 180, + dipolmoment -0.018767 -0.018767 -0.018767 electrons x Angstroem + Tr[quadrupol] -4854.417098 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000103 eV + added-field ion interaction -0.872993 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.8395 + 1.9643 0.4177 0.1365 + + free energy = -0.816915931013E+02 energy without entropy= -0.816797111286E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 5) --------------------------------------- + + + POTLOK: cpu time 3.1693: real time 3.1698 + SETDIJ: cpu time 0.0100: real time 0.0100 + EDDIAG: cpu time 18.9744: real time 19.0366 + RMM-DIIS: cpu time 50.7758: real time 50.8247 + ORTHCH: cpu time 2.8988: real time 2.8993 + DOS: cpu time 0.0135: real time 0.0135 + CHARGE: cpu time 4.1145: real time 4.1362 + MIXING: cpu time 0.0016: real time 0.0016 + -------------------------------------------- + LOOP: cpu time 79.9608: real time 80.1060 + + eigenvalue-minimisations : 52002 + total energy-change (2. order) : 0.1453642E-03 (-0.2207650E-04) + number of electron 499.9999835 magnetization + augmentation part 320.3254954 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 180, + dipolmoment -0.017921 -0.017921 -0.017921 electrons x Angstroem + Tr[quadrupol] -4854.437373 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000094 eV + added-field ion interaction -0.833647 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.8833 + 2.3136 0.7160 0.3635 0.1399 + + free energy = -0.816914477371E+02 energy without entropy= -0.816794387003E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 6) --------------------------------------- + + + POTLOK: cpu time 3.6467: real time 3.6473 + SETDIJ: cpu time 0.0101: real time 0.0101 + EDDIAG: cpu time 19.8860: real time 19.9745 + RMM-DIIS: cpu time 51.0233: real time 51.1544 + ORTHCH: cpu time 3.0450: real time 3.0451 + DOS: cpu time 0.0132: real time 0.0132 + CHARGE: cpu time 4.4198: real time 4.4200 + MIXING: cpu time 0.0020: real time 0.0020 + -------------------------------------------- + LOOP: cpu time 82.0487: real time 82.2741 + + eigenvalue-minimisations : 51922 + total energy-change (2. order) : 0.1277913E-04 (-0.1157341E-04) + number of electron 499.9999835 magnetization + augmentation part 320.3319034 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 180, + dipolmoment -0.017788 -0.017788 -0.017788 electrons x Angstroem + Tr[quadrupol] -4854.428371 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000092 eV + added-field ion interaction -0.827452 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.8436 + 2.3155 0.9895 0.1408 0.4591 0.3129 + + free energy = -0.816914349580E+02 energy without entropy= -0.816795724550E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 7) --------------------------------------- + + + POTLOK: cpu time 3.6233: real time 3.6236 + SETDIJ: cpu time 0.0116: real time 0.0116 + EDDIAG: cpu time 20.6126: real time 20.7009 + RMM-DIIS: cpu time 51.1614: real time 51.3002 + ORTHCH: cpu time 2.9978: real time 2.9980 + DOS: cpu time 0.0135: real time 0.0135 + CHARGE: cpu time 4.0749: real time 4.0750 + MIXING: cpu time 0.0018: real time 0.0018 + -------------------------------------------- + LOOP: cpu time 82.4995: real time 82.7321 + + eigenvalue-minimisations : 51815 + total energy-change (2. order) : 0.7124283E-05 (-0.3189631E-05) + number of electron 499.9999835 magnetization + augmentation part 320.3310564 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 180, + dipolmoment -0.017489 -0.017489 -0.017489 electrons x Angstroem + Tr[quadrupol] -4854.430326 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000089 eV + added-field ion interaction -0.813551 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.8097 + 2.2637 1.0886 0.6778 0.1404 0.3678 0.3199 + + free energy = -0.816914278337E+02 energy without entropy= -0.816795095904E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 8) --------------------------------------- + + + POTLOK: cpu time 3.3327: real time 3.3329 + SETDIJ: cpu time 0.0105: real time 0.0146 + EDDIAG: cpu time 18.9578: real time 18.9920 + RMM-DIIS: cpu time 50.6907: real time 50.7104 + ORTHCH: cpu time 3.0005: real time 3.0236 + DOS: cpu time 0.0126: real time 0.0127 + CHARGE: cpu time 4.4166: real time 4.4169 + MIXING: cpu time 0.0018: real time 0.0018 + -------------------------------------------- + LOOP: cpu time 80.4260: real time 80.5208 + + eigenvalue-minimisations : 51612 + total energy-change (2. order) : 0.4470094E-05 (-0.5539574E-06) + number of electron 499.9999835 magnetization + augmentation part 320.3300776 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 180, + dipolmoment -0.017729 -0.017729 -0.017729 electrons x Angstroem + Tr[quadrupol] -4854.430336 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000092 eV + added-field ion interaction -0.824718 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.8181 + 2.3101 1.0980 0.9572 0.1404 0.5480 0.3666 0.3060 + + free energy = -0.816914233636E+02 energy without entropy= -0.816795026744E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 9) --------------------------------------- + + + POTLOK: cpu time 3.5525: real time 3.5530 + SETDIJ: cpu time 0.0110: real time 0.0111 + EDDIAG: cpu time 20.5556: real time 20.6122 + RMM-DIIS: cpu time 51.0384: real time 51.0712 + ORTHCH: cpu time 3.1061: real time 3.1064 + DOS: cpu time 0.0137: real time 0.0137 + CHARGE: cpu time 4.3969: real time 4.3972 + MIXING: cpu time 0.0019: real time 0.0019 + -------------------------------------------- + LOOP: cpu time 82.6788: real time 82.7741 + + eigenvalue-minimisations : 51310 + total energy-change (2. order) :-0.3057357E-06 (-0.1774120E-06) + number of electron 499.9999835 magnetization + augmentation part 320.3303045 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 180, + dipolmoment -0.017701 -0.017701 -0.017701 electrons x Angstroem + Tr[quadrupol] -4854.430133 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000091 eV + added-field ion interaction -0.823412 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.8588 + 2.4301 1.4326 1.1782 0.1404 0.5807 0.4294 0.3745 0.3048 + + free energy = -0.816914236693E+02 energy without entropy= -0.816795058807E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 10) --------------------------------------- + + + POTLOK: cpu time 3.7807: real time 3.7883 + SETDIJ: cpu time 0.0105: real time 0.0105 + EDDIAG: cpu time 20.3932: real time 20.3973 + RMM-DIIS: cpu time 43.7181: real time 43.7611 + ORTHCH: cpu time 2.9469: real time 2.9472 + DOS: cpu time 0.0137: real time 0.0137 + CHARGE: cpu time 4.0343: real time 4.0344 + MIXING: cpu time 0.0019: real time 0.0019 + -------------------------------------------- + LOOP: cpu time 74.9022: real time 75.0163 + + eigenvalue-minimisations : 42804 + total energy-change (2. order) :-0.1909502E-06 (-0.4942060E-07) + number of electron 499.9999835 magnetization + augmentation part 320.3304392 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 180, + dipolmoment -0.017685 -0.017685 -0.017685 electrons x Angstroem + Tr[quadrupol] -4854.430204 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000091 eV + added-field ion interaction -0.822657 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.9319 + 2.4694 1.6702 1.4405 0.9875 0.1404 0.6151 0.3050 0.3575 0.4019 + + free energy = -0.816914238603E+02 energy without entropy= -0.816795045105E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 11) --------------------------------------- + + + POTLOK: cpu time 3.1563: real time 3.1566 + SETDIJ: cpu time 0.0104: real time 0.0104 + EDDIAG: cpu time 18.7478: real time 18.7791 + RMM-DIIS: cpu time 31.5626: real time 31.6164 + ORTHCH: cpu time 2.7927: real time 2.7929 + DOS: cpu time 0.0131: real time 0.0131 + -------------------------------------------- + LOOP: cpu time 56.2858: real time 56.3847 + + eigenvalue-minimisations : 29914 + total energy-change (2. order) :-0.1447916E-07 (-0.9233531E-08) + number of electron 499.9999835 magnetization + augmentation part 320.3304392 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 180, + dipolmoment -0.017668 -0.017668 -0.017668 electrons x Angstroem + Tr[quadrupol] -4854.429956 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000091 eV + added-field ion interaction -0.821873 eV (added to PSCEN) + + + free energy = -0.816914238747E+02 energy without entropy= -0.816795046913E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + + average (electrostatic) potential at core + the test charge radii are 1.0053 1.1806 0.6991 0.5201 + (the norm of the test charge is 1.0000) + 1 -43.0600 2 -43.0600 3 -43.0613 4 -43.0568 5 -43.0600 + 6 -43.0567 7 -43.0567 8 -43.0613 9 -43.0614 10 -43.3353 + 11 -43.3354 12 -43.3329 13 -43.3352 14 -43.3351 15 -43.3354 + 16 -43.3331 17 -43.3352 18 -43.3351 19 -43.0414 20 -43.2860 + 21 -43.3336 22 -43.0385 23 -43.3366 24 -43.3333 25 -43.0574 + 26 -43.3366 27 -43.3428 28 -43.0386 29 -43.2871 30 -43.3488 + 31 -43.2867 32 -43.3334 33 -43.0421 34 -43.3391 35 -43.3485 + 36 -43.0439 37 -43.3391 38 -43.3484 39 -43.0421 40 -43.3366 + 41 -43.3431 42 -43.0387 43 -43.3390 44 -43.3431 45 -54.1448 + 46 -53.4570 47 -36.9007 48 -36.9436 49 -36.9653 + + + + E-fermi : 0.2251 XC(G=0): -8.8082 alpha+bet : -5.7930 + + +-------------------------------------------------------------------------------------------------------- + + + soft charge-density along one line, spin component 1 + 0 1 2 3 4 5 6 7 8 9 + total charge-density along one line + + pseudopotential strength for first ion, spin component: 1 + -8.910 0.013 -0.017 0.013 0.000 0.860 -0.006 0.008 + 0.013 -8.909 0.008 0.014 -0.014 -0.006 0.860 -0.004 + -0.017 0.008 -8.898 0.008 -0.000 0.008 -0.004 0.854 + 0.013 0.014 0.008 -8.909 0.014 -0.006 -0.007 -0.004 + 0.000 -0.014 -0.000 0.014 -8.899 -0.000 0.007 0.000 + 0.860 -0.006 0.008 -0.006 -0.000 1.176 0.003 -0.004 + -0.006 0.860 -0.004 -0.007 0.007 0.003 1.176 0.002 + 0.008 -0.004 0.854 -0.004 0.000 -0.004 0.002 1.178 + -0.006 -0.007 -0.004 0.860 -0.007 0.003 0.003 0.002 + -0.000 0.007 0.000 -0.007 0.855 0.000 -0.003 -0.000 + -0.004 -0.004 0.000 -0.004 -0.000 0.001 0.001 -0.000 + 0.000 0.000 0.000 0.000 0.000 -0.000 -0.000 -0.000 + -0.004 -0.003 0.003 0.000 0.005 0.003 0.002 -0.002 + 0.000 -0.004 -0.004 -0.004 -0.000 -0.000 0.003 0.003 + -0.004 0.000 0.003 -0.003 -0.005 0.003 -0.000 -0.002 + 0.002 0.002 -0.001 -0.000 -0.002 -0.001 -0.001 0.001 + -0.000 0.002 0.002 0.002 0.000 0.000 -0.001 -0.001 + 0.002 -0.000 -0.001 0.002 0.002 -0.001 0.000 0.001 + total augmentation occupancy for first ion, spin component: 1 + 1.917 0.003 -0.003 0.003 0.000 -0.024 -0.008 0.013 -0.008 -0.000 0.007 0.021 0.015 0.007 0.015 -0.003 + 0.003 1.916 0.001 0.003 -0.002 -0.008 -0.024 -0.006 -0.008 0.011 0.007 0.021 0.015 0.014 0.009 -0.003 + -0.003 0.001 1.921 0.001 0.000 0.012 -0.006 -0.049 -0.006 0.000 -0.003 -0.001 0.002 -0.000 0.001 0.001 + 0.003 0.003 0.001 1.916 0.002 -0.008 -0.008 -0.006 -0.024 -0.011 0.007 0.021 0.009 0.014 0.015 -0.000 + 0.000 -0.002 0.000 0.002 1.920 -0.000 0.011 0.000 -0.011 -0.049 -0.000 -0.000 0.002 -0.000 -0.002 0.002 + -0.024 -0.008 0.012 -0.008 -0.000 0.061 0.001 0.007 0.001 0.000 -0.049 0.008 0.023 0.001 0.023 -0.001 + -0.008 -0.024 -0.006 -0.008 0.011 0.001 0.061 -0.004 0.001 0.006 -0.049 0.008 0.023 0.023 0.000 -0.001 + 0.013 -0.006 -0.049 -0.006 0.000 0.007 -0.004 0.051 -0.004 0.000 0.001 0.000 -0.010 0.019 -0.010 0.001 + -0.008 -0.008 -0.006 -0.024 -0.011 0.001 0.001 -0.004 0.061 -0.006 -0.049 0.008 0.000 0.023 0.023 0.000 + -0.000 0.011 0.000 -0.011 -0.049 0.000 0.006 0.000 -0.006 0.051 0.000 0.000 -0.017 -0.000 0.017 0.001 + 0.007 0.007 -0.003 0.007 -0.000 -0.049 -0.049 0.001 -0.049 0.000 1.259 -0.282 0.039 0.036 0.039 -0.007 + 0.021 0.021 -0.001 0.021 -0.000 0.008 0.008 0.000 0.008 0.000 -0.282 0.110 -0.028 -0.028 -0.028 0.003 + 0.015 0.015 0.002 0.009 0.002 0.023 0.023 -0.010 0.000 -0.017 0.039 -0.028 0.149 -0.022 -0.023 -0.009 + 0.007 0.014 -0.000 0.014 -0.000 0.001 0.023 0.019 0.023 -0.000 0.036 -0.028 -0.022 0.152 -0.022 0.001 + 0.015 0.009 0.001 0.015 -0.002 0.023 0.000 -0.010 0.023 0.017 0.039 -0.028 -0.023 -0.022 0.149 0.001 + -0.003 -0.003 0.001 -0.000 0.002 -0.001 -0.001 0.001 0.000 0.001 -0.007 0.003 -0.009 0.001 0.001 0.001 + -0.000 -0.003 -0.002 -0.003 -0.000 0.000 -0.001 -0.002 -0.001 -0.000 -0.007 0.003 0.001 -0.009 0.001 -0.000 + -0.003 -0.000 0.001 -0.003 -0.002 -0.001 0.000 0.001 -0.001 -0.001 -0.007 0.003 0.001 0.001 -0.009 -0.000 + + +------------------------ aborting loop because EDIFF is reached ---------------------------------------- + + + CHARGE: cpu time 4.2302: real time 4.2306 + FORLOC: cpu time 0.0224: real time 0.0224 + FORNL : cpu time 25.1189: real time 25.1508 + STRESS: cpu time 74.0277: real time 74.1204 + FORCOR: cpu time 3.3170: real time 3.3204 + FORHAR: cpu time 0.0380: real time 0.0381 + MIXING: cpu time 0.0043: real time 0.0057 + OFIELD: cpu time 0.0001: real time 0.0001 + + FORCE on cell =-STRESS in cart. coord. units (eV): + Direction XX YY ZZ XY YZ ZX + -------------------------------------------------------------------------------------- + Alpha Z 2824.21819 2824.21819 2824.21819 + Ewald 26335.30449 26335.43910 26334.72463-85467.67298-85470.12320-85470.72440 + Hartree 46091.47571 46091.65368 46091.10295-83023.90699-83025.24765-83025.62309 + E(xc) -2828.15572 -2828.15574 -2828.15450 -0.11064 -0.11111 -0.11054 + Local -76951.05891-76951.36254-76950.13526168482.37440168486.08208168487.04825 + n-local -1674.88607 -1674.90166 -1674.87866 -1.10510 -1.11910 -1.11398 + augment 2521.54524 2521.54990 2521.54922 4.05418 4.08077 4.07671 + Kinetic 3669.79825 3669.81256 3669.77468 9.92410 9.93701 9.93709 + Fock 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + ------------------------------------------------------------------------------------- + Total -11.75883 -11.74652 -11.79875 3.55697 3.49880 3.49003 + in kB -20.24901 -20.22781 -20.31776 6.12520 6.02502 6.00993 + external pressure = -20.26 kB Pullay stress = 0.00 kB + + + VOLUME and BASIS-vectors are now : + ----------------------------------------------------------------------------- + energy-cutoff : 400.00 + volume of cell : 930.40 + direct lattice vectors reciprocal lattice vectors + 5.412900000 -5.412900000 -0.000000000 0.123162568 -0.061581284 -0.061581284 + 0.000000000 5.412900000 -5.412900000 0.061581284 0.061581284 -0.123162568 + 10.584969359 10.584969359 10.584969359 0.031491195 0.031491195 0.031491195 + + length of vectors + 7.654996592 7.654996592 18.333704726 0.150842724 0.150842724 0.054544350 + + + FORCES acting on ions + electron-ion (+dipol) ewald-force non-local-force convergence-correction + ----------------------------------------------------------------------------------------------- + 0.192E+04 0.192E+04 0.192E+04 -.192E+04 -.192E+04 -.192E+04 -.380E+00 -.378E+00 -.176E+00 0.817E-03 0.827E-03 0.700E-03 + 0.192E+04 0.192E+04 0.192E+04 -.192E+04 -.192E+04 -.192E+04 -.379E+00 -.177E+00 -.378E+00 0.812E-03 0.700E-03 0.830E-03 + 0.193E+04 0.193E+04 0.193E+04 -.192E+04 -.192E+04 -.192E+04 -.339E+00 -.431E+00 -.431E+00 0.732E-03 0.674E-03 0.674E-03 + 0.192E+04 0.193E+04 0.192E+04 -.192E+04 -.192E+04 -.192E+04 -.409E+00 -.296E+00 -.406E+00 0.704E-03 0.780E-03 0.694E-03 + 0.192E+04 0.192E+04 0.192E+04 -.192E+04 -.192E+04 -.192E+04 -.177E+00 -.378E+00 -.381E+00 0.697E-03 0.812E-03 0.820E-03 + 0.192E+04 0.192E+04 0.193E+04 -.192E+04 -.192E+04 -.192E+04 -.404E+00 -.409E+00 -.297E+00 0.698E-03 0.695E-03 0.771E-03 + 0.193E+04 0.192E+04 0.192E+04 -.192E+04 -.192E+04 -.192E+04 -.295E+00 -.407E+00 -.407E+00 0.792E-03 0.701E-03 0.702E-03 + 0.193E+04 0.193E+04 0.193E+04 -.192E+04 -.192E+04 -.192E+04 -.432E+00 -.432E+00 -.338E+00 0.676E-03 0.676E-03 0.745E-03 + 0.193E+04 0.193E+04 0.193E+04 -.192E+04 -.192E+04 -.192E+04 -.431E+00 -.338E+00 -.433E+00 0.679E-03 0.741E-03 0.670E-03 + 0.978E+03 0.978E+03 0.978E+03 -.977E+03 -.978E+03 -.978E+03 -.302E+00 -.331E+00 -.371E+00 0.615E-03 0.636E-03 0.586E-03 + 0.978E+03 0.978E+03 0.978E+03 -.977E+03 -.978E+03 -.978E+03 -.303E+00 -.370E+00 -.324E+00 0.584E-03 0.588E-03 0.638E-03 + 0.979E+03 0.979E+03 0.979E+03 -.978E+03 -.978E+03 -.978E+03 -.620E+00 -.619E+00 -.623E+00 0.705E-03 0.674E-03 0.671E-03 + 0.978E+03 0.978E+03 0.978E+03 -.978E+03 -.977E+03 -.978E+03 -.326E+00 -.303E+00 -.371E+00 0.630E-03 0.611E-03 0.590E-03 + 0.977E+03 0.978E+03 0.978E+03 -.977E+03 -.977E+03 -.977E+03 -.407E+00 -.404E+00 -.408E+00 0.579E-03 0.551E-03 0.561E-03 + 0.978E+03 0.978E+03 0.977E+03 -.978E+03 -.978E+03 -.977E+03 -.330E+00 -.370E+00 -.301E+00 0.656E-03 0.590E-03 0.613E-03 + 0.978E+03 0.978E+03 0.978E+03 -.978E+03 -.978E+03 -.978E+03 -.518E+00 -.520E+00 -.517E+00 0.729E-03 0.726E-03 0.715E-03 + 0.978E+03 0.977E+03 0.978E+03 -.978E+03 -.977E+03 -.978E+03 -.370E+00 -.302E+00 -.329E+00 0.578E-03 0.594E-03 0.654E-03 + 0.978E+03 0.978E+03 0.977E+03 -.978E+03 -.978E+03 -.977E+03 -.369E+00 -.326E+00 -.303E+00 0.587E-03 0.671E-03 0.609E-03 + -.190E+04 -.189E+04 -.187E+04 0.190E+04 0.189E+04 0.187E+04 0.414E+00 0.203E+00 0.343E+00 -.126E-02 -.109E-02 -.398E-03 + -.983E+03 -.983E+03 -.940E+03 0.983E+03 0.983E+03 0.940E+03 -.631E+00 -.633E+00 0.686E+00 -.169E-02 -.163E-02 -.130E-02 + 0.657E+01 0.119E+02 0.120E+02 -.679E+01 -.118E+02 -.120E+02 0.215E+00 -.494E-01 -.478E-01 -.335E-03 -.361E-03 -.327E-03 + -.189E+04 -.190E+04 -.187E+04 0.189E+04 0.190E+04 0.187E+04 0.164E+00 0.341E+00 0.329E+00 -.108E-02 -.127E-02 -.412E-03 + -.944E+03 -.963E+03 -.944E+03 0.944E+03 0.962E+03 0.944E+03 0.352E+00 0.697E+00 0.351E+00 -.136E-02 -.157E-02 -.138E-02 + 0.117E+02 0.656E+01 0.118E+02 -.117E+02 -.678E+01 -.118E+02 -.500E-01 0.216E+00 -.488E-01 -.343E-03 -.297E-03 -.344E-03 + -.190E+04 -.190E+04 -.190E+04 0.190E+04 0.190E+04 0.190E+04 0.404E+00 0.402E+00 0.406E+00 -.146E-02 -.148E-02 -.146E-02 + -.963E+03 -.944E+03 -.944E+03 0.962E+03 0.944E+03 0.944E+03 0.697E+00 0.350E+00 0.352E+00 -.155E-02 -.138E-02 -.140E-02 + 0.118E+02 0.117E+02 0.130E+02 -.118E+02 -.116E+02 -.130E+02 -.861E-01 -.830E-01 0.267E-01 -.256E-03 -.286E-03 -.126E-03 + -.190E+04 -.187E+04 -.189E+04 0.190E+04 0.187E+04 0.189E+04 0.330E+00 0.321E+00 0.153E+00 -.122E-02 -.427E-03 -.111E-02 + -.983E+03 -.940E+03 -.982E+03 0.983E+03 0.939E+03 0.983E+03 -.637E+00 0.686E+00 -.631E+00 -.163E-02 -.126E-02 -.163E-02 + 0.958E+01 0.155E+02 0.969E+01 -.941E+01 -.156E+02 -.952E+01 -.171E+00 0.976E-01 -.173E+00 -.299E-03 -.203E-03 -.304E-03 + -.940E+03 -.983E+03 -.983E+03 0.939E+03 0.983E+03 0.983E+03 0.686E+00 -.635E+00 -.629E+00 -.132E-02 -.166E-02 -.169E-02 + 0.118E+02 0.118E+02 0.656E+01 -.118E+02 -.117E+02 -.678E+01 -.474E-01 -.472E-01 0.216E+00 -.345E-03 -.337E-03 -.297E-03 + -.187E+04 -.190E+04 -.189E+04 0.187E+04 0.190E+04 0.189E+04 0.344E+00 0.411E+00 0.204E+00 -.385E-03 -.121E-02 -.999E-03 + -.948E+03 -.948E+03 -.949E+03 0.948E+03 0.947E+03 0.948E+03 0.472E+00 0.471E+00 0.477E+00 -.133E-02 -.139E-02 -.141E-02 + 0.155E+02 0.964E+01 0.955E+01 -.156E+02 -.946E+01 -.937E+01 0.991E-01 -.172E+00 -.172E+00 -.226E-03 -.293E-03 -.297E-03 + -.190E+04 -.190E+04 -.190E+04 0.190E+04 0.190E+04 0.190E+04 0.368E+00 0.368E+00 0.368E+00 -.804E-03 -.838E-03 -.837E-03 + -.949E+03 -.948E+03 -.948E+03 0.949E+03 0.947E+03 0.947E+03 0.477E+00 0.475E+00 0.469E+00 -.139E-02 -.139E-02 -.132E-02 + 0.960E+01 0.972E+01 0.154E+02 -.943E+01 -.955E+01 -.155E+02 -.175E+00 -.171E+00 0.965E-01 -.270E-03 -.303E-03 -.228E-03 + -.189E+04 -.187E+04 -.190E+04 0.189E+04 0.187E+04 0.190E+04 0.191E+00 0.334E+00 0.399E+00 -.103E-02 -.404E-03 -.118E-02 + -.944E+03 -.944E+03 -.963E+03 0.944E+03 0.944E+03 0.962E+03 0.351E+00 0.351E+00 0.698E+00 -.138E-02 -.135E-02 -.156E-02 + 0.129E+02 0.118E+02 0.118E+02 -.130E+02 -.117E+02 -.117E+02 0.256E-01 -.863E-01 -.836E-01 -.142E-03 -.279E-03 -.280E-03 + -.187E+04 -.189E+04 -.190E+04 0.187E+04 0.189E+04 0.190E+04 0.319E+00 0.152E+00 0.332E+00 -.423E-03 -.985E-03 -.123E-02 + -.948E+03 -.949E+03 -.948E+03 0.947E+03 0.949E+03 0.948E+03 0.471E+00 0.477E+00 0.472E+00 -.136E-02 -.139E-02 -.136E-02 + 0.119E+02 0.130E+02 0.118E+02 -.118E+02 -.130E+02 -.117E+02 -.817E-01 0.253E-01 -.876E-01 -.282E-03 -.128E-03 -.296E-03 + -.149E+04 -.149E+04 -.149E+04 0.149E+04 0.149E+04 0.149E+04 -.148E+01 -.147E+01 -.149E+01 -.398E-03 -.433E-03 -.350E-03 + -.590E+03 -.590E+03 -.590E+03 0.590E+03 0.590E+03 0.590E+03 0.340E+00 0.335E+00 0.342E+00 0.872E-03 0.437E-03 0.212E-03 + -.154E+03 -.165E+03 -.104E+03 0.157E+03 0.169E+03 0.101E+03 -.247E+01 -.375E+01 0.312E+01 0.125E-03 0.753E-04 0.263E-04 + -.166E+03 -.104E+03 -.154E+03 0.169E+03 0.101E+03 0.157E+03 -.374E+01 0.314E+01 -.246E+01 0.145E-03 0.475E-04 0.400E-04 + -.104E+03 -.154E+03 -.166E+03 0.101E+03 0.157E+03 0.169E+03 0.313E+01 -.245E+01 -.375E+01 0.735E-04 0.934E-04 0.905E-04 + ----------------------------------------------------------------------------------------------- + 0.649E+01 0.647E+01 0.651E+01 0.995E-13 -.938E-12 0.179E-11 -.651E+01 -.649E+01 -.653E+01 -.101E-01 -.108E-01 -.109E-01 + + + POSITION TOTAL-FORCE (eV/Angst) + ----------------------------------------------------------------------------------- + 1.20287 -0.60143 -0.60143 0.064039 0.066858 0.026988 + 1.20287 1.20287 -2.40573 0.065921 0.026063 0.065976 + 1.20287 3.00717 -4.21003 0.052729 0.057880 0.057828 + 3.00717 -2.40573 -0.60143 0.056529 0.047096 0.056776 + 3.00717 -0.60143 -2.40573 0.025976 0.065859 0.065857 + 3.00717 1.20287 -4.21003 0.057026 0.056663 0.046984 + 4.81147 -4.21003 -0.60143 0.048039 0.055009 0.057455 + 4.81147 -2.40573 -2.40573 0.057635 0.057780 0.052865 + 4.81147 -0.60143 -4.21003 0.058591 0.053582 0.055855 + 1.20287 1.20287 1.20287 -0.049766 -0.052656 -0.037432 + 1.20287 3.00717 -0.60143 -0.049298 -0.038362 -0.049231 + 1.20287 4.81147 -2.40573 -0.086803 -0.086326 -0.085579 + 3.00717 -0.60143 1.20287 -0.051239 -0.048761 -0.036893 + 3.00717 1.20287 -0.60143 -0.059958 -0.059921 -0.057873 + 3.00717 3.00717 -2.40573 -0.051247 -0.037826 -0.047176 + 4.81147 -2.40573 1.20287 -0.067602 -0.068144 -0.066191 + 4.81147 -0.60143 -0.60143 -0.037527 -0.048276 -0.049250 + 4.81147 1.20287 -2.40573 -0.037861 -0.051492 -0.047707 + 10.17915 4.77609 -0.61671 -0.001352 -0.000039 -0.000135 + 4.78670 2.98159 2.98345 -0.000158 -0.000032 -0.000193 + 2.99371 2.99438 1.19231 0.001333 0.000967 0.000415 + 6.58245 8.37594 -0.61722 0.000104 -0.001520 0.000463 + 6.59231 1.18167 2.98663 0.002368 0.001702 0.002374 + 4.79921 1.18957 1.19235 0.000808 0.000987 0.001026 + 8.37841 6.57269 -0.63931 0.004488 0.004902 0.004331 + 8.39940 -0.62596 2.98666 0.001805 0.002945 0.002539 + 6.60485 -0.61267 1.19473 -0.000091 -0.000204 -0.000495 + 10.18154 1.18206 2.97778 -0.001260 0.001223 -0.000795 + 4.78589 4.78399 1.18130 -0.000000 -0.000107 -0.000442 + 2.99468 4.80359 -0.61213 -0.000510 -0.002775 -0.000818 + 6.58887 2.98180 1.18086 -0.000051 0.000298 0.000164 + 4.79902 2.99465 -0.61291 0.001033 0.000854 0.000896 + 8.40075 2.96070 2.97663 0.001090 -0.001430 -0.001021 + 8.39882 1.18085 1.18612 -0.000260 -0.000133 -0.000594 + 6.60818 1.19036 -0.61202 -0.002333 -0.000691 -0.000898 + 10.18929 2.97146 1.17195 0.000686 0.000130 -0.000735 + 4.79139 6.59427 -0.61982 0.000088 -0.000224 -0.001095 + 2.99466 6.60325 -2.41181 -0.000810 -0.000814 -0.002723 + 6.58094 6.59534 1.16149 -0.000701 0.000723 -0.002313 + 6.59196 4.78729 -0.61900 0.002559 0.002408 0.001751 + 4.80136 4.80032 -2.41507 -0.000262 -0.000190 -0.000421 + 8.39990 4.77733 1.16387 0.001236 -0.000409 -0.001629 + 8.39857 2.98676 -0.61943 -0.000256 0.000068 -0.001099 + 6.60452 2.99678 -2.41509 0.000169 -0.000128 -0.000401 + 6.66462 4.85917 3.06009 0.002114 0.001586 0.000421 + 7.87740 6.06429 4.27995 -0.005028 -0.005743 -0.006326 + 8.37438 6.82010 3.65138 0.001021 -0.000614 -0.001897 + 8.63108 5.43141 4.77465 -0.000860 -0.000677 0.001368 + 7.24663 6.55860 5.03561 -0.002154 0.001907 -0.000969 + ----------------------------------------------------------------------------------- + total drift: -0.022467 -0.024459 -0.025086 + + +-------------------------------------------------------------------------------------------------------- + + + + FREE ENERGIE OF THE ION-ELECTRON SYSTEM (eV) + --------------------------------------------------- + free energy TOTEN = -81.69643758 eV + + energy without entropy= -81.68451334 energy(sigma->0) = -81.69246283 + + d Force = 0.3601851E-04[ 0.131E-04, 0.589E-04] d Energy = 0.3553344E-04 0.485E-06 + d Force = 0.6654172E+01[ 0.665E+01, 0.665E+01] d Ewald = 0.6654176E+01-0.351E-05 + + +-------------------------------------------------------------------------------------------------------- + + + POTLOK: cpu time 3.8134: real time 3.8151 + + +-------------------------------------------------------------------------------------------------------- + + + stress matrix after NEB project (eV) + -11.75883 3.55697 3.49003 + 3.55697 -11.74652 3.49880 + 3.49003 3.49880 -11.79875 + FORCES: max atom, RMS 0.009914 0.002450 + FORCE total and by dimension 0.017150 0.006326 + Stress total and by dimension 22.127115 11.798755 + + +-------------------------------------------------------------------------------------------------------- + + + + reached required accuracy - stopping structural energy minimisation + LOOP+: cpu time 696.9607: real time 698.2358 + 4ORBIT: cpu time 0.0000: real time 0.0000 + + total amount of memory used by VASP on root node 292098. kBytes +======================================================================== + + base : 30000. kBytes + nonlr-proj: 15736. kBytes + fftplans : 5374. kBytes + grid : 10087. kBytes + one-center: 202. kBytes + wavefun : 230699. kBytes + + + + General timing and accounting informations for this job: + ======================================================== + + Total CPU time used (sec): 37951.500 + User time (sec): 36421.022 + System time (sec): 1530.479 + Elapsed time (sec): 38088.511 + + Maximum memory used (kb): 530776. + Average memory used (kb): 0. + + Minor page faults: 4270371 + Major page faults: 69 + Voluntary context switches: 1790336 diff --git a/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu_CH3_H/INCAR b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu_CH3_H/INCAR new file mode 100644 index 0000000000000000000000000000000000000000..d50df61d8fba8a5d5d78e28f2eb2e0b7d73f2b55 --- /dev/null +++ b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu_CH3_H/INCAR @@ -0,0 +1,43 @@ +INCAR file from C:\Users\Matt\Documents\Materials Studio Projects\TempProject Files\Documents\PdAu_CH4_PRv2.xsd. Created by Matt Darby on 30-Nov-2017. +INCAR file. Created by M Darby on 30-Nov-2017. +NWRITE = 1 +LWAVE = .FALSE. # write WAVECAR? +LCHARG = .FALSE. # write CHGCAR? +LVTOT = .FALSE. # write LOCPOT? + +GGA = MK # OptB86b-vdW XC-functional used +PARAM1 = 0.1234 +PARAM2 = 1.0000 +LUSE_VDW = .TRUE. +AGGAC = 0.0000 + +IDIPOL = 3 +LDIPOL = .TRUE. + +# Electronic relaxation +ENCUT = 400 # Energy cutoff in eV +# IALGO = 48 # 8: CG, 48: DIIS algorithm for electrons +ALGO = FAST +VOSKOWN = 1 # Default for PBE, RPBE +PREC = ACCURATE +LREAL = AUTO +ROPT = 2e-4 2e-4 2e-4 2e-4 +ISTART = 0 +NELM = 100 +NELMDL = -10 +EDIFF = 1e-7 # This and EDIFFG are the tolerance parameters +ISYM = 2 + +# Ionic relaxation +NSW = 200 # number of steps in optimization (default 0!) +ISIF = 2 # 0: relax ions, 1,2:relax ions,calc stresses, 3:relax ion+cell +IBRION = 1 # 1: quasi-NR, 2:CG algorithm for ions +EDIFFG = -0.01 # For high accuracy, use -0.01 or -0.02 +POTIM = 0.125 # reduce trial step in optimization +ISMEAR = 1 # 0: Gaussian, electron smearing +SIGMA = 0.1 # If gas phase, set to 0.01 +NFREE = 10 # number of DIIS vectors to save + +# Parallel +NPAR = 8 +LPLANE = .TRUE. diff --git a/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu_CH3_H/OUTCAR b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu_CH3_H/OUTCAR new file mode 100644 index 0000000000000000000000000000000000000000..d5a65f68b7a596bd3c9598b72c9a5842eb8c7cb9 --- /dev/null +++ b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu_CH3_H/OUTCAR @@ -0,0 +1,1794 @@ + vasp.5.4.1 24Jun15 (build Dec 04 2015 16:58:54) complex + + executed on IFC91_ompi date 2017.12.30 04:54:02 + running on 32 total cores + distrk: each k-point on 32 cores, 1 groups + distr: one band on NCORES_PER_BAND= 4 cores, 8 groups + + +-------------------------------------------------------------------------------------------------------- + + + INCAR: + POTCAR: PAW_PBE Cu 05Jan2001 + POTCAR: PAW_PBE Rh 06Sep2000 + POTCAR: PAW_PBE C 08Apr2002 + POTCAR: PAW_PBE H 15Jun2001 + + ----------------------------------------------------------------------------- +| | +| ADVICE TO THIS USER RUNNING 'VASP/VAMP' (HEAR YOUR MASTER'S VOICE ...): | +| | +| You have switched on vdW-DFT. | +| This routine was written and supplied by Jiri Klimes. | +| We recommed that you carefully read and cite the following | +| publication | +| J. Klimes, D.R. Bowler, A. Michelides | +| J. Phys.: Cond Matt. 22 022201 (2010) | +| J. Klimes, D.R. Bowler, A. Michelides | +| Phys. Rev. B. 83, 195131 (2011) | +| and references therein. | +| | + ----------------------------------------------------------------------------- + + POTCAR: PAW_PBE Cu 05Jan2001 + local pseudopotential read in + partial core-charges read in + atomic valenz-charges read in + non local Contribution for L= 2 read in + real space projection operators read in + non local Contribution for L= 2 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + PAW grid and wavefunctions read in + + number of l-projection operators is LMAX = 6 + number of lm-projection operators is LMMAX = 18 + + POTCAR: PAW_PBE Rh 06Sep2000 + local pseudopotential read in + partial core-charges read in + atomic valenz-charges read in + non local Contribution for L= 2 read in + real space projection operators read in + non local Contribution for L= 2 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + PAW grid and wavefunctions read in + + number of l-projection operators is LMAX = 6 + number of lm-projection operators is LMMAX = 18 + + POTCAR: PAW_PBE C 08Apr2002 + local pseudopotential read in + atomic valenz-charges read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + PAW grid and wavefunctions read in + + number of l-projection operators is LMAX = 4 + number of lm-projection operators is LMMAX = 8 + + POTCAR: PAW_PBE H 15Jun2001 + local pseudopotential read in + atomic valenz-charges read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + PAW grid and wavefunctions read in + + number of l-projection operators is LMAX = 3 + number of lm-projection operators is LMMAX = 5 + + Optimization of the real space projectors (new method) + + maximal supplied QI-value = 16.25 + optimisation between [QCUT,QGAM] = [ 10.24, 20.48] = [ 29.35,117.42] Ry + Optimized for a Real-space Cutoff 1.55 Angstroem + + l n(q) QCUT max X(q) W(low)/X(q) W(high)/X(q) e(spline) + 2 9 10.239 4.977 0.78E-05 0.33E-04 0.53E-07 + 2 9 10.239 13.467 0.10E-03 0.30E-03 0.20E-06 + 0 10 10.239 13.303 0.19E-04 0.19E-05 0.69E-08 + 0 10 10.239 44.613 0.65E-04 0.24E-05 0.85E-07 + 1 9 10.239 5.276 0.25E-04 0.19E-04 0.22E-07 + 1 9 10.239 7.322 0.84E-04 0.97E-04 0.11E-06 + Optimization of the real space projectors (new method) + + maximal supplied QI-value = 15.12 + optimisation between [QCUT,QGAM] = [ 10.13, 20.41] = [ 28.73,116.64] Ry + Optimized for a Real-space Cutoff 1.70 Angstroem + + l n(q) QCUT max X(q) W(low)/X(q) W(high)/X(q) e(spline) + 2 9 10.129 3.971 0.16E-04 0.22E-05 0.64E-07 + 2 9 10.129 27.544 0.10E-03 0.24E-04 0.29E-06 + 0 10 10.129 20.781 0.20E-04 0.19E-06 0.11E-07 + 0 10 10.129 69.103 0.45E-04 0.21E-04 0.91E-07 + 1 10 10.129 7.864 0.65E-05 0.54E-05 0.31E-07 + 1 10 10.129 10.811 0.30E-04 0.39E-05 0.12E-06 + Optimization of the real space projectors (new method) + + maximal supplied QI-value = 25.13 + optimisation between [QCUT,QGAM] = [ 10.05, 20.36] = [ 28.30,116.06] Ry + Optimized for a Real-space Cutoff 1.51 Angstroem + + l n(q) QCUT max X(q) W(low)/X(q) W(high)/X(q) e(spline) + 0 9 10.053 5.582 0.29E-04 0.95E-05 0.10E-06 + 0 9 10.053 69.432 0.19E-03 0.21E-03 0.38E-06 + 1 9 10.053 2.780 0.26E-04 0.49E-04 0.22E-06 + 1 9 10.053 4.549 0.59E-04 0.62E-04 0.43E-06 + Optimization of the real space projectors (new method) + + maximal supplied QI-value = 34.20 + optimisation between [QCUT,QGAM] = [ 9.92, 20.18] = [ 27.55,114.04] Ry + Optimized for a Real-space Cutoff 1.34 Angstroem + + l n(q) QCUT max X(q) W(low)/X(q) W(high)/X(q) e(spline) + 0 8 9.919 4.436 0.31E-04 0.59E-04 0.66E-07 + 0 8 9.919 16.131 0.16E-03 0.20E-03 0.35E-06 + 1 8 9.919 4.654 0.19E-03 0.46E-03 0.40E-06 + + ----------------------------------------------------------------------------- +| | +| ADVICE TO THIS USER RUNNING 'VASP/VAMP' (HEAR YOUR MASTER'S VOICE ...): | +| | +| You enforced a specific xc-type in the INCAR file, | +| a different type was found on the POTCAR file | +| I HOPE YOU KNOW, WHAT YOU ARE DOING | +| | + ----------------------------------------------------------------------------- + + PAW_PBE Cu 05Jan2001 : + energy of atom 1 EATOM=-1390.9800 + kinetic energy error for atom= 0.0117 (will be added to EATOM!!) + PAW_PBE Rh 06Sep2000 : + energy of atom 2 EATOM= -616.5493 + kinetic energy error for atom= 0.0043 (will be added to EATOM!!) + PAW_PBE C 08Apr2002 : + energy of atom 3 EATOM= -147.1560 + kinetic energy error for atom= 0.0288 (will be added to EATOM!!) + PAW_PBE H 15Jun2001 : + energy of atom 4 EATOM= -12.4884 + kinetic energy error for atom= 0.0098 (will be added to EATOM!!) + + + POSCAR: POSCAR file for Cu_3x3x5.xsd | Created o + positions in direct lattice + velocities in cartesian coordinates + exchange correlation table for LEXCH = 43 + RHO(1)= 0.500 N(1) = 2000 + RHO(2)= 100.500 N(2) = 4000 + + VTST: version 3.1, (03/28/14) + + CHAIN: initializing optimizer + + OPT: Using VASP QUASI-newton optimizer + CHAIN: Read ICHAIN 0 + + POSCAR: POSCAR file for Cu_3x3x5.xsd | Created o + positions in direct lattice + velocities in cartesian coordinates + + + +-------------------------------------------------------------------------------------------------------- + + + ion position nearest neighbor table + 1 0.222 0.111 0.000- 2 2.55 7 2.55 5 2.55 9 2.55 4 2.55 3 2.55 10 2.55 14 2.55 + 13 2.55 + 2 0.222 0.444 0.000- 1 2.55 8 2.55 7 2.55 3 2.55 5 2.55 6 2.55 11 2.55 14 2.55 + 15 2.55 + 3 0.222 0.778 0.000- 9 2.55 8 2.55 6 2.55 1 2.55 2 2.55 4 2.55 12 2.55 13 2.55 + 15 2.55 + 4 0.556 0.111 0.000- 5 2.55 8 2.55 6 2.55 7 2.55 1 2.55 3 2.55 13 2.55 16 2.55 + 17 2.55 + 5 0.556 0.444 0.000- 4 2.55 1 2.55 17 2.55 6 2.55 8 2.55 2 2.55 9 2.55 14 2.55 + 18 2.55 + 6 0.556 0.778 0.000- 3 2.55 4 2.55 5 2.55 9 2.55 7 2.55 2 2.55 15 2.55 16 2.55 + 18 2.55 + 7 0.889 0.111 0.000- 1 2.55 8 2.55 2 2.55 4 2.55 9 2.55 6 2.55 10 2.55 11 2.55 + 16 2.55 + 8 0.889 0.444 0.000- 2 2.55 7 2.55 4 2.55 3 2.55 11 2.55 9 2.55 5 2.55 12 2.55 + 17 2.55 + 9 0.889 0.778 0.000- 3 2.55 1 2.55 6 2.55 7 2.55 8 2.55 5 2.55 10 2.55 12 2.55 + 18 2.55 + 10 0.000 0.000 0.114- 21 2.54 38 2.55 13 2.55 16 2.55 11 2.55 12 2.55 14 2.55 18 2.55 + 9 2.55 1 2.55 7 2.55 44 2.55 + 11 0.000 0.333 0.114- 21 2.54 12 2.55 15 2.55 8 2.55 10 2.55 17 2.55 14 2.55 16 2.55 + 2 2.55 7 2.55 27 2.55 30 2.56 + 12 0.000 0.667 0.114- 35 2.55 30 2.55 11 2.55 17 2.55 18 2.55 15 2.55 10 2.55 13 2.55 + 9 2.55 3 2.55 8 2.55 38 2.56 + 13 0.333 0.000 0.114- 24 2.54 41 2.55 16 2.55 17 2.55 14 2.55 15 2.55 10 2.55 12 2.55 + 3 2.55 4 2.55 1 2.55 38 2.55 + 14 0.333 0.333 0.114- 24 2.54 21 2.55 32 2.55 17 2.55 15 2.55 18 2.55 11 2.55 13 2.55 + 10 2.55 1 2.55 2 2.55 5 2.55 + 15 0.333 0.667 0.114- 32 2.54 18 2.55 14 2.55 11 2.55 16 2.55 12 2.55 13 2.55 6 2.55 + 2 2.55 3 2.55 30 2.55 41 2.55 + 16 0.667 0.000 0.114- 44 2.55 13 2.55 15 2.55 17 2.55 18 2.55 10 2.55 11 2.55 6 2.55 + 4 2.55 7 2.55 41 2.55 27 2.56 + 17 0.667 0.333 0.114- 24 2.54 27 2.55 35 2.55 18 2.55 14 2.55 13 2.55 12 2.55 5 2.55 + 11 2.55 16 2.55 4 2.55 8 2.55 + 18 0.667 0.667 0.114- 35 2.54 32 2.55 15 2.55 17 2.55 14 2.55 16 2.55 12 2.55 10 2.55 + 5 2.55 6 2.55 9 2.55 44 2.56 + 19 0.993 0.996 0.453- 42 2.49 43 2.52 25 2.53 26 2.53 36 2.53 20 2.57 28 2.58 22 2.59 + 45 2.60 + 20 0.222 0.114 0.340- 29 2.53 31 2.54 26 2.54 21 2.55 38 2.55 23 2.55 24 2.55 37 2.56 + 22 2.56 43 2.57 19 2.57 45 2.67 + 21 0.110 0.223 0.227- 11 2.54 10 2.54 14 2.55 20 2.55 27 2.55 44 2.55 29 2.55 26 2.55 + 38 2.55 30 2.55 32 2.55 24 2.55 + 22 0.332 0.997 0.454- 39 2.50 36 2.53 37 2.53 25 2.54 23 2.55 20 2.56 33 2.58 45 2.58 + 19 2.59 + 23 0.554 0.113 0.340- 25 2.54 24 2.54 31 2.54 37 2.55 20 2.55 41 2.55 27 2.55 34 2.55 + 22 2.55 33 2.55 26 2.56 40 2.57 + 24 0.444 0.223 0.227- 31 2.54 14 2.54 23 2.54 13 2.54 17 2.54 20 2.55 38 2.55 41 2.55 + 27 2.55 21 2.55 35 2.56 32 2.56 + 25 0.665 0.001 0.453- 19 2.53 28 2.53 23 2.54 40 2.54 22 2.54 39 2.54 26 2.54 33 2.55 + 42 2.55 + 26 0.889 0.113 0.340- 19 2.53 28 2.54 25 2.54 27 2.54 29 2.54 20 2.54 44 2.54 21 2.55 + 34 2.55 43 2.55 23 2.56 40 2.57 + 27 0.778 0.223 0.227- 26 2.54 34 2.54 21 2.55 23 2.55 30 2.55 17 2.55 44 2.55 11 2.55 + 35 2.55 24 2.55 41 2.56 16 2.56 + 28 0.994 0.333 0.453- 33 2.49 34 2.53 25 2.53 26 2.54 36 2.54 29 2.57 19 2.58 39 2.59 + 45 2.59 + 29 0.222 0.444 0.340- 20 2.53 26 2.54 30 2.54 31 2.54 21 2.55 40 2.55 32 2.55 34 2.56 + 37 2.56 39 2.57 28 2.57 45 2.67 + 30 0.111 0.556 0.227- 37 2.54 29 2.54 34 2.55 12 2.55 32 2.55 27 2.55 41 2.55 38 2.55 + 35 2.55 21 2.55 15 2.55 11 2.56 + 31 0.555 0.445 0.339- 32 2.53 35 2.54 24 2.54 40 2.54 20 2.54 29 2.54 23 2.54 43 2.55 + 34 2.55 33 2.58 42 2.58 45 2.70 + 32 0.444 0.557 0.227- 31 2.53 15 2.54 40 2.55 18 2.55 14 2.55 41 2.55 29 2.55 30 2.55 + 44 2.55 21 2.55 35 2.55 24 2.56 + 33 0.669 0.335 0.454- 28 2.49 34 2.54 36 2.55 25 2.55 23 2.55 42 2.56 31 2.58 22 2.58 + 45 2.58 + 34 0.888 0.445 0.340- 28 2.53 33 2.54 36 2.54 27 2.54 35 2.54 30 2.55 23 2.55 43 2.55 + 31 2.55 26 2.55 37 2.56 29 2.56 + 35 0.778 0.556 0.227- 31 2.54 18 2.54 34 2.54 43 2.55 12 2.55 17 2.55 30 2.55 38 2.55 + 44 2.55 27 2.55 32 2.55 24 2.56 + 36 0.000 0.668 0.453- 39 2.53 22 2.53 19 2.53 28 2.54 43 2.54 34 2.54 37 2.54 33 2.55 + 42 2.55 + 37 0.223 0.779 0.340- 39 2.53 22 2.53 41 2.54 38 2.54 30 2.54 36 2.54 23 2.55 40 2.55 + 34 2.56 20 2.56 29 2.56 43 2.56 + 38 0.111 0.890 0.227- 37 2.54 20 2.55 43 2.55 24 2.55 44 2.55 41 2.55 10 2.55 30 2.55 + 35 2.55 21 2.55 13 2.55 12 2.56 + 39 0.332 0.671 0.454- 22 2.50 36 2.53 37 2.53 25 2.54 40 2.55 29 2.57 42 2.58 45 2.58 + 28 2.59 + 40 0.554 0.777 0.340- 25 2.54 31 2.54 32 2.55 37 2.55 41 2.55 43 2.55 44 2.55 29 2.55 + 39 2.55 42 2.56 26 2.57 23 2.57 + 41 0.444 0.890 0.227- 37 2.54 40 2.55 23 2.55 13 2.55 24 2.55 32 2.55 30 2.55 38 2.55 + 16 2.55 15 2.55 44 2.55 27 2.56 + 42 0.668 0.669 0.455- 19 2.49 36 2.55 43 2.55 25 2.55 40 2.56 33 2.56 45 2.58 31 2.58 + 39 2.58 + 43 0.887 0.778 0.340- 19 2.52 44 2.54 36 2.54 40 2.55 35 2.55 31 2.55 38 2.55 34 2.55 + 42 2.55 26 2.55 37 2.56 20 2.57 + 44 0.778 0.890 0.227- 43 2.54 26 2.54 21 2.55 40 2.55 16 2.55 38 2.55 27 2.55 35 2.55 + 10 2.55 32 2.55 41 2.55 18 2.56 + 45 0.331 0.334 0.462- 48 1.63 46 2.22 42 2.58 33 2.58 39 2.58 22 2.58 28 2.59 19 2.60 + 29 2.67 20 2.67 31 2.70 + 46 0.313 0.321 0.583- 47 1.10 49 1.10 50 1.10 45 2.22 + 47 0.321 0.458 0.606- 46 1.10 + 48 0.499 0.432 0.527- 45 1.63 + 49 0.411 0.281 0.614- 46 1.10 + 50 0.157 0.194 0.585- 46 1.10 + + LATTYP: Found a hexagonal cell. + ALAT = 7.6549965918 + C/A-ratio = 2.3949984178 + + Lattice vectors: + + A1 = ( 5.4129000000, -5.4129000000, -0.0000000000) + A2 = ( 0.0000000000, 5.4129000000, -5.4129000000) + A3 = ( 10.5849693586, 10.5849693586, 10.5849693586) + + +Analysis of symmetry for initial positions (statically): +===================================================================== + Subroutine PRICEL returns: + Original cell was already a primitive cell. + + + Routine SETGRP: Setting up the symmetry group for a + hexagonal supercell. + + + Subroutine GETGRP returns: Found 1 space group operations + (whereof 1 operations were pure point group operations) + out of a pool of 24 trial point group operations. + + +The static configuration has the point symmetry C_1 . + + +Analysis of symmetry for dynamics (positions and initial velocities): +===================================================================== + Subroutine PRICEL returns: + Original cell was already a primitive cell. + + + Routine SETGRP: Setting up the symmetry group for a + hexagonal supercell. + + + Subroutine GETGRP returns: Found 1 space group operations + (whereof 1 operations were pure point group operations) + out of a pool of 24 trial point group operations. + + +The dynamic configuration has the point symmetry C_1 . + + +Analysis of constrained symmetry for selective dynamics: +===================================================================== + Subroutine PRICEL returns: + Original cell was already a primitive cell. + + + Routine SETGRP: Setting up the symmetry group for a + hexagonal supercell. + + + Subroutine GETGRP returns: Found 1 space group operations + (whereof 1 operations were pure point group operations) + out of a pool of 24 trial point group operations. + + +The constrained configuration has the point symmetry C_1 . + + + KPOINTS: K-Point Grid Created by Matt Darby on 30 + +Automatic generation of k-mesh. +Space group operators: + irot det(A) alpha n_x n_y n_z tau_x tau_y tau_z + 1 1.000000 0.000000 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 + + Subroutine IBZKPT returns following result: + =========================================== + + Found 85 irreducible k-points: + + Following reciprocal coordinates: + Coordinates Weight + 0.000000 0.000000 0.000000 1.000000 + 0.076923 0.000000 0.000000 2.000000 + 0.153846 0.000000 0.000000 2.000000 + 0.230769 0.000000 0.000000 2.000000 + 0.307692 0.000000 0.000000 2.000000 + 0.384615 0.000000 0.000000 2.000000 + 0.461538 0.000000 0.000000 2.000000 + 0.000000 0.076923 0.000000 2.000000 + 0.076923 0.076923 0.000000 2.000000 + 0.153846 0.076923 0.000000 2.000000 + 0.230769 0.076923 -0.000000 2.000000 + 0.307692 0.076923 0.000000 2.000000 + 0.384615 0.076923 -0.000000 2.000000 + 0.461538 0.076923 -0.000000 2.000000 + -0.461538 0.076923 -0.000000 2.000000 + -0.384615 0.076923 -0.000000 2.000000 + -0.307692 0.076923 -0.000000 2.000000 + -0.230769 0.076923 0.000000 2.000000 + -0.153846 0.076923 -0.000000 2.000000 + -0.076923 0.076923 0.000000 2.000000 + -0.000000 0.153846 -0.000000 2.000000 + 0.076923 0.153846 0.000000 2.000000 + 0.153846 0.153846 0.000000 2.000000 + 0.230769 0.153846 0.000000 2.000000 + 0.307692 0.153846 0.000000 2.000000 + 0.384615 0.153846 0.000000 2.000000 + 0.461538 0.153846 0.000000 2.000000 + -0.461538 0.153846 0.000000 2.000000 + -0.384615 0.153846 0.000000 2.000000 + -0.307692 0.153846 -0.000000 2.000000 + -0.230769 0.153846 0.000000 2.000000 + -0.153846 0.153846 -0.000000 2.000000 + -0.076923 0.153846 -0.000000 2.000000 + -0.000000 0.230769 0.000000 2.000000 + 0.076923 0.230769 -0.000000 2.000000 + 0.153846 0.230769 0.000000 2.000000 + 0.230769 0.230769 0.000000 2.000000 + 0.307692 0.230769 0.000000 2.000000 + 0.384615 0.230769 -0.000000 2.000000 + 0.461538 0.230769 0.000000 2.000000 + -0.461538 0.230769 0.000000 2.000000 + -0.384615 0.230769 -0.000000 2.000000 + -0.307692 0.230769 0.000000 2.000000 + -0.230769 0.230769 -0.000000 2.000000 + -0.153846 0.230769 0.000000 2.000000 + -0.076923 0.230769 0.000000 2.000000 + -0.000000 0.307692 0.000000 2.000000 + 0.076923 0.307692 0.000000 2.000000 + 0.153846 0.307692 0.000000 2.000000 + 0.230769 0.307692 0.000000 2.000000 + 0.307692 0.307692 0.000000 2.000000 + 0.384615 0.307692 0.000000 2.000000 + 0.461538 0.307692 0.000000 2.000000 + -0.461538 0.307692 0.000000 2.000000 + -0.384615 0.307692 0.000000 2.000000 + -0.307692 0.307692 0.000000 2.000000 + -0.230769 0.307692 0.000000 2.000000 + -0.153846 0.307692 0.000000 2.000000 + -0.076923 0.307692 0.000000 2.000000 + -0.000000 0.384615 0.000000 2.000000 + 0.076923 0.384615 -0.000000 2.000000 + 0.153846 0.384615 0.000000 2.000000 + 0.230769 0.384615 -0.000000 2.000000 + 0.307692 0.384615 0.000000 2.000000 + 0.384615 0.384615 0.000000 2.000000 + 0.461538 0.384615 0.000000 2.000000 + -0.461538 0.384615 0.000000 2.000000 + -0.384615 0.384615 0.000000 2.000000 + -0.307692 0.384615 0.000000 2.000000 + -0.230769 0.384615 -0.000000 2.000000 + -0.153846 0.384615 0.000000 2.000000 + -0.076923 0.384615 -0.000000 2.000000 + -0.000000 0.461538 0.000000 2.000000 + 0.076923 0.461538 0.000000 2.000000 + 0.153846 0.461538 0.000000 2.000000 + 0.230769 0.461538 0.000000 2.000000 + 0.307692 0.461538 0.000000 2.000000 + 0.384615 0.461538 0.000000 2.000000 + 0.461538 0.461538 0.000000 2.000000 + -0.461538 0.461538 -0.000000 2.000000 + -0.384615 0.461538 0.000000 2.000000 + -0.307692 0.461538 0.000000 2.000000 + -0.230769 0.461538 0.000000 2.000000 + -0.153846 0.461538 -0.000000 2.000000 + -0.076923 0.461538 0.000000 2.000000 + + Following cartesian coordinates: + Coordinates Weight + 0.000000 0.000000 0.000000 1.000000 + 0.009474 -0.004737 -0.004737 2.000000 + 0.018948 -0.009474 -0.009474 2.000000 + 0.028422 -0.014211 -0.014211 2.000000 + 0.037896 -0.018948 -0.018948 2.000000 + 0.047370 -0.023685 -0.023685 2.000000 + 0.056844 -0.028422 -0.028422 2.000000 + 0.004737 0.004737 -0.009474 2.000000 + 0.014211 0.000000 -0.014211 2.000000 + 0.023685 -0.004737 -0.018948 2.000000 + 0.033159 -0.009474 -0.023685 2.000000 + 0.042633 -0.014211 -0.028422 2.000000 + 0.052107 -0.018948 -0.033159 2.000000 + 0.061581 -0.023685 -0.037896 2.000000 + -0.052107 0.033159 0.018948 2.000000 + -0.042633 0.028422 0.014211 2.000000 + -0.033159 0.023685 0.009474 2.000000 + -0.023685 0.018948 0.004737 2.000000 + -0.014211 0.014211 0.000000 2.000000 + -0.004737 0.009474 -0.004737 2.000000 + 0.009474 0.009474 -0.018948 2.000000 + 0.018948 0.004737 -0.023685 2.000000 + 0.028422 0.000000 -0.028422 2.000000 + 0.037896 -0.004737 -0.033159 2.000000 + 0.047370 -0.009474 -0.037896 2.000000 + 0.056844 -0.014211 -0.042633 2.000000 + 0.066318 -0.018948 -0.047370 2.000000 + -0.047370 0.037896 0.009474 2.000000 + -0.037896 0.033159 0.004737 2.000000 + -0.028422 0.028422 -0.000000 2.000000 + -0.018948 0.023685 -0.004737 2.000000 + -0.009474 0.018948 -0.009474 2.000000 + 0.000000 0.014211 -0.014211 2.000000 + 0.014211 0.014211 -0.028422 2.000000 + 0.023685 0.009474 -0.033159 2.000000 + 0.033159 0.004737 -0.037896 2.000000 + 0.042633 0.000000 -0.042633 2.000000 + 0.052107 -0.004737 -0.047370 2.000000 + 0.061581 -0.009474 -0.052107 2.000000 + 0.071055 -0.014211 -0.056844 2.000000 + -0.042633 0.042633 0.000000 2.000000 + -0.033159 0.037896 -0.004737 2.000000 + -0.023685 0.033159 -0.009474 2.000000 + -0.014211 0.028422 -0.014211 2.000000 + -0.004737 0.023685 -0.018948 2.000000 + 0.004737 0.018948 -0.023685 2.000000 + 0.018948 0.018948 -0.037896 2.000000 + 0.028422 0.014211 -0.042633 2.000000 + 0.037896 0.009474 -0.047370 2.000000 + 0.047370 0.004737 -0.052107 2.000000 + 0.056844 0.000000 -0.056844 2.000000 + 0.066318 -0.004737 -0.061581 2.000000 + 0.075792 -0.009474 -0.066318 2.000000 + -0.037896 0.047370 -0.009474 2.000000 + -0.028422 0.042633 -0.014211 2.000000 + -0.018948 0.037896 -0.018948 2.000000 + -0.009474 0.033159 -0.023685 2.000000 + -0.000000 0.028422 -0.028422 2.000000 + 0.009474 0.023685 -0.033159 2.000000 + 0.023685 0.023685 -0.047370 2.000000 + 0.033159 0.018948 -0.052107 2.000000 + 0.042633 0.014211 -0.056844 2.000000 + 0.052107 0.009474 -0.061581 2.000000 + 0.061581 0.004737 -0.066318 2.000000 + 0.071055 0.000000 -0.071055 2.000000 + 0.080529 -0.004737 -0.075792 2.000000 + -0.033159 0.052107 -0.018948 2.000000 + -0.023685 0.047370 -0.023685 2.000000 + -0.014211 0.042633 -0.028422 2.000000 + -0.004737 0.037896 -0.033159 2.000000 + 0.004737 0.033159 -0.037896 2.000000 + 0.014211 0.028422 -0.042633 2.000000 + 0.028422 0.028422 -0.056844 2.000000 + 0.037896 0.023685 -0.061581 2.000000 + 0.047370 0.018948 -0.066318 2.000000 + 0.056844 0.014211 -0.071055 2.000000 + 0.066318 0.009474 -0.075792 2.000000 + 0.075792 0.004737 -0.080529 2.000000 + 0.085266 0.000000 -0.085266 2.000000 + -0.028422 0.056844 -0.028422 2.000000 + -0.018948 0.052107 -0.033159 2.000000 + -0.009474 0.047370 -0.037896 2.000000 + 0.000000 0.042633 -0.042633 2.000000 + 0.009474 0.037896 -0.047370 2.000000 + 0.018948 0.033159 -0.052107 2.000000 + + + +-------------------------------------------------------------------------------------------------------- + + + + + Dimension of arrays: + k-points NKPTS = 85 k-points in BZ NKDIM = 85 number of bands NBANDS= 304 + number of dos NEDOS = 301 number of ions NIONS = 50 + non local maximal LDIM = 6 non local SUM 2l+1 LMDIM = 18 + total plane-waves NPLWV = 300000 + max r-space proj IRMAX = 6660 max aug-charges IRDMAX= 18523 + dimension x,y,z NGX = 50 NGY = 50 NGZ = 120 + dimension x,y,z NGXF= 100 NGYF= 100 NGZF= 240 + support grid NGXF= 100 NGYF= 100 NGZF= 240 + ions per type = 44 1 1 4 + NGX,Y,Z is equivalent to a cutoff of 10.86, 10.86, 10.88 a.u. + NGXF,Y,Z is equivalent to a cutoff of 21.72, 21.72, 21.76 a.u. + + + I would recommend the setting: + dimension x,y,z NGX = 50 NGY = 50 NGZ = 120 + SYSTEM = unknown system + POSCAR = POSCAR file for Cu_3x3x5.xsd | Created o + + Startparameter for this run: + NWRITE = 1 write-flag & timer + PREC = accura normal or accurate (medium, high low for compatibility) + ISTART = 0 job : 0-new 1-cont 2-samecut + ICHARG = 2 charge: 1-file 2-atom 10-const + ISPIN = 1 spin polarized calculation? + LNONCOLLINEAR = F non collinear calculations + LSORBIT = F spin-orbit coupling + INIWAV = 1 electr: 0-lowe 1-rand 2-diag + LASPH = F aspherical Exc in radial PAW + METAGGA= F non-selfconsistent MetaGGA calc. + + Electronic Relaxation 1 + ENCUT = 400.0 eV 29.40 Ry 5.42 a.u. 12.48 12.48 29.90*2*pi/ulx,y,z + ENINI = 400.0 initial cutoff + ENAUG = 644.9 eV augmentation charge cutoff + NELM = 100; NELMIN= 2; NELMDL=-10 # of ELM steps + EDIFF = 0.1E-06 stopping-criterion for ELM + LREAL = T real-space projection + NLSPLINE = F spline interpolate recip. space projectors + LCOMPAT= F compatible to vasp.4.4 + GGA_COMPAT = T GGA compatible to vasp.4.4-vasp.4.6 + LMAXPAW = -100 max onsite density + LMAXMIX = 2 max onsite mixed and CHGCAR + VOSKOWN= 1 Vosko Wilk Nusair interpolation + ROPT = -0.00020 -0.00020 -0.00020 -0.00020 + Ionic relaxation + EDIFFG = -.1E-01 stopping-criterion for IOM + NSW = 200 number of steps for IOM + NBLOCK = 1; KBLOCK = 200 inner block; outer block + IBRION = 1 ionic relax: 0-MD 1-quasi-New 2-CG + NFREE = 10 steps in history (QN), initial steepest desc. (CG) + ISIF = 2 stress and relaxation + IWAVPR = 11 prediction: 0-non 1-charg 2-wave 3-comb + ISYM = 2 0-nonsym 1-usesym 2-fastsym + LCORR = T Harris-Foulkes like correction to forces + + POTIM = 0.1250 time-step for ionic-motion + TEIN = 0.0 initial temperature + TEBEG = 0.0; TEEND = 0.0 temperature during run + SMASS = -3.00 Nose mass-parameter (am) + estimated Nose-frequenzy (Omega) = 0.10E-29 period in steps =****** mass= -0.134E-26a.u. + SCALEE = 1.0000 scale energy and forces + NPACO = 256; APACO = 16.0 distance and # of slots for P.C. + PSTRESS= 0.0 pullay stress + + Mass of Ions in am + POMASS = 63.55102.91 12.01 1.00 + Ionic Valenz + ZVAL = 11.00 9.00 4.00 1.00 + Atomic Wigner-Seitz radii + RWIGS = -1.00 -1.00 -1.00 -1.00 + virtual crystal weights + VCA = 1.00 1.00 1.00 1.00 + NELECT = 501.0000 total number of electrons + NUPDOWN= -1.0000 fix difference up-down + + DOS related values: + EMIN = 10.00; EMAX =-10.00 energy-range for DOS + EFERMI = 0.00 + ISMEAR = 1; SIGMA = 0.10 broadening in eV -4-tet -1-fermi 0-gaus + + Electronic relaxation 2 (details) + IALGO = 68 algorithm + LDIAG = T sub-space diagonalisation (order eigenvalues) + LSUBROT= F optimize rotation matrix (better conditioning) + TURBO = 0 0=normal 1=particle mesh + IRESTART = 0 0=no restart 2=restart with 2 vectors + NREBOOT = 0 no. of reboots + NMIN = 0 reboot dimension + EREF = 0.00 reference energy to select bands + IMIX = 4 mixing-type and parameters + AMIX = 0.40; BMIX = 1.00 + AMIX_MAG = 1.60; BMIX_MAG = 1.00 + AMIN = 0.10 + WC = 100.; INIMIX= 1; MIXPRE= 1; MAXMIX= -45 + + Intra band minimization: + WEIMIN = 0.0010 energy-eigenvalue tresh-hold + EBREAK = 0.82E-10 absolut break condition + DEPER = 0.30 relativ break condition + + TIME = 0.40 timestep for ELM + + volume/ion in A,a.u. = 18.61 125.57 + Fermi-wavevector in a.u.,A,eV,Ry = 1.331876 2.516881 24.135288 1.773894 + Thomas-Fermi vector in A = 2.460854 + + Write flags + LWAVE = F write WAVECAR + LCHARG = F write CHGCAR + LVTOT = F write LOCPOT, total local potential + LVHAR = F write LOCPOT, Hartree potential only + LELF = F write electronic localiz. function (ELF) + LORBIT = 0 0 simple, 1 ext, 2 COOP (PROOUT) + + + Dipole corrections + LMONO = F monopole corrections only (constant potential shift) + LDIPOL = T correct potential (dipole corrections) + IDIPOL = 3 1-x, 2-y, 3-z, 4-all directions + EPSILON= 1.0000000 bulk dielectric constant + + Exchange correlation treatment: + GGA = MK GGA type + LEXCH = 43 internal setting for exchange type + VOSKOWN= 1 Vosko Wilk Nusair interpolation + LHFCALC = F Hartree Fock is set to + LHFONE = F Hartree Fock one center treatment + AEXX = 0.0000 exact exchange contribution + + vdW DFT: + LUSE_VDW = T switch on vdW DFT + Zab_VDW =-.8491 correlation parameter + PARAM1 =0.1234 + PARAM2 =1.0000 + PARAM3 =0.0000 + + Linear response parameters + LEPSILON= F determine dielectric tensor + LRPA = F only Hartree local field effects (RPA) + LNABLA = F use nabla operator in PAW spheres + LVEL = F velocity operator in full k-point grid + LINTERFAST= F fast interpolation + KINTER = 0 interpolate to denser k-point grid + CSHIFT =0.1000 complex shift for real part using Kramers Kronig + OMEGAMAX= -1.0 maximum frequency + DEG_THRESHOLD= 0.2000000E-02 threshold for treating states as degnerate + RTIME = 0.100 relaxation time in fs + + Orbital magnetization related: + ORBITALMAG= F switch on orbital magnetization + LCHIMAG = F perturbation theory with respect to B field + DQ = 0.001000 dq finite difference perturbation B field + + + +-------------------------------------------------------------------------------------------------------- + + + quasi-Newton-method for relaxation of ions + using selective dynamics as specified on POSCAR + charge density and potential will be updated during run + non-spin polarized calculation + RMM-DIIS sequential band-by-band and + variant of blocked Davidson during initial phase + perform sub-space diagonalisation + before iterative eigenvector-optimisation + modified Broyden-mixing scheme, WC = 100.0 + initial mixing is a Kerker type mixing with AMIX = 0.4000 and BMIX = 1.0000 + Hartree-type preconditioning will be used + using additional bands 53 + real space projection scheme for non local part + use partial core corrections + calculate Harris-corrections to forces + (improved forces if not selfconsistent) + use gradient corrections + use of overlap-Matrix (Vanderbilt PP) + Methfessel and Paxton Order N= 1 SIGMA = 0.10 + + +-------------------------------------------------------------------------------------------------------- + + + energy-cutoff : 400.00 + volume of cell : 930.40 + direct lattice vectors reciprocal lattice vectors + 5.412900000 -5.412900000 -0.000000000 0.123162568 -0.061581284 -0.061581284 + 0.000000000 5.412900000 -5.412900000 0.061581284 0.061581284 -0.123162568 + 10.584969359 10.584969359 10.584969359 0.031491195 0.031491195 0.031491195 + + length of vectors + 7.654996592 7.654996592 18.333704726 0.150842724 0.150842724 0.054544350 + + + + k-points in units of 2pi/SCALE and weight: K-Point Grid Created by Matt Darby on 30 + 0.00000000 0.00000000 0.00000000 0.006 + 0.00947404 -0.00473702 -0.00473702 0.012 + 0.01894809 -0.00947404 -0.00947404 0.012 + 0.02842213 -0.01421107 -0.01421107 0.012 + 0.03789617 -0.01894809 -0.01894809 0.012 + 0.04737022 -0.02368511 -0.02368511 0.012 + 0.05684426 -0.02842213 -0.02842213 0.012 + 0.00473702 0.00473702 -0.00947404 0.012 + 0.01421107 0.00000000 -0.01421107 0.012 + 0.02368511 -0.00473702 -0.01894809 0.012 + 0.03315915 -0.00947404 -0.02368511 0.012 + 0.04263320 -0.01421107 -0.02842213 0.012 + 0.05210724 -0.01894809 -0.03315915 0.012 + 0.06158128 -0.02368511 -0.03789617 0.012 + -0.05210724 0.03315915 0.01894809 0.012 + -0.04263320 0.02842213 0.01421107 0.012 + -0.03315915 0.02368511 0.00947404 0.012 + -0.02368511 0.01894809 0.00473702 0.012 + -0.01421107 0.01421107 0.00000000 0.012 + -0.00473702 0.00947404 -0.00473702 0.012 + 0.00947404 0.00947404 -0.01894809 0.012 + 0.01894809 0.00473702 -0.02368511 0.012 + 0.02842213 0.00000000 -0.02842213 0.012 + 0.03789617 -0.00473702 -0.03315915 0.012 + 0.04737022 -0.00947404 -0.03789617 0.012 + 0.05684426 -0.01421107 -0.04263320 0.012 + 0.06631831 -0.01894809 -0.04737022 0.012 + -0.04737022 0.03789617 0.00947404 0.012 + -0.03789617 0.03315915 0.00473702 0.012 + -0.02842213 0.02842213 -0.00000000 0.012 + -0.01894809 0.02368511 -0.00473702 0.012 + -0.00947404 0.01894809 -0.00947404 0.012 + 0.00000000 0.01421107 -0.01421107 0.012 + 0.01421107 0.01421107 -0.02842213 0.012 + 0.02368511 0.00947404 -0.03315915 0.012 + 0.03315915 0.00473702 -0.03789617 0.012 + 0.04263320 0.00000000 -0.04263320 0.012 + 0.05210724 -0.00473702 -0.04737022 0.012 + 0.06158128 -0.00947404 -0.05210724 0.012 + 0.07105533 -0.01421107 -0.05684426 0.012 + -0.04263320 0.04263320 0.00000000 0.012 + -0.03315915 0.03789617 -0.00473702 0.012 + -0.02368511 0.03315915 -0.00947404 0.012 + -0.01421107 0.02842213 -0.01421107 0.012 + -0.00473702 0.02368511 -0.01894809 0.012 + 0.00473702 0.01894809 -0.02368511 0.012 + 0.01894809 0.01894809 -0.03789617 0.012 + 0.02842213 0.01421107 -0.04263320 0.012 + 0.03789617 0.00947404 -0.04737022 0.012 + 0.04737022 0.00473702 -0.05210724 0.012 + 0.05684426 0.00000000 -0.05684426 0.012 + 0.06631831 -0.00473702 -0.06158128 0.012 + 0.07579235 -0.00947404 -0.06631831 0.012 + -0.03789617 0.04737022 -0.00947404 0.012 + -0.02842213 0.04263320 -0.01421107 0.012 + -0.01894809 0.03789617 -0.01894809 0.012 + -0.00947404 0.03315915 -0.02368511 0.012 + -0.00000000 0.02842213 -0.02842213 0.012 + 0.00947404 0.02368511 -0.03315915 0.012 + 0.02368511 0.02368511 -0.04737022 0.012 + 0.03315915 0.01894809 -0.05210724 0.012 + 0.04263320 0.01421107 -0.05684426 0.012 + 0.05210724 0.00947404 -0.06158128 0.012 + 0.06158128 0.00473702 -0.06631831 0.012 + 0.07105533 0.00000000 -0.07105533 0.012 + 0.08052937 -0.00473702 -0.07579235 0.012 + -0.03315915 0.05210724 -0.01894809 0.012 + -0.02368511 0.04737022 -0.02368511 0.012 + -0.01421107 0.04263320 -0.02842213 0.012 + -0.00473702 0.03789617 -0.03315915 0.012 + 0.00473702 0.03315915 -0.03789617 0.012 + 0.01421107 0.02842213 -0.04263320 0.012 + 0.02842213 0.02842213 -0.05684426 0.012 + 0.03789617 0.02368511 -0.06158128 0.012 + 0.04737022 0.01894809 -0.06631831 0.012 + 0.05684426 0.01421107 -0.07105533 0.012 + 0.06631831 0.00947404 -0.07579235 0.012 + 0.07579235 0.00473702 -0.08052937 0.012 + 0.08526639 0.00000000 -0.08526639 0.012 + -0.02842213 0.05684426 -0.02842213 0.012 + -0.01894809 0.05210724 -0.03315915 0.012 + -0.00947404 0.04737022 -0.03789617 0.012 + 0.00000000 0.04263320 -0.04263320 0.012 + 0.00947404 0.03789617 -0.04737022 0.012 + 0.01894809 0.03315915 -0.05210724 0.012 + + k-points in reciprocal lattice and weights: K-Point Grid Created by Matt Darby on 30 + 0.00000000 0.00000000 0.00000000 0.006 + 0.07692308 0.00000000 0.00000000 0.012 + 0.15384615 0.00000000 0.00000000 0.012 + 0.23076923 0.00000000 0.00000000 0.012 + 0.30769231 0.00000000 0.00000000 0.012 + 0.38461538 0.00000000 0.00000000 0.012 + 0.46153846 0.00000000 0.00000000 0.012 + 0.00000000 0.07692308 0.00000000 0.012 + 0.07692308 0.07692308 0.00000000 0.012 + 0.15384615 0.07692308 0.00000000 0.012 + 0.23076923 0.07692308 -0.00000000 0.012 + 0.30769231 0.07692308 0.00000000 0.012 + 0.38461538 0.07692308 -0.00000000 0.012 + 0.46153846 0.07692308 -0.00000000 0.012 + -0.46153846 0.07692308 -0.00000000 0.012 + -0.38461538 0.07692308 -0.00000000 0.012 + -0.30769231 0.07692308 -0.00000000 0.012 + -0.23076923 0.07692308 0.00000000 0.012 + -0.15384615 0.07692308 -0.00000000 0.012 + -0.07692308 0.07692308 0.00000000 0.012 + -0.00000000 0.15384615 -0.00000000 0.012 + 0.07692308 0.15384615 0.00000000 0.012 + 0.15384615 0.15384615 0.00000000 0.012 + 0.23076923 0.15384615 0.00000000 0.012 + 0.30769231 0.15384615 0.00000000 0.012 + 0.38461538 0.15384615 0.00000000 0.012 + 0.46153846 0.15384615 0.00000000 0.012 + -0.46153846 0.15384615 0.00000000 0.012 + -0.38461538 0.15384615 0.00000000 0.012 + -0.30769231 0.15384615 -0.00000000 0.012 + -0.23076923 0.15384615 0.00000000 0.012 + -0.15384615 0.15384615 -0.00000000 0.012 + -0.07692308 0.15384615 -0.00000000 0.012 + -0.00000000 0.23076923 0.00000000 0.012 + 0.07692308 0.23076923 -0.00000000 0.012 + 0.15384615 0.23076923 0.00000000 0.012 + 0.23076923 0.23076923 0.00000000 0.012 + 0.30769231 0.23076923 0.00000000 0.012 + 0.38461538 0.23076923 -0.00000000 0.012 + 0.46153846 0.23076923 0.00000000 0.012 + -0.46153846 0.23076923 0.00000000 0.012 + -0.38461538 0.23076923 -0.00000000 0.012 + -0.30769231 0.23076923 0.00000000 0.012 + -0.23076923 0.23076923 -0.00000000 0.012 + -0.15384615 0.23076923 0.00000000 0.012 + -0.07692308 0.23076923 0.00000000 0.012 + -0.00000000 0.30769231 0.00000000 0.012 + 0.07692308 0.30769231 0.00000000 0.012 + 0.15384615 0.30769231 0.00000000 0.012 + 0.23076923 0.30769231 0.00000000 0.012 + 0.30769231 0.30769231 0.00000000 0.012 + 0.38461538 0.30769231 0.00000000 0.012 + 0.46153846 0.30769231 0.00000000 0.012 + -0.46153846 0.30769231 0.00000000 0.012 + -0.38461538 0.30769231 0.00000000 0.012 + -0.30769231 0.30769231 0.00000000 0.012 + -0.23076923 0.30769231 0.00000000 0.012 + -0.15384615 0.30769231 0.00000000 0.012 + -0.07692308 0.30769231 0.00000000 0.012 + -0.00000000 0.38461538 0.00000000 0.012 + 0.07692308 0.38461538 -0.00000000 0.012 + 0.15384615 0.38461538 0.00000000 0.012 + 0.23076923 0.38461538 -0.00000000 0.012 + 0.30769231 0.38461538 0.00000000 0.012 + 0.38461538 0.38461538 0.00000000 0.012 + 0.46153846 0.38461538 0.00000000 0.012 + -0.46153846 0.38461538 0.00000000 0.012 + -0.38461538 0.38461538 0.00000000 0.012 + -0.30769231 0.38461538 0.00000000 0.012 + -0.23076923 0.38461538 -0.00000000 0.012 + -0.15384615 0.38461538 0.00000000 0.012 + -0.07692308 0.38461538 -0.00000000 0.012 + -0.00000000 0.46153846 0.00000000 0.012 + 0.07692308 0.46153846 0.00000000 0.012 + 0.15384615 0.46153846 0.00000000 0.012 + 0.23076923 0.46153846 0.00000000 0.012 + 0.30769231 0.46153846 0.00000000 0.012 + 0.38461538 0.46153846 0.00000000 0.012 + 0.46153846 0.46153846 0.00000000 0.012 + -0.46153846 0.46153846 -0.00000000 0.012 + -0.38461538 0.46153846 0.00000000 0.012 + -0.30769231 0.46153846 0.00000000 0.012 + -0.23076923 0.46153846 0.00000000 0.012 + -0.15384615 0.46153846 -0.00000000 0.012 + -0.07692308 0.46153846 0.00000000 0.012 + + position of ions in fractional coordinates (direct lattice) + 0.22222222 0.11111111 0.00000000 + 0.22222222 0.44444444 0.00000000 + 0.22222222 0.77777778 0.00000000 + 0.55555556 0.11111111 0.00000000 + 0.55555556 0.44444444 0.00000000 + 0.55555556 0.77777778 0.00000000 + 0.88888889 0.11111111 0.00000000 + 0.88888889 0.44444444 0.00000000 + 0.88888889 0.77777778 0.00000000 + 0.00000000 0.00000000 0.11363913 + 0.00000000 0.33333333 0.11363913 + 0.00000000 0.66666667 0.11363913 + 0.33333333 0.00000000 0.11363913 + 0.33333333 0.33333333 0.11363913 + 0.33333333 0.66666667 0.11363913 + 0.66666667 0.00000000 0.11363913 + 0.66666667 0.33333333 0.11363913 + 0.66666667 0.66666667 0.11363913 + 0.99288510 0.99555098 0.45300430 + 0.22214418 0.11365890 0.34024712 + 0.11046618 0.22274663 0.22667147 + 0.33180431 0.99722013 0.45368793 + 0.55434896 0.11275853 0.34030686 + 0.44406400 0.22250112 0.22673094 + 0.66507117 0.00063763 0.45280864 + 0.88927056 0.11256035 0.34040655 + 0.77807721 0.22315455 0.22735464 + 0.99355008 0.33331938 0.45345513 + 0.22176787 0.44411478 0.34023300 + 0.11098730 0.55643348 0.22736893 + 0.55468755 0.44532850 0.33930808 + 0.44406072 0.55656343 0.22679135 + 0.66854531 0.33482847 0.45398838 + 0.88773614 0.44523841 0.34039458 + 0.77774066 0.55641611 0.22698946 + 0.00017779 0.66812149 0.45321807 + 0.22278721 0.77931328 0.34016808 + 0.11099960 0.88966975 0.22741228 + 0.33153379 0.67102562 0.45365239 + 0.55438071 0.77725758 0.34042569 + 0.44408864 0.88955290 0.22723450 + 0.66815674 0.66915671 0.45466141 + 0.88747621 0.77807245 0.34044664 + 0.77798028 0.88991981 0.22738079 + 0.33137717 0.33398667 0.46232169 + 0.31257959 0.32120941 0.58296547 + 0.32144526 0.45795713 0.60593514 + 0.49946257 0.43152655 0.52679304 + 0.41063109 0.28061412 0.61370535 + 0.15671658 0.19415805 0.58527457 + + position of ions in cartesian coordinates (Angst): + 1.20286667 -0.60143333 -0.60143333 + 1.20286667 1.20286667 -2.40573333 + 1.20286667 3.00716667 -4.21003333 + 3.00716667 -2.40573333 -0.60143333 + 3.00716667 -0.60143333 -2.40573333 + 3.00716667 1.20286667 -4.21003333 + 4.81146667 -4.21003333 -0.60143333 + 4.81146667 -2.40573333 -2.40573333 + 4.81146667 -0.60143333 -4.21003333 + 1.20286667 1.20286667 1.20286667 + 1.20286667 3.00716667 -0.60143333 + 1.20286667 4.81146667 -2.40573333 + 3.00716667 -0.60143333 1.20286667 + 3.00716667 1.20286667 -0.60143333 + 3.00716667 3.00716667 -2.40573333 + 4.81146667 -2.40573333 1.20286667 + 4.81146667 -0.60143333 -0.60143333 + 4.81146667 1.20286667 -2.40573333 + 10.16942445 4.80946680 -0.59378121 + 4.80394961 3.01428540 2.98628110 + 2.99725300 3.00707340 1.19360537 + 6.59829636 8.40410210 -0.59558000 + 6.60277315 1.21185276 2.99178700 + 4.80361405 1.20064225 1.19556372 + 8.39292932 1.19645328 4.78951416 + 8.41672548 -0.60106180 2.99391494 + 6.61819599 -0.59719902 1.19862860 + 10.17779589 1.22604593 2.99558423 + 4.80176319 4.80489747 1.19740698 + 3.00745633 4.81784883 -0.60522562 + 6.59403389 2.99961606 1.18104705 + 4.80423573 3.00954536 -0.61204275 + 8.42422202 2.99907717 2.99306008 + 8.40829311 1.20787022 1.19303515 + 6.61250890 1.20466885 -0.60914825 + 4.79826175 8.41281186 1.18082459 + 4.80659361 6.61308866 -0.61767617 + 3.00798181 6.62201572 -2.40854134 + 6.59645593 6.63953194 1.16970210 + 6.60420282 4.80980568 -0.60382205 + 4.80907763 4.81652368 -2.40979068 + 8.42924267 4.81798980 1.19049870 + 8.40743718 3.01142563 -0.60801117 + 6.61794814 3.01273616 -2.41022824 + 6.68737237 4.90778584 3.08582441 + 7.86263374 6.21738405 4.43199728 + 8.15375599 7.15273001 3.93492880 + 8.27962915 5.20835731 3.24027814 + 8.71875736 5.79228351 4.97711620 + 7.04340456 6.39778029 5.14415529 + + + +-------------------------------------------------------------------------------------------------------- + + + k-point 1 : 0.0000 0.0000 0.0000 plane waves: 16943 + k-point 2 : 0.0769 0.0000 0.0000 plane waves: 16935 + k-point 3 : 0.1538 0.0000 0.0000 plane waves: 16955 + k-point 4 : 0.2308 0.0000 0.0000 plane waves: 16932 + k-point 5 : 0.3077 0.0000 0.0000 plane waves: 16886 + k-point 6 : 0.3846 0.0000 0.0000 plane waves: 16874 + k-point 7 : 0.4615 0.0000 0.0000 plane waves: 16856 + k-point 8 : 0.0000 0.0769 0.0000 plane waves: 16935 + k-point 9 : 0.0769 0.0769 0.0000 plane waves: 16959 + k-point 10 : 0.1538 0.0769 0.0000 plane waves: 16930 + k-point 11 : 0.2308 0.0769-0.0000 plane waves: 16910 + k-point 12 : 0.3077 0.0769 0.0000 plane waves: 16914 + k-point 13 : 0.3846 0.0769-0.0000 plane waves: 16868 + k-point 14 : 0.4615 0.0769-0.0000 plane waves: 16856 + k-point 15 : -0.4615 0.0769-0.0000 plane waves: 16868 + k-point 16 : -0.3846 0.0769-0.0000 plane waves: 16914 + k-point 17 : -0.3077 0.0769-0.0000 plane waves: 16910 + k-point 18 : -0.2308 0.0769 0.0000 plane waves: 16930 + k-point 19 : -0.1538 0.0769-0.0000 plane waves: 16959 + k-point 20 : -0.0769 0.0769 0.0000 plane waves: 16935 + k-point 21 : -0.0000 0.1538-0.0000 plane waves: 16955 + k-point 22 : 0.0769 0.1538 0.0000 plane waves: 16930 + k-point 23 : 0.1538 0.1538 0.0000 plane waves: 16933 + k-point 24 : 0.2308 0.1538 0.0000 plane waves: 16913 + k-point 25 : 0.3077 0.1538 0.0000 plane waves: 16897 + k-point 26 : 0.3846 0.1538 0.0000 plane waves: 16850 + k-point 27 : 0.4615 0.1538 0.0000 plane waves: 16850 + k-point 28 : -0.4615 0.1538 0.0000 plane waves: 16897 + k-point 29 : -0.3846 0.1538 0.0000 plane waves: 16913 + k-point 30 : -0.3077 0.1538-0.0000 plane waves: 16933 + k-point 31 : -0.2308 0.1538 0.0000 plane waves: 16930 + k-point 32 : -0.1538 0.1538-0.0000 plane waves: 16955 + k-point 33 : -0.0769 0.1538-0.0000 plane waves: 16959 + k-point 34 : -0.0000 0.2308 0.0000 plane waves: 16932 + k-point 35 : 0.0769 0.2308-0.0000 plane waves: 16910 + k-point 36 : 0.1538 0.2308 0.0000 plane waves: 16913 + k-point 37 : 0.2308 0.2308 0.0000 plane waves: 16885 + k-point 38 : 0.3077 0.2308 0.0000 plane waves: 16884 + k-point 39 : 0.3846 0.2308-0.0000 plane waves: 16872 + k-point 40 : 0.4615 0.2308 0.0000 plane waves: 16884 + k-point 41 : -0.4615 0.2308 0.0000 plane waves: 16885 + k-point 42 : -0.3846 0.2308-0.0000 plane waves: 16913 + k-point 43 : -0.3077 0.2308 0.0000 plane waves: 16910 + k-point 44 : -0.2308 0.2308-0.0000 plane waves: 16932 + k-point 45 : -0.1538 0.2308 0.0000 plane waves: 16930 + k-point 46 : -0.0769 0.2308 0.0000 plane waves: 16930 + k-point 47 : -0.0000 0.3077 0.0000 plane waves: 16886 + k-point 48 : 0.0769 0.3077 0.0000 plane waves: 16914 + k-point 49 : 0.1538 0.3077 0.0000 plane waves: 16897 + k-point 50 : 0.2308 0.3077 0.0000 plane waves: 16884 + k-point 51 : 0.3077 0.3077 0.0000 plane waves: 16896 + k-point 52 : 0.3846 0.3077 0.0000 plane waves: 16896 + k-point 53 : 0.4615 0.3077 0.0000 plane waves: 16884 + k-point 54 : -0.4615 0.3077 0.0000 plane waves: 16897 + k-point 55 : -0.3846 0.3077 0.0000 plane waves: 16914 + k-point 56 : -0.3077 0.3077 0.0000 plane waves: 16886 + k-point 57 : -0.2308 0.3077 0.0000 plane waves: 16910 + k-point 58 : -0.1538 0.3077 0.0000 plane waves: 16933 + k-point 59 : -0.0769 0.3077 0.0000 plane waves: 16910 + k-point 60 : -0.0000 0.3846 0.0000 plane waves: 16874 + k-point 61 : 0.0769 0.3846-0.0000 plane waves: 16868 + k-point 62 : 0.1538 0.3846 0.0000 plane waves: 16850 + k-point 63 : 0.2308 0.3846-0.0000 plane waves: 16872 + k-point 64 : 0.3077 0.3846 0.0000 plane waves: 16896 + k-point 65 : 0.3846 0.3846 0.0000 plane waves: 16872 + k-point 66 : 0.4615 0.3846 0.0000 plane waves: 16850 + k-point 67 : -0.4615 0.3846 0.0000 plane waves: 16868 + k-point 68 : -0.3846 0.3846 0.0000 plane waves: 16874 + k-point 69 : -0.3077 0.3846 0.0000 plane waves: 16914 + k-point 70 : -0.2308 0.3846-0.0000 plane waves: 16913 + k-point 71 : -0.1538 0.3846 0.0000 plane waves: 16913 + k-point 72 : -0.0769 0.3846-0.0000 plane waves: 16914 + k-point 73 : -0.0000 0.4615 0.0000 plane waves: 16856 + k-point 74 : 0.0769 0.4615 0.0000 plane waves: 16856 + k-point 75 : 0.1538 0.4615 0.0000 plane waves: 16850 + k-point 76 : 0.2308 0.4615 0.0000 plane waves: 16884 + k-point 77 : 0.3077 0.4615 0.0000 plane waves: 16884 + k-point 78 : 0.3846 0.4615 0.0000 plane waves: 16850 + k-point 79 : 0.4615 0.4615 0.0000 plane waves: 16856 + k-point 80 : -0.4615 0.4615-0.0000 plane waves: 16856 + k-point 81 : -0.3846 0.4615 0.0000 plane waves: 16868 + k-point 82 : -0.3077 0.4615 0.0000 plane waves: 16897 + k-point 83 : -0.2308 0.4615 0.0000 plane waves: 16885 + k-point 84 : -0.1538 0.4615-0.0000 plane waves: 16897 + k-point 85 : -0.0769 0.4615 0.0000 plane waves: 16868 + + maximum and minimum number of plane-waves per node : 4265 4197 + + maximum number of plane-waves: 16959 + maximum index in each direction: + IXMAX= 12 IYMAX= 12 IZMAX= 29 + IXMIN= -12 IYMIN= -12 IZMIN= -29 + + NGX is ok and might be reduce to 50 + NGY is ok and might be reduce to 50 + NGZ is ok and might be reduce to 118 + + real space projection operators: + total allocation : 32098.36 KBytes + max/ min on nodes : 8336.34 7718.39 + + + parallel 3D FFT for wavefunctions: + minimum data exchange during FFTs selected (reduces bandwidth) + parallel 3D FFT for charge: + minimum data exchange during FFTs selected (reduces bandwidth) + + + total amount of memory used by VASP on root node 292254. kBytes +======================================================================== + + base : 30000. kBytes + nonlr-proj: 15892. kBytes + fftplans : 5374. kBytes + grid : 10087. kBytes + one-center: 202. kBytes + wavefun : 230699. kBytes + + INWAV: cpu time 0.0001: real time 0.0002 + Broyden mixing: mesh for mixing (old mesh) + NGX = 25 NGY = 25 NGZ = 59 + (NGX =100 NGY =100 NGZ =240) + gives a total of 36875 points + + initial charge density was supplied: + charge density of overlapping atoms calculated + number of electron 501.0000000 magnetization + keeping initial charge density in first step + + +-------------------------------------------------------------------------------------------------------- + + + Maximum index for non-local projection operator 1600 + Maximum index for augmentation-charges 1058 (set IRDMAX) + + +-------------------------------------------------------------------------------------------------------- + + + First call to EWALD: gamma= 0.182 + Maximum number of real-space cells 4x 4x 2 + Maximum number of reciprocal cells 2x 2x 5 + + FEWALD executed in parallel + FEWALD: cpu time 0.0031: real time 0.0240 + + +----------------------------------------- Iteration 9( 1) --------------------------------------- + + + POTLOK: cpu time 3.3286: real time 3.3318 + SETDIJ: cpu time 0.0100: real time 0.0100 + EDDAV: cpu time 118.7726: real time 118.8440 + DOS: cpu time 0.0136: real time 0.0135 + CHARGE: cpu time 4.1878: real time 4.1863 + MIXING: cpu time 0.0013: real time 0.0013 + -------------------------------------------- + LOOP: cpu time 126.3164: real time 126.3922 + + eigenvalue-minimisations : 51696 + total energy-change (2. order) :-0.2363009E-03 (-0.1167863E-01) + number of electron 501.0000022 magnetization + augmentation part 320.3603375 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 181, + dipolmoment -0.081585 -0.081585 -0.081585 electrons x Angstroem + Tr[quadrupol] -4870.151833 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.001942 eV + added-field ion interaction -4.588000 eV (added to PSCEN) + + + free energy = -0.851417597787E+02 energy without entropy= -0.851242105468E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 2) --------------------------------------- + + + POTLOK: cpu time 3.3946: real time 3.3988 + SETDIJ: cpu time 0.0101: real time 0.0101 + EDDIAG: cpu time 17.2124: real time 17.2407 + RMM-DIIS: cpu time 49.6375: real time 49.6705 + ORTHCH: cpu time 2.5996: real time 2.5986 + DOS: cpu time 0.0133: real time 0.0133 + CHARGE: cpu time 4.0109: real time 4.0097 + MIXING: cpu time 0.0014: real time 0.0014 + -------------------------------------------- + LOOP: cpu time 76.8825: real time 76.9481 + + eigenvalue-minimisations : 51883 + total energy-change (2. order) :-0.1238268E-03 (-0.1404840E-03) + number of electron 501.0000022 magnetization + augmentation part 320.3583999 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 181, + dipolmoment -0.082031 -0.082031 -0.082031 electrons x Angstroem + Tr[quadrupol] -4870.159662 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.001963 eV + added-field ion interaction -4.613095 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.5925 + 0.5925 + + free energy = -0.851418836055E+02 energy without entropy= -0.851243427219E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 3) --------------------------------------- + + + POTLOK: cpu time 3.0209: real time 3.0197 + SETDIJ: cpu time 0.0101: real time 0.0101 + EDDIAG: cpu time 17.1739: real time 17.1971 + RMM-DIIS: cpu time 49.6026: real time 49.6510 + ORTHCH: cpu time 2.6539: real time 2.6528 + DOS: cpu time 0.0135: real time 0.0135 + CHARGE: cpu time 4.0051: real time 4.0041 + MIXING: cpu time 0.0015: real time 0.0015 + -------------------------------------------- + LOOP: cpu time 76.4834: real time 76.5549 + + eigenvalue-minimisations : 51859 + total energy-change (2. order) : 0.7683098E-05 (-0.1136123E-04) + number of electron 501.0000022 magnetization + augmentation part 320.3595153 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 181, + dipolmoment -0.081680 -0.081680 -0.081680 electrons x Angstroem + Tr[quadrupol] -4870.158374 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.001946 eV + added-field ion interaction -4.593351 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.9415 + 1.5007 0.3824 + + free energy = -0.851418759224E+02 energy without entropy= -0.851243370048E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 4) --------------------------------------- + + + POTLOK: cpu time 3.0351: real time 3.0343 + SETDIJ: cpu time 0.0101: real time 0.0101 + EDDIAG: cpu time 17.1617: real time 17.2079 + RMM-DIIS: cpu time 50.1110: real time 50.1412 + ORTHCH: cpu time 2.5969: real time 2.5960 + DOS: cpu time 0.0135: real time 0.0135 + CHARGE: cpu time 4.0222: real time 4.0209 + MIXING: cpu time 0.0016: real time 0.0016 + -------------------------------------------- + LOOP: cpu time 76.9545: real time 77.0323 + + eigenvalue-minimisations : 52524 + total energy-change (2. order) :-0.2632685E-04 (-0.2853614E-05) + number of electron 501.0000022 magnetization + augmentation part 320.3604372 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 181, + dipolmoment -0.082813 -0.082813 -0.082813 electrons x Angstroem + Tr[quadrupol] -4870.159705 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.002001 eV + added-field ion interaction -4.657032 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.8185 + 1.8259 0.3866 0.2431 + + free energy = -0.851419022492E+02 energy without entropy= -0.851243615623E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 5) --------------------------------------- + + + POTLOK: cpu time 3.0173: real time 3.0162 + SETDIJ: cpu time 0.0101: real time 0.0101 + EDDIAG: cpu time 17.6561: real time 17.6983 + RMM-DIIS: cpu time 49.6739: real time 49.7204 + ORTHCH: cpu time 2.5919: real time 2.5911 + DOS: cpu time 0.0133: real time 0.0133 + CHARGE: cpu time 3.9777: real time 3.9847 + MIXING: cpu time 0.0016: real time 0.0016 + -------------------------------------------- + LOOP: cpu time 76.9440: real time 77.0406 + + eigenvalue-minimisations : 51898 + total energy-change (2. order) : 0.3395650E-04 (-0.1449382E-05) + number of electron 501.0000022 magnetization + augmentation part 320.3598189 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 181, + dipolmoment -0.081976 -0.081976 -0.081976 electrons x Angstroem + Tr[quadrupol] -4870.162459 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.001960 eV + added-field ion interaction -4.609975 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.9474 + 2.3205 0.9388 0.3813 0.1491 + + free energy = -0.851418682927E+02 energy without entropy= -0.851243273657E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 6) --------------------------------------- + + + POTLOK: cpu time 3.0448: real time 3.0440 + SETDIJ: cpu time 0.0100: real time 0.0100 + EDDIAG: cpu time 17.2219: real time 17.2511 + RMM-DIIS: cpu time 49.6262: real time 49.6881 + ORTHCH: cpu time 2.5928: real time 2.5916 + DOS: cpu time 0.0133: real time 0.0133 + CHARGE: cpu time 3.9913: real time 3.9896 + MIXING: cpu time 0.0016: real time 0.0016 + -------------------------------------------- + LOOP: cpu time 76.5052: real time 76.5970 + + eigenvalue-minimisations : 51883 + total energy-change (2. order) : 0.4431204E-06 (-0.5804099E-06) + number of electron 501.0000022 magnetization + augmentation part 320.3592873 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 181, + dipolmoment -0.082260 -0.082260 -0.082260 electrons x Angstroem + Tr[quadrupol] -4870.163771 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.001974 eV + added-field ion interaction -4.625945 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.8939 + 2.4094 1.0299 0.5111 0.3723 0.1469 + + free energy = -0.851418678496E+02 energy without entropy= -0.851243323195E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 7) --------------------------------------- + + + POTLOK: cpu time 3.0118: real time 3.0111 + SETDIJ: cpu time 0.0101: real time 0.0101 + EDDIAG: cpu time 17.2651: real time 17.2803 + RMM-DIIS: cpu time 49.3817: real time 49.4323 + ORTHCH: cpu time 2.6011: real time 2.6044 + DOS: cpu time 0.0131: real time 0.0131 + CHARGE: cpu time 4.0157: real time 4.0140 + MIXING: cpu time 0.0017: real time 0.0017 + -------------------------------------------- + LOOP: cpu time 76.3048: real time 76.3727 + + eigenvalue-minimisations : 51508 + total energy-change (2. order) : 0.5587135E-06 (-0.2554755E-06) + number of electron 501.0000022 magnetization + augmentation part 320.3594154 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 181, + dipolmoment -0.082264 -0.082264 -0.082264 electrons x Angstroem + Tr[quadrupol] -4870.164453 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.001974 eV + added-field ion interaction -4.626175 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.9441 + 2.3296 1.4368 0.9723 0.1470 0.3687 0.4103 + + free energy = -0.851418672909E+02 energy without entropy= -0.851243291839E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 8) --------------------------------------- + + + POTLOK: cpu time 3.0200: real time 3.0188 + SETDIJ: cpu time 0.0103: real time 0.0103 + EDDIAG: cpu time 17.4389: real time 17.6141 + RMM-DIIS: cpu time 32.7048: real time 32.7484 + ORTHCH: cpu time 2.6202: real time 2.6198 + DOS: cpu time 0.0135: real time 0.0135 + -------------------------------------------- + LOOP: cpu time 55.8105: real time 56.0309 + + eigenvalue-minimisations : 32281 + total energy-change (2. order) : 0.6714254E-07 (-0.3374527E-07) + number of electron 501.0000022 magnetization + augmentation part 320.3594154 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 181, + dipolmoment -0.082253 -0.082253 -0.082253 electrons x Angstroem + Tr[quadrupol] -4870.164977 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.001974 eV + added-field ion interaction -4.625544 eV (added to PSCEN) + + + free energy = -0.851418672238E+02 energy without entropy= -0.851243284526E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + + average (electrostatic) potential at core + the test charge radii are 1.0053 1.1806 0.6991 0.5201 + (the norm of the test charge is 1.0000) + 1 -42.9561 2 -42.9560 3 -42.9557 4 -42.9530 5 -42.9539 + 6 -42.9530 7 -42.9527 8 -42.9578 9 -42.9566 10 -43.2261 + 11 -43.2259 12 -43.2398 13 -43.2268 14 -43.2185 15 -43.2269 + 16 -43.2383 17 -43.2260 18 -43.2253 19 -42.9480 20 -43.1963 + 21 -43.2094 22 -42.9071 23 -43.2295 24 -43.2164 25 -42.9435 + 26 -43.2232 27 -43.2365 28 -42.9275 29 -43.1925 30 -43.2412 + 31 -43.1503 32 -43.2156 33 -42.9562 34 -43.2123 35 -43.2363 + 36 -42.9437 37 -43.2070 38 -43.2412 39 -42.9087 40 -43.2285 + 41 -43.2373 42 -42.9758 43 -43.2112 44 -43.2358 45 -54.3266 + 46 -54.1673 47 -37.4185 48 -37.8170 49 -37.4629 50 -37.5134 + + + + E-fermi : 0.3243 XC(G=0): -8.8434 alpha+bet : -5.8303 + + +-------------------------------------------------------------------------------------------------------- + + + soft charge-density along one line, spin component 1 + 0 1 2 3 4 5 6 7 8 9 + total charge-density along one line + + pseudopotential strength for first ion, spin component: 1 + -8.833 0.013 -0.017 0.013 0.000 0.825 -0.006 0.008 + 0.013 -8.833 0.008 0.014 -0.014 -0.006 0.825 -0.004 + -0.017 0.008 -8.821 0.008 -0.000 0.008 -0.004 0.820 + 0.013 0.014 0.008 -8.833 0.014 -0.006 -0.007 -0.004 + 0.000 -0.014 -0.000 0.014 -8.822 -0.000 0.006 0.000 + 0.825 -0.006 0.008 -0.006 -0.000 1.192 0.003 -0.004 + -0.006 0.825 -0.004 -0.007 0.006 0.003 1.192 0.002 + 0.008 -0.004 0.820 -0.004 0.000 -0.004 0.002 1.194 + -0.006 -0.007 -0.004 0.825 -0.006 0.003 0.003 0.002 + -0.000 0.006 0.000 -0.006 0.820 0.000 -0.003 -0.000 + -0.004 -0.004 0.000 -0.004 -0.000 0.001 0.001 -0.000 + 0.000 0.000 0.000 0.000 0.000 -0.000 -0.000 -0.000 + -0.004 -0.003 0.003 0.000 0.005 0.003 0.002 -0.002 + 0.000 -0.004 -0.004 -0.004 -0.000 -0.000 0.003 0.003 + -0.004 0.000 0.003 -0.003 -0.005 0.003 -0.000 -0.002 + 0.002 0.001 -0.001 -0.000 -0.002 -0.001 -0.001 0.001 + -0.000 0.002 0.002 0.002 0.000 0.000 -0.001 -0.001 + 0.002 -0.000 -0.001 0.001 0.002 -0.001 0.000 0.001 + total augmentation occupancy for first ion, spin component: 1 + 1.917 0.003 -0.003 0.003 0.000 -0.025 -0.008 0.012 -0.008 -0.000 0.008 0.021 0.014 0.007 0.014 -0.003 + 0.003 1.915 0.001 0.004 -0.002 -0.008 -0.024 -0.006 -0.008 0.011 0.007 0.020 0.015 0.014 0.009 -0.003 + -0.003 0.001 1.920 0.000 -0.000 0.012 -0.006 -0.049 -0.006 0.000 -0.004 -0.001 0.002 0.000 0.002 0.001 + 0.003 0.004 0.000 1.915 0.002 -0.008 -0.008 -0.006 -0.024 -0.011 0.007 0.021 0.009 0.014 0.015 -0.000 + 0.000 -0.002 -0.000 0.002 1.920 -0.000 0.011 0.000 -0.011 -0.049 0.000 -0.000 0.002 -0.000 -0.002 0.002 + -0.025 -0.008 0.012 -0.008 -0.000 0.061 0.001 0.007 0.001 0.000 -0.050 0.008 0.023 0.001 0.023 -0.001 + -0.008 -0.024 -0.006 -0.008 0.011 0.001 0.061 -0.004 0.001 0.007 -0.050 0.008 0.023 0.023 0.000 -0.001 + 0.012 -0.006 -0.049 -0.006 0.000 0.007 -0.004 0.051 -0.004 -0.000 0.002 0.000 -0.010 0.018 -0.010 0.001 + -0.008 -0.008 -0.006 -0.024 -0.011 0.001 0.001 -0.004 0.061 -0.007 -0.049 0.008 0.000 0.023 0.023 0.000 + -0.000 0.011 0.000 -0.011 -0.049 0.000 0.007 -0.000 -0.007 0.051 -0.000 -0.000 -0.016 -0.000 0.016 0.001 + 0.008 0.007 -0.004 0.007 0.000 -0.050 -0.050 0.002 -0.049 -0.000 1.260 -0.282 0.039 0.036 0.038 -0.007 + 0.021 0.020 -0.001 0.021 -0.000 0.008 0.008 0.000 0.008 -0.000 -0.282 0.110 -0.028 -0.028 -0.028 0.003 + 0.014 0.015 0.002 0.009 0.002 0.023 0.023 -0.010 0.000 -0.016 0.039 -0.028 0.148 -0.022 -0.023 -0.009 + 0.007 0.014 0.000 0.014 -0.000 0.001 0.023 0.018 0.023 -0.000 0.036 -0.028 -0.022 0.152 -0.022 0.001 + 0.014 0.009 0.002 0.015 -0.002 0.023 0.000 -0.010 0.023 0.016 0.038 -0.028 -0.023 -0.022 0.149 0.001 + -0.003 -0.003 0.001 -0.000 0.002 -0.001 -0.001 0.001 0.000 0.001 -0.007 0.003 -0.009 0.001 0.001 0.001 + -0.000 -0.003 -0.002 -0.003 0.000 0.000 -0.001 -0.002 -0.001 -0.000 -0.007 0.003 0.001 -0.009 0.001 -0.000 + -0.003 -0.000 0.001 -0.003 -0.002 -0.001 0.000 0.001 -0.001 -0.001 -0.007 0.003 0.001 0.001 -0.009 -0.000 + + +------------------------ aborting loop because EDIFF is reached ---------------------------------------- + + + CHARGE: cpu time 4.0128: real time 4.0132 + FORLOC: cpu time 0.0227: real time 0.0227 + FORNL : cpu time 23.8671: real time 23.8878 + STRESS: cpu time 71.9501: real time 71.9816 + FORCOR: cpu time 3.0495: real time 3.0736 + FORHAR: cpu time 0.0369: real time 0.0371 + MIXING: cpu time 0.0010: real time 0.0019 + OFIELD: cpu time 0.0001: real time 0.0001 + + FORCE on cell =-STRESS in cart. coord. units (eV): + Direction XX YY ZZ XY YZ ZX + -------------------------------------------------------------------------------------- + Alpha Z 2831.17846 2831.17846 2831.17846 + Ewald 26029.67509 26014.16323 26027.79765-84840.04501-84825.13177-84837.19158 + Hartree 45791.69176 45800.98527 45807.97141-82432.55619-82419.44992-82429.53238 + E(xc) -2831.08810 -2831.29036 -2831.22378 -0.04973 0.00501 -0.07229 + Local -76350.41705-76353.65245-76373.80349167265.73036167236.11886167259.05774 + n-local -1676.52135 -1677.26485 -1677.23275 -1.71010 -1.21230 -1.73627 + augment 2520.47533 2522.35841 2522.24082 3.88327 4.04372 3.96448 + Kinetic 3673.36739 3681.45745 3681.13275 7.88047 9.04194 8.78355 + Fock 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + ------------------------------------------------------------------------------------- + Total -11.63847 -12.06483 -11.93893 3.13307 3.41554 3.27325 + in kB -20.04175 -20.77596 -20.55914 5.39522 5.88166 5.63663 + external pressure = -20.46 kB Pullay stress = 0.00 kB + + + VOLUME and BASIS-vectors are now : + ----------------------------------------------------------------------------- + energy-cutoff : 400.00 + volume of cell : 930.40 + direct lattice vectors reciprocal lattice vectors + 5.412900000 -5.412900000 -0.000000000 0.123162568 -0.061581284 -0.061581284 + 0.000000000 5.412900000 -5.412900000 0.061581284 0.061581284 -0.123162568 + 10.584969359 10.584969359 10.584969359 0.031491195 0.031491195 0.031491195 + + length of vectors + 7.654996592 7.654996592 18.333704726 0.150842724 0.150842724 0.054544350 + + + FORCES acting on ions + electron-ion (+dipol) ewald-force non-local-force convergence-correction + ----------------------------------------------------------------------------------------------- + 0.192E+04 0.192E+04 0.192E+04 -.192E+04 -.192E+04 -.192E+04 -.320E+00 -.357E+00 -.146E+00 -.180E-03 -.182E-03 -.186E-03 + 0.192E+04 0.192E+04 0.192E+04 -.192E+04 -.192E+04 -.192E+04 -.314E+00 -.136E+00 -.351E+00 -.182E-03 -.191E-03 -.184E-03 + 0.192E+04 0.192E+04 0.192E+04 -.192E+04 -.192E+04 -.192E+04 -.375E+00 -.462E+00 -.458E+00 -.189E-03 -.157E-03 -.159E-03 + 0.192E+04 0.192E+04 0.192E+04 -.192E+04 -.192E+04 -.192E+04 -.433E+00 -.344E+00 -.403E+00 -.180E-03 -.163E-03 -.175E-03 + 0.192E+04 0.192E+04 0.192E+04 -.192E+04 -.192E+04 -.192E+04 -.137E+00 -.298E+00 -.300E+00 -.181E-03 -.172E-03 -.170E-03 + 0.192E+04 0.192E+04 0.192E+04 -.192E+04 -.192E+04 -.192E+04 -.424E+00 -.405E+00 -.345E+00 -.183E-03 -.177E-03 -.168E-03 + 0.192E+04 0.192E+04 0.192E+04 -.192E+04 -.192E+04 -.192E+04 -.318E+00 -.433E+00 -.440E+00 -.166E-03 -.179E-03 -.174E-03 + 0.192E+04 0.192E+04 0.192E+04 -.192E+04 -.192E+04 -.192E+04 -.481E+00 -.487E+00 -.334E+00 -.152E-03 -.149E-03 -.191E-03 + 0.192E+04 0.192E+04 0.192E+04 -.192E+04 -.192E+04 -.192E+04 -.471E+00 -.328E+00 -.477E+00 -.151E-03 -.194E-03 -.155E-03 + 0.976E+03 0.977E+03 0.975E+03 -.976E+03 -.977E+03 -.974E+03 -.334E+00 -.348E+00 -.400E+00 0.219E-03 0.232E-03 0.282E-03 + 0.976E+03 0.975E+03 0.977E+03 -.976E+03 -.974E+03 -.977E+03 -.351E+00 -.392E+00 -.335E+00 0.208E-03 0.275E-03 0.242E-03 + 0.974E+03 0.976E+03 0.976E+03 -.973E+03 -.975E+03 -.975E+03 -.661E+00 -.640E+00 -.637E+00 0.195E-03 0.235E-03 0.234E-03 + 0.977E+03 0.976E+03 0.974E+03 -.977E+03 -.976E+03 -.974E+03 -.375E+00 -.328E+00 -.387E+00 0.262E-03 0.214E-03 0.261E-03 + 0.977E+03 0.976E+03 0.977E+03 -.976E+03 -.976E+03 -.976E+03 -.402E+00 -.413E+00 -.410E+00 0.237E-03 0.224E-03 0.240E-03 + 0.977E+03 0.974E+03 0.976E+03 -.977E+03 -.974E+03 -.976E+03 -.378E+00 -.378E+00 -.321E+00 0.256E-03 0.258E-03 0.210E-03 + 0.976E+03 0.976E+03 0.976E+03 -.976E+03 -.975E+03 -.976E+03 -.597E+00 -.504E+00 -.500E+00 0.283E-03 0.300E-03 0.293E-03 + 0.975E+03 0.977E+03 0.977E+03 -.975E+03 -.977E+03 -.976E+03 -.323E+00 -.391E+00 -.408E+00 0.288E-03 0.233E-03 0.268E-03 + 0.975E+03 0.976E+03 0.977E+03 -.975E+03 -.976E+03 -.977E+03 -.325E+00 -.392E+00 -.381E+00 0.289E-03 0.251E-03 0.240E-03 + -.189E+04 -.187E+04 -.185E+04 0.189E+04 0.187E+04 0.185E+04 0.563E+00 0.286E+00 0.456E+00 -.629E-03 -.262E-03 0.286E-03 + -.979E+03 -.977E+03 -.943E+03 0.980E+03 0.977E+03 0.942E+03 -.844E+00 -.959E+00 0.461E+00 0.284E-03 0.134E-03 0.861E-03 + 0.991E+01 0.150E+02 0.151E+02 -.995E+01 -.149E+02 -.149E+02 0.383E-01 -.111E+00 -.119E+00 0.889E-03 0.110E-02 0.109E-02 + -.188E+04 -.189E+04 -.186E+04 0.188E+04 0.189E+04 0.186E+04 0.305E+00 0.410E+00 0.340E+00 -.155E-03 -.528E-03 0.577E-04 + -.936E+03 -.953E+03 -.938E+03 0.936E+03 0.953E+03 0.937E+03 0.374E+00 0.710E+00 0.375E+00 0.898E-03 0.565E-03 0.776E-03 + 0.161E+02 0.108E+02 0.148E+02 -.160E+02 -.108E+02 -.146E+02 -.105E+00 -.528E-01 -.191E+00 0.124E-02 0.926E-03 0.110E-02 + -.189E+04 -.189E+04 -.189E+04 0.189E+04 0.189E+04 0.189E+04 0.330E+00 0.377E+00 0.334E+00 -.225E-03 -.144E-03 -.195E-03 + -.951E+03 -.935E+03 -.935E+03 0.950E+03 0.935E+03 0.934E+03 0.643E+00 0.487E+00 0.503E+00 0.286E-03 0.921E-03 0.927E-03 + 0.148E+02 0.144E+02 0.148E+02 -.148E+02 -.144E+02 -.148E+02 -.458E-01 -.593E-01 0.266E-01 0.114E-02 0.122E-02 0.122E-02 + -.190E+04 -.186E+04 -.187E+04 0.190E+04 0.186E+04 0.187E+04 0.373E+00 0.446E+00 0.181E+00 -.660E-03 0.300E-03 -.177E-03 + -.980E+03 -.943E+03 -.976E+03 0.981E+03 0.942E+03 0.977E+03 -.860E+00 0.508E+00 -.870E+00 0.263E-03 0.830E-03 0.101E-03 + 0.109E+02 0.133E+02 0.125E+02 -.106E+02 -.134E+02 -.122E+02 -.221E+00 0.125E+00 -.262E+00 0.105E-02 0.130E-02 0.101E-02 + -.933E+03 -.974E+03 -.974E+03 0.933E+03 0.975E+03 0.975E+03 0.563E+00 -.705E+00 -.685E+00 0.111E-02 0.256E-03 0.244E-03 + 0.158E+02 0.143E+02 0.106E+02 -.157E+02 -.141E+02 -.105E+02 -.100E+00 -.182E+00 -.368E-01 0.123E-02 0.113E-02 0.871E-03 + -.186E+04 -.188E+04 -.188E+04 0.186E+04 0.188E+04 0.188E+04 0.391E+00 0.143E+01 0.129E+00 0.433E-04 -.414E-03 -.336E-03 + -.939E+03 -.936E+03 -.937E+03 0.939E+03 0.935E+03 0.937E+03 0.520E+00 0.375E+00 0.468E+00 0.636E-03 0.102E-02 0.720E-03 + 0.171E+02 0.163E+02 0.163E+02 -.172E+02 -.161E+02 -.161E+02 0.694E-01 -.185E+00 -.181E+00 0.128E-02 0.116E-02 0.111E-02 + -.189E+04 -.189E+04 -.189E+04 0.189E+04 0.189E+04 0.189E+04 0.392E+00 0.233E+00 0.255E+00 -.546E-03 -.376E-04 -.214E-03 + -.936E+03 -.936E+03 -.936E+03 0.936E+03 0.936E+03 0.936E+03 0.443E+00 0.514E+00 0.508E+00 0.686E-03 0.886E-03 0.710E-03 + 0.108E+02 0.121E+02 0.129E+02 -.105E+02 -.119E+02 -.130E+02 -.227E+00 -.262E+00 0.136E+00 0.108E-02 0.109E-02 0.124E-02 + -.187E+04 -.186E+04 -.189E+04 0.187E+04 0.186E+04 0.189E+04 0.422E+00 0.322E+00 0.494E+00 -.843E-04 0.148E-03 -.626E-03 + -.937E+03 -.938E+03 -.955E+03 0.937E+03 0.938E+03 0.954E+03 0.337E+00 0.371E+00 0.694E+00 0.917E-03 0.847E-03 0.434E-03 + 0.155E+02 0.145E+02 0.141E+02 -.155E+02 -.145E+02 -.141E+02 -.463E-02 -.186E-01 -.305E-01 0.126E-02 0.120E-02 0.112E-02 + -.186E+04 -.188E+04 -.188E+04 0.186E+04 0.188E+04 0.188E+04 0.226E+00 0.148E+00 0.140E+01 0.156E-03 -.351E-03 -.495E-03 + -.939E+03 -.937E+03 -.936E+03 0.938E+03 0.937E+03 0.936E+03 0.556E+00 0.470E+00 0.361E+00 0.690E-03 0.810E-03 0.934E-03 + 0.147E+02 0.146E+02 0.142E+02 -.146E+02 -.146E+02 -.141E+02 -.463E-01 0.219E-01 -.721E-01 0.116E-02 0.126E-02 0.116E-02 + -.146E+04 -.149E+04 -.149E+04 0.146E+04 0.149E+04 0.149E+04 0.205E+00 -.346E+00 -.397E+00 0.187E-03 -.537E-04 -.162E-03 + -.559E+03 -.563E+03 -.563E+03 0.559E+03 0.564E+03 0.564E+03 -.175E+00 -.139E+01 -.110E+01 -.175E-03 -.673E-04 -.173E-03 + -.134E+03 -.164E+03 -.987E+02 0.135E+03 0.169E+03 0.961E+02 -.147E+01 -.477E+01 0.254E+01 -.525E-04 -.288E-04 -.520E-04 + -.204E+03 -.173E+03 -.170E+03 0.206E+03 0.173E+03 0.170E+03 -.196E+01 -.158E+00 0.501E-02 0.628E-04 -.191E-04 -.423E-04 + -.152E+03 -.945E+02 -.140E+03 0.156E+03 0.924E+02 0.143E+03 -.430E+01 0.210E+01 -.282E+01 -.311E-04 -.507E-04 -.420E-04 + -.103E+03 -.149E+03 -.172E+03 0.991E+02 0.150E+03 0.176E+03 0.412E+01 -.933E+00 -.357E+01 -.574E-04 -.314E-04 -.309E-04 + ----------------------------------------------------------------------------------------------- + 0.648E+01 0.782E+01 0.768E+01 0.540E-12 -.682E-12 -.517E-11 -.651E+01 -.784E+01 -.771E+01 0.146E-01 0.158E-01 0.141E-01 + + + POSITION TOTAL-FORCE (eV/Angst) + ----------------------------------------------------------------------------------- + 1.20287 -0.60143 -0.60143 0.064776 0.067269 0.019615 + 1.20287 1.20287 -2.40573 0.068048 0.019601 0.066721 + 1.20287 3.00717 -4.21003 0.047978 0.056092 0.056876 + 3.00717 -2.40573 -0.60143 0.053166 0.059815 0.051209 + 3.00717 -0.60143 -2.40573 0.022905 0.067302 0.066908 + 3.00717 1.20287 -4.21003 0.054126 0.050318 0.059540 + 4.81147 -4.21003 -0.60143 0.065218 0.049670 0.053108 + 4.81147 -2.40573 -2.40573 0.047918 0.053992 0.050812 + 4.81147 -0.60143 -4.21003 0.049181 0.052406 0.052260 + 1.20287 1.20287 1.20287 -0.051113 -0.047555 -0.032262 + 1.20287 3.00717 -0.60143 -0.051539 -0.029399 -0.051167 + 1.20287 4.81147 -2.40573 -0.038711 -0.059077 -0.065161 + 3.00717 -0.60143 1.20287 -0.058354 -0.047184 -0.031287 + 3.00717 1.20287 -0.60143 -0.040341 -0.050957 -0.056823 + 3.00717 3.00717 -2.40573 -0.057781 -0.026114 -0.049600 + 4.81147 -2.40573 1.20287 -0.063655 -0.049163 -0.052265 + 4.81147 -0.60143 -0.60143 -0.035064 -0.052404 -0.047528 + 4.81147 1.20287 -2.40573 -0.035051 -0.041842 -0.056938 + 10.15520 4.78755 -0.61759 -0.002328 -0.002569 0.002084 + 4.80110 3.01069 2.97687 -0.001766 -0.002732 0.001251 + 2.99214 2.99800 1.18863 -0.000202 -0.000893 -0.000738 + 6.57878 8.38788 -0.61577 -0.001277 -0.004741 -0.000533 + 6.59059 1.19835 2.98389 0.000167 -0.002018 -0.001190 + 4.79690 1.19220 1.18965 -0.001160 -0.000891 0.000422 + 8.37579 1.17874 4.77411 -0.003395 -0.005647 -0.003583 + 8.39984 -0.61326 2.98526 0.001566 -0.002962 -0.001911 + 6.60781 -0.60596 1.19363 -0.000308 -0.000414 -0.000156 + 10.16330 1.20084 2.97488 -0.003510 -0.000515 -0.000523 + 4.79881 4.79235 1.19721 -0.001489 -0.001514 -0.000834 + 3.00105 4.80675 -0.60722 -0.000063 -0.000743 0.000520 + 6.58529 2.99263 1.17715 -0.000867 -0.001239 0.000259 + 4.79711 3.00009 -0.61725 -0.000747 -0.000722 0.000048 + 8.40527 2.97411 2.97781 -0.001757 -0.001088 -0.000950 + 8.39488 1.19323 1.18146 0.000611 -0.000139 -0.000309 + 6.60520 1.19571 -0.61434 -0.001298 0.000405 0.000884 + 4.77489 8.39050 1.16013 0.000967 -0.003049 -0.001563 + 4.79031 6.60181 -0.62635 0.001525 -0.003116 -0.000782 + 3.00104 6.61630 -2.41576 0.000134 -0.000545 0.000836 + 6.57656 6.61730 1.15420 -0.001562 -0.003043 -0.002095 + 6.59131 4.79905 -0.61398 0.000380 -0.004372 -0.000323 + 4.80291 4.80732 -2.41573 -0.000042 -0.000884 0.000202 + 8.41039 4.80070 1.16747 -0.002415 -0.003033 0.000685 + 8.39363 2.99695 -0.61971 0.001105 -0.002166 0.001907 + 6.60743 3.00390 -2.41540 -0.000196 -0.001513 0.000025 + 6.69156 4.90227 3.08271 -0.005942 -0.004171 -0.000585 + 7.86752 6.21952 4.43138 -0.002610 -0.002029 -0.005012 + 8.16059 7.15285 3.93231 -0.001559 -0.005282 -0.006302 + 8.27913 5.21022 3.25056 -0.005269 -0.007245 -0.001992 + 8.72273 5.79847 4.98090 -0.005305 -0.002406 -0.004829 + 7.04861 6.40486 5.14206 -0.003096 -0.001495 -0.008935 + ----------------------------------------------------------------------------------- + total drift: -0.013721 -0.011182 -0.015686 + + +-------------------------------------------------------------------------------------------------------- + + + + FREE ENERGIE OF THE ION-ELECTRON SYSTEM (eV) + --------------------------------------------------- + free energy TOTEN = -85.15000167 eV + + energy without entropy= -85.13234753 energy(sigma->0) = -85.14411696 + + d Force = 0.8614089E-04[ 0.732E-04, 0.990E-04] d Energy = 0.1069077E-03-0.208E-04 + d Force =-0.4266886E+02[-0.427E+02,-0.427E+02] d Ewald =-0.4266886E+02-0.241E-05 + + +-------------------------------------------------------------------------------------------------------- + + + POTLOK: cpu time 3.2607: real time 3.2729 + + +-------------------------------------------------------------------------------------------------------- + + + stress matrix after NEB project (eV) + -11.63847 3.13307 3.27325 + 3.13307 -12.06483 3.41554 + 3.27326 3.41554 -11.93893 + FORCES: max atom, RMS 0.009574 0.003596 + FORCE total and by dimension 0.025424 0.008935 + Stress total and by dimension 22.089471 12.064833 + Quasi-Newton relaxation of ions (Broydens 2nd method) + g(Force) = 0.780E-05 g(Stress)= 0.000E+00 + + retain information from N= 10 steps + eigenvalues of (default step * inverse Hessian matrix) + average eigenvalue of G= 135.6266 + eigenvalue spectrum of G is462.2815340.8984228.6903190.0003 9.2773 31.4584 31.4584 35.6298 13.2858 13.2858 + + +-------------------------------------------------------------------------------------------------------- + + + + reached required accuracy - stopping structural energy minimisation + LOOP+: cpu time 810.5643: real time 811.7016 + 4ORBIT: cpu time 0.0000: real time 0.0000 + + total amount of memory used by VASP on root node 292254. kBytes +======================================================================== + + base : 30000. kBytes + nonlr-proj: 15892. kBytes + fftplans : 5374. kBytes + grid : 10087. kBytes + one-center: 202. kBytes + wavefun : 230699. kBytes + + + + General timing and accounting informations for this job: + ======================================================== + + Total CPU time used (sec): 17186.572 + User time (sec): 16395.165 + System time (sec): 791.408 + Elapsed time (sec): 17213.850 + + Maximum memory used (kb): 530032. + Average memory used (kb): 0. + + Minor page faults: 2014965 + Major page faults: 21 + Voluntary context switches: 792056 diff --git a/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu_CH4/INCAR b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu_CH4/INCAR new file mode 100644 index 0000000000000000000000000000000000000000..47ad996ab7749dac503a2fb6ae78461ddcc4cf7b --- /dev/null +++ b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu_CH4/INCAR @@ -0,0 +1,43 @@ +INCAR file from C:\Users\Matt\Documents\Materials Studio Projects\TempProject Files\Documents\PdAu_CH4_PRv2.xsd. Created by Matt Darby on 30-Nov-2017. +INCAR file. Created by M Darby on 30-Nov-2017. +NWRITE = 1 +LWAVE = .FALSE. # write WAVECAR? +LCHARG = .FALSE. # write CHGCAR? +LVTOT = .FALSE. # write LOCPOT? + +GGA = MK # OptB86b-vdW XC-functional used +PARAM1 = 0.1234 +PARAM2 = 1.0000 +LUSE_VDW = .TRUE. +AGGAC = 0.0000 + +IDIPOL = 3 +LDIPOL = .TRUE. + +# Electronic relaxation +ENCUT = 400 # Energy cutoff in eV +# IALGO = 48 # 8: CG, 48: DIIS algorithm for electrons +ALGO = FAST +VOSKOWN = 1 # Default for PBE, RPBE +PREC = ACCURATE +LREAL = AUTO +ROPT = 2e-4 2e-4 2e-4 2e-4 +ISTART = 0 +NELM = 100 +NELMDL = -10 +EDIFF = 1e-7 # This and EDIFFG are the tolerance parameters +ISYM = 2 + +# Ionic relaxation +NSW = 200 # number of steps in optimization (default 0!) +ISIF = 2 # 0: relax ions, 1,2:relax ions,calc stresses, 3:relax ion+cell +IBRION = 2 # 1: quasi-NR, 2:CG algorithm for ions +EDIFFG = -0.01 # For high accuracy, use -0.01 or -0.02 +POTIM = 0.125 # reduce trial step in optimization +ISMEAR = 1 # 0: Gaussian, electron smearing +SIGMA = 0.1 # If gas phase, set to 0.01 +NFREE = 10 # number of DIIS vectors to save + +# Parallel +NPAR = 8 +LPLANE = .TRUE. diff --git a/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu_CH4/OUTCAR b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu_CH4/OUTCAR new file mode 100644 index 0000000000000000000000000000000000000000..5a00f9af1cc1d13de05cdcb5e86f630ca1fd7daa --- /dev/null +++ b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu_CH4/OUTCAR @@ -0,0 +1,1918 @@ + vasp.5.4.1 24Jun15 (build Dec 04 2015 16:58:54) complex + + executed on IFC91_ompi date 2017.12.27 09:48:03 + running on 32 total cores + distrk: each k-point on 32 cores, 1 groups + distr: one band on NCORES_PER_BAND= 4 cores, 8 groups + + +-------------------------------------------------------------------------------------------------------- + + + INCAR: + POTCAR: PAW_PBE Cu 05Jan2001 + POTCAR: PAW_PBE Rh 06Sep2000 + POTCAR: PAW_PBE C 08Apr2002 + POTCAR: PAW_PBE H 15Jun2001 + + ----------------------------------------------------------------------------- +| | +| ADVICE TO THIS USER RUNNING 'VASP/VAMP' (HEAR YOUR MASTER'S VOICE ...): | +| | +| You have switched on vdW-DFT. | +| This routine was written and supplied by Jiri Klimes. | +| We recommed that you carefully read and cite the following | +| publication | +| J. Klimes, D.R. Bowler, A. Michelides | +| J. Phys.: Cond Matt. 22 022201 (2010) | +| J. Klimes, D.R. Bowler, A. Michelides | +| Phys. Rev. B. 83, 195131 (2011) | +| and references therein. | +| | + ----------------------------------------------------------------------------- + + POTCAR: PAW_PBE Cu 05Jan2001 + local pseudopotential read in + partial core-charges read in + atomic valenz-charges read in + non local Contribution for L= 2 read in + real space projection operators read in + non local Contribution for L= 2 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + PAW grid and wavefunctions read in + + number of l-projection operators is LMAX = 6 + number of lm-projection operators is LMMAX = 18 + + POTCAR: PAW_PBE Rh 06Sep2000 + local pseudopotential read in + partial core-charges read in + atomic valenz-charges read in + non local Contribution for L= 2 read in + real space projection operators read in + non local Contribution for L= 2 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + PAW grid and wavefunctions read in + + number of l-projection operators is LMAX = 6 + number of lm-projection operators is LMMAX = 18 + + POTCAR: PAW_PBE C 08Apr2002 + local pseudopotential read in + atomic valenz-charges read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + PAW grid and wavefunctions read in + + number of l-projection operators is LMAX = 4 + number of lm-projection operators is LMMAX = 8 + + POTCAR: PAW_PBE H 15Jun2001 + local pseudopotential read in + atomic valenz-charges read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + PAW grid and wavefunctions read in + + number of l-projection operators is LMAX = 3 + number of lm-projection operators is LMMAX = 5 + + Optimization of the real space projectors (new method) + + maximal supplied QI-value = 16.25 + optimisation between [QCUT,QGAM] = [ 10.24, 20.48] = [ 29.35,117.42] Ry + Optimized for a Real-space Cutoff 1.55 Angstroem + + l n(q) QCUT max X(q) W(low)/X(q) W(high)/X(q) e(spline) + 2 9 10.239 4.977 0.78E-05 0.33E-04 0.53E-07 + 2 9 10.239 13.467 0.10E-03 0.30E-03 0.20E-06 + 0 10 10.239 13.303 0.19E-04 0.19E-05 0.69E-08 + 0 10 10.239 44.613 0.65E-04 0.24E-05 0.85E-07 + 1 9 10.239 5.276 0.25E-04 0.19E-04 0.22E-07 + 1 9 10.239 7.322 0.84E-04 0.97E-04 0.11E-06 + Optimization of the real space projectors (new method) + + maximal supplied QI-value = 15.12 + optimisation between [QCUT,QGAM] = [ 10.13, 20.41] = [ 28.73,116.64] Ry + Optimized for a Real-space Cutoff 1.70 Angstroem + + l n(q) QCUT max X(q) W(low)/X(q) W(high)/X(q) e(spline) + 2 9 10.129 3.971 0.16E-04 0.22E-05 0.64E-07 + 2 9 10.129 27.544 0.10E-03 0.24E-04 0.29E-06 + 0 10 10.129 20.781 0.20E-04 0.19E-06 0.11E-07 + 0 10 10.129 69.103 0.45E-04 0.21E-04 0.91E-07 + 1 10 10.129 7.864 0.65E-05 0.54E-05 0.31E-07 + 1 10 10.129 10.811 0.30E-04 0.39E-05 0.12E-06 + Optimization of the real space projectors (new method) + + maximal supplied QI-value = 25.13 + optimisation between [QCUT,QGAM] = [ 10.05, 20.36] = [ 28.30,116.06] Ry + Optimized for a Real-space Cutoff 1.51 Angstroem + + l n(q) QCUT max X(q) W(low)/X(q) W(high)/X(q) e(spline) + 0 9 10.053 5.582 0.29E-04 0.95E-05 0.10E-06 + 0 9 10.053 69.432 0.19E-03 0.21E-03 0.38E-06 + 1 9 10.053 2.780 0.26E-04 0.49E-04 0.22E-06 + 1 9 10.053 4.549 0.59E-04 0.62E-04 0.43E-06 + Optimization of the real space projectors (new method) + + maximal supplied QI-value = 34.20 + optimisation between [QCUT,QGAM] = [ 9.92, 20.18] = [ 27.55,114.04] Ry + Optimized for a Real-space Cutoff 1.34 Angstroem + + l n(q) QCUT max X(q) W(low)/X(q) W(high)/X(q) e(spline) + 0 8 9.919 4.436 0.31E-04 0.59E-04 0.66E-07 + 0 8 9.919 16.131 0.16E-03 0.20E-03 0.35E-06 + 1 8 9.919 4.654 0.19E-03 0.46E-03 0.40E-06 + + ----------------------------------------------------------------------------- +| | +| ADVICE TO THIS USER RUNNING 'VASP/VAMP' (HEAR YOUR MASTER'S VOICE ...): | +| | +| You enforced a specific xc-type in the INCAR file, | +| a different type was found on the POTCAR file | +| I HOPE YOU KNOW, WHAT YOU ARE DOING | +| | + ----------------------------------------------------------------------------- + + PAW_PBE Cu 05Jan2001 : + energy of atom 1 EATOM=-1390.9800 + kinetic energy error for atom= 0.0117 (will be added to EATOM!!) + PAW_PBE Rh 06Sep2000 : + energy of atom 2 EATOM= -616.5493 + kinetic energy error for atom= 0.0043 (will be added to EATOM!!) + PAW_PBE C 08Apr2002 : + energy of atom 3 EATOM= -147.1560 + kinetic energy error for atom= 0.0288 (will be added to EATOM!!) + PAW_PBE H 15Jun2001 : + energy of atom 4 EATOM= -12.4884 + kinetic energy error for atom= 0.0098 (will be added to EATOM!!) + + + POSCAR: POSCAR file for Cu_3x3x5.xsd | Created o + positions in direct lattice + velocities in cartesian coordinates + exchange correlation table for LEXCH = 43 + RHO(1)= 0.500 N(1) = 2000 + RHO(2)= 100.500 N(2) = 4000 + + VTST: version 3.1, (03/28/14) + + CHAIN: initializing optimizer + + OPT: Using VASP Conjugate-Gradient optimizer + CHAIN: Read ICHAIN 0 + + POSCAR: POSCAR file for Cu_3x3x5.xsd | Created o + positions in direct lattice + velocities in cartesian coordinates + + + +-------------------------------------------------------------------------------------------------------- + + + ion position nearest neighbor table + 1 0.222 0.111 0.000- 2 2.55 7 2.55 5 2.55 9 2.55 4 2.55 3 2.55 10 2.55 14 2.55 + 13 2.55 + 2 0.222 0.444 0.000- 1 2.55 8 2.55 7 2.55 3 2.55 5 2.55 6 2.55 11 2.55 14 2.55 + 15 2.55 + 3 0.222 0.778 0.000- 9 2.55 8 2.55 6 2.55 1 2.55 2 2.55 4 2.55 12 2.55 13 2.55 + 15 2.55 + 4 0.556 0.111 0.000- 5 2.55 8 2.55 6 2.55 7 2.55 1 2.55 3 2.55 13 2.55 16 2.55 + 17 2.55 + 5 0.556 0.444 0.000- 4 2.55 1 2.55 17 2.55 6 2.55 8 2.55 2 2.55 9 2.55 14 2.55 + 18 2.55 + 6 0.556 0.778 0.000- 3 2.55 4 2.55 5 2.55 9 2.55 7 2.55 2 2.55 15 2.55 16 2.55 + 18 2.55 + 7 0.889 0.111 0.000- 1 2.55 8 2.55 2 2.55 4 2.55 9 2.55 6 2.55 10 2.55 11 2.55 + 16 2.55 + 8 0.889 0.444 0.000- 2 2.55 7 2.55 4 2.55 3 2.55 11 2.55 9 2.55 5 2.55 12 2.55 + 17 2.55 + 9 0.889 0.778 0.000- 3 2.55 1 2.55 6 2.55 7 2.55 8 2.55 5 2.55 10 2.55 12 2.55 + 18 2.55 + 10 0.000 0.000 0.114- 21 2.54 38 2.55 44 2.55 16 2.55 11 2.55 12 2.55 13 2.55 18 2.55 + 14 2.55 1 2.55 7 2.55 9 2.55 + 11 0.000 0.333 0.114- 21 2.54 30 2.55 12 2.55 15 2.55 8 2.55 17 2.55 14 2.55 10 2.55 + 16 2.55 7 2.55 2 2.55 27 2.55 + 12 0.000 0.667 0.114- 35 2.55 11 2.55 17 2.55 10 2.55 18 2.55 15 2.55 13 2.55 8 2.55 + 9 2.55 3 2.55 30 2.55 38 2.56 + 13 0.333 0.000 0.114- 24 2.54 38 2.55 16 2.55 17 2.55 14 2.55 15 2.55 10 2.55 12 2.55 + 3 2.55 4 2.55 1 2.55 41 2.56 + 14 0.333 0.333 0.114- 21 2.54 24 2.55 32 2.55 17 2.55 15 2.55 18 2.55 11 2.55 13 2.55 + 10 2.55 1 2.55 2 2.55 5 2.55 + 15 0.333 0.667 0.114- 32 2.54 30 2.55 14 2.55 18 2.55 16 2.55 11 2.55 13 2.55 12 2.55 + 2 2.55 6 2.55 3 2.55 41 2.56 + 16 0.667 0.000 0.114- 13 2.55 15 2.55 10 2.55 17 2.55 18 2.55 11 2.55 4 2.55 6 2.55 + 7 2.55 41 2.55 44 2.56 27 2.56 + 17 0.667 0.333 0.114- 24 2.54 35 2.55 14 2.55 18 2.55 12 2.55 13 2.55 5 2.55 16 2.55 + 11 2.55 4 2.55 8 2.55 27 2.56 + 18 0.667 0.667 0.114- 32 2.54 35 2.55 15 2.55 17 2.55 14 2.55 16 2.55 12 2.55 10 2.55 + 5 2.55 6 2.55 9 2.55 44 2.56 + 19 0.999 0.998 0.454- 42 2.50 36 2.54 43 2.54 25 2.54 26 2.54 20 2.57 22 2.57 28 2.58 + 45 2.58 + 20 0.224 0.112 0.340- 38 2.53 24 2.54 21 2.55 23 2.55 26 2.55 37 2.55 43 2.55 29 2.55 + 31 2.55 19 2.57 22 2.57 45 2.60 + 21 0.111 0.222 0.227- 11 2.54 10 2.54 14 2.54 20 2.55 29 2.55 38 2.55 44 2.55 26 2.55 + 27 2.55 30 2.55 24 2.56 32 2.56 + 22 0.335 0.998 0.454- 39 2.50 36 2.54 37 2.54 25 2.54 23 2.54 20 2.57 19 2.57 45 2.58 + 33 2.58 + 23 0.557 0.112 0.341- 33 2.54 22 2.54 27 2.54 25 2.54 20 2.55 31 2.55 41 2.55 37 2.55 + 24 2.55 34 2.55 40 2.56 26 2.56 + 24 0.446 0.222 0.227- 17 2.54 20 2.54 13 2.54 31 2.54 41 2.55 38 2.55 27 2.55 35 2.55 + 14 2.55 23 2.55 21 2.56 32 2.56 + 25 0.669 0.001 0.454- 42 2.54 33 2.54 19 2.54 39 2.54 22 2.54 28 2.54 26 2.54 23 2.54 + 40 2.55 + 26 0.891 0.112 0.341- 25 2.54 19 2.54 28 2.55 27 2.55 21 2.55 29 2.55 44 2.55 20 2.55 + 34 2.55 43 2.55 40 2.56 23 2.56 + 27 0.779 0.223 0.228- 34 2.54 23 2.54 24 2.55 26 2.55 21 2.55 35 2.55 30 2.55 11 2.55 + 41 2.56 17 2.56 44 2.56 16 2.56 + 28 0.999 0.335 0.454- 33 2.50 34 2.54 36 2.54 25 2.54 26 2.55 29 2.57 39 2.57 19 2.58 + 45 2.58 + 29 0.224 0.445 0.340- 30 2.53 32 2.54 21 2.55 26 2.55 40 2.55 34 2.55 37 2.55 20 2.55 + 31 2.55 28 2.57 39 2.57 45 2.60 + 30 0.112 0.556 0.227- 29 2.53 34 2.54 15 2.55 32 2.55 21 2.55 37 2.55 27 2.55 41 2.55 + 11 2.55 12 2.55 35 2.56 38 2.56 + 31 0.557 0.446 0.340- 35 2.53 32 2.54 24 2.54 23 2.55 40 2.55 34 2.55 43 2.55 20 2.55 + 29 2.55 42 2.57 33 2.57 45 2.60 + 32 0.446 0.557 0.227- 18 2.54 29 2.54 15 2.54 31 2.54 41 2.55 30 2.55 44 2.55 35 2.55 + 14 2.55 40 2.55 21 2.56 24 2.56 + 33 0.672 0.335 0.454- 28 2.50 34 2.53 36 2.54 25 2.54 23 2.54 31 2.57 45 2.57 42 2.58 + 22 2.58 + 34 0.890 0.445 0.340- 33 2.53 27 2.54 28 2.54 30 2.54 35 2.55 36 2.55 31 2.55 26 2.55 + 23 2.55 29 2.55 43 2.56 37 2.56 + 35 0.778 0.556 0.227- 31 2.53 34 2.55 43 2.55 24 2.55 32 2.55 18 2.55 12 2.55 27 2.55 + 17 2.55 44 2.55 30 2.56 38 2.56 + 36 0.002 0.668 0.453- 39 2.54 42 2.54 22 2.54 19 2.54 33 2.54 28 2.54 37 2.55 43 2.55 + 34 2.55 + 37 0.224 0.779 0.340- 41 2.53 39 2.54 22 2.54 36 2.55 38 2.55 30 2.55 23 2.55 40 2.55 + 20 2.55 29 2.55 43 2.56 34 2.56 + 38 0.112 0.890 0.227- 20 2.53 43 2.54 13 2.55 24 2.55 37 2.55 21 2.55 44 2.55 10 2.55 + 41 2.55 12 2.56 35 2.56 30 2.56 + 39 0.335 0.671 0.454- 22 2.50 36 2.54 37 2.54 25 2.54 40 2.54 29 2.57 28 2.57 45 2.58 + 42 2.58 + 40 0.557 0.778 0.341- 42 2.54 39 2.54 44 2.54 25 2.55 41 2.55 29 2.55 31 2.55 37 2.55 + 32 2.55 43 2.55 23 2.56 26 2.56 + 41 0.445 0.889 0.228- 37 2.53 24 2.55 32 2.55 40 2.55 23 2.55 38 2.55 30 2.55 16 2.55 + 13 2.56 27 2.56 44 2.56 15 2.56 + 42 0.672 0.671 0.454- 19 2.50 43 2.53 36 2.54 25 2.54 40 2.54 31 2.57 45 2.57 33 2.58 + 39 2.58 + 43 0.890 0.779 0.340- 42 2.53 44 2.53 19 2.54 38 2.54 35 2.55 36 2.55 26 2.55 31 2.55 + 40 2.55 20 2.55 34 2.56 37 2.56 + 44 0.779 0.889 0.228- 43 2.53 40 2.54 32 2.55 21 2.55 26 2.55 38 2.55 35 2.55 10 2.55 + 41 2.56 27 2.56 18 2.56 16 2.56 + 45 0.336 0.335 0.456- 48 2.07 42 2.57 33 2.57 39 2.58 22 2.58 28 2.58 19 2.58 31 2.60 + 29 2.60 20 2.60 + 46 0.327 0.332 0.617- 50 1.10 47 1.10 49 1.10 48 1.13 + 47 0.319 0.457 0.643- 46 1.10 + 48 0.417 0.393 0.565- 46 1.13 45 2.07 + 49 0.412 0.281 0.651- 46 1.10 + 50 0.175 0.206 0.606- 46 1.10 + + LATTYP: Found a hexagonal cell. + ALAT = 7.6549965918 + C/A-ratio = 2.3949984178 + + Lattice vectors: + + A1 = ( 5.4129000000, -5.4129000000, -0.0000000000) + A2 = ( 0.0000000000, 5.4129000000, -5.4129000000) + A3 = ( 10.5849693586, 10.5849693586, 10.5849693586) + + +Analysis of symmetry for initial positions (statically): +===================================================================== + Subroutine PRICEL returns: + Original cell was already a primitive cell. + + + Routine SETGRP: Setting up the symmetry group for a + hexagonal supercell. + + + Subroutine GETGRP returns: Found 1 space group operations + (whereof 1 operations were pure point group operations) + out of a pool of 24 trial point group operations. + + +The static configuration has the point symmetry C_1 . + + +Analysis of symmetry for dynamics (positions and initial velocities): +===================================================================== + Subroutine PRICEL returns: + Original cell was already a primitive cell. + + + Routine SETGRP: Setting up the symmetry group for a + hexagonal supercell. + + + Subroutine GETGRP returns: Found 1 space group operations + (whereof 1 operations were pure point group operations) + out of a pool of 24 trial point group operations. + + +The dynamic configuration has the point symmetry C_1 . + + +Analysis of constrained symmetry for selective dynamics: +===================================================================== + Subroutine PRICEL returns: + Original cell was already a primitive cell. + + + Routine SETGRP: Setting up the symmetry group for a + hexagonal supercell. + + + Subroutine GETGRP returns: Found 1 space group operations + (whereof 1 operations were pure point group operations) + out of a pool of 24 trial point group operations. + + +The constrained configuration has the point symmetry C_1 . + + + KPOINTS: K-Point Grid Created by Matt Darby on 30 + +Automatic generation of k-mesh. +Space group operators: + irot det(A) alpha n_x n_y n_z tau_x tau_y tau_z + 1 1.000000 0.000000 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 + + Subroutine IBZKPT returns following result: + =========================================== + + Found 85 irreducible k-points: + + Following reciprocal coordinates: + Coordinates Weight + 0.000000 0.000000 0.000000 1.000000 + 0.076923 0.000000 0.000000 2.000000 + 0.153846 0.000000 0.000000 2.000000 + 0.230769 0.000000 0.000000 2.000000 + 0.307692 0.000000 0.000000 2.000000 + 0.384615 0.000000 0.000000 2.000000 + 0.461538 0.000000 0.000000 2.000000 + 0.000000 0.076923 0.000000 2.000000 + 0.076923 0.076923 0.000000 2.000000 + 0.153846 0.076923 0.000000 2.000000 + 0.230769 0.076923 -0.000000 2.000000 + 0.307692 0.076923 0.000000 2.000000 + 0.384615 0.076923 -0.000000 2.000000 + 0.461538 0.076923 -0.000000 2.000000 + -0.461538 0.076923 -0.000000 2.000000 + -0.384615 0.076923 -0.000000 2.000000 + -0.307692 0.076923 -0.000000 2.000000 + -0.230769 0.076923 0.000000 2.000000 + -0.153846 0.076923 -0.000000 2.000000 + -0.076923 0.076923 0.000000 2.000000 + -0.000000 0.153846 -0.000000 2.000000 + 0.076923 0.153846 0.000000 2.000000 + 0.153846 0.153846 0.000000 2.000000 + 0.230769 0.153846 0.000000 2.000000 + 0.307692 0.153846 0.000000 2.000000 + 0.384615 0.153846 0.000000 2.000000 + 0.461538 0.153846 0.000000 2.000000 + -0.461538 0.153846 0.000000 2.000000 + -0.384615 0.153846 0.000000 2.000000 + -0.307692 0.153846 -0.000000 2.000000 + -0.230769 0.153846 0.000000 2.000000 + -0.153846 0.153846 -0.000000 2.000000 + -0.076923 0.153846 -0.000000 2.000000 + -0.000000 0.230769 0.000000 2.000000 + 0.076923 0.230769 -0.000000 2.000000 + 0.153846 0.230769 0.000000 2.000000 + 0.230769 0.230769 0.000000 2.000000 + 0.307692 0.230769 0.000000 2.000000 + 0.384615 0.230769 -0.000000 2.000000 + 0.461538 0.230769 0.000000 2.000000 + -0.461538 0.230769 0.000000 2.000000 + -0.384615 0.230769 -0.000000 2.000000 + -0.307692 0.230769 0.000000 2.000000 + -0.230769 0.230769 -0.000000 2.000000 + -0.153846 0.230769 0.000000 2.000000 + -0.076923 0.230769 0.000000 2.000000 + -0.000000 0.307692 0.000000 2.000000 + 0.076923 0.307692 0.000000 2.000000 + 0.153846 0.307692 0.000000 2.000000 + 0.230769 0.307692 0.000000 2.000000 + 0.307692 0.307692 0.000000 2.000000 + 0.384615 0.307692 0.000000 2.000000 + 0.461538 0.307692 0.000000 2.000000 + -0.461538 0.307692 0.000000 2.000000 + -0.384615 0.307692 0.000000 2.000000 + -0.307692 0.307692 0.000000 2.000000 + -0.230769 0.307692 0.000000 2.000000 + -0.153846 0.307692 0.000000 2.000000 + -0.076923 0.307692 0.000000 2.000000 + -0.000000 0.384615 0.000000 2.000000 + 0.076923 0.384615 -0.000000 2.000000 + 0.153846 0.384615 0.000000 2.000000 + 0.230769 0.384615 -0.000000 2.000000 + 0.307692 0.384615 0.000000 2.000000 + 0.384615 0.384615 0.000000 2.000000 + 0.461538 0.384615 0.000000 2.000000 + -0.461538 0.384615 0.000000 2.000000 + -0.384615 0.384615 0.000000 2.000000 + -0.307692 0.384615 0.000000 2.000000 + -0.230769 0.384615 -0.000000 2.000000 + -0.153846 0.384615 0.000000 2.000000 + -0.076923 0.384615 -0.000000 2.000000 + -0.000000 0.461538 0.000000 2.000000 + 0.076923 0.461538 0.000000 2.000000 + 0.153846 0.461538 0.000000 2.000000 + 0.230769 0.461538 0.000000 2.000000 + 0.307692 0.461538 0.000000 2.000000 + 0.384615 0.461538 0.000000 2.000000 + 0.461538 0.461538 0.000000 2.000000 + -0.461538 0.461538 -0.000000 2.000000 + -0.384615 0.461538 0.000000 2.000000 + -0.307692 0.461538 0.000000 2.000000 + -0.230769 0.461538 0.000000 2.000000 + -0.153846 0.461538 -0.000000 2.000000 + -0.076923 0.461538 0.000000 2.000000 + + Following cartesian coordinates: + Coordinates Weight + 0.000000 0.000000 0.000000 1.000000 + 0.009474 -0.004737 -0.004737 2.000000 + 0.018948 -0.009474 -0.009474 2.000000 + 0.028422 -0.014211 -0.014211 2.000000 + 0.037896 -0.018948 -0.018948 2.000000 + 0.047370 -0.023685 -0.023685 2.000000 + 0.056844 -0.028422 -0.028422 2.000000 + 0.004737 0.004737 -0.009474 2.000000 + 0.014211 0.000000 -0.014211 2.000000 + 0.023685 -0.004737 -0.018948 2.000000 + 0.033159 -0.009474 -0.023685 2.000000 + 0.042633 -0.014211 -0.028422 2.000000 + 0.052107 -0.018948 -0.033159 2.000000 + 0.061581 -0.023685 -0.037896 2.000000 + -0.052107 0.033159 0.018948 2.000000 + -0.042633 0.028422 0.014211 2.000000 + -0.033159 0.023685 0.009474 2.000000 + -0.023685 0.018948 0.004737 2.000000 + -0.014211 0.014211 0.000000 2.000000 + -0.004737 0.009474 -0.004737 2.000000 + 0.009474 0.009474 -0.018948 2.000000 + 0.018948 0.004737 -0.023685 2.000000 + 0.028422 0.000000 -0.028422 2.000000 + 0.037896 -0.004737 -0.033159 2.000000 + 0.047370 -0.009474 -0.037896 2.000000 + 0.056844 -0.014211 -0.042633 2.000000 + 0.066318 -0.018948 -0.047370 2.000000 + -0.047370 0.037896 0.009474 2.000000 + -0.037896 0.033159 0.004737 2.000000 + -0.028422 0.028422 -0.000000 2.000000 + -0.018948 0.023685 -0.004737 2.000000 + -0.009474 0.018948 -0.009474 2.000000 + 0.000000 0.014211 -0.014211 2.000000 + 0.014211 0.014211 -0.028422 2.000000 + 0.023685 0.009474 -0.033159 2.000000 + 0.033159 0.004737 -0.037896 2.000000 + 0.042633 0.000000 -0.042633 2.000000 + 0.052107 -0.004737 -0.047370 2.000000 + 0.061581 -0.009474 -0.052107 2.000000 + 0.071055 -0.014211 -0.056844 2.000000 + -0.042633 0.042633 0.000000 2.000000 + -0.033159 0.037896 -0.004737 2.000000 + -0.023685 0.033159 -0.009474 2.000000 + -0.014211 0.028422 -0.014211 2.000000 + -0.004737 0.023685 -0.018948 2.000000 + 0.004737 0.018948 -0.023685 2.000000 + 0.018948 0.018948 -0.037896 2.000000 + 0.028422 0.014211 -0.042633 2.000000 + 0.037896 0.009474 -0.047370 2.000000 + 0.047370 0.004737 -0.052107 2.000000 + 0.056844 0.000000 -0.056844 2.000000 + 0.066318 -0.004737 -0.061581 2.000000 + 0.075792 -0.009474 -0.066318 2.000000 + -0.037896 0.047370 -0.009474 2.000000 + -0.028422 0.042633 -0.014211 2.000000 + -0.018948 0.037896 -0.018948 2.000000 + -0.009474 0.033159 -0.023685 2.000000 + -0.000000 0.028422 -0.028422 2.000000 + 0.009474 0.023685 -0.033159 2.000000 + 0.023685 0.023685 -0.047370 2.000000 + 0.033159 0.018948 -0.052107 2.000000 + 0.042633 0.014211 -0.056844 2.000000 + 0.052107 0.009474 -0.061581 2.000000 + 0.061581 0.004737 -0.066318 2.000000 + 0.071055 0.000000 -0.071055 2.000000 + 0.080529 -0.004737 -0.075792 2.000000 + -0.033159 0.052107 -0.018948 2.000000 + -0.023685 0.047370 -0.023685 2.000000 + -0.014211 0.042633 -0.028422 2.000000 + -0.004737 0.037896 -0.033159 2.000000 + 0.004737 0.033159 -0.037896 2.000000 + 0.014211 0.028422 -0.042633 2.000000 + 0.028422 0.028422 -0.056844 2.000000 + 0.037896 0.023685 -0.061581 2.000000 + 0.047370 0.018948 -0.066318 2.000000 + 0.056844 0.014211 -0.071055 2.000000 + 0.066318 0.009474 -0.075792 2.000000 + 0.075792 0.004737 -0.080529 2.000000 + 0.085266 0.000000 -0.085266 2.000000 + -0.028422 0.056844 -0.028422 2.000000 + -0.018948 0.052107 -0.033159 2.000000 + -0.009474 0.047370 -0.037896 2.000000 + 0.000000 0.042633 -0.042633 2.000000 + 0.009474 0.037896 -0.047370 2.000000 + 0.018948 0.033159 -0.052107 2.000000 + + + +-------------------------------------------------------------------------------------------------------- + + + + + Dimension of arrays: + k-points NKPTS = 85 k-points in BZ NKDIM = 85 number of bands NBANDS= 304 + number of dos NEDOS = 301 number of ions NIONS = 50 + non local maximal LDIM = 6 non local SUM 2l+1 LMDIM = 18 + total plane-waves NPLWV = 300000 + max r-space proj IRMAX = 6660 max aug-charges IRDMAX= 18523 + dimension x,y,z NGX = 50 NGY = 50 NGZ = 120 + dimension x,y,z NGXF= 100 NGYF= 100 NGZF= 240 + support grid NGXF= 100 NGYF= 100 NGZF= 240 + ions per type = 44 1 1 4 + NGX,Y,Z is equivalent to a cutoff of 10.86, 10.86, 10.88 a.u. + NGXF,Y,Z is equivalent to a cutoff of 21.72, 21.72, 21.76 a.u. + + + I would recommend the setting: + dimension x,y,z NGX = 50 NGY = 50 NGZ = 120 + SYSTEM = unknown system + POSCAR = POSCAR file for Cu_3x3x5.xsd | Created o + + Startparameter for this run: + NWRITE = 1 write-flag & timer + PREC = accura normal or accurate (medium, high low for compatibility) + ISTART = 0 job : 0-new 1-cont 2-samecut + ICHARG = 2 charge: 1-file 2-atom 10-const + ISPIN = 1 spin polarized calculation? + LNONCOLLINEAR = F non collinear calculations + LSORBIT = F spin-orbit coupling + INIWAV = 1 electr: 0-lowe 1-rand 2-diag + LASPH = F aspherical Exc in radial PAW + METAGGA= F non-selfconsistent MetaGGA calc. + + Electronic Relaxation 1 + ENCUT = 400.0 eV 29.40 Ry 5.42 a.u. 12.48 12.48 29.90*2*pi/ulx,y,z + ENINI = 400.0 initial cutoff + ENAUG = 644.9 eV augmentation charge cutoff + NELM = 100; NELMIN= 2; NELMDL=-10 # of ELM steps + EDIFF = 0.1E-06 stopping-criterion for ELM + LREAL = T real-space projection + NLSPLINE = F spline interpolate recip. space projectors + LCOMPAT= F compatible to vasp.4.4 + GGA_COMPAT = T GGA compatible to vasp.4.4-vasp.4.6 + LMAXPAW = -100 max onsite density + LMAXMIX = 2 max onsite mixed and CHGCAR + VOSKOWN= 1 Vosko Wilk Nusair interpolation + ROPT = -0.00020 -0.00020 -0.00020 -0.00020 + Ionic relaxation + EDIFFG = -.1E-01 stopping-criterion for IOM + NSW = 200 number of steps for IOM + NBLOCK = 1; KBLOCK = 200 inner block; outer block + IBRION = 2 ionic relax: 0-MD 1-quasi-New 2-CG + NFREE = 10 steps in history (QN), initial steepest desc. (CG) + ISIF = 2 stress and relaxation + IWAVPR = 11 prediction: 0-non 1-charg 2-wave 3-comb + ISYM = 2 0-nonsym 1-usesym 2-fastsym + LCORR = T Harris-Foulkes like correction to forces + + POTIM = 0.1250 time-step for ionic-motion + TEIN = 0.0 initial temperature + TEBEG = 0.0; TEEND = 0.0 temperature during run + SMASS = -3.00 Nose mass-parameter (am) + estimated Nose-frequenzy (Omega) = 0.10E-29 period in steps =****** mass= -0.134E-26a.u. + SCALEE = 1.0000 scale energy and forces + NPACO = 256; APACO = 16.0 distance and # of slots for P.C. + PSTRESS= 0.0 pullay stress + + Mass of Ions in am + POMASS = 63.55102.91 12.01 1.00 + Ionic Valenz + ZVAL = 11.00 9.00 4.00 1.00 + Atomic Wigner-Seitz radii + RWIGS = -1.00 -1.00 -1.00 -1.00 + virtual crystal weights + VCA = 1.00 1.00 1.00 1.00 + NELECT = 501.0000 total number of electrons + NUPDOWN= -1.0000 fix difference up-down + + DOS related values: + EMIN = 10.00; EMAX =-10.00 energy-range for DOS + EFERMI = 0.00 + ISMEAR = 1; SIGMA = 0.10 broadening in eV -4-tet -1-fermi 0-gaus + + Electronic relaxation 2 (details) + IALGO = 68 algorithm + LDIAG = T sub-space diagonalisation (order eigenvalues) + LSUBROT= F optimize rotation matrix (better conditioning) + TURBO = 0 0=normal 1=particle mesh + IRESTART = 0 0=no restart 2=restart with 2 vectors + NREBOOT = 0 no. of reboots + NMIN = 0 reboot dimension + EREF = 0.00 reference energy to select bands + IMIX = 4 mixing-type and parameters + AMIX = 0.40; BMIX = 1.00 + AMIX_MAG = 1.60; BMIX_MAG = 1.00 + AMIN = 0.10 + WC = 100.; INIMIX= 1; MIXPRE= 1; MAXMIX= -45 + + Intra band minimization: + WEIMIN = 0.0010 energy-eigenvalue tresh-hold + EBREAK = 0.82E-10 absolut break condition + DEPER = 0.30 relativ break condition + + TIME = 0.40 timestep for ELM + + volume/ion in A,a.u. = 18.61 125.57 + Fermi-wavevector in a.u.,A,eV,Ry = 1.331876 2.516881 24.135288 1.773894 + Thomas-Fermi vector in A = 2.460854 + + Write flags + LWAVE = F write WAVECAR + LCHARG = F write CHGCAR + LVTOT = F write LOCPOT, total local potential + LVHAR = F write LOCPOT, Hartree potential only + LELF = F write electronic localiz. function (ELF) + LORBIT = 0 0 simple, 1 ext, 2 COOP (PROOUT) + + + Dipole corrections + LMONO = F monopole corrections only (constant potential shift) + LDIPOL = T correct potential (dipole corrections) + IDIPOL = 3 1-x, 2-y, 3-z, 4-all directions + EPSILON= 1.0000000 bulk dielectric constant + + Exchange correlation treatment: + GGA = MK GGA type + LEXCH = 43 internal setting for exchange type + VOSKOWN= 1 Vosko Wilk Nusair interpolation + LHFCALC = F Hartree Fock is set to + LHFONE = F Hartree Fock one center treatment + AEXX = 0.0000 exact exchange contribution + + vdW DFT: + LUSE_VDW = T switch on vdW DFT + Zab_VDW =-.8491 correlation parameter + PARAM1 =0.1234 + PARAM2 =1.0000 + PARAM3 =0.0000 + + Linear response parameters + LEPSILON= F determine dielectric tensor + LRPA = F only Hartree local field effects (RPA) + LNABLA = F use nabla operator in PAW spheres + LVEL = F velocity operator in full k-point grid + LINTERFAST= F fast interpolation + KINTER = 0 interpolate to denser k-point grid + CSHIFT =0.1000 complex shift for real part using Kramers Kronig + OMEGAMAX= -1.0 maximum frequency + DEG_THRESHOLD= 0.2000000E-02 threshold for treating states as degnerate + RTIME = 0.100 relaxation time in fs + + Orbital magnetization related: + ORBITALMAG= F switch on orbital magnetization + LCHIMAG = F perturbation theory with respect to B field + DQ = 0.001000 dq finite difference perturbation B field + + + +-------------------------------------------------------------------------------------------------------- + + + conjugate gradient relaxation of ions + using selective dynamics as specified on POSCAR + charge density and potential will be updated during run + non-spin polarized calculation + RMM-DIIS sequential band-by-band and + variant of blocked Davidson during initial phase + perform sub-space diagonalisation + before iterative eigenvector-optimisation + modified Broyden-mixing scheme, WC = 100.0 + initial mixing is a Kerker type mixing with AMIX = 0.4000 and BMIX = 1.0000 + Hartree-type preconditioning will be used + using additional bands 53 + real space projection scheme for non local part + use partial core corrections + calculate Harris-corrections to forces + (improved forces if not selfconsistent) + use gradient corrections + use of overlap-Matrix (Vanderbilt PP) + Methfessel and Paxton Order N= 1 SIGMA = 0.10 + + +-------------------------------------------------------------------------------------------------------- + + + energy-cutoff : 400.00 + volume of cell : 930.40 + direct lattice vectors reciprocal lattice vectors + 5.412900000 -5.412900000 -0.000000000 0.123162568 -0.061581284 -0.061581284 + 0.000000000 5.412900000 -5.412900000 0.061581284 0.061581284 -0.123162568 + 10.584969359 10.584969359 10.584969359 0.031491195 0.031491195 0.031491195 + + length of vectors + 7.654996592 7.654996592 18.333704726 0.150842724 0.150842724 0.054544350 + + + + k-points in units of 2pi/SCALE and weight: K-Point Grid Created by Matt Darby on 30 + 0.00000000 0.00000000 0.00000000 0.006 + 0.00947404 -0.00473702 -0.00473702 0.012 + 0.01894809 -0.00947404 -0.00947404 0.012 + 0.02842213 -0.01421107 -0.01421107 0.012 + 0.03789617 -0.01894809 -0.01894809 0.012 + 0.04737022 -0.02368511 -0.02368511 0.012 + 0.05684426 -0.02842213 -0.02842213 0.012 + 0.00473702 0.00473702 -0.00947404 0.012 + 0.01421107 0.00000000 -0.01421107 0.012 + 0.02368511 -0.00473702 -0.01894809 0.012 + 0.03315915 -0.00947404 -0.02368511 0.012 + 0.04263320 -0.01421107 -0.02842213 0.012 + 0.05210724 -0.01894809 -0.03315915 0.012 + 0.06158128 -0.02368511 -0.03789617 0.012 + -0.05210724 0.03315915 0.01894809 0.012 + -0.04263320 0.02842213 0.01421107 0.012 + -0.03315915 0.02368511 0.00947404 0.012 + -0.02368511 0.01894809 0.00473702 0.012 + -0.01421107 0.01421107 0.00000000 0.012 + -0.00473702 0.00947404 -0.00473702 0.012 + 0.00947404 0.00947404 -0.01894809 0.012 + 0.01894809 0.00473702 -0.02368511 0.012 + 0.02842213 0.00000000 -0.02842213 0.012 + 0.03789617 -0.00473702 -0.03315915 0.012 + 0.04737022 -0.00947404 -0.03789617 0.012 + 0.05684426 -0.01421107 -0.04263320 0.012 + 0.06631831 -0.01894809 -0.04737022 0.012 + -0.04737022 0.03789617 0.00947404 0.012 + -0.03789617 0.03315915 0.00473702 0.012 + -0.02842213 0.02842213 -0.00000000 0.012 + -0.01894809 0.02368511 -0.00473702 0.012 + -0.00947404 0.01894809 -0.00947404 0.012 + 0.00000000 0.01421107 -0.01421107 0.012 + 0.01421107 0.01421107 -0.02842213 0.012 + 0.02368511 0.00947404 -0.03315915 0.012 + 0.03315915 0.00473702 -0.03789617 0.012 + 0.04263320 0.00000000 -0.04263320 0.012 + 0.05210724 -0.00473702 -0.04737022 0.012 + 0.06158128 -0.00947404 -0.05210724 0.012 + 0.07105533 -0.01421107 -0.05684426 0.012 + -0.04263320 0.04263320 0.00000000 0.012 + -0.03315915 0.03789617 -0.00473702 0.012 + -0.02368511 0.03315915 -0.00947404 0.012 + -0.01421107 0.02842213 -0.01421107 0.012 + -0.00473702 0.02368511 -0.01894809 0.012 + 0.00473702 0.01894809 -0.02368511 0.012 + 0.01894809 0.01894809 -0.03789617 0.012 + 0.02842213 0.01421107 -0.04263320 0.012 + 0.03789617 0.00947404 -0.04737022 0.012 + 0.04737022 0.00473702 -0.05210724 0.012 + 0.05684426 0.00000000 -0.05684426 0.012 + 0.06631831 -0.00473702 -0.06158128 0.012 + 0.07579235 -0.00947404 -0.06631831 0.012 + -0.03789617 0.04737022 -0.00947404 0.012 + -0.02842213 0.04263320 -0.01421107 0.012 + -0.01894809 0.03789617 -0.01894809 0.012 + -0.00947404 0.03315915 -0.02368511 0.012 + -0.00000000 0.02842213 -0.02842213 0.012 + 0.00947404 0.02368511 -0.03315915 0.012 + 0.02368511 0.02368511 -0.04737022 0.012 + 0.03315915 0.01894809 -0.05210724 0.012 + 0.04263320 0.01421107 -0.05684426 0.012 + 0.05210724 0.00947404 -0.06158128 0.012 + 0.06158128 0.00473702 -0.06631831 0.012 + 0.07105533 0.00000000 -0.07105533 0.012 + 0.08052937 -0.00473702 -0.07579235 0.012 + -0.03315915 0.05210724 -0.01894809 0.012 + -0.02368511 0.04737022 -0.02368511 0.012 + -0.01421107 0.04263320 -0.02842213 0.012 + -0.00473702 0.03789617 -0.03315915 0.012 + 0.00473702 0.03315915 -0.03789617 0.012 + 0.01421107 0.02842213 -0.04263320 0.012 + 0.02842213 0.02842213 -0.05684426 0.012 + 0.03789617 0.02368511 -0.06158128 0.012 + 0.04737022 0.01894809 -0.06631831 0.012 + 0.05684426 0.01421107 -0.07105533 0.012 + 0.06631831 0.00947404 -0.07579235 0.012 + 0.07579235 0.00473702 -0.08052937 0.012 + 0.08526639 0.00000000 -0.08526639 0.012 + -0.02842213 0.05684426 -0.02842213 0.012 + -0.01894809 0.05210724 -0.03315915 0.012 + -0.00947404 0.04737022 -0.03789617 0.012 + 0.00000000 0.04263320 -0.04263320 0.012 + 0.00947404 0.03789617 -0.04737022 0.012 + 0.01894809 0.03315915 -0.05210724 0.012 + + k-points in reciprocal lattice and weights: K-Point Grid Created by Matt Darby on 30 + 0.00000000 0.00000000 0.00000000 0.006 + 0.07692308 0.00000000 0.00000000 0.012 + 0.15384615 0.00000000 0.00000000 0.012 + 0.23076923 0.00000000 0.00000000 0.012 + 0.30769231 0.00000000 0.00000000 0.012 + 0.38461538 0.00000000 0.00000000 0.012 + 0.46153846 0.00000000 0.00000000 0.012 + 0.00000000 0.07692308 0.00000000 0.012 + 0.07692308 0.07692308 0.00000000 0.012 + 0.15384615 0.07692308 0.00000000 0.012 + 0.23076923 0.07692308 -0.00000000 0.012 + 0.30769231 0.07692308 0.00000000 0.012 + 0.38461538 0.07692308 -0.00000000 0.012 + 0.46153846 0.07692308 -0.00000000 0.012 + -0.46153846 0.07692308 -0.00000000 0.012 + -0.38461538 0.07692308 -0.00000000 0.012 + -0.30769231 0.07692308 -0.00000000 0.012 + -0.23076923 0.07692308 0.00000000 0.012 + -0.15384615 0.07692308 -0.00000000 0.012 + -0.07692308 0.07692308 0.00000000 0.012 + -0.00000000 0.15384615 -0.00000000 0.012 + 0.07692308 0.15384615 0.00000000 0.012 + 0.15384615 0.15384615 0.00000000 0.012 + 0.23076923 0.15384615 0.00000000 0.012 + 0.30769231 0.15384615 0.00000000 0.012 + 0.38461538 0.15384615 0.00000000 0.012 + 0.46153846 0.15384615 0.00000000 0.012 + -0.46153846 0.15384615 0.00000000 0.012 + -0.38461538 0.15384615 0.00000000 0.012 + -0.30769231 0.15384615 -0.00000000 0.012 + -0.23076923 0.15384615 0.00000000 0.012 + -0.15384615 0.15384615 -0.00000000 0.012 + -0.07692308 0.15384615 -0.00000000 0.012 + -0.00000000 0.23076923 0.00000000 0.012 + 0.07692308 0.23076923 -0.00000000 0.012 + 0.15384615 0.23076923 0.00000000 0.012 + 0.23076923 0.23076923 0.00000000 0.012 + 0.30769231 0.23076923 0.00000000 0.012 + 0.38461538 0.23076923 -0.00000000 0.012 + 0.46153846 0.23076923 0.00000000 0.012 + -0.46153846 0.23076923 0.00000000 0.012 + -0.38461538 0.23076923 -0.00000000 0.012 + -0.30769231 0.23076923 0.00000000 0.012 + -0.23076923 0.23076923 -0.00000000 0.012 + -0.15384615 0.23076923 0.00000000 0.012 + -0.07692308 0.23076923 0.00000000 0.012 + -0.00000000 0.30769231 0.00000000 0.012 + 0.07692308 0.30769231 0.00000000 0.012 + 0.15384615 0.30769231 0.00000000 0.012 + 0.23076923 0.30769231 0.00000000 0.012 + 0.30769231 0.30769231 0.00000000 0.012 + 0.38461538 0.30769231 0.00000000 0.012 + 0.46153846 0.30769231 0.00000000 0.012 + -0.46153846 0.30769231 0.00000000 0.012 + -0.38461538 0.30769231 0.00000000 0.012 + -0.30769231 0.30769231 0.00000000 0.012 + -0.23076923 0.30769231 0.00000000 0.012 + -0.15384615 0.30769231 0.00000000 0.012 + -0.07692308 0.30769231 0.00000000 0.012 + -0.00000000 0.38461538 0.00000000 0.012 + 0.07692308 0.38461538 -0.00000000 0.012 + 0.15384615 0.38461538 0.00000000 0.012 + 0.23076923 0.38461538 -0.00000000 0.012 + 0.30769231 0.38461538 0.00000000 0.012 + 0.38461538 0.38461538 0.00000000 0.012 + 0.46153846 0.38461538 0.00000000 0.012 + -0.46153846 0.38461538 0.00000000 0.012 + -0.38461538 0.38461538 0.00000000 0.012 + -0.30769231 0.38461538 0.00000000 0.012 + -0.23076923 0.38461538 -0.00000000 0.012 + -0.15384615 0.38461538 0.00000000 0.012 + -0.07692308 0.38461538 -0.00000000 0.012 + -0.00000000 0.46153846 0.00000000 0.012 + 0.07692308 0.46153846 0.00000000 0.012 + 0.15384615 0.46153846 0.00000000 0.012 + 0.23076923 0.46153846 0.00000000 0.012 + 0.30769231 0.46153846 0.00000000 0.012 + 0.38461538 0.46153846 0.00000000 0.012 + 0.46153846 0.46153846 0.00000000 0.012 + -0.46153846 0.46153846 -0.00000000 0.012 + -0.38461538 0.46153846 0.00000000 0.012 + -0.30769231 0.46153846 0.00000000 0.012 + -0.23076923 0.46153846 0.00000000 0.012 + -0.15384615 0.46153846 -0.00000000 0.012 + -0.07692308 0.46153846 0.00000000 0.012 + + position of ions in fractional coordinates (direct lattice) + 0.22222222 0.11111111 0.00000000 + 0.22222222 0.44444444 0.00000000 + 0.22222222 0.77777778 0.00000000 + 0.55555556 0.11111111 0.00000000 + 0.55555556 0.44444444 0.00000000 + 0.55555556 0.77777778 0.00000000 + 0.88888889 0.11111111 0.00000000 + 0.88888889 0.44444444 0.00000000 + 0.88888889 0.77777778 0.00000000 + 0.00000000 0.00000000 0.11363913 + 0.00000000 0.33333333 0.11363913 + 0.00000000 0.66666667 0.11363913 + 0.33333333 0.00000000 0.11363913 + 0.33333333 0.33333333 0.11363913 + 0.33333333 0.66666667 0.11363913 + 0.66666667 0.00000000 0.11363913 + 0.66666667 0.33333333 0.11363913 + 0.66666667 0.66666667 0.11363913 + 0.99895051 0.99818022 0.45372879 + 0.22362513 0.11191674 0.33981819 + 0.11102732 0.22228826 0.22677062 + 0.33498992 0.99812050 0.45391763 + 0.55653571 0.11239778 0.34065642 + 0.44567567 0.22218502 0.22674705 + 0.66855846 0.00126143 0.45357188 + 0.89104545 0.11247266 0.34064665 + 0.77879352 0.22317291 0.22754802 + 0.99899793 0.33490588 0.45384303 + 0.22353648 0.44547166 0.33979475 + 0.11237994 0.55566404 0.22719128 + 0.55729839 0.44553813 0.33960508 + 0.44569465 0.55710723 0.22675044 + 0.67191263 0.33469252 0.45370665 + 0.89013539 0.44509996 0.34024556 + 0.77783449 0.55570105 0.22708779 + 0.00190102 0.66802401 0.45345348 + 0.22410282 0.77899938 0.34022783 + 0.11240004 0.89035087 0.22718476 + 0.33490842 0.67099795 0.45382230 + 0.55654796 0.77803694 0.34060863 + 0.44494005 0.88928832 0.22752557 + 0.67196867 0.67126151 0.45359382 + 0.89016836 0.77891845 0.34018508 + 0.77880880 0.88924711 0.22752534 + 0.33577910 0.33499445 0.45633307 + 0.32727029 0.33218298 0.61691582 + 0.31897053 0.45701336 0.64306877 + 0.41707625 0.39333175 0.56522995 + 0.41155368 0.28108294 0.65087725 + 0.17504378 0.20606548 0.60598239 + + position of ions in cartesian coordinates (Angst): + 1.20286667 -0.60143333 -0.60143333 + 1.20286667 1.20286667 -2.40573333 + 1.20286667 3.00716667 -4.21003333 + 3.00716667 -2.40573333 -0.60143333 + 3.00716667 -0.60143333 -2.40573333 + 3.00716667 1.20286667 -4.21003333 + 4.81146667 -4.21003333 -0.60143333 + 4.81146667 -2.40573333 -2.40573333 + 4.81146667 -0.60143333 -4.21003333 + 1.20286667 1.20286667 1.20286667 + 1.20286667 3.00716667 -0.60143333 + 1.20286667 4.81146667 -2.40573333 + 3.00716667 -0.60143333 1.20286667 + 3.00716667 1.20286667 -0.60143333 + 3.00716667 3.00716667 -2.40573333 + 4.81146667 -2.40573333 1.20286667 + 4.81146667 -0.60143333 -0.60143333 + 4.81146667 1.20286667 -2.40573333 + 10.20992457 4.79853582 -0.60034439 + 4.80742556 2.99229876 2.99117099 + 3.00133990 3.00260442 1.19713596 + 6.61797115 8.39416375 -0.59802224 + 6.61830992 1.20176357 2.99743983 + 4.81250841 1.19037807 1.19744531 + 8.41988455 1.18903241 4.79421649 + 8.42887426 -0.60860232 2.99693110 + 6.62412026 -0.59893004 1.20057616 + 10.21139044 1.20925073 2.99110250 + 4.80669759 4.79802991 1.18542346 + 3.01311406 4.80426526 -0.60294119 + 6.61130984 2.98976229 1.18305607 + 4.81264706 3.00321164 -0.61541927 + 8.43946688 2.97713222 2.99081386 + 8.41970267 1.19255656 1.19220728 + 6.61405762 1.20133119 -0.60423693 + 4.81008120 8.40544827 1.18384400 + 4.81434728 6.60490075 -0.61534461 + 3.01315391 6.61571379 -2.41463648 + 6.61652088 6.62291411 1.17165027 + 6.61787036 4.80422959 -0.60610423 + 4.81676714 4.81356395 -2.40527761 + 8.43857596 4.79744890 1.16780532 + 8.41924096 2.99866406 -0.61535904 + 6.62396295 3.00614028 -2.40505688 + 6.64781026 4.82602430 3.01698010 + 8.30151641 6.55662694 4.73196182 + 8.53341880 7.55407518 4.33309560 + 8.24053380 5.85441512 3.85387633 + 9.11721474 6.18329070 5.36804196 + 7.36179945 6.58222239 5.29889314 + + + +-------------------------------------------------------------------------------------------------------- + + + k-point 1 : 0.0000 0.0000 0.0000 plane waves: 16943 + k-point 2 : 0.0769 0.0000 0.0000 plane waves: 16935 + k-point 3 : 0.1538 0.0000 0.0000 plane waves: 16955 + k-point 4 : 0.2308 0.0000 0.0000 plane waves: 16932 + k-point 5 : 0.3077 0.0000 0.0000 plane waves: 16886 + k-point 6 : 0.3846 0.0000 0.0000 plane waves: 16874 + k-point 7 : 0.4615 0.0000 0.0000 plane waves: 16856 + k-point 8 : 0.0000 0.0769 0.0000 plane waves: 16935 + k-point 9 : 0.0769 0.0769 0.0000 plane waves: 16959 + k-point 10 : 0.1538 0.0769 0.0000 plane waves: 16930 + k-point 11 : 0.2308 0.0769-0.0000 plane waves: 16910 + k-point 12 : 0.3077 0.0769 0.0000 plane waves: 16914 + k-point 13 : 0.3846 0.0769-0.0000 plane waves: 16868 + k-point 14 : 0.4615 0.0769-0.0000 plane waves: 16856 + k-point 15 : -0.4615 0.0769-0.0000 plane waves: 16868 + k-point 16 : -0.3846 0.0769-0.0000 plane waves: 16914 + k-point 17 : -0.3077 0.0769-0.0000 plane waves: 16910 + k-point 18 : -0.2308 0.0769 0.0000 plane waves: 16930 + k-point 19 : -0.1538 0.0769-0.0000 plane waves: 16959 + k-point 20 : -0.0769 0.0769 0.0000 plane waves: 16935 + k-point 21 : -0.0000 0.1538-0.0000 plane waves: 16955 + k-point 22 : 0.0769 0.1538 0.0000 plane waves: 16930 + k-point 23 : 0.1538 0.1538 0.0000 plane waves: 16933 + k-point 24 : 0.2308 0.1538 0.0000 plane waves: 16913 + k-point 25 : 0.3077 0.1538 0.0000 plane waves: 16897 + k-point 26 : 0.3846 0.1538 0.0000 plane waves: 16850 + k-point 27 : 0.4615 0.1538 0.0000 plane waves: 16850 + k-point 28 : -0.4615 0.1538 0.0000 plane waves: 16897 + k-point 29 : -0.3846 0.1538 0.0000 plane waves: 16913 + k-point 30 : -0.3077 0.1538-0.0000 plane waves: 16933 + k-point 31 : -0.2308 0.1538 0.0000 plane waves: 16930 + k-point 32 : -0.1538 0.1538-0.0000 plane waves: 16955 + k-point 33 : -0.0769 0.1538-0.0000 plane waves: 16959 + k-point 34 : -0.0000 0.2308 0.0000 plane waves: 16932 + k-point 35 : 0.0769 0.2308-0.0000 plane waves: 16910 + k-point 36 : 0.1538 0.2308 0.0000 plane waves: 16913 + k-point 37 : 0.2308 0.2308 0.0000 plane waves: 16885 + k-point 38 : 0.3077 0.2308 0.0000 plane waves: 16884 + k-point 39 : 0.3846 0.2308-0.0000 plane waves: 16872 + k-point 40 : 0.4615 0.2308 0.0000 plane waves: 16884 + k-point 41 : -0.4615 0.2308 0.0000 plane waves: 16885 + k-point 42 : -0.3846 0.2308-0.0000 plane waves: 16913 + k-point 43 : -0.3077 0.2308 0.0000 plane waves: 16910 + k-point 44 : -0.2308 0.2308-0.0000 plane waves: 16932 + k-point 45 : -0.1538 0.2308 0.0000 plane waves: 16930 + k-point 46 : -0.0769 0.2308 0.0000 plane waves: 16930 + k-point 47 : -0.0000 0.3077 0.0000 plane waves: 16886 + k-point 48 : 0.0769 0.3077 0.0000 plane waves: 16914 + k-point 49 : 0.1538 0.3077 0.0000 plane waves: 16897 + k-point 50 : 0.2308 0.3077 0.0000 plane waves: 16884 + k-point 51 : 0.3077 0.3077 0.0000 plane waves: 16896 + k-point 52 : 0.3846 0.3077 0.0000 plane waves: 16896 + k-point 53 : 0.4615 0.3077 0.0000 plane waves: 16884 + k-point 54 : -0.4615 0.3077 0.0000 plane waves: 16897 + k-point 55 : -0.3846 0.3077 0.0000 plane waves: 16914 + k-point 56 : -0.3077 0.3077 0.0000 plane waves: 16886 + k-point 57 : -0.2308 0.3077 0.0000 plane waves: 16910 + k-point 58 : -0.1538 0.3077 0.0000 plane waves: 16933 + k-point 59 : -0.0769 0.3077 0.0000 plane waves: 16910 + k-point 60 : -0.0000 0.3846 0.0000 plane waves: 16874 + k-point 61 : 0.0769 0.3846-0.0000 plane waves: 16868 + k-point 62 : 0.1538 0.3846 0.0000 plane waves: 16850 + k-point 63 : 0.2308 0.3846-0.0000 plane waves: 16872 + k-point 64 : 0.3077 0.3846 0.0000 plane waves: 16896 + k-point 65 : 0.3846 0.3846 0.0000 plane waves: 16872 + k-point 66 : 0.4615 0.3846 0.0000 plane waves: 16850 + k-point 67 : -0.4615 0.3846 0.0000 plane waves: 16868 + k-point 68 : -0.3846 0.3846 0.0000 plane waves: 16874 + k-point 69 : -0.3077 0.3846 0.0000 plane waves: 16914 + k-point 70 : -0.2308 0.3846-0.0000 plane waves: 16913 + k-point 71 : -0.1538 0.3846 0.0000 plane waves: 16913 + k-point 72 : -0.0769 0.3846-0.0000 plane waves: 16914 + k-point 73 : -0.0000 0.4615 0.0000 plane waves: 16856 + k-point 74 : 0.0769 0.4615 0.0000 plane waves: 16856 + k-point 75 : 0.1538 0.4615 0.0000 plane waves: 16850 + k-point 76 : 0.2308 0.4615 0.0000 plane waves: 16884 + k-point 77 : 0.3077 0.4615 0.0000 plane waves: 16884 + k-point 78 : 0.3846 0.4615 0.0000 plane waves: 16850 + k-point 79 : 0.4615 0.4615 0.0000 plane waves: 16856 + k-point 80 : -0.4615 0.4615-0.0000 plane waves: 16856 + k-point 81 : -0.3846 0.4615 0.0000 plane waves: 16868 + k-point 82 : -0.3077 0.4615 0.0000 plane waves: 16897 + k-point 83 : -0.2308 0.4615 0.0000 plane waves: 16885 + k-point 84 : -0.1538 0.4615-0.0000 plane waves: 16897 + k-point 85 : -0.0769 0.4615 0.0000 plane waves: 16868 + + maximum and minimum number of plane-waves per node : 4265 4197 + + maximum number of plane-waves: 16959 + maximum index in each direction: + IXMAX= 12 IYMAX= 12 IZMAX= 29 + IXMIN= -12 IYMIN= -12 IZMIN= -29 + + NGX is ok and might be reduce to 50 + NGY is ok and might be reduce to 50 + NGZ is ok and might be reduce to 118 + + real space projection operators: + total allocation : 32098.05 KBytes + max/ min on nodes : 8333.11 7714.81 + + + parallel 3D FFT for wavefunctions: + minimum data exchange during FFTs selected (reduces bandwidth) + parallel 3D FFT for charge: + minimum data exchange during FFTs selected (reduces bandwidth) + + + total amount of memory used by VASP on root node 292243. kBytes +======================================================================== + + base : 30000. kBytes + nonlr-proj: 15881. kBytes + fftplans : 5374. kBytes + grid : 10087. kBytes + one-center: 202. kBytes + wavefun : 230699. kBytes + + INWAV: cpu time 0.0000: real time 0.0000 + Broyden mixing: mesh for mixing (old mesh) + NGX = 25 NGY = 25 NGZ = 59 + (NGX =100 NGY =100 NGZ =240) + gives a total of 36875 points + + initial charge density was supplied: + charge density of overlapping atoms calculated + number of electron 501.0000000 magnetization + keeping initial charge density in first step + + +-------------------------------------------------------------------------------------------------------- + + + Maximum index for non-local projection operator 1592 + Maximum index for augmentation-charges 1054 (set IRDMAX) + + +-------------------------------------------------------------------------------------------------------- + + + First call to EWALD: gamma= 0.182 + Maximum number of real-space cells 4x 4x 2 + Maximum number of reciprocal cells 2x 2x 5 + + FEWALD executed in parallel + FEWALD: cpu time 0.0028: real time 0.0028 + + +----------------------------------------- Iteration 9( 1) --------------------------------------- + + + POTLOK: cpu time 3.2004: real time 3.3481 + SETDIJ: cpu time 0.0100: real time 0.0100 + EDDAV: cpu time 119.9894: real time 120.1158 + DOS: cpu time 0.0132: real time 0.0133 + CHARGE: cpu time 3.9095: real time 3.9384 + MIXING: cpu time 0.0013: real time 0.0013 + -------------------------------------------- + LOOP: cpu time 127.1271: real time 127.4319 + + eigenvalue-minimisations : 51680 + total energy-change (2. order) :-0.1622992E-02 (-0.1839645E+00) + number of electron 500.9999941 magnetization + augmentation part 320.3924722 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 183, + dipolmoment -0.088541 -0.088541 -0.088541 electrons x Angstroem + Tr[quadrupol] -4867.622455 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.002287 eV + added-field ion interaction -7.191567 eV (added to PSCEN) + + + free energy = -0.857844890403E+02 energy without entropy= -0.857660908366E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 2) --------------------------------------- + + + POTLOK: cpu time 3.1335: real time 3.1394 + SETDIJ: cpu time 0.0104: real time 0.0104 + EDDIAG: cpu time 17.6015: real time 17.6073 + RMM-DIIS: cpu time 49.7493: real time 49.8878 + ORTHCH: cpu time 2.7022: real time 2.7020 + DOS: cpu time 0.0131: real time 0.0130 + CHARGE: cpu time 3.9485: real time 3.9809 + MIXING: cpu time 0.0014: real time 0.0014 + -------------------------------------------- + LOOP: cpu time 77.1632: real time 77.3474 + + eigenvalue-minimisations : 51922 + total energy-change (2. order) :-0.4285820E-03 (-0.6295345E-03) + number of electron 500.9999941 magnetization + augmentation part 320.3989911 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 183, + dipolmoment -0.087643 -0.087643 -0.087643 electrons x Angstroem + Tr[quadrupol] -4867.634552 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.002241 eV + added-field ion interaction -7.118573 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.5315 + 0.5315 + + free energy = -0.857849176223E+02 energy without entropy= -0.857663005616E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 3) --------------------------------------- + + + POTLOK: cpu time 3.3926: real time 3.3959 + SETDIJ: cpu time 0.0101: real time 0.0101 + EDDIAG: cpu time 17.3722: real time 17.3711 + RMM-DIIS: cpu time 50.1795: real time 50.3738 + ORTHCH: cpu time 2.7180: real time 2.7173 + DOS: cpu time 0.0134: real time 0.0134 + CHARGE: cpu time 3.9929: real time 3.9925 + MIXING: cpu time 0.0015: real time 0.0015 + -------------------------------------------- + LOOP: cpu time 77.6831: real time 77.8816 + + eigenvalue-minimisations : 52707 + total energy-change (2. order) : 0.1097786E-03 (-0.6228761E-04) + number of electron 500.9999941 magnetization + augmentation part 320.3991374 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 183, + dipolmoment -0.087842 -0.087842 -0.087842 electrons x Angstroem + Tr[quadrupol] -4867.617977 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.002251 eV + added-field ion interaction -7.134795 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 1.0482 + 1.7378 0.3586 + + free energy = -0.857848078437E+02 energy without entropy= -0.857664198253E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 4) --------------------------------------- + + + POTLOK: cpu time 3.3749: real time 3.3909 + SETDIJ: cpu time 0.0100: real time 0.0102 + EDDIAG: cpu time 17.7593: real time 17.8115 + RMM-DIIS: cpu time 49.6917: real time 49.6985 + ORTHCH: cpu time 2.6005: real time 2.5995 + DOS: cpu time 0.0131: real time 0.0131 + CHARGE: cpu time 3.9415: real time 3.9399 + MIXING: cpu time 0.0015: real time 0.0015 + -------------------------------------------- + LOOP: cpu time 77.3950: real time 77.4722 + + eigenvalue-minimisations : 52028 + total energy-change (2. order) : 0.4319361E-04 (-0.1820591E-04) + number of electron 500.9999941 magnetization + augmentation part 320.3947565 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 183, + dipolmoment -0.088432 -0.088432 -0.088432 electrons x Angstroem + Tr[quadrupol] -4867.624452 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.002281 eV + added-field ion interaction -7.182709 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.9829 + 2.1462 0.4989 0.3036 + + free energy = -0.857847646501E+02 energy without entropy= -0.857662618075E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 5) --------------------------------------- + + + POTLOK: cpu time 3.2279: real time 3.2326 + SETDIJ: cpu time 0.0100: real time 0.0100 + EDDIAG: cpu time 17.4814: real time 17.5712 + RMM-DIIS: cpu time 49.7677: real time 49.8106 + ORTHCH: cpu time 2.5973: real time 2.5966 + DOS: cpu time 0.0133: real time 0.0132 + CHARGE: cpu time 3.8983: real time 3.8967 + MIXING: cpu time 0.0016: real time 0.0016 + -------------------------------------------- + LOOP: cpu time 76.9995: real time 77.1381 + + eigenvalue-minimisations : 51798 + total energy-change (2. order) :-0.4713215E-04 (-0.1248515E-04) + number of electron 500.9999941 magnetization + augmentation part 320.3939394 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 183, + dipolmoment -0.086471 -0.086471 -0.086471 electrons x Angstroem + Tr[quadrupol] -4867.623456 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.002181 eV + added-field ion interaction -7.023410 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.8957 + 2.4187 0.6152 0.3604 0.1887 + + free energy = -0.857848117822E+02 energy without entropy= -0.857663775529E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 6) --------------------------------------- + + + POTLOK: cpu time 3.0972: real time 3.0960 + SETDIJ: cpu time 0.0101: real time 0.0101 + EDDIAG: cpu time 17.7001: real time 17.7307 + RMM-DIIS: cpu time 49.8396: real time 49.9171 + ORTHCH: cpu time 2.6261: real time 2.6248 + DOS: cpu time 0.0134: real time 0.0134 + CHARGE: cpu time 3.9786: real time 3.9770 + MIXING: cpu time 0.0016: real time 0.0016 + -------------------------------------------- + LOOP: cpu time 77.2690: real time 77.3763 + + eigenvalue-minimisations : 52010 + total energy-change (2. order) : 0.8340139E-04 (-0.6081892E-05) + number of electron 500.9999941 magnetization + augmentation part 320.3979137 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 183, + dipolmoment -0.088174 -0.088174 -0.088174 electrons x Angstroem + Tr[quadrupol] -4867.616651 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.002268 eV + added-field ion interaction -7.161756 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.8512 + 2.3695 1.0221 0.4084 0.2992 0.1569 + + free energy = -0.857847283808E+02 energy without entropy= -0.857662362713E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 7) --------------------------------------- + + + POTLOK: cpu time 3.1750: real time 3.1737 + SETDIJ: cpu time 0.0103: real time 0.0103 + EDDIAG: cpu time 17.3926: real time 17.4104 + RMM-DIIS: cpu time 49.6826: real time 49.7617 + ORTHCH: cpu time 2.6995: real time 2.6986 + DOS: cpu time 0.0128: real time 0.0129 + CHARGE: cpu time 3.9543: real time 3.9531 + MIXING: cpu time 0.0017: real time 0.0017 + -------------------------------------------- + LOOP: cpu time 76.9316: real time 77.0300 + + eigenvalue-minimisations : 51685 + total energy-change (2. order) : 0.1848085E-04 (-0.2057473E-05) + number of electron 500.9999941 magnetization + augmentation part 320.3981886 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 183, + dipolmoment -0.087313 -0.087313 -0.087313 electrons x Angstroem + Tr[quadrupol] -4867.617505 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.002224 eV + added-field ion interaction -7.091810 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.8081 + 2.3490 1.1085 0.6139 0.3485 0.2892 0.1396 + + free energy = -0.857847099000E+02 energy without entropy= -0.857662542655E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 8) --------------------------------------- + + + POTLOK: cpu time 3.2400: real time 3.2386 + SETDIJ: cpu time 0.0103: real time 0.0103 + EDDIAG: cpu time 18.0034: real time 18.1045 + RMM-DIIS: cpu time 49.8232: real time 49.8792 + ORTHCH: cpu time 2.5769: real time 2.5759 + DOS: cpu time 0.0133: real time 0.0133 + CHARGE: cpu time 3.8895: real time 3.8881 + MIXING: cpu time 0.0018: real time 0.0017 + -------------------------------------------- + LOOP: cpu time 77.5608: real time 77.7173 + + eigenvalue-minimisations : 51680 + total energy-change (2. order) : 0.3297864E-05 (-0.3872327E-06) + number of electron 500.9999941 magnetization + augmentation part 320.3972576 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 183, + dipolmoment -0.087518 -0.087518 -0.087518 electrons x Angstroem + Tr[quadrupol] -4867.617765 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.002234 eV + added-field ion interaction -7.108419 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.8127 + 2.3222 1.3761 0.8007 0.4280 0.3436 0.2791 0.1393 + + free energy = -0.857847066021E+02 energy without entropy= -0.857662304606E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 9) --------------------------------------- + + + POTLOK: cpu time 3.0096: real time 3.0085 + SETDIJ: cpu time 0.0101: real time 0.0101 + EDDIAG: cpu time 17.7104: real time 17.7376 + RMM-DIIS: cpu time 49.4183: real time 49.4776 + ORTHCH: cpu time 2.5741: real time 2.5732 + DOS: cpu time 0.0125: real time 0.0125 + CHARGE: cpu time 3.8935: real time 3.8927 + MIXING: cpu time 0.0018: real time 0.0018 + -------------------------------------------- + LOOP: cpu time 76.6325: real time 76.7206 + + eigenvalue-minimisations : 51128 + total energy-change (2. order) : 0.2082670E-06 (-0.1335488E-06) + number of electron 500.9999941 magnetization + augmentation part 320.3972113 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 183, + dipolmoment -0.087512 -0.087512 -0.087512 electrons x Angstroem + Tr[quadrupol] -4867.617208 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.002234 eV + added-field ion interaction -7.107988 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.8659 + 2.4030 1.7261 0.9591 0.6605 0.4090 0.3471 0.2824 0.1396 + + free energy = -0.857847063939E+02 energy without entropy= -0.857662323635E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 10) --------------------------------------- + + + POTLOK: cpu time 3.0479: real time 3.0522 + SETDIJ: cpu time 0.0117: real time 0.0138 + EDDIAG: cpu time 17.6099: real time 17.6181 + RMM-DIIS: cpu time 31.6948: real time 31.7093 + ORTHCH: cpu time 2.7234: real time 2.7221 + DOS: cpu time 0.0131: real time 0.0131 + CHARGE: cpu time 3.9413: real time 3.9463 + MIXING: cpu time 0.0019: real time 0.0019 + -------------------------------------------- + LOOP: cpu time 59.0461: real time 59.0818 + + eigenvalue-minimisations : 30901 + total energy-change (2. order) :-0.3038876E-06 (-0.1760408E-07) + number of electron 500.9999941 magnetization + augmentation part 320.3974291 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 183, + dipolmoment -0.087463 -0.087463 -0.087463 electrons x Angstroem + Tr[quadrupol] -4867.616643 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.002232 eV + added-field ion interaction -7.104001 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.9208 + 2.4850 1.7387 1.3256 0.9637 0.6040 0.1397 0.2831 0.3457 0.4015 + + free energy = -0.857847066977E+02 energy without entropy= -0.857662319929E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 11) --------------------------------------- + + + POTLOK: cpu time 3.0487: real time 3.0565 + SETDIJ: cpu time 0.0102: real time 0.0102 + EDDIAG: cpu time 17.6713: real time 17.7533 + RMM-DIIS: cpu time 30.4391: real time 30.5171 + ORTHCH: cpu time 2.7236: real time 2.7226 + DOS: cpu time 0.0129: real time 0.0128 + -------------------------------------------- + LOOP: cpu time 53.9085: real time 54.0795 + + eigenvalue-minimisations : 29427 + total energy-change (2. order) :-0.4687172E-07 (-0.7284230E-08) + number of electron 500.9999941 magnetization + augmentation part 320.3974291 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 183, + dipolmoment -0.087445 -0.087445 -0.087445 electrons x Angstroem + Tr[quadrupol] -4867.616003 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.002231 eV + added-field ion interaction -7.102509 eV (added to PSCEN) + + + free energy = -0.857847067446E+02 energy without entropy= -0.857662320269E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + + average (electrostatic) potential at core + the test charge radii are 1.0053 1.1806 0.6991 0.5201 + (the norm of the test charge is 1.0000) + 1 -42.9739 2 -42.9738 3 -42.9763 4 -42.9652 5 -42.9732 + 6 -42.9652 7 -42.9651 8 -42.9765 9 -42.9763 10 -43.2423 + 11 -43.2422 12 -43.2605 13 -43.2425 14 -43.2459 15 -43.2423 + 16 -43.2530 17 -43.2423 18 -43.2422 19 -42.9395 20 -43.1822 + 21 -43.2384 22 -42.9320 23 -43.2368 24 -43.2390 25 -42.9799 + 26 -43.2355 27 -43.2543 28 -42.9341 29 -43.1814 30 -43.2595 + 31 -43.1782 32 -43.2390 33 -42.9386 34 -43.2205 35 -43.2592 + 36 -42.9802 37 -43.2191 38 -43.2595 39 -42.9336 40 -43.2371 + 41 -43.2549 42 -42.9428 43 -43.2211 44 -43.2546 45 -53.9185 + 46 -53.7718 47 -37.3664 48 -37.6318 49 -37.3831 50 -37.3756 + + + + E-fermi : 0.3121 XC(G=0): -8.8804 alpha+bet : -5.8352 + + +-------------------------------------------------------------------------------------------------------- + + + soft charge-density along one line, spin component 1 + 0 1 2 3 4 5 6 7 8 9 + total charge-density along one line + + pseudopotential strength for first ion, spin component: 1 + -8.856 0.013 -0.016 0.013 0.000 0.836 -0.006 0.008 + 0.013 -8.857 0.008 0.013 -0.014 -0.006 0.836 -0.004 + -0.016 0.008 -8.846 0.008 -0.000 0.008 -0.004 0.831 + 0.013 0.013 0.008 -8.857 0.014 -0.006 -0.006 -0.004 + 0.000 -0.014 -0.000 0.014 -8.846 -0.000 0.007 0.000 + 0.836 -0.006 0.008 -0.006 -0.000 1.187 0.003 -0.003 + -0.006 0.836 -0.004 -0.006 0.007 0.003 1.187 0.002 + 0.008 -0.004 0.831 -0.004 0.000 -0.003 0.002 1.189 + -0.006 -0.006 -0.004 0.836 -0.007 0.003 0.003 0.002 + -0.000 0.007 0.000 -0.007 0.831 0.000 -0.003 -0.000 + -0.004 -0.004 0.000 -0.004 -0.000 0.001 0.001 -0.000 + 0.000 0.000 -0.000 0.000 0.000 -0.000 -0.000 0.000 + -0.004 -0.003 0.003 0.000 0.005 0.003 0.002 -0.002 + 0.000 -0.004 -0.005 -0.004 -0.000 -0.000 0.003 0.003 + -0.004 0.000 0.003 -0.003 -0.005 0.003 -0.000 -0.002 + 0.002 0.002 -0.001 -0.000 -0.002 -0.001 -0.001 0.001 + -0.000 0.002 0.002 0.002 0.000 0.000 -0.001 -0.001 + 0.002 -0.000 -0.001 0.002 0.002 -0.001 0.000 0.001 + total augmentation occupancy for first ion, spin component: 1 + 1.917 0.003 -0.002 0.003 0.000 -0.024 -0.008 0.012 -0.008 -0.000 0.007 0.021 0.015 0.007 0.015 -0.003 + 0.003 1.916 0.001 0.003 -0.002 -0.008 -0.024 -0.006 -0.008 0.011 0.007 0.021 0.015 0.014 0.009 -0.003 + -0.002 0.001 1.921 0.001 -0.000 0.012 -0.006 -0.049 -0.006 0.000 -0.002 -0.000 0.001 -0.001 0.001 0.001 + 0.003 0.003 0.001 1.916 0.002 -0.008 -0.008 -0.006 -0.024 -0.011 0.007 0.021 0.009 0.014 0.015 -0.000 + 0.000 -0.002 -0.000 0.002 1.921 -0.000 0.011 0.000 -0.011 -0.049 -0.000 -0.000 0.002 -0.000 -0.002 0.002 + -0.024 -0.008 0.012 -0.008 -0.000 0.061 0.001 0.008 0.001 0.000 -0.049 0.008 0.023 0.001 0.023 -0.001 + -0.008 -0.024 -0.006 -0.008 0.011 0.001 0.061 -0.004 0.001 0.006 -0.049 0.008 0.023 0.023 0.000 -0.001 + 0.012 -0.006 -0.049 -0.006 0.000 0.008 -0.004 0.051 -0.004 -0.000 0.001 0.000 -0.010 0.019 -0.010 0.001 + -0.008 -0.008 -0.006 -0.024 -0.011 0.001 0.001 -0.004 0.061 -0.006 -0.049 0.008 0.000 0.023 0.023 0.000 + -0.000 0.011 0.000 -0.011 -0.049 0.000 0.006 -0.000 -0.006 0.051 0.000 0.000 -0.016 0.000 0.016 0.001 + 0.007 0.007 -0.002 0.007 -0.000 -0.049 -0.049 0.001 -0.049 0.000 1.258 -0.282 0.039 0.037 0.039 -0.007 + 0.021 0.021 -0.000 0.021 -0.000 0.008 0.008 0.000 0.008 0.000 -0.282 0.110 -0.028 -0.028 -0.028 0.003 + 0.015 0.015 0.001 0.009 0.002 0.023 0.023 -0.010 0.000 -0.016 0.039 -0.028 0.149 -0.023 -0.023 -0.009 + 0.007 0.014 -0.001 0.014 -0.000 0.001 0.023 0.019 0.023 0.000 0.037 -0.028 -0.023 0.151 -0.023 0.001 + 0.015 0.009 0.001 0.015 -0.002 0.023 0.000 -0.010 0.023 0.016 0.039 -0.028 -0.023 -0.023 0.149 0.001 + -0.003 -0.003 0.001 -0.000 0.002 -0.001 -0.001 0.001 0.000 0.001 -0.007 0.003 -0.009 0.001 0.001 0.001 + -0.000 -0.003 -0.002 -0.003 -0.000 0.000 -0.001 -0.002 -0.001 -0.000 -0.007 0.003 0.001 -0.009 0.001 -0.000 + -0.003 -0.000 0.001 -0.003 -0.002 -0.001 0.000 0.001 -0.001 -0.001 -0.007 0.003 0.001 0.001 -0.009 -0.000 + + +------------------------ aborting loop because EDIFF is reached ---------------------------------------- + + + CHARGE: cpu time 4.1197: real time 4.1598 + FORLOC: cpu time 0.0218: real time 0.0227 + FORNL : cpu time 24.1142: real time 24.1250 + STRESS: cpu time 72.2808: real time 72.5741 + FORCOR: cpu time 3.1950: real time 3.1946 + FORHAR: cpu time 0.0371: real time 0.0371 + MIXING: cpu time 0.0011: real time 0.0020 + OFIELD: cpu time 0.0001: real time 0.0001 + + FORCE on cell =-STRESS in cart. coord. units (eV): + Direction XX YY ZZ XY YZ ZX + -------------------------------------------------------------------------------------- + Alpha Z 2831.17846 2831.17846 2831.17846 + Ewald 25709.00955 25705.51645 25705.27891-84183.36750-84181.39645-84182.66133 + Hartree 45480.70139 45479.22634 45479.32414-81771.17830-81770.04545-81770.41336 + E(xc) -2831.21804 -2831.23420 -2831.24469 -0.08097 -0.09560 -0.08082 + Local -75723.18808-75718.47744-75718.36383165946.98596165943.92174165945.46677 + n-local -1680.87690 -1680.81437 -1680.80699 -2.64998 -2.57117 -2.61618 + augment 2521.71302 2521.73257 2521.74926 4.64286 4.62437 4.63061 + Kinetic 3680.63736 3680.90536 3680.95480 9.00301 9.05195 9.08017 + Fock 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + ------------------------------------------------------------------------------------- + Total -12.04322 -11.96682 -11.92995 3.35508 3.48939 3.40587 + in kB -20.73874 -20.60717 -20.54368 5.77754 6.00881 5.86500 + external pressure = -20.63 kB Pullay stress = 0.00 kB + + + VOLUME and BASIS-vectors are now : + ----------------------------------------------------------------------------- + energy-cutoff : 400.00 + volume of cell : 930.40 + direct lattice vectors reciprocal lattice vectors + 5.412900000 -5.412900000 -0.000000000 0.123162568 -0.061581284 -0.061581284 + 0.000000000 5.412900000 -5.412900000 0.061581284 0.061581284 -0.123162568 + 10.584969359 10.584969359 10.584969359 0.031491195 0.031491195 0.031491195 + + length of vectors + 7.654996592 7.654996592 18.333704726 0.150842724 0.150842724 0.054544350 + + + FORCES acting on ions + electron-ion (+dipol) ewald-force non-local-force convergence-correction + ----------------------------------------------------------------------------------------------- + 0.191E+04 0.191E+04 0.191E+04 -.191E+04 -.191E+04 -.191E+04 -.396E+00 -.396E+00 -.216E+00 0.427E-03 0.430E-03 0.372E-03 + 0.191E+04 0.191E+04 0.191E+04 -.191E+04 -.191E+04 -.191E+04 -.394E+00 -.213E+00 -.395E+00 0.415E-03 0.382E-03 0.417E-03 + 0.191E+04 0.191E+04 0.191E+04 -.191E+04 -.191E+04 -.191E+04 -.332E+00 -.412E+00 -.410E+00 0.367E-03 0.352E-03 0.373E-03 + 0.191E+04 0.192E+04 0.191E+04 -.191E+04 -.191E+04 -.191E+04 -.404E+00 -.351E+00 -.403E+00 0.336E-03 0.418E-03 0.344E-03 + 0.191E+04 0.191E+04 0.191E+04 -.191E+04 -.191E+04 -.191E+04 -.207E+00 -.391E+00 -.391E+00 0.367E-03 0.436E-03 0.437E-03 + 0.191E+04 0.191E+04 0.192E+04 -.191E+04 -.191E+04 -.191E+04 -.403E+00 -.401E+00 -.351E+00 0.316E-03 0.346E-03 0.417E-03 + 0.192E+04 0.191E+04 0.191E+04 -.191E+04 -.191E+04 -.191E+04 -.355E+00 -.408E+00 -.407E+00 0.419E-03 0.336E-03 0.317E-03 + 0.191E+04 0.191E+04 0.191E+04 -.191E+04 -.191E+04 -.191E+04 -.409E+00 -.406E+00 -.331E+00 0.383E-03 0.351E-03 0.366E-03 + 0.191E+04 0.191E+04 0.191E+04 -.191E+04 -.191E+04 -.191E+04 -.410E+00 -.331E+00 -.406E+00 0.376E-03 0.357E-03 0.363E-03 + 0.972E+03 0.971E+03 0.969E+03 -.971E+03 -.971E+03 -.968E+03 -.343E+00 -.396E+00 -.365E+00 0.437E-03 0.329E-03 0.342E-03 + 0.971E+03 0.969E+03 0.971E+03 -.971E+03 -.968E+03 -.971E+03 -.344E+00 -.364E+00 -.393E+00 0.417E-03 0.342E-03 0.323E-03 + 0.969E+03 0.969E+03 0.969E+03 -.969E+03 -.969E+03 -.969E+03 -.585E+00 -.588E+00 -.589E+00 0.361E-03 0.368E-03 0.371E-03 + 0.971E+03 0.972E+03 0.969E+03 -.971E+03 -.971E+03 -.968E+03 -.396E+00 -.339E+00 -.362E+00 0.353E-03 0.454E-03 0.338E-03 + 0.971E+03 0.971E+03 0.971E+03 -.971E+03 -.971E+03 -.971E+03 -.419E+00 -.419E+00 -.420E+00 0.360E-03 0.324E-03 0.347E-03 + 0.971E+03 0.969E+03 0.972E+03 -.971E+03 -.968E+03 -.971E+03 -.393E+00 -.360E+00 -.338E+00 0.330E-03 0.340E-03 0.431E-03 + 0.970E+03 0.970E+03 0.970E+03 -.969E+03 -.969E+03 -.969E+03 -.451E+00 -.454E+00 -.455E+00 0.399E-03 0.414E-03 0.396E-03 + 0.969E+03 0.972E+03 0.971E+03 -.968E+03 -.971E+03 -.971E+03 -.363E+00 -.342E+00 -.392E+00 0.345E-03 0.464E-03 0.355E-03 + 0.969E+03 0.971E+03 0.972E+03 -.968E+03 -.971E+03 -.971E+03 -.361E+00 -.391E+00 -.339E+00 0.347E-03 0.339E-03 0.459E-03 + -.191E+04 -.188E+04 -.186E+04 0.191E+04 0.188E+04 0.186E+04 0.494E-01 0.117E+00 0.558E+00 0.191E-03 -.317E-03 -.710E-03 + -.978E+03 -.978E+03 -.942E+03 0.979E+03 0.978E+03 0.942E+03 -.678E+00 -.678E+00 0.283E+00 -.142E-03 -.819E-04 -.372E-03 + 0.410E+01 0.890E+01 0.910E+01 -.405E+01 -.881E+01 -.901E+01 -.511E-01 -.920E-01 -.898E-01 0.254E-03 -.491E-04 0.199E-04 + -.189E+04 -.191E+04 -.186E+04 0.189E+04 0.191E+04 0.186E+04 0.117E+00 0.180E-01 0.578E+00 -.295E-03 0.375E-05 -.362E-03 + -.946E+03 -.966E+03 -.946E+03 0.945E+03 0.965E+03 0.946E+03 0.362E+00 0.829E+00 0.353E+00 -.383E-03 0.118E-04 -.526E-03 + 0.909E+01 0.417E+01 0.899E+01 -.899E+01 -.411E+01 -.890E+01 -.923E-01 -.532E-01 -.953E-01 -.189E-04 0.243E-03 -.649E-04 + -.189E+04 -.189E+04 -.189E+04 0.189E+04 0.189E+04 0.189E+04 0.490E+00 0.506E+00 0.502E+00 -.291E-03 -.338E-03 -.407E-03 + -.965E+03 -.945E+03 -.945E+03 0.964E+03 0.945E+03 0.945E+03 0.819E+00 0.359E+00 0.358E+00 0.937E-04 -.566E-03 -.454E-03 + 0.735E+01 0.736E+01 0.666E+01 -.734E+01 -.734E+01 -.670E+01 -.127E-01 -.155E-01 0.466E-01 0.231E-03 0.149E-03 0.449E-04 + -.191E+04 -.186E+04 -.188E+04 0.191E+04 0.186E+04 0.188E+04 0.300E-01 0.572E+00 0.111E+00 0.333E-03 -.847E-03 -.266E-03 + -.978E+03 -.942E+03 -.978E+03 0.979E+03 0.942E+03 0.978E+03 -.686E+00 0.284E+00 -.682E+00 0.552E-04 -.382E-03 0.113E-03 + 0.827E+01 0.660E+01 0.842E+01 -.803E+01 -.666E+01 -.819E+01 -.243E+00 0.604E-01 -.240E+00 0.232E-03 0.122E-03 0.224E-03 + -.942E+03 -.977E+03 -.977E+03 0.942E+03 0.978E+03 0.978E+03 0.275E+00 -.708E+00 -.702E+00 -.348E-03 -.222E-03 -.304E-03 + 0.912E+01 0.888E+01 0.413E+01 -.903E+01 -.878E+01 -.408E+01 -.905E-01 -.934E-01 -.490E-01 0.264E-04 -.875E-04 0.264E-03 + -.186E+04 -.191E+04 -.189E+04 0.186E+04 0.191E+04 0.189E+04 0.585E+00 0.819E-01 0.116E+00 -.295E-03 -.178E-03 -.378E-03 + -.947E+03 -.947E+03 -.948E+03 0.946E+03 0.946E+03 0.947E+03 0.455E+00 0.465E+00 0.405E+00 -.180E-03 -.107E-03 -.202E-03 + 0.689E+01 0.879E+01 0.869E+01 -.694E+01 -.854E+01 -.844E+01 0.521E-01 -.251E+00 -.250E+00 0.897E-04 0.226E-03 0.269E-03 + -.189E+04 -.189E+04 -.189E+04 0.189E+04 0.189E+04 0.189E+04 0.341E+00 0.337E+00 0.342E+00 -.324E-03 -.236E-03 -.338E-03 + -.948E+03 -.947E+03 -.947E+03 0.948E+03 0.946E+03 0.946E+03 0.401E+00 0.458E+00 0.461E+00 -.241E-03 -.724E-04 -.170E-03 + 0.839E+01 0.863E+01 0.667E+01 -.816E+01 -.839E+01 -.673E+01 -.239E+00 -.235E+00 0.640E-01 0.243E-03 0.235E-03 0.104E-03 + -.189E+04 -.186E+04 -.191E+04 0.189E+04 0.186E+04 0.191E+04 0.140E+00 0.579E+00 0.464E-01 -.270E-03 -.740E-03 0.176E-03 + -.945E+03 -.946E+03 -.965E+03 0.945E+03 0.945E+03 0.964E+03 0.360E+00 0.353E+00 0.825E+00 -.313E-03 -.567E-03 -.328E-04 + 0.673E+01 0.728E+01 0.723E+01 -.677E+01 -.727E+01 -.722E+01 0.421E-01 -.150E-01 -.173E-01 0.992E-04 0.137E-03 0.117E-03 + -.186E+04 -.188E+04 -.191E+04 0.186E+04 0.188E+04 0.191E+04 0.562E+00 0.127E+00 0.990E-01 -.409E-03 -.420E-03 -.128E-03 + -.946E+03 -.947E+03 -.946E+03 0.946E+03 0.947E+03 0.946E+03 0.455E+00 0.404E+00 0.467E+00 -.137E-03 -.183E-03 -.153E-03 + 0.755E+01 0.671E+01 0.758E+01 -.754E+01 -.676E+01 -.756E+01 -.113E-01 0.446E-01 -.171E-01 0.291E-03 -.304E-05 0.232E-03 + -.151E+04 -.151E+04 -.152E+04 0.151E+04 0.151E+04 0.151E+04 0.150E+01 0.149E+01 0.147E+01 -.379E-03 0.153E-02 0.453E-03 + -.412E+03 -.412E+03 -.413E+03 0.412E+03 0.413E+03 0.413E+03 -.107E+00 -.594E+00 -.718E+00 -.538E-03 0.373E-03 0.381E-03 + -.892E+02 -.123E+03 -.587E+02 0.905E+02 0.128E+03 0.567E+02 -.135E+01 -.500E+01 0.198E+01 -.944E-04 -.442E-06 0.809E-04 + -.150E+03 -.124E+03 -.116E+03 0.149E+03 0.121E+03 0.112E+03 0.266E+00 0.296E+01 0.384E+01 -.151E-03 -.309E-04 -.396E-04 + -.109E+03 -.531E+02 -.101E+03 0.113E+03 0.510E+02 0.104E+03 -.405E+01 0.204E+01 -.316E+01 -.863E-04 0.653E-04 0.526E-04 + -.694E+02 -.115E+03 -.139E+03 0.647E+02 0.116E+03 0.142E+03 0.475E+01 -.301E+00 -.292E+01 0.214E-04 0.242E-04 -.313E-04 + ----------------------------------------------------------------------------------------------- + 0.252E+01 0.291E+01 0.299E+01 -.355E-11 -.668E-11 -.350E-11 -.253E+01 -.292E+01 -.300E+01 0.402E-02 0.448E-02 0.436E-02 + + + POSITION TOTAL-FORCE (eV/Angst) + ----------------------------------------------------------------------------------- + 1.20287 -0.60143 -0.60143 0.058787 0.061499 0.038807 + 1.20287 1.20287 -2.40573 0.060577 0.037970 0.060973 + 1.20287 3.00717 -4.21003 0.047248 0.054088 0.053954 + 3.00717 -2.40573 -0.60143 0.054740 0.054457 0.054952 + 3.00717 -0.60143 -2.40573 0.037730 0.060658 0.060381 + 3.00717 1.20287 -4.21003 0.055293 0.054853 0.054510 + 4.81147 -4.21003 -0.60143 0.054839 0.053016 0.055754 + 4.81147 -2.40573 -2.40573 0.053832 0.053996 0.047568 + 4.81147 -0.60143 -4.21003 0.054554 0.048576 0.052429 + 1.20287 1.20287 1.20287 -0.067831 -0.053066 -0.036949 + 1.20287 3.00717 -0.60143 -0.066710 -0.036427 -0.052060 + 1.20287 4.81147 -2.40573 -0.033209 -0.035836 -0.036425 + 3.00717 -0.60143 1.20287 -0.051179 -0.068836 -0.036031 + 3.00717 1.20287 -0.60143 -0.059316 -0.061305 -0.061267 + 3.00717 3.00717 -2.40573 -0.050406 -0.035022 -0.068242 + 4.81147 -2.40573 1.20287 -0.042223 -0.043806 -0.043735 + 4.81147 -0.60143 -0.60143 -0.035155 -0.069099 -0.052428 + 4.81147 1.20287 -2.40573 -0.035328 -0.052662 -0.069415 + 10.18736 4.78216 -0.61563 -0.001963 -0.001580 0.000852 + 4.79365 2.98537 2.98120 -0.000726 -0.000528 -0.001196 + 2.99129 2.99304 1.18886 0.001166 0.001498 0.000795 + 6.59328 8.38102 -0.61310 -0.000842 -0.001469 -0.001367 + 6.60198 1.18811 2.98923 -0.001107 -0.000767 -0.001038 + 4.79965 1.18462 1.18881 0.000147 0.002052 0.000438 + 8.39244 1.17032 4.77722 -0.002988 -0.002993 -0.002690 + 8.40796 -0.61874 2.98849 -0.002174 -0.001647 -0.001239 + 6.61084 -0.60849 1.19506 -0.001269 -0.000846 -0.000230 + 10.18878 1.19230 2.97727 -0.002184 0.000538 -0.001579 + 4.79315 4.78707 1.18036 -0.000913 -0.002077 -0.001810 + 3.00242 4.80063 -0.60832 -0.000929 -0.002655 -0.001655 + 6.59372 2.98491 1.17977 0.000021 -0.000779 -0.000299 + 4.79940 2.99329 -0.61961 0.000312 0.001086 0.001510 + 8.41465 2.96624 2.97798 -0.001503 -0.001467 -0.001880 + 8.40329 1.18332 1.18294 -0.000301 -0.000307 -0.000169 + 6.60651 1.19567 -0.60872 -0.002207 -0.001077 -0.001598 + 4.78359 8.38785 1.16827 -0.001258 -0.000165 -0.000687 + 4.79622 6.59623 -0.62218 -0.000319 -0.000564 -0.001119 + 3.00247 6.60890 -2.41701 -0.001419 -0.001054 -0.002351 + 6.59241 6.60633 1.16068 -0.001438 -0.000106 -0.002144 + 6.60161 4.79432 -0.61761 -0.001221 -0.001514 -0.001495 + 4.80598 4.80443 -2.41304 -0.001443 -0.000675 -0.000439 + 8.41432 4.78294 1.15884 -0.000769 -0.001782 -0.001856 + 8.40287 2.98735 -0.62283 -0.000550 0.000575 -0.000553 + 6.61046 2.99936 -2.41305 -0.001308 0.000559 -0.001498 + 6.61970 4.80906 3.00127 0.000723 -0.003412 -0.001190 + 8.30779 6.63893 4.83526 -0.001149 -0.004106 -0.000812 + 8.57607 7.63008 4.44370 -0.000745 0.007636 -0.003894 + 8.18845 5.94856 3.96092 -0.004893 -0.003073 -0.001571 + 9.11433 6.23555 5.46401 0.002880 -0.004992 0.004557 + 7.37388 6.69786 5.40931 -0.005875 0.002637 0.005431 + ----------------------------------------------------------------------------------- + total drift: -0.004889 -0.009830 -0.010843 + + +-------------------------------------------------------------------------------------------------------- + + + + FREE ENERGIE OF THE ION-ELECTRON SYSTEM (eV) + --------------------------------------------------- + free energy TOTEN = -85.79284510 eV + + energy without entropy= -85.77574095 energy(sigma->0) = -85.78714372 + + d Force = 0.2559243E-04[ 0.162E-04, 0.350E-04] d Energy = 0.2625617E-04-0.664E-06 + d Force =-0.4834441E+01[-0.483E+01,-0.483E+01] d Ewald =-0.4834441E+01 0.117E-06 + + +-------------------------------------------------------------------------------------------------------- + + + POTLOK: cpu time 3.2949: real time 3.2942 + + +-------------------------------------------------------------------------------------------------------- + + + stress matrix after NEB project (eV) + -12.04322 3.35508 3.40587 + 3.35508 -11.96682 3.48939 + 3.40587 3.48939 -11.92995 + FORCES: max atom, RMS 0.008603 0.002888 + FORCE total and by dimension 0.020425 0.007636 + Stress total and by dimension 22.374814 12.043223 + Conjugate gradient step on ions: + trial-energy change: -0.000026 1 .order -0.000026 -0.000035 -0.000016 + (g-gl).g = 0.118E-04 g.g = 0.122E-04 gl.gl = 0.151E-04 + g(Force) = 0.122E-04 g(Stress)= 0.000E+00 ortho = 0.334E-06 + gamma = 0.78450 + trial = 2.81524 + opt step = 4.62282 (harmonic = 5.25382) maximal distance =0.00183302 + next E = -85.792850 (d E = -0.00003) + + +-------------------------------------------------------------------------------------------------------- + + + + reached required accuracy - stopping structural energy minimisation + LOOP+: cpu time 764.0901: real time 765.1833 + 4ORBIT: cpu time 0.0000: real time 0.0000 + + total amount of memory used by VASP on root node 292243. kBytes +======================================================================== + + base : 30000. kBytes + nonlr-proj: 15881. kBytes + fftplans : 5374. kBytes + grid : 10087. kBytes + one-center: 202. kBytes + wavefun : 230699. kBytes + + + + General timing and accounting informations for this job: + ======================================================== + + Total CPU time used (sec): 67407.477 + User time (sec): 64479.835 + System time (sec): 2927.641 + Elapsed time (sec): 67509.274 + + Maximum memory used (kb): 538580. + Average memory used (kb): 0. + + Minor page faults: 7612532 + Major page faults: 0 + Voluntary context switches: 3128435 diff --git a/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu_xHfcc/INCAR b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu_xHfcc/INCAR new file mode 100644 index 0000000000000000000000000000000000000000..aa47dbedbcec12666f045e91c20d6060af4e6142 --- /dev/null +++ b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu_xHfcc/INCAR @@ -0,0 +1,42 @@ +INCAR file from C:\Users\Matt\Documents\Materials Studio Projects\TempProject Files\Documents\PdAu_CH4_PRv2.xsd. Created by Matt Darby on 30-Nov-2017. +INCAR file. Created by M Darby on 30-Nov-2017. +NWRITE = 1 +LWAVE = .FALSE. # write WAVECAR? +LCHARG = .FALSE. # write CHGCAR? +LVTOT = .FALSE. # write LOCPOT? + +GGA = MK # OptB86b-vdW XC-functional used +PARAM1 = 0.1234 +PARAM2 = 1.0000 +LUSE_VDW = .TRUE. +AGGAC = 0.0000 + +IDIPOL = 3 +LDIPOL = .TRUE. + +# Electronic relaxation +ENCUT = 400 # Energy cutoff in eV +# IALGO = 48 # 8: CG, 48: DIIS algorithm for electrons +ALGO = FAST +VOSKOWN = 1 # Default for PBE, RPBE +PREC = ACCURATE +LREAL = AUTO +ROPT = 2e-4 2e-4 2e-4 2e-4 +ISTART = 0 +NELM = 100 +NELMDL = -10 +EDIFF = 1e-7 # This and EDIFFG are the tolerance parameters +ISYM = 2 + +# Ionic relaxation +NSW = 200 # number of steps in optimization (default 0!) +ISIF = 2 # 0: relax ions, 1,2:relax ions,calc stresses, 3:relax ion+cell +IBRION = 2 # 1: quasi-NR, 2:CG algorithm for ions +EDIFFG = -0.01 # For high accuracy, use -0.01 or -0.02 +POTIM = 0.4 # reduce trial step in optimization +ISMEAR = 1 # 0: Gaussian, electron smearing +SIGMA = 0.1 # If gas phase, set to 0.01 + +# Parallel +NPAR = 8 +LPLANE = .TRUE. diff --git a/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu_xHfcc/OUTCAR b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu_xHfcc/OUTCAR new file mode 100644 index 0000000000000000000000000000000000000000..d8a31f197e4ed20e2b90036236b46b3a8dfdf4f0 --- /dev/null +++ b/tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction/RhCu_xHfcc/OUTCAR @@ -0,0 +1,1908 @@ + vasp.5.4.1 24Jun15 (build Dec 04 2015 16:58:54) complex + + executed on IFC91_ompi date 2018.05.31 03:07:40 + running on 32 total cores + distrk: each k-point on 32 cores, 1 groups + distr: one band on NCORES_PER_BAND= 4 cores, 8 groups + + +-------------------------------------------------------------------------------------------------------- + + + INCAR: + POTCAR: PAW_PBE Cu 05Jan2001 + POTCAR: PAW_PBE Rh 06Sep2000 + POTCAR: PAW_PBE H 15Jun2001 + + ----------------------------------------------------------------------------- +| | +| ADVICE TO THIS USER RUNNING 'VASP/VAMP' (HEAR YOUR MASTER'S VOICE ...): | +| | +| You have switched on vdW-DFT. | +| This routine was written and supplied by Jiri Klimes. | +| We recommed that you carefully read and cite the following | +| publication | +| J. Klimes, D.R. Bowler, A. Michelides | +| J. Phys.: Cond Matt. 22 022201 (2010) | +| J. Klimes, D.R. Bowler, A. Michelides | +| Phys. Rev. B. 83, 195131 (2011) | +| and references therein. | +| | + ----------------------------------------------------------------------------- + + POTCAR: PAW_PBE Cu 05Jan2001 + local pseudopotential read in + partial core-charges read in + atomic valenz-charges read in + non local Contribution for L= 2 read in + real space projection operators read in + non local Contribution for L= 2 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + PAW grid and wavefunctions read in + + number of l-projection operators is LMAX = 6 + number of lm-projection operators is LMMAX = 18 + + POTCAR: PAW_PBE Rh 06Sep2000 + local pseudopotential read in + partial core-charges read in + atomic valenz-charges read in + non local Contribution for L= 2 read in + real space projection operators read in + non local Contribution for L= 2 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + PAW grid and wavefunctions read in + + number of l-projection operators is LMAX = 6 + number of lm-projection operators is LMMAX = 18 + + POTCAR: PAW_PBE H 15Jun2001 + local pseudopotential read in + atomic valenz-charges read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 0 read in + real space projection operators read in + non local Contribution for L= 1 read in + real space projection operators read in + PAW grid and wavefunctions read in + + number of l-projection operators is LMAX = 3 + number of lm-projection operators is LMMAX = 5 + + Optimization of the real space projectors (new method) + + maximal supplied QI-value = 16.25 + optimisation between [QCUT,QGAM] = [ 10.24, 20.48] = [ 29.35,117.42] Ry + Optimized for a Real-space Cutoff 1.55 Angstroem + + l n(q) QCUT max X(q) W(low)/X(q) W(high)/X(q) e(spline) + 2 9 10.239 4.977 0.78E-05 0.33E-04 0.53E-07 + 2 9 10.239 13.467 0.10E-03 0.30E-03 0.20E-06 + 0 10 10.239 13.303 0.19E-04 0.19E-05 0.69E-08 + 0 10 10.239 44.613 0.65E-04 0.24E-05 0.85E-07 + 1 9 10.239 5.276 0.25E-04 0.19E-04 0.22E-07 + 1 9 10.239 7.322 0.84E-04 0.97E-04 0.11E-06 + Optimization of the real space projectors (new method) + + maximal supplied QI-value = 15.12 + optimisation between [QCUT,QGAM] = [ 10.13, 20.41] = [ 28.73,116.64] Ry + Optimized for a Real-space Cutoff 1.70 Angstroem + + l n(q) QCUT max X(q) W(low)/X(q) W(high)/X(q) e(spline) + 2 9 10.129 3.971 0.16E-04 0.22E-05 0.64E-07 + 2 9 10.129 27.544 0.10E-03 0.24E-04 0.29E-06 + 0 10 10.129 20.781 0.20E-04 0.19E-06 0.11E-07 + 0 10 10.129 69.103 0.45E-04 0.21E-04 0.91E-07 + 1 10 10.129 7.864 0.65E-05 0.54E-05 0.31E-07 + 1 10 10.129 10.811 0.30E-04 0.39E-05 0.12E-06 + Optimization of the real space projectors (new method) + + maximal supplied QI-value = 34.20 + optimisation between [QCUT,QGAM] = [ 9.92, 20.18] = [ 27.55,114.04] Ry + Optimized for a Real-space Cutoff 1.34 Angstroem + + l n(q) QCUT max X(q) W(low)/X(q) W(high)/X(q) e(spline) + 0 8 9.919 4.436 0.31E-04 0.59E-04 0.66E-07 + 0 8 9.919 16.131 0.16E-03 0.20E-03 0.35E-06 + 1 8 9.919 4.654 0.19E-03 0.46E-03 0.40E-06 + + ----------------------------------------------------------------------------- +| | +| ADVICE TO THIS USER RUNNING 'VASP/VAMP' (HEAR YOUR MASTER'S VOICE ...): | +| | +| You enforced a specific xc-type in the INCAR file, | +| a different type was found on the POTCAR file | +| I HOPE YOU KNOW, WHAT YOU ARE DOING | +| | + ----------------------------------------------------------------------------- + + PAW_PBE Cu 05Jan2001 : + energy of atom 1 EATOM=-1390.9800 + kinetic energy error for atom= 0.0117 (will be added to EATOM!!) + PAW_PBE Rh 06Sep2000 : + energy of atom 2 EATOM= -616.5493 + kinetic energy error for atom= 0.0043 (will be added to EATOM!!) + PAW_PBE H 15Jun2001 : + energy of atom 3 EATOM= -12.4884 + kinetic energy error for atom= 0.0098 (will be added to EATOM!!) + + + POSCAR: POSCAR file for Cu_3x3x5.xsd | Created o + positions in direct lattice + velocities in cartesian coordinates + exchange correlation table for LEXCH = 43 + RHO(1)= 0.500 N(1) = 2000 + RHO(2)= 100.500 N(2) = 4000 + + VTST: version 3.1, (03/28/14) + + CHAIN: initializing optimizer + + OPT: Using VASP Conjugate-Gradient optimizer + CHAIN: Read ICHAIN 0 + + POSCAR: POSCAR file for Cu_3x3x5.xsd | Created o + positions in direct lattice + velocities in cartesian coordinates + + + +-------------------------------------------------------------------------------------------------------- + + + ion position nearest neighbor table + 1 0.222 0.111 0.000- 2 2.55 7 2.55 5 2.55 9 2.55 4 2.55 3 2.55 10 2.55 14 2.55 + 13 2.55 + 2 0.222 0.444 0.000- 1 2.55 8 2.55 7 2.55 3 2.55 5 2.55 6 2.55 11 2.55 14 2.55 + 15 2.55 + 3 0.222 0.778 0.000- 9 2.55 8 2.55 6 2.55 1 2.55 2 2.55 4 2.55 12 2.55 13 2.55 + 15 2.55 + 4 0.556 0.111 0.000- 5 2.55 8 2.55 6 2.55 7 2.55 1 2.55 3 2.55 13 2.55 16 2.55 + 17 2.55 + 5 0.556 0.444 0.000- 4 2.55 1 2.55 17 2.55 6 2.55 8 2.55 2 2.55 9 2.55 14 2.55 + 18 2.55 + 6 0.556 0.778 0.000- 3 2.55 4 2.55 5 2.55 9 2.55 7 2.55 2 2.55 15 2.55 16 2.55 + 18 2.55 + 7 0.889 0.111 0.000- 1 2.55 8 2.55 2 2.55 4 2.55 9 2.55 6 2.55 10 2.55 11 2.55 + 16 2.55 + 8 0.889 0.444 0.000- 2 2.55 7 2.55 4 2.55 3 2.55 11 2.55 9 2.55 5 2.55 12 2.55 + 17 2.55 + 9 0.889 0.778 0.000- 3 2.55 1 2.55 6 2.55 7 2.55 8 2.55 5 2.55 10 2.55 12 2.55 + 18 2.55 + 10 0.000 0.000 0.114- 21 2.54 38 2.55 44 2.55 16 2.55 11 2.55 12 2.55 13 2.55 18 2.55 + 14 2.55 1 2.55 7 2.55 9 2.55 + 11 0.000 0.333 0.114- 21 2.54 12 2.55 15 2.55 8 2.55 10 2.55 17 2.55 14 2.55 16 2.55 + 2 2.55 7 2.55 30 2.55 27 2.56 + 12 0.000 0.667 0.114- 38 2.55 30 2.55 11 2.55 17 2.55 18 2.55 15 2.55 10 2.55 13 2.55 + 9 2.55 3 2.55 8 2.55 35 2.56 + 13 0.333 0.000 0.114- 24 2.54 41 2.54 16 2.55 17 2.55 14 2.55 15 2.55 10 2.55 12 2.55 + 3 2.55 4 2.55 1 2.55 38 2.55 + 14 0.333 0.333 0.114- 24 2.54 21 2.54 15 2.55 17 2.55 18 2.55 13 2.55 11 2.55 10 2.55 + 5 2.55 1 2.55 2 2.55 32 2.55 + 15 0.333 0.667 0.114- 32 2.54 18 2.55 14 2.55 11 2.55 16 2.55 12 2.55 13 2.55 6 2.55 + 2 2.55 3 2.55 30 2.55 41 2.55 + 16 0.667 0.000 0.114- 44 2.55 13 2.55 15 2.55 17 2.55 18 2.55 10 2.55 11 2.55 6 2.55 + 4 2.55 7 2.55 41 2.55 27 2.56 + 17 0.667 0.333 0.114- 24 2.54 18 2.55 14 2.55 13 2.55 12 2.55 5 2.55 11 2.55 16 2.55 + 4 2.55 8 2.55 27 2.55 35 2.55 + 18 0.667 0.667 0.114- 32 2.54 35 2.55 15 2.55 17 2.55 14 2.55 16 2.55 12 2.55 10 2.55 + 5 2.55 6 2.55 9 2.55 44 2.55 + 19 0.997 0.998 0.453- 42 2.51 43 2.52 36 2.52 26 2.53 25 2.55 45 2.56 20 2.56 22 2.56 + 28 2.59 + 20 0.220 0.108 0.339- 38 2.51 21 2.53 24 2.54 26 2.54 23 2.54 43 2.55 37 2.55 22 2.56 + 19 2.56 29 2.57 31 2.57 45 2.60 + 21 0.110 0.222 0.227- 20 2.53 11 2.54 10 2.54 44 2.54 29 2.54 14 2.54 26 2.55 27 2.55 + 30 2.55 38 2.55 24 2.56 32 2.56 + 22 0.332 0.998 0.453- 39 2.51 37 2.52 36 2.53 23 2.53 25 2.55 20 2.56 45 2.56 19 2.56 + 33 2.59 + 23 0.554 0.113 0.340- 25 2.52 22 2.53 20 2.54 24 2.54 27 2.54 31 2.54 41 2.55 34 2.55 + 37 2.55 40 2.55 33 2.56 26 2.57 + 24 0.444 0.222 0.227- 20 2.54 14 2.54 13 2.54 23 2.54 17 2.54 41 2.54 31 2.54 27 2.55 + 35 2.55 38 2.55 21 2.56 32 2.56 + 25 0.669 0.007 0.452- 23 2.52 26 2.52 33 2.53 28 2.53 40 2.54 19 2.55 22 2.55 39 2.56 + 42 2.56 + 26 0.890 0.113 0.340- 25 2.52 19 2.53 27 2.54 20 2.54 29 2.54 21 2.55 44 2.55 34 2.55 + 43 2.55 40 2.55 28 2.56 23 2.57 + 27 0.777 0.223 0.228- 26 2.54 23 2.54 34 2.55 21 2.55 24 2.55 30 2.55 35 2.55 44 2.55 + 41 2.55 17 2.55 11 2.56 16 2.56 + 28 0.998 0.338 0.454- 33 2.51 34 2.52 25 2.53 36 2.54 26 2.56 39 2.57 45 2.57 29 2.57 + 19 2.59 + 29 0.222 0.446 0.339- 30 2.52 32 2.53 37 2.54 31 2.54 26 2.54 21 2.54 34 2.56 40 2.56 + 28 2.57 20 2.57 45 2.59 39 2.62 + 30 0.111 0.556 0.227- 29 2.52 38 2.55 37 2.55 34 2.55 12 2.55 27 2.55 32 2.55 41 2.55 + 21 2.55 35 2.55 15 2.55 11 2.55 + 31 0.555 0.446 0.339- 35 2.53 32 2.53 43 2.54 29 2.54 23 2.54 24 2.54 34 2.56 40 2.56 + 33 2.57 20 2.57 45 2.59 42 2.62 + 32 0.445 0.557 0.227- 31 2.53 29 2.53 15 2.54 18 2.54 41 2.55 44 2.55 35 2.55 30 2.55 + 14 2.55 40 2.56 24 2.56 21 2.56 + 33 0.670 0.338 0.454- 28 2.51 25 2.53 34 2.53 36 2.54 23 2.56 42 2.57 31 2.57 45 2.57 + 22 2.59 + 34 0.888 0.446 0.341- 28 2.52 33 2.53 36 2.54 35 2.54 27 2.55 30 2.55 26 2.55 23 2.55 + 37 2.55 43 2.55 31 2.56 29 2.56 + 35 0.777 0.556 0.227- 31 2.53 34 2.54 38 2.55 43 2.55 18 2.55 32 2.55 27 2.55 44 2.55 + 30 2.55 24 2.55 17 2.55 12 2.56 + 36 0.000 0.670 0.453- 19 2.52 22 2.53 43 2.53 37 2.54 28 2.54 33 2.54 34 2.54 39 2.55 + 42 2.55 + 37 0.223 0.778 0.341- 22 2.52 40 2.53 36 2.54 29 2.54 20 2.55 41 2.55 30 2.55 34 2.55 + 23 2.55 39 2.56 38 2.56 43 2.59 + 38 0.110 0.889 0.227- 20 2.51 44 2.55 41 2.55 35 2.55 30 2.55 10 2.55 12 2.55 13 2.55 + 24 2.55 21 2.55 37 2.56 43 2.56 + 39 0.334 0.672 0.456- 46 1.83 22 2.51 36 2.55 37 2.56 42 2.56 25 2.56 28 2.57 40 2.58 + 45 2.59 29 2.62 + 40 0.556 0.781 0.341- 43 2.53 37 2.53 25 2.54 41 2.54 44 2.55 26 2.55 23 2.55 32 2.56 + 31 2.56 29 2.56 42 2.58 39 2.58 + 41 0.444 0.890 0.227- 40 2.54 24 2.54 13 2.54 37 2.55 38 2.55 32 2.55 23 2.55 30 2.55 + 27 2.55 15 2.55 16 2.55 44 2.56 + 42 0.668 0.672 0.456- 46 1.83 19 2.51 36 2.55 39 2.56 43 2.56 25 2.56 33 2.57 40 2.58 + 45 2.59 31 2.62 + 43 0.885 0.778 0.341- 19 2.52 36 2.53 40 2.53 31 2.54 44 2.54 20 2.55 35 2.55 34 2.55 + 26 2.55 42 2.56 38 2.56 37 2.59 + 44 0.778 0.890 0.227- 43 2.54 21 2.54 40 2.55 38 2.55 32 2.55 16 2.55 10 2.55 26 2.55 + 35 2.55 27 2.55 18 2.55 41 2.56 + 45 0.331 0.332 0.455- 46 1.74 22 2.56 19 2.56 28 2.57 33 2.57 29 2.59 31 2.59 42 2.59 + 39 2.59 20 2.60 + 46 0.438 0.545 0.511- 45 1.74 39 1.83 42 1.83 + + LATTYP: Found a hexagonal cell. + ALAT = 7.6549965918 + C/A-ratio = 2.3949984178 + + Lattice vectors: + + A1 = ( 5.4129000000, -5.4129000000, -0.0000000000) + A2 = ( 0.0000000000, 5.4129000000, -5.4129000000) + A3 = ( 10.5849693586, 10.5849693586, 10.5849693586) + + +Analysis of symmetry for initial positions (statically): +===================================================================== + Subroutine PRICEL returns: + Original cell was already a primitive cell. + + + Routine SETGRP: Setting up the symmetry group for a + hexagonal supercell. + + + Subroutine GETGRP returns: Found 1 space group operations + (whereof 1 operations were pure point group operations) + out of a pool of 24 trial point group operations. + + +The static configuration has the point symmetry C_1 . + + +Analysis of symmetry for dynamics (positions and initial velocities): +===================================================================== + Subroutine PRICEL returns: + Original cell was already a primitive cell. + + + Routine SETGRP: Setting up the symmetry group for a + hexagonal supercell. + + + Subroutine GETGRP returns: Found 1 space group operations + (whereof 1 operations were pure point group operations) + out of a pool of 24 trial point group operations. + + +The dynamic configuration has the point symmetry C_1 . + + +Analysis of constrained symmetry for selective dynamics: +===================================================================== + Subroutine PRICEL returns: + Original cell was already a primitive cell. + + + Routine SETGRP: Setting up the symmetry group for a + hexagonal supercell. + + + Subroutine GETGRP returns: Found 1 space group operations + (whereof 1 operations were pure point group operations) + out of a pool of 24 trial point group operations. + + +The constrained configuration has the point symmetry C_1 . + + + KPOINTS: K-Point Grid Created by Matt Darby on 30 + +Automatic generation of k-mesh. +Space group operators: + irot det(A) alpha n_x n_y n_z tau_x tau_y tau_z + 1 1.000000 0.000000 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 + + Subroutine IBZKPT returns following result: + =========================================== + + Found 85 irreducible k-points: + + Following reciprocal coordinates: + Coordinates Weight + 0.000000 0.000000 0.000000 1.000000 + 0.076923 0.000000 0.000000 2.000000 + 0.153846 0.000000 0.000000 2.000000 + 0.230769 0.000000 0.000000 2.000000 + 0.307692 0.000000 0.000000 2.000000 + 0.384615 0.000000 0.000000 2.000000 + 0.461538 0.000000 0.000000 2.000000 + 0.000000 0.076923 0.000000 2.000000 + 0.076923 0.076923 0.000000 2.000000 + 0.153846 0.076923 0.000000 2.000000 + 0.230769 0.076923 -0.000000 2.000000 + 0.307692 0.076923 0.000000 2.000000 + 0.384615 0.076923 -0.000000 2.000000 + 0.461538 0.076923 -0.000000 2.000000 + -0.461538 0.076923 -0.000000 2.000000 + -0.384615 0.076923 -0.000000 2.000000 + -0.307692 0.076923 -0.000000 2.000000 + -0.230769 0.076923 0.000000 2.000000 + -0.153846 0.076923 -0.000000 2.000000 + -0.076923 0.076923 0.000000 2.000000 + -0.000000 0.153846 -0.000000 2.000000 + 0.076923 0.153846 0.000000 2.000000 + 0.153846 0.153846 0.000000 2.000000 + 0.230769 0.153846 0.000000 2.000000 + 0.307692 0.153846 0.000000 2.000000 + 0.384615 0.153846 0.000000 2.000000 + 0.461538 0.153846 0.000000 2.000000 + -0.461538 0.153846 0.000000 2.000000 + -0.384615 0.153846 0.000000 2.000000 + -0.307692 0.153846 -0.000000 2.000000 + -0.230769 0.153846 0.000000 2.000000 + -0.153846 0.153846 -0.000000 2.000000 + -0.076923 0.153846 -0.000000 2.000000 + -0.000000 0.230769 0.000000 2.000000 + 0.076923 0.230769 -0.000000 2.000000 + 0.153846 0.230769 0.000000 2.000000 + 0.230769 0.230769 0.000000 2.000000 + 0.307692 0.230769 0.000000 2.000000 + 0.384615 0.230769 -0.000000 2.000000 + 0.461538 0.230769 0.000000 2.000000 + -0.461538 0.230769 0.000000 2.000000 + -0.384615 0.230769 -0.000000 2.000000 + -0.307692 0.230769 0.000000 2.000000 + -0.230769 0.230769 -0.000000 2.000000 + -0.153846 0.230769 0.000000 2.000000 + -0.076923 0.230769 0.000000 2.000000 + -0.000000 0.307692 0.000000 2.000000 + 0.076923 0.307692 0.000000 2.000000 + 0.153846 0.307692 0.000000 2.000000 + 0.230769 0.307692 0.000000 2.000000 + 0.307692 0.307692 0.000000 2.000000 + 0.384615 0.307692 0.000000 2.000000 + 0.461538 0.307692 0.000000 2.000000 + -0.461538 0.307692 0.000000 2.000000 + -0.384615 0.307692 0.000000 2.000000 + -0.307692 0.307692 0.000000 2.000000 + -0.230769 0.307692 0.000000 2.000000 + -0.153846 0.307692 0.000000 2.000000 + -0.076923 0.307692 0.000000 2.000000 + -0.000000 0.384615 0.000000 2.000000 + 0.076923 0.384615 -0.000000 2.000000 + 0.153846 0.384615 0.000000 2.000000 + 0.230769 0.384615 -0.000000 2.000000 + 0.307692 0.384615 0.000000 2.000000 + 0.384615 0.384615 0.000000 2.000000 + 0.461538 0.384615 0.000000 2.000000 + -0.461538 0.384615 0.000000 2.000000 + -0.384615 0.384615 0.000000 2.000000 + -0.307692 0.384615 0.000000 2.000000 + -0.230769 0.384615 -0.000000 2.000000 + -0.153846 0.384615 0.000000 2.000000 + -0.076923 0.384615 -0.000000 2.000000 + -0.000000 0.461538 0.000000 2.000000 + 0.076923 0.461538 0.000000 2.000000 + 0.153846 0.461538 0.000000 2.000000 + 0.230769 0.461538 0.000000 2.000000 + 0.307692 0.461538 0.000000 2.000000 + 0.384615 0.461538 0.000000 2.000000 + 0.461538 0.461538 0.000000 2.000000 + -0.461538 0.461538 -0.000000 2.000000 + -0.384615 0.461538 0.000000 2.000000 + -0.307692 0.461538 0.000000 2.000000 + -0.230769 0.461538 0.000000 2.000000 + -0.153846 0.461538 -0.000000 2.000000 + -0.076923 0.461538 0.000000 2.000000 + + Following cartesian coordinates: + Coordinates Weight + 0.000000 0.000000 0.000000 1.000000 + 0.009474 -0.004737 -0.004737 2.000000 + 0.018948 -0.009474 -0.009474 2.000000 + 0.028422 -0.014211 -0.014211 2.000000 + 0.037896 -0.018948 -0.018948 2.000000 + 0.047370 -0.023685 -0.023685 2.000000 + 0.056844 -0.028422 -0.028422 2.000000 + 0.004737 0.004737 -0.009474 2.000000 + 0.014211 0.000000 -0.014211 2.000000 + 0.023685 -0.004737 -0.018948 2.000000 + 0.033159 -0.009474 -0.023685 2.000000 + 0.042633 -0.014211 -0.028422 2.000000 + 0.052107 -0.018948 -0.033159 2.000000 + 0.061581 -0.023685 -0.037896 2.000000 + -0.052107 0.033159 0.018948 2.000000 + -0.042633 0.028422 0.014211 2.000000 + -0.033159 0.023685 0.009474 2.000000 + -0.023685 0.018948 0.004737 2.000000 + -0.014211 0.014211 0.000000 2.000000 + -0.004737 0.009474 -0.004737 2.000000 + 0.009474 0.009474 -0.018948 2.000000 + 0.018948 0.004737 -0.023685 2.000000 + 0.028422 0.000000 -0.028422 2.000000 + 0.037896 -0.004737 -0.033159 2.000000 + 0.047370 -0.009474 -0.037896 2.000000 + 0.056844 -0.014211 -0.042633 2.000000 + 0.066318 -0.018948 -0.047370 2.000000 + -0.047370 0.037896 0.009474 2.000000 + -0.037896 0.033159 0.004737 2.000000 + -0.028422 0.028422 -0.000000 2.000000 + -0.018948 0.023685 -0.004737 2.000000 + -0.009474 0.018948 -0.009474 2.000000 + 0.000000 0.014211 -0.014211 2.000000 + 0.014211 0.014211 -0.028422 2.000000 + 0.023685 0.009474 -0.033159 2.000000 + 0.033159 0.004737 -0.037896 2.000000 + 0.042633 0.000000 -0.042633 2.000000 + 0.052107 -0.004737 -0.047370 2.000000 + 0.061581 -0.009474 -0.052107 2.000000 + 0.071055 -0.014211 -0.056844 2.000000 + -0.042633 0.042633 0.000000 2.000000 + -0.033159 0.037896 -0.004737 2.000000 + -0.023685 0.033159 -0.009474 2.000000 + -0.014211 0.028422 -0.014211 2.000000 + -0.004737 0.023685 -0.018948 2.000000 + 0.004737 0.018948 -0.023685 2.000000 + 0.018948 0.018948 -0.037896 2.000000 + 0.028422 0.014211 -0.042633 2.000000 + 0.037896 0.009474 -0.047370 2.000000 + 0.047370 0.004737 -0.052107 2.000000 + 0.056844 0.000000 -0.056844 2.000000 + 0.066318 -0.004737 -0.061581 2.000000 + 0.075792 -0.009474 -0.066318 2.000000 + -0.037896 0.047370 -0.009474 2.000000 + -0.028422 0.042633 -0.014211 2.000000 + -0.018948 0.037896 -0.018948 2.000000 + -0.009474 0.033159 -0.023685 2.000000 + -0.000000 0.028422 -0.028422 2.000000 + 0.009474 0.023685 -0.033159 2.000000 + 0.023685 0.023685 -0.047370 2.000000 + 0.033159 0.018948 -0.052107 2.000000 + 0.042633 0.014211 -0.056844 2.000000 + 0.052107 0.009474 -0.061581 2.000000 + 0.061581 0.004737 -0.066318 2.000000 + 0.071055 0.000000 -0.071055 2.000000 + 0.080529 -0.004737 -0.075792 2.000000 + -0.033159 0.052107 -0.018948 2.000000 + -0.023685 0.047370 -0.023685 2.000000 + -0.014211 0.042633 -0.028422 2.000000 + -0.004737 0.037896 -0.033159 2.000000 + 0.004737 0.033159 -0.037896 2.000000 + 0.014211 0.028422 -0.042633 2.000000 + 0.028422 0.028422 -0.056844 2.000000 + 0.037896 0.023685 -0.061581 2.000000 + 0.047370 0.018948 -0.066318 2.000000 + 0.056844 0.014211 -0.071055 2.000000 + 0.066318 0.009474 -0.075792 2.000000 + 0.075792 0.004737 -0.080529 2.000000 + 0.085266 0.000000 -0.085266 2.000000 + -0.028422 0.056844 -0.028422 2.000000 + -0.018948 0.052107 -0.033159 2.000000 + -0.009474 0.047370 -0.037896 2.000000 + 0.000000 0.042633 -0.042633 2.000000 + 0.009474 0.037896 -0.047370 2.000000 + 0.018948 0.033159 -0.052107 2.000000 + + + +-------------------------------------------------------------------------------------------------------- + + + + + Dimension of arrays: + k-points NKPTS = 85 k-points in BZ NKDIM = 85 number of bands NBANDS= 296 + number of dos NEDOS = 301 number of ions NIONS = 46 + non local maximal LDIM = 6 non local SUM 2l+1 LMDIM = 18 + total plane-waves NPLWV = 300000 + max r-space proj IRMAX = 6660 max aug-charges IRDMAX= 18523 + dimension x,y,z NGX = 50 NGY = 50 NGZ = 120 + dimension x,y,z NGXF= 100 NGYF= 100 NGZF= 240 + support grid NGXF= 100 NGYF= 100 NGZF= 240 + ions per type = 44 1 1 + NGX,Y,Z is equivalent to a cutoff of 10.86, 10.86, 10.88 a.u. + NGXF,Y,Z is equivalent to a cutoff of 21.72, 21.72, 21.76 a.u. + + + I would recommend the setting: + dimension x,y,z NGX = 50 NGY = 50 NGZ = 120 + SYSTEM = unknown system + POSCAR = POSCAR file for Cu_3x3x5.xsd | Created o + + Startparameter for this run: + NWRITE = 1 write-flag & timer + PREC = accura normal or accurate (medium, high low for compatibility) + ISTART = 0 job : 0-new 1-cont 2-samecut + ICHARG = 2 charge: 1-file 2-atom 10-const + ISPIN = 1 spin polarized calculation? + LNONCOLLINEAR = F non collinear calculations + LSORBIT = F spin-orbit coupling + INIWAV = 1 electr: 0-lowe 1-rand 2-diag + LASPH = F aspherical Exc in radial PAW + METAGGA= F non-selfconsistent MetaGGA calc. + + Electronic Relaxation 1 + ENCUT = 400.0 eV 29.40 Ry 5.42 a.u. 12.48 12.48 29.90*2*pi/ulx,y,z + ENINI = 400.0 initial cutoff + ENAUG = 516.5 eV augmentation charge cutoff + NELM = 100; NELMIN= 2; NELMDL=-10 # of ELM steps + EDIFF = 0.1E-06 stopping-criterion for ELM + LREAL = T real-space projection + NLSPLINE = F spline interpolate recip. space projectors + LCOMPAT= F compatible to vasp.4.4 + GGA_COMPAT = T GGA compatible to vasp.4.4-vasp.4.6 + LMAXPAW = -100 max onsite density + LMAXMIX = 2 max onsite mixed and CHGCAR + VOSKOWN= 1 Vosko Wilk Nusair interpolation + ROPT = -0.00020 -0.00020 -0.00020 + Ionic relaxation + EDIFFG = -.1E-01 stopping-criterion for IOM + NSW = 200 number of steps for IOM + NBLOCK = 1; KBLOCK = 200 inner block; outer block + IBRION = 2 ionic relax: 0-MD 1-quasi-New 2-CG + NFREE = 1 steps in history (QN), initial steepest desc. (CG) + ISIF = 2 stress and relaxation + IWAVPR = 11 prediction: 0-non 1-charg 2-wave 3-comb + ISYM = 2 0-nonsym 1-usesym 2-fastsym + LCORR = T Harris-Foulkes like correction to forces + + POTIM = 0.4000 time-step for ionic-motion + TEIN = 0.0 initial temperature + TEBEG = 0.0; TEEND = 0.0 temperature during run + SMASS = -3.00 Nose mass-parameter (am) + estimated Nose-frequenzy (Omega) = 0.10E-29 period in steps =****** mass= -0.134E-26a.u. + SCALEE = 1.0000 scale energy and forces + NPACO = 256; APACO = 16.0 distance and # of slots for P.C. + PSTRESS= 0.0 pullay stress + + Mass of Ions in am + POMASS = 63.55102.91 1.00 + Ionic Valenz + ZVAL = 11.00 9.00 1.00 + Atomic Wigner-Seitz radii + RWIGS = -1.00 -1.00 -1.00 + virtual crystal weights + VCA = 1.00 1.00 1.00 + NELECT = 494.0000 total number of electrons + NUPDOWN= -1.0000 fix difference up-down + + DOS related values: + EMIN = 10.00; EMAX =-10.00 energy-range for DOS + EFERMI = 0.00 + ISMEAR = 1; SIGMA = 0.10 broadening in eV -4-tet -1-fermi 0-gaus + + Electronic relaxation 2 (details) + IALGO = 68 algorithm + LDIAG = T sub-space diagonalisation (order eigenvalues) + LSUBROT= F optimize rotation matrix (better conditioning) + TURBO = 0 0=normal 1=particle mesh + IRESTART = 0 0=no restart 2=restart with 2 vectors + NREBOOT = 0 no. of reboots + NMIN = 0 reboot dimension + EREF = 0.00 reference energy to select bands + IMIX = 4 mixing-type and parameters + AMIX = 0.40; BMIX = 1.00 + AMIX_MAG = 1.60; BMIX_MAG = 1.00 + AMIN = 0.10 + WC = 100.; INIMIX= 1; MIXPRE= 1; MAXMIX= -45 + + Intra band minimization: + WEIMIN = 0.0010 energy-eigenvalue tresh-hold + EBREAK = 0.84E-10 absolut break condition + DEPER = 0.30 relativ break condition + + TIME = 0.40 timestep for ELM + + volume/ion in A,a.u. = 20.23 136.49 + Fermi-wavevector in a.u.,A,eV,Ry = 1.325644 2.505104 23.909948 1.757332 + Thomas-Fermi vector in A = 2.455089 + + Write flags + LWAVE = F write WAVECAR + LCHARG = F write CHGCAR + LVTOT = F write LOCPOT, total local potential + LVHAR = F write LOCPOT, Hartree potential only + LELF = F write electronic localiz. function (ELF) + LORBIT = 0 0 simple, 1 ext, 2 COOP (PROOUT) + + + Dipole corrections + LMONO = F monopole corrections only (constant potential shift) + LDIPOL = T correct potential (dipole corrections) + IDIPOL = 3 1-x, 2-y, 3-z, 4-all directions + EPSILON= 1.0000000 bulk dielectric constant + + Exchange correlation treatment: + GGA = MK GGA type + LEXCH = 43 internal setting for exchange type + VOSKOWN= 1 Vosko Wilk Nusair interpolation + LHFCALC = F Hartree Fock is set to + LHFONE = F Hartree Fock one center treatment + AEXX = 0.0000 exact exchange contribution + + vdW DFT: + LUSE_VDW = T switch on vdW DFT + Zab_VDW =-.8491 correlation parameter + PARAM1 =0.1234 + PARAM2 =1.0000 + PARAM3 =0.0000 + + Linear response parameters + LEPSILON= F determine dielectric tensor + LRPA = F only Hartree local field effects (RPA) + LNABLA = F use nabla operator in PAW spheres + LVEL = F velocity operator in full k-point grid + LINTERFAST= F fast interpolation + KINTER = 0 interpolate to denser k-point grid + CSHIFT =0.1000 complex shift for real part using Kramers Kronig + OMEGAMAX= -1.0 maximum frequency + DEG_THRESHOLD= 0.2000000E-02 threshold for treating states as degnerate + RTIME = 0.100 relaxation time in fs + + Orbital magnetization related: + ORBITALMAG= F switch on orbital magnetization + LCHIMAG = F perturbation theory with respect to B field + DQ = 0.001000 dq finite difference perturbation B field + + + +-------------------------------------------------------------------------------------------------------- + + + conjugate gradient relaxation of ions + using selective dynamics as specified on POSCAR + charge density and potential will be updated during run + non-spin polarized calculation + RMM-DIIS sequential band-by-band and + variant of blocked Davidson during initial phase + perform sub-space diagonalisation + before iterative eigenvector-optimisation + modified Broyden-mixing scheme, WC = 100.0 + initial mixing is a Kerker type mixing with AMIX = 0.4000 and BMIX = 1.0000 + Hartree-type preconditioning will be used + using additional bands 49 + real space projection scheme for non local part + use partial core corrections + calculate Harris-corrections to forces + (improved forces if not selfconsistent) + use gradient corrections + use of overlap-Matrix (Vanderbilt PP) + Methfessel and Paxton Order N= 1 SIGMA = 0.10 + + +-------------------------------------------------------------------------------------------------------- + + + energy-cutoff : 400.00 + volume of cell : 930.40 + direct lattice vectors reciprocal lattice vectors + 5.412900000 -5.412900000 -0.000000000 0.123162568 -0.061581284 -0.061581284 + 0.000000000 5.412900000 -5.412900000 0.061581284 0.061581284 -0.123162568 + 10.584969359 10.584969359 10.584969359 0.031491195 0.031491195 0.031491195 + + length of vectors + 7.654996592 7.654996592 18.333704726 0.150842724 0.150842724 0.054544350 + + + + k-points in units of 2pi/SCALE and weight: K-Point Grid Created by Matt Darby on 30 + 0.00000000 0.00000000 0.00000000 0.006 + 0.00947404 -0.00473702 -0.00473702 0.012 + 0.01894809 -0.00947404 -0.00947404 0.012 + 0.02842213 -0.01421107 -0.01421107 0.012 + 0.03789617 -0.01894809 -0.01894809 0.012 + 0.04737022 -0.02368511 -0.02368511 0.012 + 0.05684426 -0.02842213 -0.02842213 0.012 + 0.00473702 0.00473702 -0.00947404 0.012 + 0.01421107 0.00000000 -0.01421107 0.012 + 0.02368511 -0.00473702 -0.01894809 0.012 + 0.03315915 -0.00947404 -0.02368511 0.012 + 0.04263320 -0.01421107 -0.02842213 0.012 + 0.05210724 -0.01894809 -0.03315915 0.012 + 0.06158128 -0.02368511 -0.03789617 0.012 + -0.05210724 0.03315915 0.01894809 0.012 + -0.04263320 0.02842213 0.01421107 0.012 + -0.03315915 0.02368511 0.00947404 0.012 + -0.02368511 0.01894809 0.00473702 0.012 + -0.01421107 0.01421107 0.00000000 0.012 + -0.00473702 0.00947404 -0.00473702 0.012 + 0.00947404 0.00947404 -0.01894809 0.012 + 0.01894809 0.00473702 -0.02368511 0.012 + 0.02842213 0.00000000 -0.02842213 0.012 + 0.03789617 -0.00473702 -0.03315915 0.012 + 0.04737022 -0.00947404 -0.03789617 0.012 + 0.05684426 -0.01421107 -0.04263320 0.012 + 0.06631831 -0.01894809 -0.04737022 0.012 + -0.04737022 0.03789617 0.00947404 0.012 + -0.03789617 0.03315915 0.00473702 0.012 + -0.02842213 0.02842213 -0.00000000 0.012 + -0.01894809 0.02368511 -0.00473702 0.012 + -0.00947404 0.01894809 -0.00947404 0.012 + 0.00000000 0.01421107 -0.01421107 0.012 + 0.01421107 0.01421107 -0.02842213 0.012 + 0.02368511 0.00947404 -0.03315915 0.012 + 0.03315915 0.00473702 -0.03789617 0.012 + 0.04263320 0.00000000 -0.04263320 0.012 + 0.05210724 -0.00473702 -0.04737022 0.012 + 0.06158128 -0.00947404 -0.05210724 0.012 + 0.07105533 -0.01421107 -0.05684426 0.012 + -0.04263320 0.04263320 0.00000000 0.012 + -0.03315915 0.03789617 -0.00473702 0.012 + -0.02368511 0.03315915 -0.00947404 0.012 + -0.01421107 0.02842213 -0.01421107 0.012 + -0.00473702 0.02368511 -0.01894809 0.012 + 0.00473702 0.01894809 -0.02368511 0.012 + 0.01894809 0.01894809 -0.03789617 0.012 + 0.02842213 0.01421107 -0.04263320 0.012 + 0.03789617 0.00947404 -0.04737022 0.012 + 0.04737022 0.00473702 -0.05210724 0.012 + 0.05684426 0.00000000 -0.05684426 0.012 + 0.06631831 -0.00473702 -0.06158128 0.012 + 0.07579235 -0.00947404 -0.06631831 0.012 + -0.03789617 0.04737022 -0.00947404 0.012 + -0.02842213 0.04263320 -0.01421107 0.012 + -0.01894809 0.03789617 -0.01894809 0.012 + -0.00947404 0.03315915 -0.02368511 0.012 + -0.00000000 0.02842213 -0.02842213 0.012 + 0.00947404 0.02368511 -0.03315915 0.012 + 0.02368511 0.02368511 -0.04737022 0.012 + 0.03315915 0.01894809 -0.05210724 0.012 + 0.04263320 0.01421107 -0.05684426 0.012 + 0.05210724 0.00947404 -0.06158128 0.012 + 0.06158128 0.00473702 -0.06631831 0.012 + 0.07105533 0.00000000 -0.07105533 0.012 + 0.08052937 -0.00473702 -0.07579235 0.012 + -0.03315915 0.05210724 -0.01894809 0.012 + -0.02368511 0.04737022 -0.02368511 0.012 + -0.01421107 0.04263320 -0.02842213 0.012 + -0.00473702 0.03789617 -0.03315915 0.012 + 0.00473702 0.03315915 -0.03789617 0.012 + 0.01421107 0.02842213 -0.04263320 0.012 + 0.02842213 0.02842213 -0.05684426 0.012 + 0.03789617 0.02368511 -0.06158128 0.012 + 0.04737022 0.01894809 -0.06631831 0.012 + 0.05684426 0.01421107 -0.07105533 0.012 + 0.06631831 0.00947404 -0.07579235 0.012 + 0.07579235 0.00473702 -0.08052937 0.012 + 0.08526639 0.00000000 -0.08526639 0.012 + -0.02842213 0.05684426 -0.02842213 0.012 + -0.01894809 0.05210724 -0.03315915 0.012 + -0.00947404 0.04737022 -0.03789617 0.012 + 0.00000000 0.04263320 -0.04263320 0.012 + 0.00947404 0.03789617 -0.04737022 0.012 + 0.01894809 0.03315915 -0.05210724 0.012 + + k-points in reciprocal lattice and weights: K-Point Grid Created by Matt Darby on 30 + 0.00000000 0.00000000 0.00000000 0.006 + 0.07692308 0.00000000 0.00000000 0.012 + 0.15384615 0.00000000 0.00000000 0.012 + 0.23076923 0.00000000 0.00000000 0.012 + 0.30769231 0.00000000 0.00000000 0.012 + 0.38461538 0.00000000 0.00000000 0.012 + 0.46153846 0.00000000 0.00000000 0.012 + 0.00000000 0.07692308 0.00000000 0.012 + 0.07692308 0.07692308 0.00000000 0.012 + 0.15384615 0.07692308 0.00000000 0.012 + 0.23076923 0.07692308 -0.00000000 0.012 + 0.30769231 0.07692308 0.00000000 0.012 + 0.38461538 0.07692308 -0.00000000 0.012 + 0.46153846 0.07692308 -0.00000000 0.012 + -0.46153846 0.07692308 -0.00000000 0.012 + -0.38461538 0.07692308 -0.00000000 0.012 + -0.30769231 0.07692308 -0.00000000 0.012 + -0.23076923 0.07692308 0.00000000 0.012 + -0.15384615 0.07692308 -0.00000000 0.012 + -0.07692308 0.07692308 0.00000000 0.012 + -0.00000000 0.15384615 -0.00000000 0.012 + 0.07692308 0.15384615 0.00000000 0.012 + 0.15384615 0.15384615 0.00000000 0.012 + 0.23076923 0.15384615 0.00000000 0.012 + 0.30769231 0.15384615 0.00000000 0.012 + 0.38461538 0.15384615 0.00000000 0.012 + 0.46153846 0.15384615 0.00000000 0.012 + -0.46153846 0.15384615 0.00000000 0.012 + -0.38461538 0.15384615 0.00000000 0.012 + -0.30769231 0.15384615 -0.00000000 0.012 + -0.23076923 0.15384615 0.00000000 0.012 + -0.15384615 0.15384615 -0.00000000 0.012 + -0.07692308 0.15384615 -0.00000000 0.012 + -0.00000000 0.23076923 0.00000000 0.012 + 0.07692308 0.23076923 -0.00000000 0.012 + 0.15384615 0.23076923 0.00000000 0.012 + 0.23076923 0.23076923 0.00000000 0.012 + 0.30769231 0.23076923 0.00000000 0.012 + 0.38461538 0.23076923 -0.00000000 0.012 + 0.46153846 0.23076923 0.00000000 0.012 + -0.46153846 0.23076923 0.00000000 0.012 + -0.38461538 0.23076923 -0.00000000 0.012 + -0.30769231 0.23076923 0.00000000 0.012 + -0.23076923 0.23076923 -0.00000000 0.012 + -0.15384615 0.23076923 0.00000000 0.012 + -0.07692308 0.23076923 0.00000000 0.012 + -0.00000000 0.30769231 0.00000000 0.012 + 0.07692308 0.30769231 0.00000000 0.012 + 0.15384615 0.30769231 0.00000000 0.012 + 0.23076923 0.30769231 0.00000000 0.012 + 0.30769231 0.30769231 0.00000000 0.012 + 0.38461538 0.30769231 0.00000000 0.012 + 0.46153846 0.30769231 0.00000000 0.012 + -0.46153846 0.30769231 0.00000000 0.012 + -0.38461538 0.30769231 0.00000000 0.012 + -0.30769231 0.30769231 0.00000000 0.012 + -0.23076923 0.30769231 0.00000000 0.012 + -0.15384615 0.30769231 0.00000000 0.012 + -0.07692308 0.30769231 0.00000000 0.012 + -0.00000000 0.38461538 0.00000000 0.012 + 0.07692308 0.38461538 -0.00000000 0.012 + 0.15384615 0.38461538 0.00000000 0.012 + 0.23076923 0.38461538 -0.00000000 0.012 + 0.30769231 0.38461538 0.00000000 0.012 + 0.38461538 0.38461538 0.00000000 0.012 + 0.46153846 0.38461538 0.00000000 0.012 + -0.46153846 0.38461538 0.00000000 0.012 + -0.38461538 0.38461538 0.00000000 0.012 + -0.30769231 0.38461538 0.00000000 0.012 + -0.23076923 0.38461538 -0.00000000 0.012 + -0.15384615 0.38461538 0.00000000 0.012 + -0.07692308 0.38461538 -0.00000000 0.012 + -0.00000000 0.46153846 0.00000000 0.012 + 0.07692308 0.46153846 0.00000000 0.012 + 0.15384615 0.46153846 0.00000000 0.012 + 0.23076923 0.46153846 0.00000000 0.012 + 0.30769231 0.46153846 0.00000000 0.012 + 0.38461538 0.46153846 0.00000000 0.012 + 0.46153846 0.46153846 0.00000000 0.012 + -0.46153846 0.46153846 -0.00000000 0.012 + -0.38461538 0.46153846 0.00000000 0.012 + -0.30769231 0.46153846 0.00000000 0.012 + -0.23076923 0.46153846 0.00000000 0.012 + -0.15384615 0.46153846 -0.00000000 0.012 + -0.07692308 0.46153846 0.00000000 0.012 + + position of ions in fractional coordinates (direct lattice) + 0.22222222 0.11111111 0.00000000 + 0.22222222 0.44444444 0.00000000 + 0.22222222 0.77777778 0.00000000 + 0.55555556 0.11111111 0.00000000 + 0.55555556 0.44444444 0.00000000 + 0.55555556 0.77777778 0.00000000 + 0.88888889 0.11111111 0.00000000 + 0.88888889 0.44444444 0.00000000 + 0.88888889 0.77777778 0.00000000 + 0.00000000 0.00000000 0.11363913 + 0.00000000 0.33333333 0.11363913 + 0.00000000 0.66666667 0.11363913 + 0.33333333 0.00000000 0.11363913 + 0.33333333 0.33333333 0.11363913 + 0.33333333 0.66666667 0.11363913 + 0.66666667 0.00000000 0.11363913 + 0.66666667 0.33333333 0.11363913 + 0.66666667 0.66666667 0.11363913 + 0.99686114 0.99830963 0.45261059 + 0.21958403 0.10821768 0.33865355 + 0.11002202 0.22217385 0.22653758 + 0.33185968 0.99835223 0.45257605 + 0.55410116 0.11346797 0.34039559 + 0.44410420 0.22216318 0.22654956 + 0.66888550 0.00737921 0.45203526 + 0.89033153 0.11347490 0.34043088 + 0.77742909 0.22284964 0.22769122 + 0.99828940 0.33796464 0.45376607 + 0.22236458 0.44592922 0.33922995 + 0.11074590 0.55601907 0.22735198 + 0.55457371 0.44594898 0.33925941 + 0.44462809 0.55727265 0.22687435 + 0.67004268 0.33786070 0.45373065 + 0.88837574 0.44575382 0.34077286 + 0.77724450 0.55602643 0.22737285 + 0.00028055 0.67024279 0.45330401 + 0.22314721 0.77754281 0.34094861 + 0.11027305 0.88859216 0.22717930 + 0.33429108 0.67219368 0.45625934 + 0.55575802 0.78053505 0.34051083 + 0.44358189 0.88971808 0.22724871 + 0.66817050 0.67212971 0.45629401 + 0.88534914 0.77754262 0.34096796 + 0.77812345 0.88975022 0.22725714 + 0.33121986 0.33209029 0.45507952 + 0.43752307 0.54535542 0.51079327 + + position of ions in cartesian coordinates (Angst): + 1.20286667 -0.60143333 -0.60143333 + 1.20286667 1.20286667 -2.40573333 + 1.20286667 3.00716667 -4.21003333 + 3.00716667 -2.40573333 -0.60143333 + 3.00716667 -0.60143333 -2.40573333 + 3.00716667 1.20286667 -4.21003333 + 4.81146667 -4.21003333 -0.60143333 + 4.81146667 -2.40573333 -2.40573333 + 4.81146667 -0.60143333 -4.21003333 + 1.20286667 1.20286667 1.20286667 + 1.20286667 3.00716667 -0.60143333 + 1.20286667 4.81146667 -2.40573333 + 3.00716667 -0.60143333 1.20286667 + 3.00716667 1.20286667 -0.60143333 + 3.00716667 3.00716667 -2.40573333 + 4.81146667 -2.40573333 1.20286667 + 4.81146667 -0.60143333 -0.60143333 + 4.81146667 1.20286667 -2.40573333 + 10.18677893 4.79870981 -0.61288093 + 4.77322384 2.98182250 2.99886598 + 2.99343155 3.00496000 1.19528851 + 6.58682686 8.39816108 -0.61347721 + 6.60237105 1.21797352 2.98888614 + 4.80191176 1.19667565 1.19547306 + 8.40538968 1.20411201 4.74483643 + 8.42272601 -0.60159675 2.98922220 + 6.61825056 -0.59177849 1.20384183 + 10.20674063 1.22882801 2.97373115 + 4.79437583 4.80087164 1.17696835 + 3.00597022 4.81673287 -0.60316189 + 6.59290252 3.00307567 1.17717323 + 4.80818543 3.01119176 -0.61500306 + 8.42959908 3.00465719 2.97391884 + 8.41575929 1.21120202 1.19424939 + 6.61388143 1.20930335 -0.60298081 + 4.79972762 8.42464759 1.17025185 + 4.81680415 6.60981854 -0.59983091 + 3.00158297 6.61764943 -2.40517453 + 6.63897532 6.65852411 1.19097393 + 6.61255929 4.82099229 -0.62066148 + 4.80648505 4.82031120 -2.41053437 + 8.44659820 4.85128889 1.19168717 + 8.40144171 3.02558950 -0.59962508 + 6.61741430 3.00973439 -2.41061910 + 6.60986283 4.82171437 3.01943127 + 7.77499971 5.99041681 2.45477670 + + + +-------------------------------------------------------------------------------------------------------- + + + k-point 1 : 0.0000 0.0000 0.0000 plane waves: 16943 + k-point 2 : 0.0769 0.0000 0.0000 plane waves: 16935 + k-point 3 : 0.1538 0.0000 0.0000 plane waves: 16955 + k-point 4 : 0.2308 0.0000 0.0000 plane waves: 16932 + k-point 5 : 0.3077 0.0000 0.0000 plane waves: 16886 + k-point 6 : 0.3846 0.0000 0.0000 plane waves: 16874 + k-point 7 : 0.4615 0.0000 0.0000 plane waves: 16856 + k-point 8 : 0.0000 0.0769 0.0000 plane waves: 16935 + k-point 9 : 0.0769 0.0769 0.0000 plane waves: 16959 + k-point 10 : 0.1538 0.0769 0.0000 plane waves: 16930 + k-point 11 : 0.2308 0.0769-0.0000 plane waves: 16910 + k-point 12 : 0.3077 0.0769 0.0000 plane waves: 16914 + k-point 13 : 0.3846 0.0769-0.0000 plane waves: 16868 + k-point 14 : 0.4615 0.0769-0.0000 plane waves: 16856 + k-point 15 : -0.4615 0.0769-0.0000 plane waves: 16868 + k-point 16 : -0.3846 0.0769-0.0000 plane waves: 16914 + k-point 17 : -0.3077 0.0769-0.0000 plane waves: 16910 + k-point 18 : -0.2308 0.0769 0.0000 plane waves: 16930 + k-point 19 : -0.1538 0.0769-0.0000 plane waves: 16959 + k-point 20 : -0.0769 0.0769 0.0000 plane waves: 16935 + k-point 21 : -0.0000 0.1538-0.0000 plane waves: 16955 + k-point 22 : 0.0769 0.1538 0.0000 plane waves: 16930 + k-point 23 : 0.1538 0.1538 0.0000 plane waves: 16933 + k-point 24 : 0.2308 0.1538 0.0000 plane waves: 16913 + k-point 25 : 0.3077 0.1538 0.0000 plane waves: 16897 + k-point 26 : 0.3846 0.1538 0.0000 plane waves: 16850 + k-point 27 : 0.4615 0.1538 0.0000 plane waves: 16850 + k-point 28 : -0.4615 0.1538 0.0000 plane waves: 16897 + k-point 29 : -0.3846 0.1538 0.0000 plane waves: 16913 + k-point 30 : -0.3077 0.1538-0.0000 plane waves: 16933 + k-point 31 : -0.2308 0.1538 0.0000 plane waves: 16930 + k-point 32 : -0.1538 0.1538-0.0000 plane waves: 16955 + k-point 33 : -0.0769 0.1538-0.0000 plane waves: 16959 + k-point 34 : -0.0000 0.2308 0.0000 plane waves: 16932 + k-point 35 : 0.0769 0.2308-0.0000 plane waves: 16910 + k-point 36 : 0.1538 0.2308 0.0000 plane waves: 16913 + k-point 37 : 0.2308 0.2308 0.0000 plane waves: 16885 + k-point 38 : 0.3077 0.2308 0.0000 plane waves: 16884 + k-point 39 : 0.3846 0.2308-0.0000 plane waves: 16872 + k-point 40 : 0.4615 0.2308 0.0000 plane waves: 16884 + k-point 41 : -0.4615 0.2308 0.0000 plane waves: 16885 + k-point 42 : -0.3846 0.2308-0.0000 plane waves: 16913 + k-point 43 : -0.3077 0.2308 0.0000 plane waves: 16910 + k-point 44 : -0.2308 0.2308-0.0000 plane waves: 16932 + k-point 45 : -0.1538 0.2308 0.0000 plane waves: 16930 + k-point 46 : -0.0769 0.2308 0.0000 plane waves: 16930 + k-point 47 : -0.0000 0.3077 0.0000 plane waves: 16886 + k-point 48 : 0.0769 0.3077 0.0000 plane waves: 16914 + k-point 49 : 0.1538 0.3077 0.0000 plane waves: 16897 + k-point 50 : 0.2308 0.3077 0.0000 plane waves: 16884 + k-point 51 : 0.3077 0.3077 0.0000 plane waves: 16896 + k-point 52 : 0.3846 0.3077 0.0000 plane waves: 16896 + k-point 53 : 0.4615 0.3077 0.0000 plane waves: 16884 + k-point 54 : -0.4615 0.3077 0.0000 plane waves: 16897 + k-point 55 : -0.3846 0.3077 0.0000 plane waves: 16914 + k-point 56 : -0.3077 0.3077 0.0000 plane waves: 16886 + k-point 57 : -0.2308 0.3077 0.0000 plane waves: 16910 + k-point 58 : -0.1538 0.3077 0.0000 plane waves: 16933 + k-point 59 : -0.0769 0.3077 0.0000 plane waves: 16910 + k-point 60 : -0.0000 0.3846 0.0000 plane waves: 16874 + k-point 61 : 0.0769 0.3846-0.0000 plane waves: 16868 + k-point 62 : 0.1538 0.3846 0.0000 plane waves: 16850 + k-point 63 : 0.2308 0.3846-0.0000 plane waves: 16872 + k-point 64 : 0.3077 0.3846 0.0000 plane waves: 16896 + k-point 65 : 0.3846 0.3846 0.0000 plane waves: 16872 + k-point 66 : 0.4615 0.3846 0.0000 plane waves: 16850 + k-point 67 : -0.4615 0.3846 0.0000 plane waves: 16868 + k-point 68 : -0.3846 0.3846 0.0000 plane waves: 16874 + k-point 69 : -0.3077 0.3846 0.0000 plane waves: 16914 + k-point 70 : -0.2308 0.3846-0.0000 plane waves: 16913 + k-point 71 : -0.1538 0.3846 0.0000 plane waves: 16913 + k-point 72 : -0.0769 0.3846-0.0000 plane waves: 16914 + k-point 73 : -0.0000 0.4615 0.0000 plane waves: 16856 + k-point 74 : 0.0769 0.4615 0.0000 plane waves: 16856 + k-point 75 : 0.1538 0.4615 0.0000 plane waves: 16850 + k-point 76 : 0.2308 0.4615 0.0000 plane waves: 16884 + k-point 77 : 0.3077 0.4615 0.0000 plane waves: 16884 + k-point 78 : 0.3846 0.4615 0.0000 plane waves: 16850 + k-point 79 : 0.4615 0.4615 0.0000 plane waves: 16856 + k-point 80 : -0.4615 0.4615-0.0000 plane waves: 16856 + k-point 81 : -0.3846 0.4615 0.0000 plane waves: 16868 + k-point 82 : -0.3077 0.4615 0.0000 plane waves: 16897 + k-point 83 : -0.2308 0.4615 0.0000 plane waves: 16885 + k-point 84 : -0.1538 0.4615-0.0000 plane waves: 16897 + k-point 85 : -0.0769 0.4615 0.0000 plane waves: 16868 + + maximum and minimum number of plane-waves per node : 4265 4197 + + maximum number of plane-waves: 16959 + maximum index in each direction: + IXMAX= 12 IYMAX= 12 IZMAX= 29 + IXMIN= -12 IYMIN= -12 IZMIN= -29 + + NGX is ok and might be reduce to 50 + NGY is ok and might be reduce to 50 + NGZ is ok and might be reduce to 118 + + real space projection operators: + total allocation : 31439.70 KBytes + max/ min on nodes : 8165.98 7559.14 + + + parallel 3D FFT for wavefunctions: + minimum data exchange during FFTs selected (reduces bandwidth) + parallel 3D FFT for charge: + minimum data exchange during FFTs selected (reduces bandwidth) + + + total amount of memory used by VASP on root node 284329. kBytes +======================================================================== + + base : 30000. kBytes + nonlr-proj: 15232. kBytes + fftplans : 5374. kBytes + grid : 9312. kBytes + one-center: 186. kBytes + wavefun : 224225. kBytes + + INWAV: cpu time 0.0000: real time 0.0000 + Broyden mixing: mesh for mixing (old mesh) + NGX = 25 NGY = 25 NGZ = 59 + (NGX =100 NGY =100 NGZ =240) + gives a total of 36875 points + + initial charge density was supplied: + charge density of overlapping atoms calculated + number of electron 494.0000000 magnetization + keeping initial charge density in first step + + +-------------------------------------------------------------------------------------------------------- + + + Maximum index for non-local projection operator 1596 + Maximum index for augmentation-charges 1054 (set IRDMAX) + + +-------------------------------------------------------------------------------------------------------- + + + First call to EWALD: gamma= 0.182 + Maximum number of real-space cells 4x 4x 2 + Maximum number of reciprocal cells 2x 2x 5 + + FEWALD executed in parallel + FEWALD: cpu time 0.0035: real time 0.0035 + + +----------------------------------------- Iteration 9( 1) --------------------------------------- + + + POTLOK: cpu time 3.7267: real time 3.7282 + SETDIJ: cpu time 0.0099: real time 0.0099 + EDDAV: cpu time 125.1002: real time 125.3523 + DOS: cpu time 0.0142: real time 0.0142 + CHARGE: cpu time 4.1653: real time 4.1667 + MIXING: cpu time 0.0014: real time 0.0014 + -------------------------------------------- + LOOP: cpu time 133.0200: real time 133.2779 + + eigenvalue-minimisations : 50384 + total energy-change (2. order) :-0.5681812E-03 (-0.4758275E-01) + number of electron 493.9999956 magnetization + augmentation part 320.2130592 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 176, + dipolmoment 0.016780 0.016780 0.016780 electrons x Angstroem + Tr[quadrupol] -4780.140891 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000082 eV + added-field ion interaction 0.142850 eV (added to PSCEN) + + + free energy = -0.658027932160E+02 energy without entropy= -0.657954795600E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 2) --------------------------------------- + + + POTLOK: cpu time 3.5698: real time 3.5712 + SETDIJ: cpu time 0.0099: real time 0.0099 + EDDIAG: cpu time 18.7210: real time 18.7409 + RMM-DIIS: cpu time 50.0615: real time 50.1162 + ORTHCH: cpu time 2.7099: real time 2.7107 + DOS: cpu time 0.0142: real time 0.0142 + CHARGE: cpu time 4.1819: real time 4.1830 + MIXING: cpu time 0.0014: real time 0.0014 + -------------------------------------------- + LOOP: cpu time 79.2714: real time 79.3511 + + eigenvalue-minimisations : 50609 + total energy-change (2. order) :-0.4341303E-03 (-0.4497729E-03) + number of electron 493.9999956 magnetization + augmentation part 320.2174260 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 176, + dipolmoment 0.015796 0.015796 0.015796 electrons x Angstroem + Tr[quadrupol] -4780.150218 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000073 eV + added-field ion interaction 0.134475 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.4188 + 0.4188 + + free energy = -0.658032273463E+02 energy without entropy= -0.657959428620E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 3) --------------------------------------- + + + POTLOK: cpu time 3.2705: real time 3.2719 + SETDIJ: cpu time 0.0098: real time 0.0098 + EDDIAG: cpu time 18.7946: real time 18.9191 + RMM-DIIS: cpu time 61.4909: real time 61.5582 + ORTHCH: cpu time 2.7928: real time 2.8031 + DOS: cpu time 0.0140: real time 0.0140 + CHARGE: cpu time 4.2578: real time 4.2848 + MIXING: cpu time 0.0015: real time 0.0015 + -------------------------------------------- + LOOP: cpu time 90.6342: real time 90.8682 + + eigenvalue-minimisations : 64340 + total energy-change (2. order) :-0.5824960E-04 (-0.9769908E-04) + number of electron 493.9999956 magnetization + augmentation part 320.2150047 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 176, + dipolmoment 0.017985 0.017985 0.017985 electrons x Angstroem + Tr[quadrupol] -4780.144179 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000094 eV + added-field ion interaction 0.153116 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.4389 + 0.6945 0.1833 + + free energy = -0.658032855959E+02 energy without entropy= -0.657959085551E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 4) --------------------------------------- + + + POTLOK: cpu time 3.5360: real time 3.5374 + SETDIJ: cpu time 0.0101: real time 0.0101 + EDDIAG: cpu time 18.9209: real time 18.9331 + RMM-DIIS: cpu time 50.2521: real time 50.3669 + ORTHCH: cpu time 2.7867: real time 2.8031 + DOS: cpu time 0.0141: real time 0.0141 + CHARGE: cpu time 4.0718: real time 4.0923 + MIXING: cpu time 0.0015: real time 0.0015 + -------------------------------------------- + LOOP: cpu time 79.5954: real time 79.7646 + + eigenvalue-minimisations : 51045 + total energy-change (2. order) : 0.9394238E-04 (-0.6352577E-05) + number of electron 493.9999956 magnetization + augmentation part 320.2165219 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 176, + dipolmoment 0.016203 0.016203 0.016203 electrons x Angstroem + Tr[quadrupol] -4780.141861 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000077 eV + added-field ion interaction 0.137945 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.4320 + 0.5712 0.5712 0.1535 + + free energy = -0.658031916535E+02 energy without entropy= -0.657959032320E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 5) --------------------------------------- + + + POTLOK: cpu time 3.5990: real time 3.6002 + SETDIJ: cpu time 0.0102: real time 0.0102 + EDDIAG: cpu time 18.7115: real time 18.7189 + RMM-DIIS: cpu time 50.0488: real time 50.1398 + ORTHCH: cpu time 2.8294: real time 2.8399 + DOS: cpu time 0.0139: real time 0.0139 + CHARGE: cpu time 4.1100: real time 4.1113 + MIXING: cpu time 0.0018: real time 0.0018 + -------------------------------------------- + LOOP: cpu time 79.3267: real time 79.4416 + + eigenvalue-minimisations : 50647 + total energy-change (2. order) : 0.2680805E-04 (-0.2512804E-05) + number of electron 493.9999956 magnetization + augmentation part 320.2152486 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 176, + dipolmoment 0.016874 0.016874 0.016874 electrons x Angstroem + Tr[quadrupol] -4780.145436 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000083 eV + added-field ion interaction 0.143656 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.7886 + 1.3472 1.3472 0.3193 0.1407 + + free energy = -0.658031648455E+02 energy without entropy= -0.657958380955E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 6) --------------------------------------- + + + POTLOK: cpu time 3.6250: real time 3.6261 + SETDIJ: cpu time 0.0100: real time 0.0100 + EDDIAG: cpu time 18.6777: real time 18.7031 + RMM-DIIS: cpu time 49.9743: real time 50.0284 + ORTHCH: cpu time 2.8828: real time 2.8978 + DOS: cpu time 0.0139: real time 0.0139 + CHARGE: cpu time 4.0925: real time 4.1229 + MIXING: cpu time 0.0017: real time 0.0017 + -------------------------------------------- + LOOP: cpu time 79.2803: real time 79.4105 + + eigenvalue-minimisations : 50575 + total energy-change (2. order) : 0.1086062E-04 (-0.8156878E-05) + number of electron 493.9999956 magnetization + augmentation part 320.2163452 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 176, + dipolmoment 0.016698 0.016698 0.016698 electrons x Angstroem + Tr[quadrupol] -4780.143934 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000081 eV + added-field ion interaction 0.142152 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.8750 + 2.2677 1.2512 0.1418 0.3043 0.4102 + + free energy = -0.658031539848E+02 energy without entropy= -0.657958400572E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 7) --------------------------------------- + + + POTLOK: cpu time 3.6124: real time 3.6137 + SETDIJ: cpu time 0.0100: real time 0.0100 + EDDIAG: cpu time 18.6204: real time 18.6475 + RMM-DIIS: cpu time 50.0646: real time 50.1099 + ORTHCH: cpu time 2.8044: real time 2.8051 + DOS: cpu time 0.0142: real time 0.0142 + CHARGE: cpu time 4.0908: real time 4.1078 + MIXING: cpu time 0.0017: real time 0.0017 + -------------------------------------------- + LOOP: cpu time 79.2210: real time 79.3157 + + eigenvalue-minimisations : 51403 + total energy-change (2. order) : 0.4260823E-05 (-0.7157761E-05) + number of electron 493.9999956 magnetization + augmentation part 320.2160746 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 176, + dipolmoment 0.016810 0.016810 0.016810 electrons x Angstroem + Tr[quadrupol] -4780.143928 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000082 eV + added-field ion interaction 0.143107 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.8518 + 2.4506 0.9153 0.9153 0.1415 0.2985 0.3898 + + free energy = -0.658031497240E+02 energy without entropy= -0.657958270906E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 8) --------------------------------------- + + + POTLOK: cpu time 3.3579: real time 3.3772 + SETDIJ: cpu time 0.0101: real time 0.0101 + EDDIAG: cpu time 18.4535: real time 18.4620 + RMM-DIIS: cpu time 52.0214: real time 52.0927 + ORTHCH: cpu time 2.7227: real time 2.7329 + DOS: cpu time 0.0142: real time 0.0142 + CHARGE: cpu time 4.0879: real time 4.0898 + MIXING: cpu time 0.0018: real time 0.0018 + -------------------------------------------- + LOOP: cpu time 80.6717: real time 80.7866 + + eigenvalue-minimisations : 53857 + total energy-change (2. order) : 0.2084744E-05 (-0.5662328E-06) + number of electron 493.9999956 magnetization + augmentation part 320.2152608 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 176, + dipolmoment 0.016648 0.016648 0.016648 electrons x Angstroem + Tr[quadrupol] -4780.145217 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000081 eV + added-field ion interaction 0.141727 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.8036 + 2.4647 0.9512 0.9512 0.1414 0.4403 0.3826 0.2937 + + free energy = -0.658031476393E+02 energy without entropy= -0.657958366041E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 9) --------------------------------------- + + + POTLOK: cpu time 3.6431: real time 3.6803 + SETDIJ: cpu time 0.0096: real time 0.0099 + EDDIAG: cpu time 18.7159: real time 18.8095 + RMM-DIIS: cpu time 47.5318: real time 47.5706 + ORTHCH: cpu time 2.7244: real time 2.7253 + DOS: cpu time 0.0142: real time 0.0142 + CHARGE: cpu time 4.0610: real time 4.0897 + MIXING: cpu time 0.0018: real time 0.0018 + -------------------------------------------- + LOOP: cpu time 76.7042: real time 76.9071 + + eigenvalue-minimisations : 48430 + total energy-change (2. order) : 0.1440123E-05 (-0.1393189E-06) + number of electron 493.9999956 magnetization + augmentation part 320.2153872 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 176, + dipolmoment 0.016659 0.016659 0.016659 electrons x Angstroem + Tr[quadrupol] -4780.144887 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000081 eV + added-field ion interaction 0.141822 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.8185 + 2.4272 1.1102 1.1102 0.6987 0.1414 0.4227 0.2950 0.3426 + + free energy = -0.658031461992E+02 energy without entropy= -0.657958307391E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 10) --------------------------------------- + + + POTLOK: cpu time 3.4660: real time 3.4678 + SETDIJ: cpu time 0.0097: real time 0.0097 + EDDIAG: cpu time 18.7290: real time 18.7370 + RMM-DIIS: cpu time 38.0499: real time 38.1910 + ORTHCH: cpu time 2.7092: real time 2.7100 + DOS: cpu time 0.0136: real time 0.0136 + CHARGE: cpu time 4.1306: real time 4.1356 + MIXING: cpu time 0.0023: real time 0.0023 + -------------------------------------------- + LOOP: cpu time 67.1126: real time 67.2730 + + eigenvalue-minimisations : 38005 + total energy-change (2. order) : 0.7186754E-06 (-0.1248433E-06) + number of electron 493.9999956 magnetization + augmentation part 320.2155360 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 176, + dipolmoment 0.016675 0.016675 0.016675 electrons x Angstroem + Tr[quadrupol] -4780.144936 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000081 eV + added-field ion interaction 0.141957 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.9154 + 2.2398 1.4208 1.4208 1.3178 0.6427 0.1414 0.2958 0.4046 0.3552 + + free energy = -0.658031454805E+02 energy without entropy= -0.657958304220E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 11) --------------------------------------- + + + POTLOK: cpu time 3.7367: real time 3.7388 + SETDIJ: cpu time 0.0104: real time 0.0104 + EDDIAG: cpu time 18.6432: real time 18.6604 + RMM-DIIS: cpu time 46.7468: real time 46.7856 + ORTHCH: cpu time 2.8480: real time 2.8486 + DOS: cpu time 0.0140: real time 0.0140 + CHARGE: cpu time 4.2225: real time 4.2235 + MIXING: cpu time 0.0020: real time 0.0020 + -------------------------------------------- + LOOP: cpu time 76.2261: real time 76.2897 + + eigenvalue-minimisations : 48197 + total energy-change (2. order) : 0.3070891E-06 (-0.2335382E-06) + number of electron 493.9999956 magnetization + augmentation part 320.2155044 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 176, + dipolmoment 0.016670 0.016670 0.016670 electrons x Angstroem + Tr[quadrupol] -4780.144785 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000081 eV + added-field ion interaction 0.141917 eV (added to PSCEN) + + + eigenvalues of (default mixing * dielectric matrix) + average eigenvalue GAMMA= 0.9368 + 2.3000 1.8688 1.2968 1.2968 0.8078 0.1414 0.6036 0.2960 0.4034 0.3531 + + free energy = -0.658031451734E+02 energy without entropy= -0.657958297892E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + +----------------------------------------- Iteration 9( 12) --------------------------------------- + + + POTLOK: cpu time 3.5521: real time 3.5531 + SETDIJ: cpu time 0.0098: real time 0.0098 + EDDIAG: cpu time 18.5521: real time 18.5833 + RMM-DIIS: cpu time 30.9801: real time 31.0725 + ORTHCH: cpu time 2.8219: real time 2.8326 + DOS: cpu time 0.0140: real time 0.0140 + -------------------------------------------- + LOOP: cpu time 55.9320: real time 56.0711 + + eigenvalue-minimisations : 29650 + total energy-change (2. order) :-0.6053597E-07 (-0.1996265E-07) + number of electron 493.9999956 magnetization + augmentation part 320.2155044 magnetization + + DIPCOR: dipole corrections for dipol + direction 3 min pos 176, + dipolmoment 0.016669 0.016669 0.016669 electrons x Angstroem + Tr[quadrupol] -4780.144715 + + energy correction for charged system 0.000000 eV + dipol+quadrupol energy correction -0.000081 eV + added-field ion interaction 0.141911 eV (added to PSCEN) + + + free energy = -0.658031452339E+02 energy without entropy= -0.657958302503E+02 + + +-------------------------------------------------------------------------------------------------------- + + + + + average (electrostatic) potential at core + the test charge radii are 1.0053 1.1806 0.5201 + (the norm of the test charge is 1.0000) + 1 -43.2119 2 -43.2107 3 -43.2155 4 -43.2035 5 -43.2108 + 6 -43.2011 7 -43.2035 8 -43.2157 9 -43.2155 10 -43.4918 + 11 -43.4891 12 -43.4998 13 -43.4916 14 -43.4936 15 -43.4896 + 16 -43.4943 17 -43.4889 18 -43.4896 19 -43.1845 20 -43.4391 + 21 -43.4925 22 -43.1849 23 -43.4858 24 -43.4925 25 -43.1851 + 26 -43.4855 27 -43.5053 28 -43.1309 29 -43.3901 30 -43.5035 + 31 -43.3902 32 -43.4927 33 -43.1311 34 -43.4756 35 -43.5035 + 36 -43.1759 37 -43.4671 38 -43.5239 39 -43.2899 40 -43.4609 + 41 -43.4933 42 -43.2882 43 -43.4669 44 -43.4931 45 -54.2740 + 46 -37.1844 + + + + E-fermi : 0.0635 XC(G=0): -8.6082 alpha+bet : -5.6238 + + +-------------------------------------------------------------------------------------------------------- + + + soft charge-density along one line, spin component 1 + 0 1 2 3 4 5 6 7 8 9 + total charge-density along one line + + pseudopotential strength for first ion, spin component: 1 + -9.023 0.013 -0.015 0.013 -0.000 0.911 -0.006 0.007 + 0.013 -9.023 0.008 0.012 -0.014 -0.006 0.911 -0.004 + -0.015 0.008 -9.012 0.008 0.000 0.007 -0.004 0.906 + 0.013 0.012 0.008 -9.023 0.014 -0.006 -0.006 -0.004 + -0.000 -0.014 0.000 0.014 -9.012 0.000 0.007 -0.000 + 0.911 -0.006 0.007 -0.006 0.000 1.153 0.003 -0.003 + -0.006 0.911 -0.004 -0.006 0.007 0.003 1.153 0.002 + 0.007 -0.004 0.906 -0.004 -0.000 -0.003 0.002 1.155 + -0.006 -0.006 -0.004 0.911 -0.007 0.003 0.003 0.002 + 0.000 0.007 -0.000 -0.007 0.906 -0.000 -0.003 0.000 + -0.004 -0.004 0.000 -0.004 0.000 0.001 0.001 -0.000 + 0.000 0.000 -0.000 0.000 -0.000 -0.000 -0.000 0.000 + -0.004 -0.003 0.003 0.000 0.005 0.003 0.002 -0.002 + 0.000 -0.004 -0.005 -0.004 0.000 -0.000 0.003 0.003 + -0.004 0.000 0.003 -0.003 -0.005 0.003 -0.000 -0.002 + 0.002 0.002 -0.001 -0.000 -0.002 -0.001 -0.001 0.001 + -0.000 0.002 0.002 0.002 -0.000 0.000 -0.001 -0.001 + 0.002 -0.000 -0.001 0.002 0.002 -0.001 0.000 0.001 + total augmentation occupancy for first ion, spin component: 1 + 1.917 0.003 -0.002 0.003 -0.000 -0.024 -0.008 0.012 -0.008 -0.000 0.007 0.021 0.015 0.008 0.015 -0.003 + 0.003 1.916 0.001 0.003 -0.002 -0.008 -0.023 -0.006 -0.008 0.011 0.007 0.021 0.015 0.014 0.009 -0.003 + -0.002 0.001 1.921 0.001 0.000 0.012 -0.006 -0.049 -0.006 0.000 -0.002 -0.000 0.001 -0.001 0.001 0.001 + 0.003 0.003 0.001 1.916 0.002 -0.008 -0.008 -0.006 -0.023 -0.011 0.007 0.021 0.009 0.014 0.015 -0.000 + -0.000 -0.002 0.000 0.002 1.921 -0.000 0.011 0.000 -0.011 -0.048 0.000 0.000 0.002 0.000 -0.002 0.002 + -0.024 -0.008 0.012 -0.008 -0.000 0.061 0.001 0.008 0.001 -0.000 -0.049 0.008 0.023 0.001 0.023 -0.001 + -0.008 -0.023 -0.006 -0.008 0.011 0.001 0.061 -0.004 0.001 0.006 -0.049 0.008 0.023 0.023 -0.000 -0.001 + 0.012 -0.006 -0.049 -0.006 0.000 0.008 -0.004 0.051 -0.004 -0.000 0.001 0.000 -0.010 0.019 -0.010 0.001 + -0.008 -0.008 -0.006 -0.023 -0.011 0.001 0.001 -0.004 0.061 -0.006 -0.049 0.008 -0.000 0.023 0.023 0.000 + -0.000 0.011 0.000 -0.011 -0.048 -0.000 0.006 -0.000 -0.006 0.051 0.000 -0.000 -0.017 -0.000 0.017 0.001 + 0.007 0.007 -0.002 0.007 0.000 -0.049 -0.049 0.001 -0.049 0.000 1.260 -0.282 0.039 0.037 0.039 -0.007 + 0.021 0.021 -0.000 0.021 0.000 0.008 0.008 0.000 0.008 -0.000 -0.282 0.110 -0.028 -0.028 -0.028 0.003 + 0.015 0.015 0.001 0.009 0.002 0.023 0.023 -0.010 -0.000 -0.017 0.039 -0.028 0.149 -0.023 -0.023 -0.009 + 0.008 0.014 -0.001 0.014 0.000 0.001 0.023 0.019 0.023 -0.000 0.037 -0.028 -0.023 0.150 -0.023 0.001 + 0.015 0.009 0.001 0.015 -0.002 0.023 -0.000 -0.010 0.023 0.017 0.039 -0.028 -0.023 -0.023 0.149 0.001 + -0.003 -0.003 0.001 -0.000 0.002 -0.001 -0.001 0.001 0.000 0.001 -0.007 0.003 -0.009 0.001 0.001 0.001 + -0.000 -0.003 -0.002 -0.003 -0.000 0.000 -0.001 -0.002 -0.001 0.000 -0.007 0.003 0.001 -0.009 0.001 -0.000 + -0.003 -0.000 0.001 -0.003 -0.002 -0.001 0.000 0.001 -0.001 -0.001 -0.007 0.003 0.001 0.001 -0.009 -0.000 + + +------------------------ aborting loop because EDIFF is reached ---------------------------------------- + + + CHARGE: cpu time 4.1895: real time 4.1914 + FORLOC: cpu time 0.0200: real time 0.0200 + FORNL : cpu time 23.7749: real time 23.8039 + STRESS: cpu time 71.3976: real time 71.5000 + FORCOR: cpu time 3.3218: real time 3.3461 + FORHAR: cpu time 0.0370: real time 0.0371 + MIXING: cpu time 0.0019: real time 0.0019 + OFIELD: cpu time 0.0001: real time 0.0001 + + FORCE on cell =-STRESS in cart. coord. units (eV): + Direction XX YY ZZ XY YZ ZX + -------------------------------------------------------------------------------------- + Alpha Z 2776.92502 2776.92502 2776.92502 + Ewald 27570.90068 27569.36181 27584.56091-87978.45551-87961.55844-87954.62179 + Hartree 47230.35307 47229.77593 47243.70303-85425.14324-85407.89043-85404.30722 + E(xc) -2807.32829 -2807.32658 -2807.35352 0.01384 -0.08169 -0.07902 + Local -79226.14455-79224.14756-79254.44797173396.36113173359.48132173349.23076 + n-local -1665.70236 -1665.71942 -1665.80861 -1.74587 -2.73932 -2.67553 + augment 2521.72770 2521.76193 2522.01945 4.30798 4.88818 4.78768 + Kinetic 3588.14498 3588.13226 3589.71392 8.17783 10.98326 10.92662 + Fock 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 + ------------------------------------------------------------------------------------- + Total -11.12376 -11.23660 -10.68777 3.51615 3.08288 3.26151 + in kB -19.15540 -19.34973 -18.40461 6.05490 5.30881 5.61640 + external pressure = -18.97 kB Pullay stress = 0.00 kB + + + VOLUME and BASIS-vectors are now : + ----------------------------------------------------------------------------- + energy-cutoff : 400.00 + volume of cell : 930.40 + direct lattice vectors reciprocal lattice vectors + 5.412900000 -5.412900000 -0.000000000 0.123162568 -0.061581284 -0.061581284 + 0.000000000 5.412900000 -5.412900000 0.061581284 0.061581284 -0.123162568 + 10.584969359 10.584969359 10.584969359 0.031491195 0.031491195 0.031491195 + + length of vectors + 7.654996592 7.654996592 18.333704726 0.150842724 0.150842724 0.054544350 + + + FORCES acting on ions + electron-ion (+dipol) ewald-force non-local-force convergence-correction + ----------------------------------------------------------------------------------------------- + 0.194E+04 0.194E+04 0.194E+04 -.194E+04 -.194E+04 -.194E+04 -.376E+00 -.375E+00 -.260E+00 0.187E-02 0.186E-02 0.182E-02 + 0.194E+04 0.194E+04 0.194E+04 -.194E+04 -.194E+04 -.194E+04 -.349E+00 -.241E+00 -.329E+00 0.185E-02 0.174E-02 0.185E-02 + 0.194E+04 0.194E+04 0.194E+04 -.194E+04 -.194E+04 -.194E+04 -.360E+00 -.394E+00 -.451E+00 0.184E-02 0.190E-02 0.182E-02 + 0.194E+04 0.194E+04 0.194E+04 -.194E+04 -.194E+04 -.194E+04 -.423E+00 -.342E+00 -.407E+00 0.170E-02 0.181E-02 0.177E-02 + 0.194E+04 0.194E+04 0.194E+04 -.194E+04 -.194E+04 -.194E+04 -.243E+00 -.350E+00 -.331E+00 0.173E-02 0.184E-02 0.185E-02 + 0.194E+04 0.194E+04 0.194E+04 -.194E+04 -.194E+04 -.194E+04 -.359E+00 -.360E+00 -.290E+00 0.173E-02 0.174E-02 0.177E-02 + 0.194E+04 0.194E+04 0.194E+04 -.194E+04 -.194E+04 -.194E+04 -.341E+00 -.426E+00 -.406E+00 0.181E-02 0.170E-02 0.177E-02 + 0.194E+04 0.194E+04 0.194E+04 -.194E+04 -.194E+04 -.194E+04 -.425E+00 -.426E+00 -.370E+00 0.185E-02 0.184E-02 0.180E-02 + 0.194E+04 0.194E+04 0.194E+04 -.194E+04 -.194E+04 -.194E+04 -.395E+00 -.359E+00 -.455E+00 0.190E-02 0.183E-02 0.182E-02 + 0.975E+03 0.975E+03 0.973E+03 -.975E+03 -.975E+03 -.973E+03 -.299E+00 -.383E+00 -.369E+00 0.317E-02 0.290E-02 0.325E-02 + 0.975E+03 0.972E+03 0.975E+03 -.975E+03 -.972E+03 -.974E+03 -.316E+00 -.345E+00 -.406E+00 0.320E-02 0.326E-02 0.303E-02 + 0.974E+03 0.974E+03 0.974E+03 -.974E+03 -.974E+03 -.973E+03 -.590E+00 -.591E+00 -.574E+00 0.328E-02 0.327E-02 0.323E-02 + 0.975E+03 0.975E+03 0.973E+03 -.975E+03 -.975E+03 -.973E+03 -.384E+00 -.298E+00 -.368E+00 0.289E-02 0.316E-02 0.325E-02 + 0.974E+03 0.974E+03 0.975E+03 -.974E+03 -.974E+03 -.975E+03 -.369E+00 -.371E+00 -.193E+00 0.297E-02 0.298E-02 0.300E-02 + 0.974E+03 0.973E+03 0.975E+03 -.974E+03 -.973E+03 -.974E+03 -.372E+00 -.317E+00 -.336E+00 0.296E-02 0.333E-02 0.312E-02 + 0.973E+03 0.973E+03 0.974E+03 -.973E+03 -.973E+03 -.973E+03 -.448E+00 -.448E+00 -.434E+00 0.307E-02 0.305E-02 0.313E-02 + 0.972E+03 0.975E+03 0.975E+03 -.972E+03 -.975E+03 -.974E+03 -.343E+00 -.318E+00 -.410E+00 0.326E-02 0.317E-02 0.301E-02 + 0.973E+03 0.974E+03 0.974E+03 -.973E+03 -.974E+03 -.974E+03 -.316E+00 -.374E+00 -.338E+00 0.335E-02 0.296E-02 0.312E-02 + -.198E+04 -.194E+04 -.189E+04 0.198E+04 0.194E+04 0.189E+04 -.256E-01 0.137E+00 0.506E+00 -.288E-02 -.153E-03 0.234E-03 + -.101E+04 -.101E+04 -.959E+03 0.101E+04 0.101E+04 0.959E+03 -.804E+00 -.800E+00 -.176E+00 -.142E-02 -.894E-03 -.188E-02 + -.948E+01 -.409E+01 -.184E+01 0.949E+01 0.406E+01 0.185E+01 -.620E-02 0.179E-01 -.129E-01 0.731E-03 0.133E-02 0.854E-03 + -.194E+04 -.198E+04 -.189E+04 0.194E+04 0.198E+04 0.189E+04 0.134E+00 -.294E-01 0.504E+00 -.641E-03 -.330E-02 0.114E-02 + -.976E+03 -.997E+03 -.974E+03 0.976E+03 0.996E+03 0.973E+03 0.394E+00 0.708E+00 0.461E+00 0.116E-04 -.121E-02 -.686E-03 + -.412E+01 -.950E+01 -.198E+01 0.410E+01 0.951E+01 0.200E+01 0.180E-01 -.826E-02 -.132E-01 0.117E-02 0.689E-03 0.796E-03 + -.193E+04 -.193E+04 -.193E+04 0.193E+04 0.193E+04 0.193E+04 0.695E+00 0.695E+00 0.639E+00 -.904E-03 -.106E-02 0.119E-03 + -.997E+03 -.976E+03 -.974E+03 0.997E+03 0.976E+03 0.973E+03 0.706E+00 0.395E+00 0.461E+00 -.828E-03 0.590E-04 -.745E-03 + -.885E+01 -.889E+01 -.799E+01 0.888E+01 0.892E+01 0.802E+01 -.359E-01 -.369E-01 -.382E-01 0.131E-02 0.124E-02 0.905E-03 + -.198E+04 -.189E+04 -.194E+04 0.198E+04 0.189E+04 0.194E+04 0.205E+00 0.619E+00 0.626E-01 -.679E-03 -.110E-02 -.166E-02 + -.102E+04 -.970E+03 -.101E+04 0.102E+04 0.970E+03 0.101E+04 -.574E+00 0.206E+00 -.516E+00 0.325E-03 0.226E-03 -.284E-03 + -.668E+01 -.571E+01 -.765E+01 0.691E+01 0.572E+01 0.787E+01 -.224E+00 -.987E-02 -.211E+00 0.806E-03 0.146E-02 0.100E-02 + -.970E+03 -.102E+04 -.101E+04 0.970E+03 0.102E+04 0.101E+04 0.206E+00 -.572E+00 -.514E+00 -.297E-03 0.932E-04 -.112E-02 + -.579E+01 -.579E+01 -.110E+02 0.591E+01 0.590E+01 0.111E+02 -.114E+00 -.113E+00 -.312E-01 0.108E-02 0.121E-02 0.119E-02 + -.189E+04 -.198E+04 -.194E+04 0.189E+04 0.198E+04 0.194E+04 0.619E+00 0.204E+00 0.645E-01 0.157E-03 -.190E-02 -.162E-02 + -.980E+03 -.980E+03 -.982E+03 0.979E+03 0.979E+03 0.982E+03 0.440E+00 0.440E+00 0.328E+00 -.380E-03 -.686E-03 -.781E-03 + -.585E+01 -.675E+01 -.781E+01 0.586E+01 0.697E+01 0.802E+01 -.840E-02 -.222E+00 -.209E+00 0.145E-02 0.773E-03 0.896E-03 + -.194E+04 -.194E+04 -.194E+04 0.194E+04 0.194E+04 0.194E+04 0.446E+00 0.447E+00 0.412E+00 -.940E-03 -.121E-02 -.237E-03 + -.981E+03 -.980E+03 -.982E+03 0.981E+03 0.979E+03 0.982E+03 0.200E+00 0.539E+00 0.246E+00 -.781E-03 -.119E-02 0.514E-04 + -.698E+01 -.685E+01 -.745E+01 0.719E+01 0.706E+01 0.744E+01 -.213E+00 -.211E+00 0.425E-02 0.480E-03 0.557E-03 0.112E-02 + -.192E+04 -.191E+04 -.196E+04 0.192E+04 0.191E+04 0.196E+04 0.128E+01 -.598E+00 0.883E+00 -.117E-02 -.200E-02 -.524E-04 + -.977E+03 -.977E+03 -.101E+04 0.976E+03 0.977E+03 0.101E+04 0.215E+00 0.215E+00 0.578E+00 -.406E-03 -.255E-03 0.535E-03 + -.742E+01 -.611E+01 -.758E+01 0.743E+01 0.619E+01 0.766E+01 -.925E-02 -.801E-01 -.754E-01 0.898E-03 0.892E-03 0.121E-02 + -.191E+04 -.192E+04 -.196E+04 0.191E+04 0.192E+04 0.196E+04 -.594E+00 0.128E+01 0.883E+00 -.169E-02 -.544E-03 -.671E-03 + -.980E+03 -.981E+03 -.982E+03 0.980E+03 0.981E+03 0.982E+03 0.541E+00 0.202E+00 0.249E+00 -.106E-02 -.690E-03 -.224E-03 + -.606E+01 -.744E+01 -.762E+01 0.614E+01 0.744E+01 0.769E+01 -.804E-01 -.101E-01 -.758E-01 0.937E-03 0.944E-03 0.116E-02 + -.156E+04 -.156E+04 -.159E+04 0.156E+04 0.156E+04 0.159E+04 0.369E+00 0.367E+00 0.470E+00 -.167E-02 0.220E-02 -.800E-02 + -.200E+03 -.200E+03 -.209E+03 0.201E+03 0.201E+03 0.209E+03 -.106E+01 -.106E+01 -.488E+00 -.218E-03 -.103E-03 -.306E-03 + ----------------------------------------------------------------------------------------------- + 0.394E+01 0.394E+01 0.229E+01 -.284E-11 -.443E-11 0.909E-12 -.399E+01 -.399E+01 -.234E+01 0.378E-01 0.397E-01 0.373E-01 + + + POSITION TOTAL-FORCE (eV/Angst) + ----------------------------------------------------------------------------------- + 1.20287 -0.60143 -0.60143 0.062487 0.064794 0.036132 + 1.20287 1.20287 -2.40573 0.069014 0.040583 0.061341 + 1.20287 3.00717 -4.21003 0.054679 0.052612 0.056969 + 3.00717 -2.40573 -0.60143 0.057658 0.054309 0.058003 + 3.00717 -0.60143 -2.40573 0.040735 0.068887 0.060833 + 3.00717 1.20287 -4.21003 0.052308 0.052151 0.059203 + 4.81147 -4.21003 -0.60143 0.055503 0.056006 0.058628 + 4.81147 -2.40573 -2.40573 0.049974 0.049841 0.046561 + 4.81147 -0.60143 -4.21003 0.053256 0.055444 0.055417 + 1.20287 1.20287 1.20287 -0.073618 -0.062810 -0.042832 + 1.20287 3.00717 -0.60143 -0.073437 -0.029965 -0.059236 + 1.20287 4.81147 -2.40573 -0.063064 -0.058310 -0.057064 + 3.00717 -0.60143 1.20287 -0.066322 -0.068639 -0.042239 + 3.00717 1.20287 -0.60143 -0.053324 -0.049395 -0.058824 + 3.00717 3.00717 -2.40573 -0.053766 -0.039627 -0.060195 + 4.81147 -2.40573 1.20287 -0.042917 -0.039247 -0.056796 + 4.81147 -0.60143 -0.60143 -0.032497 -0.068488 -0.058433 + 4.81147 1.20287 -2.40573 -0.043254 -0.049671 -0.060357 + 10.17795 4.78143 -0.62955 -0.000024 -0.000243 -0.001196 + 4.76857 2.97396 2.98027 -0.000228 -0.001176 0.001931 + 2.98550 2.99546 1.18713 0.002327 -0.001502 0.000909 + 6.57378 8.38460 -0.63035 0.001256 -0.001820 -0.000691 + 6.59564 1.20084 2.98263 0.000309 -0.003150 -0.000113 + 4.79514 1.18627 1.18722 -0.000709 0.002167 0.000830 + 8.39022 1.18446 4.74233 -0.000258 -0.001512 -0.000695 + 8.40892 -0.61242 2.98311 -0.001599 -0.001027 -0.000779 + 6.60936 -0.60307 1.19619 -0.003428 -0.004210 -0.004748 + 10.18923 1.20659 2.96892 -0.000461 0.000370 0.000694 + 4.78284 4.79162 1.16964 -0.001925 0.003236 -0.000650 + 2.99770 4.80776 -0.61146 0.002989 -0.001067 0.001435 + 6.58699 2.98791 1.16990 0.004696 -0.003391 -0.000660 + 4.79827 2.99892 -0.62093 0.003629 0.002841 -0.001377 + 8.41236 2.98355 2.96883 0.001905 -0.002152 0.000790 + 8.40541 1.19725 1.18355 -0.001956 -0.003143 0.000651 + 6.60726 1.19875 -0.61122 -0.000027 0.001901 0.001575 + 4.78163 8.40179 1.16108 -0.000267 -0.002202 -0.002476 + 4.80262 6.59937 -0.61209 0.002577 0.000747 0.002086 + 2.99538 6.60906 -2.41007 -0.002365 -0.003353 0.003712 + 6.61068 6.64556 1.16772 0.001432 -0.004134 -0.001320 + 6.60065 4.80528 -0.62780 0.001431 0.000305 -0.001566 + 4.80185 4.80863 -2.41587 -0.001927 -0.001112 -0.001072 + 8.43837 4.81828 1.16813 -0.002170 -0.000318 -0.001873 + 8.39466 3.00770 -0.61173 0.002160 0.001562 0.002030 + 6.60810 3.00244 -2.41590 -0.000529 -0.002233 -0.000805 + 6.59613 4.80338 2.99576 -0.000733 -0.002234 -0.001335 + 7.74940 5.95882 2.40145 0.000480 -0.001626 0.007600 + ----------------------------------------------------------------------------------- + total drift: -0.012824 -0.011951 -0.015943 + + +-------------------------------------------------------------------------------------------------------- + + + + FREE ENERGIE OF THE ION-ELECTRON SYSTEM (eV) + --------------------------------------------------- + free energy TOTEN = -65.80656538 eV + + energy without entropy= -65.79928006 energy(sigma->0) = -65.80413694 + + d Force = 0.7435348E-04[ 0.396E-04, 0.109E-03] d Energy = 0.8704079E-04-0.127E-04 + d Force =-0.2962159E+02[-0.296E+02,-0.296E+02] d Ewald =-0.2962159E+02-0.111E-05 + + +-------------------------------------------------------------------------------------------------------- + + + POTLOK: cpu time 3.4605: real time 3.4614 + + +-------------------------------------------------------------------------------------------------------- + + + stress matrix after NEB project (eV) + -11.12376 3.51615 3.26151 + 3.51615 -11.23660 3.08288 + 3.26151 3.08288 -10.68777 + FORCES: max atom, RMS 0.007787 0.002902 + FORCE total and by dimension 0.019685 0.007600 + Stress total and by dimension 20.718045 11.236605 + Conjugate gradient step on ions: + trial-energy change: -0.000087 1 .order -0.000074 -0.000109 -0.000040 + (g-gl).g = 0.519E-04 g.g = 0.444E-04 gl.gl = 0.113E-03 + g(Force) = 0.444E-04 g(Stress)= 0.000E+00 ortho =-0.834E-05 + gamma = 0.45943 + trial = 2.69288 + opt step = 3.34260 (harmonic = 4.22531) maximal distance =0.00141851 + next E = -65.806570 (d E = -0.00009) + + +-------------------------------------------------------------------------------------------------------- + + + + reached required accuracy - stopping structural energy minimisation + LOOP+: cpu time 763.6263: real time 765.4248 + 4ORBIT: cpu time 0.0000: real time 0.0000 + + total amount of memory used by VASP on root node 284329. kBytes +======================================================================== + + base : 30000. kBytes + nonlr-proj: 15232. kBytes + fftplans : 5374. kBytes + grid : 9312. kBytes + one-center: 186. kBytes + wavefun : 224225. kBytes + + + + General timing and accounting informations for this job: + ======================================================== + + Total CPU time used (sec): 23671.191 + User time (sec): 22429.561 + System time (sec): 1241.630 + Elapsed time (sec): 23725.816 + + Maximum memory used (kb): 516676. + Average memory used (kb): 0. + + Minor page faults: 3055140 + Major page faults: 36 + Voluntary context switches: 1178822 diff --git a/tests/data/datamodel/metainfo/test_cas_substance.archive.yaml b/tests/data/datamodel/metainfo/test_cas_substance.archive.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f6b25572d8cee519416867d82b20ca6e21d54839 --- /dev/null +++ b/tests/data/datamodel/metainfo/test_cas_substance.archive.yaml @@ -0,0 +1,14 @@ +definitions: + name: My custom schemas + sections: + MyCASSubstance: + base_sections: + - nomad.datamodel.metainfo.basesections.PureSubstance + - nomad.datamodel.data.EntryData + +data: + m_def: MyCASSubstance + name: My PbI2 CAS Substance + pure_substance: + m_def: nomad.datamodel.metainfo.basesections.CASPureSubstanceSection + name: Lead Iodide diff --git a/tests/data/datamodel/metainfo/test_not_overwrite_substance.archive.yaml b/tests/data/datamodel/metainfo/test_not_overwrite_substance.archive.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1e24f4061a9af60ebfa3e9c3a2cc8b9e0d43fa63 --- /dev/null +++ b/tests/data/datamodel/metainfo/test_not_overwrite_substance.archive.yaml @@ -0,0 +1,15 @@ +definitions: + name: My custom schemas + sections: + MyPubChemSubstance: + base_sections: + - nomad.datamodel.metainfo.basesections.PureSubstance + - nomad.datamodel.data.EntryData + +data: + m_def: MyPubChemSubstance + name: My PbI2 PubChem Substance + pure_substance: + m_def: nomad.datamodel.metainfo.basesections.PubChemPureSubstanceSection + pub_chem_cid: 24601 # CID for Cesium Iodide to check that molecular formula is not overwritten + molecular_formula: PbI2 diff --git a/tests/data/datamodel/metainfo/test_pub_chem_substance.archive.yaml b/tests/data/datamodel/metainfo/test_pub_chem_substance.archive.yaml new file mode 100644 index 0000000000000000000000000000000000000000..ccf039e206c06005dee6629c16c7b04063b2480f --- /dev/null +++ b/tests/data/datamodel/metainfo/test_pub_chem_substance.archive.yaml @@ -0,0 +1,14 @@ +definitions: + name: My custom schemas + sections: + MyPubChemSubstance: + base_sections: + - nomad.datamodel.metainfo.basesections.PureSubstance + - nomad.datamodel.data.EntryData + +data: + m_def: MyPubChemSubstance + name: My PbI2 PubChem Substance + pure_substance: + m_def: nomad.datamodel.metainfo.basesections.PubChemPureSubstanceSection + name: PbI2 diff --git a/tests/data/datamodel/metainfo/test_substance.archive.yaml b/tests/data/datamodel/metainfo/test_substance.archive.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2c767f38c98b69ff4e1ef00db8ec3381a1334560 --- /dev/null +++ b/tests/data/datamodel/metainfo/test_substance.archive.yaml @@ -0,0 +1,13 @@ +definitions: + name: My custom schemas + sections: + MySubstance: + base_sections: + - nomad.datamodel.metainfo.basesections.PureSubstance + - nomad.datamodel.data.EntryData + +data: + m_def: MySubstance + name: My substance + pure_substance: + molecular_formula: PbI2 diff --git a/tests/data/examples/example.out b/tests/data/examples/example.out new file mode 100644 index 0000000000000000000000000000000000000000..2a09ee68fa5a18fb2bae077714b210018a567fba --- /dev/null +++ b/tests/data/examples/example.out @@ -0,0 +1,18 @@ +2020/05/15 + *** super_code v2 *** + +system 1 +-------- +sites: H(1.23, 0, 0), H(-1.23, 0, 0), O(0, 0.33, 0) +latice: (0, 0, 0), (1, 0, 0), (1, 1, 0) +energy: 1.29372 + +*** This was done with magic source *** +*** x°42 *** + + +system 2 +-------- +sites: H(1.23, 0, 0), H(-1.23, 0, 0), O(0, 0.33, 0) +cell: (0, 0, 0), (1, 0, 0), (1, 1, 0) +energy: 1.29372 \ No newline at end of file diff --git a/tests/data/parsers/chemotion/test.zip b/tests/data/parsers/chemotion/test.zip new file mode 100644 index 0000000000000000000000000000000000000000..ea486fbf33502a85180b27daa3e9466433a2c378 Binary files /dev/null and b/tests/data/parsers/chemotion/test.zip differ diff --git a/tests/data/parsers/gromacs/fe_test/conf.gro b/tests/data/parsers/gromacs/fe_test/conf.gro new file mode 100644 index 0000000000000000000000000000000000000000..bbbf92b7c9e97aa514402c157df695e2b55434f7 --- /dev/null +++ b/tests/data/parsers/gromacs/fe_test/conf.gro @@ -0,0 +1,1519 @@ +tryptophane in water + 1516 + 1TRP CB 1 1.392 1.368 1.221 0.0718 0.1385 -0.4537 + 1TRP CG 2 1.424 1.224 1.260 -0.3865 -0.1867 0.1240 + 1TRP CD1 3 1.365 1.142 1.347 -1.0180 0.1531 0.2727 + 1TRP HD1 4 1.309 1.177 1.433 -1.5144 1.5383 -0.0649 + 1TRP CD2 5 1.495 1.138 1.176 -0.1130 -0.0205 0.0658 + 1TRP NE1 6 1.391 1.018 1.322 0.5846 -0.7925 0.7415 + 1TRP HE1 7 1.354 0.940 1.375 -2.9571 -0.5204 0.6068 + 1TRP CE2 8 1.472 1.005 1.216 -0.2019 -0.0563 0.2170 + 1TRP CE3 9 1.571 1.165 1.066 0.3788 0.0107 -0.4516 + 1TRP HE3 10 1.575 1.268 1.025 2.1114 -2.5439 1.1020 + 1TRP CZ2 11 1.527 0.896 1.152 -0.2999 0.6139 -0.0091 + 1TRP HZ2 12 1.517 0.796 1.194 -0.5772 1.4629 -1.2374 + 1TRP CZ3 13 1.626 1.056 0.993 0.8304 1.1663 0.0961 + 1TRP HZ3 14 1.694 1.070 0.906 1.5681 2.0013 -0.0360 + 1TRP CH2 15 1.603 0.923 1.036 -0.1225 0.2123 -0.1288 + 1TRP HH2 16 1.635 0.848 0.968 -1.1065 -1.4310 2.9827 + 2SOL OW 17 2.360 0.246 1.334 0.1760 -0.4673 -0.2847 + 2SOL HW1 18 2.302 0.319 1.369 0.7238 0.0506 -0.4475 + 2SOL HW2 19 2.426 0.219 1.404 0.3614 -0.3992 -0.4318 + 3SOL OW 20 0.011 0.139 0.802 -0.7348 0.0374 -0.1380 + 3SOL HW1 21 -0.044 0.211 0.760 0.0564 0.3632 -0.6405 + 3SOL HW2 22 0.107 0.149 0.772 -0.7440 -1.6176 -0.7591 + 4SOL OW 23 0.641 1.126 1.394 0.1190 0.2110 0.4110 + 4SOL HW1 24 0.679 1.180 1.469 -0.6315 -1.3125 1.9307 + 4SOL HW2 25 0.626 1.032 1.426 1.1735 -0.8318 -2.0971 + 5SOL OW 26 1.718 1.413 0.518 0.1001 0.3467 -0.0644 + 5SOL HW1 27 1.635 1.458 0.485 -1.5123 -1.8065 0.9482 + 5SOL HW2 28 1.779 1.393 0.441 -0.9775 0.6227 -0.9895 + 6SOL OW 29 1.392 0.677 0.092 -0.0627 -0.5111 -0.0837 + 6SOL HW1 30 1.443 0.714 0.014 1.9677 0.4742 1.7045 + 6SOL HW2 31 1.443 0.602 0.133 -1.0450 -0.9068 0.4313 + 7SOL OW 32 0.830 0.941 0.686 1.0792 0.3393 -0.1010 + 7SOL HW1 33 0.731 0.958 0.684 1.3456 2.0293 0.5825 + 7SOL HW2 34 0.856 0.889 0.605 -0.8148 -2.6363 1.1476 + 8SOL OW 35 1.442 0.369 2.428 -0.0932 0.8591 -0.0072 + 8SOL HW1 36 1.350 0.409 2.434 -0.4234 0.3129 -1.5168 + 8SOL HW2 37 1.481 0.388 2.338 0.9484 0.3576 0.3357 + 9SOL OW 38 0.762 1.042 1.148 0.6011 -0.3629 0.6368 + 9SOL HW1 39 0.755 1.101 1.228 0.2007 -0.0351 0.3645 + 9SOL HW2 40 0.784 1.098 1.068 0.4406 -0.6096 0.4187 + 10SOL OW 41 0.874 1.050 1.695 -0.6880 0.3850 -0.4833 + 10SOL HW1 42 0.838 1.134 1.653 -2.0294 0.7987 1.4656 + 10SOL HW2 43 0.820 1.027 1.776 0.1478 -1.9622 -0.5753 + 11SOL OW 44 0.823 0.770 0.925 0.1818 0.0082 0.1075 + 11SOL HW1 45 0.728 0.742 0.920 -0.5411 2.2292 1.2861 + 11SOL HW2 46 0.844 0.829 0.847 -0.2569 2.0678 1.5445 + 12SOL OW 47 0.915 0.802 1.597 0.1100 -1.1201 0.0081 + 12SOL HW1 48 0.920 0.891 1.644 1.9370 -1.3936 0.3486 + 12SOL HW2 49 0.958 0.810 1.507 -1.6475 -1.1070 -0.8378 + 13SOL OW 50 0.611 1.677 1.224 -0.7195 -0.2584 -0.0651 + 13SOL HW1 51 0.637 1.667 1.321 2.0988 -0.3812 -0.8113 + 13SOL HW2 52 0.543 1.607 1.201 0.8993 -2.2292 1.0416 + 14SOL OW 53 1.625 1.604 1.456 -0.4365 0.1738 -0.4623 + 14SOL HW1 54 1.533 1.581 1.487 -0.3335 1.0796 0.4950 + 14SOL HW2 55 1.690 1.536 1.492 -0.5875 0.1030 -0.3212 + 15SOL OW 56 0.768 0.570 1.672 -0.1321 -0.7793 0.1512 + 15SOL HW1 57 0.810 0.651 1.633 -0.6032 -0.7623 -0.3233 + 15SOL HW2 58 0.690 0.597 1.728 -0.6042 -0.9453 -0.4270 + 16SOL OW 59 1.982 -0.002 0.515 -0.7916 0.0787 0.0101 + 16SOL HW1 60 1.884 -0.014 0.499 -1.0905 0.5594 1.3767 + 16SOL HW2 61 1.995 0.070 0.584 0.5753 1.0565 -1.2454 + 17SOL OW 62 1.582 1.828 1.305 -0.3142 0.6831 -0.1462 + 17SOL HW1 63 1.495 1.862 1.340 -1.5423 -1.1325 -1.4145 + 17SOL HW2 64 1.609 1.747 1.357 -0.1791 0.3118 -0.7923 + 18SOL OW 65 0.987 1.418 1.446 -0.6634 -0.2716 0.0343 + 18SOL HW1 66 0.987 1.490 1.377 0.1367 -0.1812 0.1261 + 18SOL HW2 67 0.968 1.330 1.402 0.2881 -0.2790 -0.3617 + 19SOL OW 68 0.180 1.548 1.589 -0.3322 0.1237 0.1686 + 19SOL HW1 69 0.274 1.562 1.559 -0.2321 -1.0710 -0.0851 + 19SOL HW2 70 0.129 1.498 1.518 -0.3350 -1.9109 1.5812 + 20SOL OW 71 0.158 1.029 0.203 -0.1031 0.3762 0.6458 + 20SOL HW1 72 0.239 1.007 0.258 0.9014 -0.2987 -1.0887 + 20SOL HW2 73 0.154 1.128 0.188 -0.1494 0.5207 1.5648 + 21SOL OW 74 1.248 1.030 0.377 0.2551 0.0131 0.1402 + 21SOL HW1 75 1.173 0.973 0.345 0.4003 0.8080 -1.6717 + 21SOL HW2 76 1.212 1.116 0.413 0.3779 1.0226 -2.1115 + 22SOL OW 77 0.412 0.769 0.345 0.3937 0.3666 -0.1001 + 22SOL HW1 78 0.495 0.739 0.392 0.5504 1.0523 0.0617 + 22SOL HW2 79 0.413 0.734 0.251 0.3793 -0.4779 0.2078 + 23SOL OW 80 1.922 1.296 0.376 0.2089 0.4022 -0.0276 + 23SOL HW1 81 1.919 1.199 0.351 1.0617 0.3598 0.0350 + 23SOL HW2 82 1.979 1.308 0.457 0.2785 0.9832 -0.1620 + 24SOL OW 83 2.183 1.469 0.344 0.1974 -0.0756 0.3075 + 24SOL HW1 84 2.098 1.459 0.395 -1.0166 -1.2867 -1.9371 + 24SOL HW2 85 2.219 1.378 0.321 0.8221 0.4621 -0.8460 + 25SOL OW 86 0.521 1.364 1.027 -0.1251 0.0098 -0.1926 + 25SOL HW1 87 0.580 1.406 0.958 0.0294 1.6539 0.9116 + 25SOL HW2 88 0.449 1.429 1.053 -0.0708 -0.5271 1.3125 + 26SOL OW 89 0.781 0.427 0.443 -0.3227 -0.2450 -0.3777 + 26SOL HW1 90 0.879 0.441 0.428 0.0092 -0.3276 1.7222 + 26SOL HW2 91 0.765 0.393 0.535 -2.4592 0.9744 -0.2685 + 27SOL OW 92 2.166 0.906 0.395 0.0200 -0.0237 -0.0820 + 27SOL HW1 93 2.074 0.888 0.360 -0.1073 -1.1857 0.8475 + 27SOL HW2 94 2.231 0.907 0.319 -0.4625 -1.1351 -0.5107 + 28SOL OW 95 1.501 2.181 1.207 -0.1609 0.3614 0.1743 + 28SOL HW1 96 1.420 2.127 1.227 0.3157 -0.8674 -1.1194 + 28SOL HW2 97 1.508 2.195 1.108 0.8812 0.9479 0.3288 + 29SOL OW 98 1.161 1.544 0.169 0.2456 -0.2356 -0.4000 + 29SOL HW1 99 1.255 1.513 0.175 1.1792 2.7204 0.6172 + 29SOL HW2 100 1.135 1.592 0.253 -1.7025 0.2305 -1.2378 + 30SOL OW 101 1.041 1.183 0.204 -0.3200 -0.7620 0.1291 + 30SOL HW1 102 1.018 1.251 0.134 -0.5822 -2.8000 -1.7752 + 30SOL HW2 103 1.066 1.230 0.288 -0.6275 1.7092 -1.1298 + 31SOL OW 104 1.007 0.922 0.304 -0.2038 -0.5209 0.2708 + 31SOL HW1 105 0.970 1.010 0.275 -0.7468 -0.4268 1.2548 + 31SOL HW2 106 1.037 0.871 0.223 1.6243 1.2343 -0.1689 + 32SOL OW 107 2.171 1.397 2.477 -0.8750 0.2422 -0.3710 + 32SOL HW1 108 2.075 1.408 2.504 -1.2603 -0.8361 -1.2727 + 32SOL HW2 109 2.176 1.340 2.395 0.5546 0.1104 -0.1984 + 33SOL OW 110 1.057 0.067 1.457 -0.0796 0.1202 -0.5109 + 33SOL HW1 111 1.069 0.166 1.468 -1.1945 0.2963 -0.8671 + 33SOL HW2 112 1.144 0.026 1.431 0.3755 1.0250 -0.4234 + 34SOL OW 113 1.745 0.589 1.100 -0.3738 0.3346 -0.0880 + 34SOL HW1 114 1.770 0.551 1.189 -0.7925 0.1347 -0.0517 + 34SOL HW2 115 1.786 0.679 1.089 -1.0712 0.7560 0.6928 + 35SOL OW 116 1.350 0.890 1.627 0.1922 -0.1832 -0.2325 + 35SOL HW1 117 1.279 0.916 1.692 -0.4427 0.2147 -1.0715 + 35SOL HW2 118 1.425 0.957 1.630 0.2985 -0.3262 0.2947 + 36SOL OW 119 1.086 0.350 1.494 -0.2427 0.2785 -0.9162 + 36SOL HW1 120 1.181 0.377 1.511 -0.6518 2.4208 -1.9028 + 36SOL HW2 121 1.030 0.375 1.573 0.3448 -2.8825 0.5541 + 37SOL OW 122 0.340 0.880 0.630 -0.2510 -0.3337 -0.1946 + 37SOL HW1 123 0.333 0.876 0.530 -0.5279 2.0615 -0.2866 + 37SOL HW2 124 0.249 0.872 0.670 -0.1941 -0.7585 -0.1441 + 38SOL OW 125 0.429 2.228 2.052 0.1652 -0.5245 -0.3638 + 38SOL HW1 126 0.419 2.232 2.151 -3.4042 0.1717 -0.7205 + 38SOL HW2 127 0.436 2.133 2.023 -1.3919 -0.8702 0.3519 + 39SOL OW 128 0.093 0.554 0.691 -0.3935 -0.5686 0.4621 + 39SOL HW1 129 0.001 0.593 0.698 -0.2041 -0.0141 -0.0875 + 39SOL HW2 130 0.127 0.567 0.598 0.3422 -0.5568 0.7341 + 40SOL OW 131 2.276 0.467 1.459 0.2613 0.1541 -0.2575 + 40SOL HW1 132 2.203 0.511 1.510 1.2946 1.4971 0.0532 + 40SOL HW2 133 2.361 0.519 1.468 1.4753 -1.8153 0.0279 + 41SOL OW 134 1.083 1.423 0.975 -0.4029 -0.5441 0.1147 + 41SOL HW1 135 1.022 1.455 0.903 -0.7517 -1.4920 -0.0100 + 41SOL HW2 136 1.178 1.442 0.949 -0.5994 0.2925 -0.0060 + 42SOL OW 137 0.357 0.550 0.919 -0.0872 -0.1090 -0.3012 + 42SOL HW1 138 0.418 0.506 0.984 -0.3334 0.3687 0.2552 + 42SOL HW2 139 0.267 0.563 0.961 -0.2763 0.1118 -0.7687 + 43SOL OW 140 0.880 1.348 0.623 -0.7932 0.5319 0.1671 + 43SOL HW1 141 0.807 1.395 0.673 -0.8839 -0.3195 0.8401 + 43SOL HW2 142 0.922 1.279 0.682 1.5309 2.0175 0.2739 + 44SOL OW 143 0.321 2.053 1.218 -0.2710 0.0010 0.0176 + 44SOL HW1 144 0.258 2.130 1.224 1.3854 1.3127 1.0183 + 44SOL HW2 145 0.317 1.999 1.302 1.2998 1.1959 0.8891 + 45SOL OW 146 1.772 1.144 1.354 0.2215 0.2832 -0.4849 + 45SOL HW1 147 1.782 1.067 1.417 -3.3498 2.2132 2.5163 + 45SOL HW2 148 1.693 1.128 1.295 0.3202 1.0076 -0.8121 + 46SOL OW 149 1.340 1.935 1.364 -0.3941 -0.4628 -0.2782 + 46SOL HW1 150 1.272 1.878 1.318 0.1948 -0.7923 -0.7455 + 46SOL HW2 151 1.296 1.990 1.435 -0.9284 -1.6453 0.3033 + 47SOL OW 152 1.319 0.628 0.415 0.5960 0.0881 -0.2459 + 47SOL HW1 153 1.334 0.619 0.317 0.1490 -0.3791 -0.2751 + 47SOL HW2 154 1.407 0.631 0.463 0.7799 -3.1236 -0.3576 + 48SOL OW 155 2.074 1.104 1.692 0.1135 -0.4213 0.1471 + 48SOL HW1 156 2.128 1.053 1.759 0.8626 2.1322 1.5228 + 48SOL HW2 157 2.135 1.150 1.627 -0.4253 1.2302 0.7832 + 49SOL OW 158 1.393 1.417 0.191 0.1299 0.3729 0.0745 + 49SOL HW1 159 1.423 1.416 0.096 2.4238 0.2360 0.7901 + 49SOL HW2 160 1.401 1.325 0.229 0.3481 0.6692 0.7488 + 50SOL OW 161 0.690 0.472 2.117 -0.0228 0.2283 0.2103 + 50SOL HW1 162 0.593 0.475 2.137 0.1985 -0.4768 1.4033 + 50SOL HW2 163 0.706 0.415 2.036 -0.5974 0.3493 0.0138 + 51SOL OW 164 1.982 1.650 0.485 -0.3095 -0.2737 0.0378 + 51SOL HW1 165 2.070 1.672 0.527 0.1826 -0.0608 -1.1088 + 51SOL HW2 166 1.921 1.729 0.492 -0.4687 -0.4714 0.9655 + 52SOL OW 167 2.112 1.685 0.152 0.1345 0.4830 0.1342 + 52SOL HW1 168 2.174 1.721 0.082 0.4010 1.7776 1.0373 + 52SOL HW2 169 2.165 1.634 0.220 0.4768 3.1347 1.9136 + 53SOL OW 170 1.127 2.397 0.177 -0.2205 -0.2565 0.3652 + 53SOL HW1 171 1.150 2.488 0.212 -0.6742 -1.0180 2.7352 + 53SOL HW2 172 1.209 2.340 0.176 0.0033 0.0815 -0.8282 + 54SOL OW 173 2.459 1.913 0.564 -0.3214 -0.3531 -0.2662 + 54SOL HW1 174 2.392 1.845 0.534 -0.5770 0.2093 -0.9911 + 54SOL HW2 175 2.429 2.004 0.536 0.8850 -0.1230 -0.8500 + 55SOL OW 176 0.962 1.185 1.026 -0.1328 -0.2854 0.2794 + 55SOL HW1 177 0.962 1.136 0.939 0.9431 0.7153 -0.2859 + 55SOL HW2 178 1.008 1.273 1.015 -0.6194 0.1512 1.6878 + 56SOL OW 179 0.021 0.293 2.259 0.9589 -0.0770 -0.0634 + 56SOL HW1 180 0.063 0.307 2.349 -0.0031 0.0966 0.3624 + 56SOL HW2 181 0.038 0.199 2.229 1.6416 -0.0132 0.1068 + 57SOL OW 182 1.279 0.125 1.633 -0.1163 1.0487 0.1302 + 57SOL HW1 183 1.342 0.136 1.710 -0.0148 2.5276 -0.1569 + 57SOL HW2 184 1.186 0.144 1.663 -0.4418 -1.1999 0.5701 + 58SOL OW 185 0.238 2.433 0.222 0.7792 0.5317 0.2142 + 58SOL HW1 186 0.294 2.360 0.182 0.8128 0.5584 0.2109 + 58SOL HW2 187 0.143 2.403 0.226 1.1269 -0.3285 2.1499 + 59SOL OW 188 0.566 0.652 2.397 0.3303 -0.1282 -0.4506 + 59SOL HW1 189 0.641 0.586 2.408 0.6264 0.3369 0.3796 + 59SOL HW2 190 0.496 0.634 2.466 -0.2822 -0.5052 -1.1725 + 60SOL OW 191 0.434 1.624 1.510 0.2208 0.1781 0.0243 + 60SOL HW1 192 0.438 1.708 1.564 -0.7405 0.3109 -0.1149 + 60SOL HW2 193 0.517 1.570 1.527 1.0195 1.3254 -0.1779 + 61SOL OW 194 1.151 0.474 1.081 -0.4778 0.2118 0.1562 + 61SOL HW1 195 1.211 0.546 1.115 -0.0479 -0.0584 -0.0260 + 61SOL HW2 196 1.086 0.513 1.015 -0.6971 0.5597 0.5798 + 62SOL OW 197 0.673 1.688 0.947 0.3619 -0.2551 0.6478 + 62SOL HW1 198 0.640 1.694 1.041 -0.1323 -0.8738 0.5143 + 62SOL HW2 199 0.766 1.725 0.942 1.0023 -1.7200 1.6944 + 63SOL OW 200 1.329 0.763 0.817 -0.0322 0.7360 0.1879 + 63SOL HW1 201 1.408 0.709 0.846 -0.1581 1.1841 1.3727 + 63SOL HW2 202 1.294 0.814 0.895 -1.7474 0.2158 -0.2385 + 64SOL OW 203 0.576 1.678 0.539 -0.0811 0.3772 -0.6932 + 64SOL HW1 204 0.512 1.726 0.599 1.0982 1.0390 0.0571 + 64SOL HW2 205 0.559 1.579 0.544 -0.0378 0.4382 0.6591 + 65SOL OW 206 2.159 0.436 0.417 -0.4339 -0.1243 0.5133 + 65SOL HW1 207 2.181 0.461 0.322 -1.9593 -0.1958 0.1326 + 65SOL HW2 208 2.196 0.345 0.436 -0.5479 -0.3219 -0.1813 + 66SOL OW 209 0.621 0.069 2.472 0.2213 0.1032 -0.2942 + 66SOL HW1 210 0.597 0.135 2.400 -2.0721 -0.0169 0.3438 + 66SOL HW2 211 0.667 -0.010 2.431 -1.8671 -0.3735 -1.7581 + 67SOL OW 212 1.481 0.317 0.601 -0.8295 0.1414 0.1919 + 67SOL HW1 213 1.522 0.407 0.612 -1.1177 0.2444 0.4312 + 67SOL HW2 214 1.436 0.312 0.512 -0.8109 0.2311 0.1764 + 68SOL OW 215 1.079 0.811 1.375 0.5500 0.6833 0.4713 + 68SOL HW1 216 1.023 0.774 1.301 -1.3163 0.7269 1.8344 + 68SOL HW2 217 1.162 0.757 1.385 -0.8893 -1.5068 0.6857 + 69SOL OW 218 1.312 1.507 0.832 0.2024 -0.9992 -0.1456 + 69SOL HW1 219 1.365 1.427 0.804 -0.1352 -0.9079 -1.0667 + 69SOL HW2 220 1.372 1.573 0.876 0.6177 -1.4548 -0.0281 + 70SOL OW 221 0.042 0.774 1.126 0.0751 -0.3159 -0.2389 + 70SOL HW1 222 0.069 0.685 1.090 0.8154 -0.4424 0.6211 + 70SOL HW2 223 -0.042 0.804 1.080 -1.7002 -2.6896 1.3568 + 71SOL OW 224 0.997 0.103 0.930 -0.0793 0.1054 -0.0327 + 71SOL HW1 225 0.904 0.079 0.902 -0.5311 2.0000 -0.1825 + 71SOL HW2 226 1.010 0.077 1.025 -0.5798 -0.6618 -0.1657 + 72SOL OW 227 0.999 0.757 2.330 -0.1795 0.0253 -0.3142 + 72SOL HW1 228 0.921 0.797 2.378 0.9577 1.2865 0.5465 + 72SOL HW2 229 1.069 0.828 2.318 1.7090 -1.6102 0.8450 + 73SOL OW 230 0.705 0.082 1.939 0.2490 0.1931 -0.6764 + 73SOL HW1 231 0.649 0.101 2.019 1.3405 -1.0506 0.4134 + 73SOL HW2 232 0.671 0.000 1.893 0.3817 0.1718 -0.7398 + 74SOL OW 233 0.629 0.264 0.943 -0.0272 -0.1527 -0.2706 + 74SOL HW1 234 0.672 0.187 0.897 0.0975 -1.2672 1.7154 + 74SOL HW2 235 0.532 0.246 0.955 -0.1551 0.3487 -0.5397 + 75SOL OW 236 1.454 0.232 1.029 0.2639 0.0304 0.0877 + 75SOL HW1 237 1.387 0.202 1.097 -0.2263 1.4363 0.2446 + 75SOL HW2 238 1.408 0.260 0.945 0.4258 3.1662 0.9868 + 76SOL OW 239 1.771 1.598 0.727 0.0262 0.2100 0.8280 + 76SOL HW1 240 1.755 1.516 0.672 -0.6831 -0.1495 1.5426 + 76SOL HW2 241 1.869 1.615 0.735 0.0856 1.3792 -2.1362 + 77SOL OW 242 1.562 0.518 0.903 -0.1876 -0.1974 -0.0641 + 77SOL HW1 243 1.606 0.537 0.991 -0.4680 -1.1269 0.2807 + 77SOL HW2 244 1.558 0.420 0.889 -1.3196 -0.0931 -0.5218 + 78SOL OW 245 1.942 1.118 0.805 -0.2975 0.2403 -0.4125 + 78SOL HW1 246 2.024 1.071 0.773 -1.1058 0.2413 -2.5816 + 78SOL HW2 247 1.891 1.058 0.867 1.1966 0.1490 0.7298 + 79SOL OW 248 2.422 1.522 2.400 -0.4659 -0.2100 0.4678 + 79SOL HW1 249 2.344 1.477 2.443 -0.5612 -0.7277 -0.2408 + 79SOL HW2 250 2.445 1.475 2.314 0.3428 0.2065 0.4501 + 80SOL OW 251 1.739 1.295 0.763 0.0956 0.5584 -0.6809 + 80SOL HW1 252 1.804 1.219 0.761 -0.3703 0.1993 -2.1973 + 80SOL HW2 253 1.747 1.348 0.679 -1.2100 0.8221 -0.6393 + 81SOL OW 254 1.560 0.509 0.226 -0.1097 -0.0435 0.0662 + 81SOL HW1 255 1.596 0.531 0.135 -1.0712 -0.2499 -0.3594 + 81SOL HW2 256 1.626 0.538 0.295 -0.4165 2.2697 -0.5901 + 82SOL OW 257 0.655 1.786 0.304 0.0405 0.3061 -0.2510 + 82SOL HW1 258 0.602 1.749 0.381 -0.4600 1.9441 0.1991 + 82SOL HW2 259 0.719 1.716 0.271 -1.7966 -1.4086 -0.2495 + 83SOL OW 260 1.374 1.202 1.798 0.0398 0.2394 -0.5627 + 83SOL HW1 261 1.277 1.180 1.793 -0.8094 3.5195 0.6130 + 83SOL HW2 262 1.404 1.243 1.712 -0.1841 1.3130 -0.1392 + 84SOL OW 263 1.494 1.826 1.039 -0.5054 -0.8988 0.0334 + 84SOL HW1 264 1.530 1.827 1.132 -1.5540 -0.4394 0.4456 + 84SOL HW2 265 1.515 1.739 0.995 0.2682 -0.9887 0.5914 + 85SOL OW 266 1.717 1.017 0.203 -0.0353 0.4988 0.2485 + 85SOL HW1 267 1.786 1.084 0.174 -1.1461 1.5748 0.0971 + 85SOL HW2 268 1.763 0.933 0.234 1.2624 0.1875 -2.4211 + 86SOL OW 269 1.328 0.248 0.795 0.6318 -0.3285 0.2272 + 86SOL HW1 270 1.396 0.269 0.725 1.6477 0.0116 1.3200 + 86SOL HW2 271 1.237 0.273 0.762 0.9396 -1.5618 -1.5628 + 87SOL OW 272 1.416 1.248 2.272 -0.4077 -0.0713 -0.0582 + 87SOL HW1 273 1.480 1.308 2.321 -0.3233 0.1206 -0.3982 + 87SOL HW2 274 1.389 1.172 2.331 -1.0121 0.6525 0.5975 + 88SOL OW 275 0.575 0.698 0.848 0.1827 -0.2067 -0.8371 + 88SOL HW1 276 0.635 0.618 0.849 0.0074 -0.3788 -2.4768 + 88SOL HW2 277 0.480 0.668 0.840 -0.0334 0.0960 0.6572 + 89SOL OW 278 0.625 0.672 1.177 -0.0473 0.2009 0.6196 + 89SOL HW1 279 0.590 0.658 1.270 -0.5605 1.7819 0.6599 + 89SOL HW2 280 0.701 0.737 1.180 0.3043 -0.1830 0.0060 + 90SOL OW 281 1.356 0.731 1.416 0.4373 0.1556 -0.0250 + 90SOL HW1 282 1.428 0.662 1.421 0.4802 0.1757 -0.3088 + 90SOL HW2 283 1.351 0.781 1.502 -1.3433 -1.9482 1.1415 + 91SOL OW 284 0.182 0.601 0.427 0.3428 0.3462 0.4429 + 91SOL HW1 285 0.115 0.625 0.357 0.3777 -0.2110 0.2167 + 91SOL HW2 286 0.270 0.643 0.405 0.2581 0.4790 0.3540 + 92SOL OW 287 0.501 0.434 1.132 0.1680 0.2379 0.4833 + 92SOL HW1 288 0.554 0.516 1.152 1.5539 -0.4970 -0.1478 + 92SOL HW2 289 0.563 0.360 1.104 -1.0949 -0.9181 0.7195 + 93SOL OW 290 1.457 1.292 0.745 -0.4129 -0.6087 0.2060 + 93SOL HW1 291 1.556 1.286 0.756 -0.2394 0.4292 -0.7356 + 93SOL HW2 292 1.428 1.230 0.671 -0.3510 -0.2601 -0.1146 + 94SOL OW 293 1.021 0.498 0.189 0.3648 -0.2764 -0.8509 + 94SOL HW1 294 1.041 0.476 0.284 1.7478 -1.8595 -1.4859 + 94SOL HW2 295 1.058 0.588 0.167 0.3281 -0.0513 0.0239 + 95SOL OW 296 0.001 1.732 1.643 -0.2292 -0.0849 -0.0536 + 95SOL HW1 297 -0.021 1.784 1.561 0.0813 0.0145 -0.0753 + 95SOL HW2 298 0.065 1.658 1.620 0.6426 0.5650 0.2780 + 96SOL OW 299 0.530 0.432 1.869 0.0480 0.2842 0.2022 + 96SOL HW1 300 0.477 0.397 1.791 -1.7006 1.3781 0.8733 + 96SOL HW2 301 0.493 0.395 1.954 0.1302 1.3382 0.7031 + 97SOL OW 302 1.790 1.396 1.538 -0.3421 0.0427 0.1855 + 97SOL HW1 303 1.809 1.327 1.468 0.1993 -0.3514 0.7241 + 97SOL HW2 304 1.875 1.421 1.584 -0.5760 0.8898 0.1619 + 98SOL OW 305 1.060 2.492 1.186 0.5431 0.2651 -0.0484 + 98SOL HW1 306 1.035 2.401 1.153 -1.6065 1.1334 -0.8574 + 98SOL HW2 307 1.044 2.496 1.285 1.2698 -0.4268 0.1061 + 99SOL OW 308 0.098 0.795 2.229 0.2588 0.5046 0.1378 + 99SOL HW1 309 0.197 0.801 2.219 0.3378 -0.7426 0.1645 + 99SOL HW2 310 0.068 0.701 2.211 -1.0713 1.1989 -1.3289 + 100SOL OW 311 0.924 0.779 1.169 -0.6791 -0.0244 -0.3474 + 100SOL HW1 312 0.921 0.871 1.208 2.0095 0.2658 -0.7653 + 100SOL HW2 313 0.883 0.779 1.078 -0.6006 0.7728 -0.3829 + 101SOL OW 314 1.256 0.944 0.995 0.8969 -0.0750 -0.7516 + 101SOL HW1 315 1.334 0.991 1.036 1.0190 -1.3347 0.4690 + 101SOL HW2 316 1.182 1.009 0.980 2.1093 1.0910 -1.7406 + 102SOL OW 317 0.658 0.662 0.423 0.3208 -0.4090 -0.6247 + 102SOL HW1 318 0.661 0.562 0.425 -0.4960 -0.4184 1.1858 + 102SOL HW2 319 0.750 0.698 0.433 0.4865 -0.9755 -0.0595 + 103SOL OW 320 0.423 0.341 1.654 0.0113 -0.2157 0.7827 + 103SOL HW1 321 0.467 0.320 1.567 -0.7339 1.9768 -0.1335 + 103SOL HW2 322 0.339 0.393 1.638 -0.1676 0.1403 2.7895 + 104SOL OW 323 2.270 1.461 0.691 0.3304 0.8278 -0.7309 + 104SOL HW1 324 2.285 1.372 0.734 -0.6356 0.4520 -1.1534 + 104SOL HW2 325 2.348 1.484 0.632 -0.0925 -0.4354 -1.8026 + 105SOL OW 326 0.287 0.168 1.280 0.2050 0.0290 -0.0689 + 105SOL HW1 327 0.212 0.182 1.345 0.1817 -0.3129 -0.0241 + 105SOL HW2 328 0.373 0.200 1.320 0.0903 0.3809 -0.1023 + 106SOL OW 329 1.387 1.389 2.027 0.5529 -0.0894 0.3643 + 106SOL HW1 330 1.379 1.349 2.119 0.2234 -1.7276 -0.3638 + 106SOL HW2 331 1.375 1.317 1.959 2.4183 0.8333 -0.9458 + 107SOL OW 332 0.003 0.435 1.872 0.6663 0.6534 -0.6037 + 107SOL HW1 333 -0.070 0.380 1.831 0.8298 0.1670 -0.2484 + 107SOL HW2 334 0.087 0.423 1.819 0.2513 1.9442 -1.5624 + 108SOL OW 335 1.566 0.612 0.546 0.1185 -0.2530 -0.1415 + 108SOL HW1 336 1.645 0.598 0.487 -0.0854 -1.5218 -0.1192 + 108SOL HW2 337 1.591 0.670 0.624 1.2550 -1.4223 0.3605 + 109SOL OW 338 0.999 0.564 0.860 -0.2140 0.3971 0.1870 + 109SOL HW1 339 1.058 0.614 0.797 0.3877 -0.0103 0.4265 + 109SOL HW2 340 0.925 0.624 0.891 -0.9244 0.3817 -1.4670 + 110SOL OW 341 1.043 1.429 1.707 -0.8235 0.8380 0.7768 + 110SOL HW1 342 1.031 1.434 1.608 1.6627 -1.3285 0.3402 + 110SOL HW2 343 1.096 1.507 1.738 0.7689 0.0648 0.0141 + 111SOL OW 344 1.494 1.552 1.840 -0.2759 -0.2046 -0.0439 + 111SOL HW1 345 1.440 1.488 1.896 -0.1891 -1.6565 -1.5979 + 111SOL HW2 346 1.591 1.526 1.844 -0.1581 0.2117 -0.1700 + 112SOL OW 347 0.419 1.221 1.276 -0.5049 0.4418 -0.7289 + 112SOL HW1 348 0.442 1.272 1.193 -0.7767 1.7590 0.0040 + 112SOL HW2 349 0.499 1.214 1.334 -1.1849 2.5091 0.4828 + 113SOL OW 350 0.327 0.645 0.119 0.0308 -0.2844 0.8829 + 113SOL HW1 351 0.309 0.547 0.123 -0.9409 -0.0858 1.7731 + 113SOL HW2 352 0.245 0.693 0.086 0.7525 0.1494 -0.2664 + 114SOL OW 353 1.997 0.597 0.196 -0.4463 -0.3016 -0.2505 + 114SOL HW1 354 1.942 0.548 0.263 -0.9811 1.4087 0.5649 + 114SOL HW2 355 1.986 0.553 0.106 -1.0066 -1.6055 0.4479 + 115SOL OW 356 1.124 1.243 0.471 -0.2480 0.0484 -0.6536 + 115SOL HW1 357 1.152 1.331 0.511 -0.2906 0.8407 -2.3499 + 115SOL HW2 358 1.042 1.210 0.518 -0.2911 0.9673 -0.0719 + 116SOL OW 359 0.289 0.483 1.284 0.2198 -0.1694 -0.1886 + 116SOL HW1 360 0.374 0.465 1.235 1.3879 0.4736 1.5964 + 116SOL HW2 361 0.212 0.444 1.232 1.4587 0.2188 -2.3520 + 117SOL OW 362 0.766 1.162 2.173 -0.5572 -0.9441 0.1712 + 117SOL HW1 363 0.814 1.079 2.149 -0.7445 -0.5448 -1.5969 + 117SOL HW2 364 0.807 1.240 2.125 -2.5884 -0.5212 -0.9065 + 118SOL OW 365 1.785 0.200 0.918 -0.5519 0.6786 -0.2046 + 118SOL HW1 366 1.879 0.232 0.907 -0.0541 0.1164 2.1964 + 118SOL HW2 367 1.735 0.263 0.978 -1.5357 0.6536 -0.9900 + 119SOL OW 368 1.795 0.518 0.403 -0.1299 0.1886 0.0183 + 119SOL HW1 369 1.856 0.547 0.477 -0.0429 0.9400 -0.3465 + 119SOL HW2 370 1.797 0.418 0.396 -1.3525 0.0088 2.0560 + 120SOL OW 371 0.528 0.955 1.027 0.1488 -0.0669 0.0291 + 120SOL HW1 372 0.535 0.858 1.004 1.4838 0.3546 -1.3547 + 120SOL HW2 373 0.610 0.983 1.077 1.4729 1.2128 -2.8079 + 121SOL OW 374 0.958 0.401 1.260 0.5075 -0.9822 -0.4172 + 121SOL HW1 375 1.025 0.373 1.329 1.1101 0.7375 -0.2849 + 121SOL HW2 376 1.006 0.429 1.177 0.1311 2.7187 0.5588 + 122SOL OW 377 1.504 0.603 1.643 0.4315 0.4851 0.0236 + 122SOL HW1 378 1.415 0.564 1.669 -0.4337 2.7679 0.5512 + 122SOL HW2 379 1.537 0.557 1.561 -1.4746 -0.0802 -0.4561 + 123SOL OW 380 0.750 0.214 1.238 -0.4016 -0.0270 -0.2146 + 123SOL HW1 381 0.842 0.252 1.237 -0.0072 -0.9474 0.5209 + 123SOL HW2 382 0.709 0.222 1.147 0.3316 0.5473 -0.4945 + 124SOL OW 383 1.915 0.583 0.658 -0.0107 -0.0343 0.4439 + 124SOL HW1 384 1.855 0.600 0.736 -0.3257 1.2577 -0.0755 + 124SOL HW2 385 1.991 0.649 0.660 0.3099 -0.3942 0.0019 + 125SOL OW 386 0.519 0.243 1.420 -0.8950 0.0645 -0.4387 + 125SOL HW1 387 0.568 0.157 1.434 -0.5435 0.6080 1.6959 + 125SOL HW2 388 0.580 0.310 1.379 -1.1446 -0.6752 -2.0330 + 126SOL OW 389 1.085 1.794 1.326 0.1781 -0.3831 -0.1724 + 126SOL HW1 390 1.051 1.704 1.296 -1.4048 0.2897 -0.4208 + 126SOL HW2 391 1.046 1.865 1.267 1.3881 0.4778 0.0625 + 127SOL OW 392 0.764 0.156 0.544 -0.2774 -0.2687 -0.5790 + 127SOL HW1 393 0.859 0.133 0.522 -0.4206 0.1193 -1.6222 + 127SOL HW2 394 0.704 0.083 0.510 -0.3291 -0.6494 0.3271 + 128SOL OW 395 1.676 0.944 2.387 0.3393 -0.5354 0.6218 + 128SOL HW1 396 1.692 0.978 2.480 2.3828 0.5047 -0.0777 + 128SOL HW2 397 1.691 0.845 2.384 1.2274 -0.4264 1.2145 + 129SOL OW 398 2.114 1.682 0.762 -0.7029 0.0069 -0.3752 + 129SOL HW1 399 2.133 1.779 0.744 -0.5670 0.2983 1.3057 + 129SOL HW2 400 2.185 1.626 0.720 0.2427 0.7441 0.2165 + 130SOL OW 401 1.210 1.857 1.037 0.3164 -0.0296 -0.3607 + 130SOL HW1 402 1.230 1.925 0.967 -0.5088 -0.2978 -0.8551 + 130SOL HW2 403 1.295 1.811 1.064 0.5252 -0.4530 -1.7128 + 131SOL OW 404 0.150 1.327 1.186 -0.0149 0.4284 0.2708 + 131SOL HW1 405 0.105 1.377 1.260 -0.9015 0.5918 -0.3779 + 131SOL HW2 406 0.179 1.237 1.220 -2.1049 -0.2456 0.3066 + 132SOL OW 407 0.886 2.052 1.457 -0.5540 0.5674 0.1130 + 132SOL HW1 408 0.921 1.980 1.397 0.2797 1.3535 -0.3614 + 132SOL HW2 409 0.925 2.140 1.429 -0.3057 0.9699 1.6861 + 133SOL OW 410 0.362 0.373 0.158 -0.5031 0.2155 0.2946 + 133SOL HW1 411 0.290 0.335 0.215 -0.3477 1.2950 1.2188 + 133SOL HW2 412 0.451 0.352 0.198 -0.4024 1.2073 0.6054 + 134SOL OW 413 1.638 0.134 0.231 0.1533 -0.1578 0.6407 + 134SOL HW1 414 1.549 0.175 0.251 0.8998 1.0606 1.5241 + 134SOL HW2 415 1.651 0.130 0.132 -0.9358 -0.4683 0.4983 + 135SOL OW 416 0.843 1.640 0.517 0.3591 -0.1256 -0.0948 + 135SOL HW1 417 0.853 1.542 0.504 -0.2429 -0.4377 1.6720 + 135SOL HW2 418 0.746 1.664 0.521 0.5004 0.5679 -0.7501 + 136SOL OW 419 2.310 2.149 2.103 0.2213 -0.2480 0.3395 + 136SOL HW1 420 2.286 2.052 2.108 0.2027 -0.2375 0.4644 + 136SOL HW2 421 2.366 2.174 2.182 1.5306 -0.5283 -0.4783 + 137SOL OW 422 1.265 0.994 0.647 0.2484 -0.0449 0.1932 + 137SOL HW1 423 1.270 0.970 0.550 -3.4733 0.7808 -0.2198 + 137SOL HW2 424 1.298 0.917 0.702 -0.3991 -1.6197 -1.5929 + 138SOL OW 425 0.856 1.639 1.721 -0.3620 -0.1786 -0.1657 + 138SOL HW1 426 0.899 1.558 1.760 -1.4566 -0.8619 -0.3791 + 138SOL HW2 427 0.897 1.721 1.761 0.4176 -0.8357 0.3910 + 139SOL OW 428 0.844 1.663 2.378 -0.2090 0.0331 -0.3772 + 139SOL HW1 429 0.813 1.752 2.412 -1.5661 -0.5722 -0.0148 + 139SOL HW2 430 0.941 1.669 2.354 -0.2427 1.5593 -0.1826 + 140SOL OW 431 1.328 2.042 0.860 0.1798 0.4306 0.1303 + 140SOL HW1 432 1.282 2.127 0.835 -1.5454 -0.3886 0.4704 + 140SOL HW2 433 1.414 2.063 0.906 0.7076 1.9665 -1.5340 + 141SOL OW 434 0.386 0.132 1.009 -0.4643 0.0061 -0.3018 + 141SOL HW1 435 0.417 0.037 1.018 -0.8002 -0.0638 0.1035 + 141SOL HW2 436 0.351 0.164 1.097 -0.6059 0.4165 -0.5095 + 142SOL OW 437 1.257 1.646 2.020 -0.0315 -0.4900 -0.0091 + 142SOL HW1 438 1.286 1.556 2.054 -1.0192 -0.0920 1.9278 + 142SOL HW2 439 1.314 1.717 2.062 -0.4823 -0.0746 -0.0916 + 143SOL OW 440 0.971 1.179 1.310 0.2193 0.0443 -0.7095 + 143SOL HW1 441 0.990 1.089 1.349 -3.5542 -1.3473 -2.0032 + 143SOL HW2 442 0.985 1.176 1.211 -1.3794 0.5085 -0.9482 + 144SOL OW 443 1.059 0.319 0.792 -0.4904 0.1629 0.0551 + 144SOL HW1 444 1.032 0.239 0.845 -2.5597 0.5444 -0.4007 + 144SOL HW2 445 1.007 0.399 0.823 -0.2682 0.8020 -1.1962 + 145SOL OW 446 1.480 1.158 0.248 -0.1388 0.3862 -0.4782 + 145SOL HW1 447 1.405 1.096 0.270 -0.2203 1.2422 1.7222 + 145SOL HW2 448 1.564 1.105 0.234 -0.1917 -0.2015 1.4460 + 146SOL OW 449 0.339 0.965 1.291 0.3548 0.0143 0.4303 + 146SOL HW1 450 0.373 1.058 1.295 0.7364 -0.1302 0.5434 + 146SOL HW2 451 0.298 0.948 1.201 1.1408 -0.0135 0.0775 + 147SOL OW 452 1.022 1.119 0.710 0.0162 -0.3855 0.2595 + 147SOL HW1 453 0.958 1.043 0.700 0.0511 -0.2303 -1.1380 + 147SOL HW2 454 1.114 1.089 0.685 0.4694 -0.5448 2.0431 + 148SOL OW 455 1.235 0.210 1.188 0.5670 0.4968 0.0639 + 148SOL HW1 456 1.205 0.287 1.131 0.4277 0.7408 0.4601 + 148SOL HW2 457 1.164 0.140 1.188 0.3700 0.6954 0.3056 + 149SOL OW 458 2.367 0.921 0.219 -0.3991 0.4078 0.3079 + 149SOL HW1 459 2.365 0.821 0.223 -1.3323 0.3756 -0.8199 + 149SOL HW2 460 2.462 0.952 0.226 0.1178 -0.6552 -1.7349 + 150SOL OW 461 2.309 1.238 0.807 0.3633 -0.1352 -0.5443 + 150SOL HW1 462 2.281 1.163 0.748 0.1516 0.5226 -1.2872 + 150SOL HW2 463 2.406 1.227 0.831 0.4082 -0.4859 -0.8800 + 151SOL OW 464 0.303 1.056 1.972 -0.4978 -0.3867 0.1681 + 151SOL HW1 465 0.348 0.984 1.920 0.2491 -0.2288 0.5960 + 151SOL HW2 466 0.315 1.143 1.925 -0.3083 -0.3366 0.3059 + 152SOL OW 467 0.915 0.237 2.039 0.6464 -0.7383 0.4663 + 152SOL HW1 468 0.862 0.163 1.997 -0.5062 1.0987 -1.3681 + 152SOL HW2 469 1.010 0.230 2.010 0.0849 -0.1669 -1.6031 + 153SOL OW 470 1.877 0.836 0.953 -0.3648 0.2996 -0.0567 + 153SOL HW1 471 1.913 0.876 1.038 -1.7476 1.0945 0.1557 + 153SOL HW2 472 1.938 0.763 0.923 0.1688 0.0564 1.5812 + 154SOL OW 473 0.577 2.392 0.448 0.0333 0.5903 -0.4231 + 154SOL HW1 474 0.597 2.295 0.438 0.4580 0.6752 -0.4016 + 154SOL HW2 475 0.547 2.429 0.360 0.1730 0.5102 -0.5049 + 155SOL OW 476 1.115 0.754 0.104 0.3998 0.2990 0.2153 + 155SOL HW1 477 1.214 0.744 0.116 0.5372 -0.9381 -1.8078 + 155SOL HW2 478 1.092 0.738 0.008 -1.6105 1.8871 0.4331 + 156SOL OW 479 0.139 1.030 1.107 0.0912 -0.1068 -0.6397 + 156SOL HW1 480 0.091 0.944 1.090 2.0103 -1.1448 -0.8574 + 156SOL HW2 481 0.129 1.090 1.028 1.2318 -1.2827 -1.6799 + 157SOL OW 482 1.244 1.898 0.633 0.6919 -0.0393 -0.4288 + 157SOL HW1 483 1.287 1.961 0.696 0.1731 0.7508 -0.8616 + 157SOL HW2 484 1.314 1.846 0.584 1.1079 0.0286 0.0914 + 158SOL OW 485 0.691 0.493 1.405 -0.0300 0.3157 -0.2995 + 158SOL HW1 486 0.769 0.466 1.350 -0.8208 -1.3638 -0.5937 + 158SOL HW2 487 0.715 0.489 1.502 0.3027 0.0241 -0.3970 + 159SOL OW 488 1.389 1.536 1.546 0.1245 0.1471 -0.2921 + 159SOL HW1 489 1.384 1.563 1.642 0.7443 -0.0122 -0.2122 + 159SOL HW2 490 1.302 1.555 1.501 -0.4873 -0.6807 0.5350 + 160SOL OW 491 0.081 1.882 2.099 -0.0990 0.1099 0.0868 + 160SOL HW1 492 0.057 1.896 2.003 0.6242 0.8616 0.0114 + 160SOL HW2 493 0.003 1.844 2.148 -0.4193 -0.4277 -0.8354 + 161SOL OW 494 1.739 0.859 0.511 -0.4873 0.1146 0.0398 + 161SOL HW1 495 1.705 0.952 0.502 -0.9253 -0.1591 -1.1442 + 161SOL HW2 496 1.758 0.840 0.608 1.1554 1.9668 0.1011 + 162SOL OW 497 1.038 0.176 0.525 -0.3252 0.4549 0.5344 + 162SOL HW1 498 1.065 0.080 0.532 1.8387 1.1257 1.2699 + 162SOL HW2 499 1.019 0.213 0.616 -1.6971 0.5925 0.2112 + 163SOL OW 500 0.922 0.768 0.509 -0.1739 -0.2958 -0.8053 + 163SOL HW1 501 0.995 0.737 0.570 0.8669 1.8855 -0.9191 + 163SOL HW2 502 0.960 0.831 0.441 -2.4031 1.9166 -0.0143 + 164SOL OW 503 2.079 0.740 1.294 0.3419 -0.6340 0.0231 + 164SOL HW1 504 2.065 0.750 1.392 2.5239 0.3638 0.2365 + 164SOL HW2 505 2.126 0.654 1.275 1.7915 0.1562 0.0226 + 165SOL OW 506 1.712 1.557 1.142 -0.4048 0.6597 0.3824 + 165SOL HW1 507 1.710 1.530 1.238 -0.6301 1.8868 0.7195 + 165SOL HW2 508 1.745 1.651 1.134 -1.4493 0.9394 -0.6616 + 166SOL OW 509 0.985 1.385 0.027 -0.1720 0.2887 0.1363 + 166SOL HW1 510 0.988 1.396 -0.072 -0.8812 -0.2944 0.0447 + 166SOL HW2 511 1.051 1.447 0.070 -1.7486 2.4490 -0.5242 + 167SOL OW 512 0.535 1.930 1.110 0.4485 0.3660 0.6893 + 167SOL HW1 513 0.525 1.838 1.148 -0.5434 -0.1378 -0.7784 + 167SOL HW2 514 0.456 1.986 1.137 0.3523 0.3700 0.4027 + 168SOL OW 515 1.205 2.188 1.499 0.4008 -0.1326 -0.1717 + 168SOL HW1 516 1.177 2.189 1.595 -1.7145 1.8887 -0.7858 + 168SOL HW2 517 1.237 2.279 1.473 1.8690 -0.9184 -1.1394 + 169SOL OW 518 1.290 0.690 1.157 0.3798 -0.8891 0.1483 + 169SOL HW1 519 1.309 0.685 1.255 2.1701 -1.2878 -0.2093 + 169SOL HW2 520 1.277 0.785 1.130 1.6506 -0.6241 0.4516 + 170SOL OW 521 1.056 1.401 2.213 -0.2449 0.1771 0.0362 + 170SOL HW1 522 1.104 1.482 2.245 0.4601 -0.6549 1.0862 + 170SOL HW2 523 1.118 1.346 2.156 -1.0905 0.9923 -1.6937 + 171SOL OW 524 2.288 1.694 0.442 -0.1411 -0.3250 0.7225 + 171SOL HW1 525 2.243 1.610 0.413 1.1191 -1.0612 0.8938 + 171SOL HW2 526 2.369 1.709 0.385 0.3114 0.1426 1.4942 + 172SOL OW 527 0.172 1.092 0.535 0.2165 -0.7474 -0.1103 + 172SOL HW1 528 0.264 1.093 0.575 0.7406 -2.6920 -1.2580 + 172SOL HW2 529 0.164 1.165 0.468 0.2466 0.7470 1.4876 + 173SOL OW 530 0.320 1.221 1.561 0.2204 0.7453 0.0870 + 173SOL HW1 531 0.318 1.211 1.461 -1.1116 0.0927 0.1650 + 173SOL HW2 532 0.328 1.317 1.584 1.0723 0.8559 -0.6614 + 174SOL OW 533 1.760 2.427 0.803 -0.3505 0.3514 -0.2346 + 174SOL HW1 534 1.838 2.368 0.824 0.3545 1.1430 -0.5781 + 174SOL HW2 535 1.745 2.491 0.879 0.3393 1.2479 -0.8359 + 175SOL OW 536 0.690 2.265 2.457 0.0610 0.1025 -0.3972 + 175SOL HW1 537 0.702 2.224 2.547 1.1058 1.9503 0.3333 + 175SOL HW2 538 0.755 2.224 2.393 0.9562 0.4611 0.2723 + 176SOL OW 539 1.978 1.217 1.168 0.0348 -0.7739 -0.0889 + 176SOL HW1 540 1.936 1.278 1.102 -1.3804 0.2391 1.7385 + 176SOL HW2 541 1.914 1.198 1.242 1.6720 -1.7481 1.1058 + 177SOL OW 542 0.196 0.454 1.557 -0.4956 0.0367 -0.3223 + 177SOL HW1 543 0.214 0.450 1.459 0.0350 1.1605 -0.2723 + 177SOL HW2 544 0.123 0.520 1.575 -1.9617 -1.6009 -0.1400 + 178SOL OW 545 0.675 1.435 0.795 0.0229 -0.3526 0.3395 + 178SOL HW1 546 0.670 1.522 0.844 0.7913 0.6576 -1.3325 + 178SOL HW2 547 0.589 1.419 0.747 0.6306 0.5217 -1.0575 + 179SOL OW 548 1.688 0.729 0.781 0.1452 -0.9173 -0.0231 + 179SOL HW1 549 1.747 0.783 0.841 -0.4911 -0.8887 0.5749 + 179SOL HW2 550 1.636 0.663 0.836 0.3774 -1.6466 -0.6604 + 180SOL OW 551 1.601 0.014 1.101 -0.2713 -0.2653 -0.5539 + 180SOL HW1 552 1.560 0.099 1.069 0.3717 -0.3890 -1.7326 + 180SOL HW2 553 1.561 -0.063 1.051 0.4001 -0.5083 -0.7186 + 181SOL OW 554 0.476 1.153 0.547 0.4303 -0.0370 0.1370 + 181SOL HW1 555 0.492 1.119 0.455 0.6983 0.5133 -0.0224 + 181SOL HW2 556 0.514 1.089 0.614 -0.6859 -0.9434 -0.1030 + 182SOL OW 557 0.769 1.283 1.579 -0.0229 -0.0911 -0.7579 + 182SOL HW1 558 0.699 1.339 1.624 2.3597 1.9724 0.4675 + 182SOL HW2 559 0.843 1.342 1.546 2.2782 -2.4605 0.0701 + 183SOL OW 560 1.082 0.193 2.283 -0.5634 -0.3601 0.4334 + 183SOL HW1 561 0.985 0.208 2.298 -0.2822 0.2924 1.6904 + 183SOL HW2 562 1.096 0.131 2.206 -1.9951 -1.3879 1.0028 + 184SOL OW 563 1.674 1.142 0.499 0.3152 0.1643 -0.2389 + 184SOL HW1 564 1.692 1.239 0.516 0.9873 0.4289 -2.3640 + 184SOL HW2 565 1.613 1.132 0.420 3.2616 -1.2541 -2.3895 + 185SOL OW 566 1.729 0.194 0.621 0.1259 0.5546 -0.2340 + 185SOL HW1 567 1.641 0.229 0.587 -0.1609 -0.2053 -0.2974 + 185SOL HW2 568 1.727 0.189 0.720 -0.8631 -1.9347 -0.3710 + 186SOL OW 569 0.580 1.544 2.453 -0.2456 -0.4473 -0.1946 + 186SOL HW1 570 0.626 1.456 2.438 -1.6853 -1.1501 -0.6633 + 186SOL HW2 571 0.647 1.616 2.466 0.9580 -1.6918 0.5383 + 187SOL OW 572 0.497 1.065 1.706 -0.1006 -0.6666 -0.0510 + 187SOL HW1 573 0.546 1.009 1.639 -1.0822 -1.1864 -0.3340 + 187SOL HW2 574 0.438 1.131 1.659 0.4329 0.0603 0.2871 + 188SOL OW 575 1.807 0.163 1.931 -0.2267 -0.0716 0.4132 + 188SOL HW1 576 1.757 0.193 1.849 -2.1474 -0.1191 1.5695 + 188SOL HW2 577 1.889 0.220 1.942 0.3028 -0.3729 -1.8070 + 189SOL OW 578 0.437 1.195 2.413 -0.5948 0.4542 -0.1326 + 189SOL HW1 579 0.449 1.167 2.318 2.3114 0.0794 0.3352 + 189SOL HW2 580 0.510 1.258 2.439 -0.1838 -1.0610 2.4772 + 190SOL OW 581 0.833 1.385 2.037 0.5743 0.2878 0.4187 + 190SOL HW1 582 0.923 1.377 2.079 1.5086 2.6646 -1.0667 + 190SOL HW2 583 0.804 1.481 2.037 -1.6603 -0.3710 0.2885 + 191SOL OW 584 1.869 2.151 1.883 0.0017 0.0625 0.0944 + 191SOL HW1 585 1.861 2.090 1.805 0.6354 -1.8716 1.5185 + 191SOL HW2 586 1.899 2.242 1.852 -0.8755 -0.3576 -2.0101 + 192SOL OW 587 1.643 0.333 2.203 0.0041 0.7470 0.2980 + 192SOL HW1 588 1.693 0.356 2.120 -0.6924 0.5130 -0.1903 + 192SOL HW2 589 1.560 0.283 2.179 1.3373 -2.0103 1.3189 + 193SOL OW 590 2.013 1.373 2.000 0.1311 0.0119 -0.2282 + 193SOL HW1 591 1.951 1.304 1.960 0.9658 -1.1899 0.5391 + 193SOL HW2 592 2.072 1.329 2.067 0.8187 1.4574 0.1101 + 194SOL OW 593 0.414 0.471 2.143 0.4506 -0.2093 0.0911 + 194SOL HW1 594 0.356 0.549 2.168 0.8973 0.0199 0.4325 + 194SOL HW2 595 0.414 0.404 2.217 0.0398 -0.5488 -0.2170 + 195SOL OW 596 1.885 1.190 1.878 -0.2632 0.0801 0.3309 + 195SOL HW1 597 1.942 1.146 1.809 0.5174 0.0784 0.9634 + 195SOL HW2 598 1.812 1.128 1.905 -0.9413 0.3233 -0.9456 + 196SOL OW 599 1.126 1.669 2.346 0.1385 0.4547 0.0176 + 196SOL HW1 600 1.157 1.633 2.434 -0.2687 2.3656 0.9518 + 196SOL HW2 601 1.177 1.752 2.323 0.4449 -0.1884 -1.6928 + 197SOL OW 602 1.105 1.182 1.784 0.5167 0.2282 -0.1619 + 197SOL HW1 603 1.073 1.273 1.756 2.4226 0.6866 -0.8566 + 197SOL HW2 604 1.040 1.113 1.751 0.4253 1.1208 -1.9004 + 198SOL OW 605 1.214 1.627 1.755 -0.3865 0.2496 -0.6456 + 198SOL HW1 606 1.246 1.632 1.849 -0.9606 -0.2427 -0.4201 + 198SOL HW2 607 1.187 1.718 1.724 -1.0438 0.2658 -0.0296 + 199SOL OW 608 1.674 0.594 2.472 0.1209 -0.4487 -0.1907 + 199SOL HW1 609 1.756 0.543 2.442 -0.2875 -1.6426 0.6895 + 199SOL HW2 610 1.603 0.587 2.401 -0.4821 -2.4123 0.5937 + 200SOL OW 611 0.574 0.709 1.906 -0.4367 -0.0794 -0.3436 + 200SOL HW1 612 0.558 0.612 1.888 -0.5238 -0.2201 0.4535 + 200SOL HW2 613 0.578 0.724 2.005 -2.8151 1.1222 -0.4129 + 201SOL OW 614 0.977 1.730 1.946 -0.1719 0.0889 -0.1011 + 201SOL HW1 615 1.069 1.699 1.970 0.5262 1.0114 -1.5690 + 201SOL HW2 616 0.969 1.828 1.965 -0.5553 0.2034 -0.8302 + 202SOL OW 617 0.793 0.804 0.045 -0.1060 0.2897 0.5350 + 202SOL HW1 618 0.790 0.739 0.121 -1.7769 -0.3608 -0.0687 + 202SOL HW2 619 0.721 0.782 -0.020 2.1363 0.0386 -1.9059 + 203SOL OW 620 0.724 1.647 2.060 0.2066 0.1638 0.3347 + 203SOL HW1 621 0.817 1.674 2.037 0.4234 -0.6897 0.1841 + 203SOL HW2 622 0.717 1.633 2.159 0.3233 -0.0896 0.3085 + 204SOL OW 623 1.592 1.048 1.630 0.4685 -0.0067 -0.0954 + 204SOL HW1 624 1.685 1.015 1.616 0.4742 0.3164 -0.8583 + 204SOL HW2 625 1.592 1.148 1.632 0.1159 -0.0021 -0.2551 + 205SOL OW 626 0.721 1.955 2.380 0.0100 -0.7455 -0.0048 + 205SOL HW1 627 0.815 1.990 2.372 0.0225 -0.7870 -0.0415 + 205SOL HW2 628 0.677 1.959 2.291 -1.0690 2.2898 0.6189 + 206SOL OW 629 1.424 2.429 1.910 0.1383 0.1349 -0.0451 + 206SOL HW1 630 1.446 2.369 1.833 -1.5512 -1.9836 1.1055 + 206SOL HW2 631 1.503 2.436 1.971 0.7997 0.1912 -0.9115 + 207SOL OW 632 0.504 1.059 2.184 0.2180 0.1757 0.1616 + 207SOL HW1 633 0.602 1.077 2.185 0.6185 -1.7157 -1.3914 + 207SOL HW2 634 0.464 1.093 2.098 0.0209 -1.4124 -0.3948 + 208SOL OW 635 0.748 0.459 0.038 -0.1475 0.1272 0.5125 + 208SOL HW1 636 0.843 0.462 0.069 -0.2021 -0.0479 0.7034 + 208SOL HW2 637 0.697 0.392 0.093 -0.1588 -0.4437 -0.1880 + 209SOL OW 638 0.385 0.797 2.182 0.1646 0.1060 0.1421 + 209SOL HW1 639 0.401 0.895 2.169 1.1281 -0.1019 -0.2346 + 209SOL HW2 640 0.461 0.758 2.234 0.3746 -0.6826 -0.7639 + 210SOL OW 641 1.546 1.311 1.604 0.4725 -0.5736 -0.4556 + 210SOL HW1 642 1.480 1.365 1.552 0.1278 -0.2568 0.3092 + 210SOL HW2 643 1.639 1.344 1.584 0.2141 0.8094 0.5960 + 211SOL OW 644 0.519 0.164 2.115 0.2093 -0.2288 -0.4792 + 211SOL HW1 645 0.519 0.258 2.149 0.9944 -0.2273 -0.4773 + 211SOL HW2 646 0.449 0.111 2.163 -1.1432 0.6965 -1.4286 + 212SOL OW 647 1.066 0.436 0.441 -0.1235 -0.2671 0.0311 + 212SOL HW1 648 1.102 0.347 0.468 -1.4505 -0.1394 2.3107 + 212SOL HW2 649 1.132 0.507 0.463 0.0427 -0.4778 0.2167 + 213SOL OW 650 0.185 1.663 2.401 -0.1651 -0.1414 -0.5493 + 213SOL HW1 651 0.112 1.595 2.412 0.1385 -0.2596 0.7381 + 213SOL HW2 652 0.265 1.620 2.358 -0.2977 -0.3738 -0.5665 + 214SOL OW 653 1.256 1.930 2.296 0.0424 0.3591 0.3204 + 214SOL HW1 654 1.326 1.927 2.225 -0.9696 1.3628 -0.7396 + 214SOL HW2 655 1.295 1.966 2.381 0.9172 0.4632 -0.1302 + 215SOL OW 656 1.538 0.494 1.390 0.2351 -0.0628 -0.4404 + 215SOL HW1 657 1.630 0.477 1.352 -1.2422 -0.3843 -4.0181 + 215SOL HW2 658 1.473 0.431 1.347 -1.8528 0.9519 1.2293 + 216SOL OW 659 1.615 0.816 2.049 0.3955 0.1560 0.5655 + 216SOL HW1 660 1.590 0.803 1.953 -1.2186 -0.5670 1.0750 + 216SOL HW2 661 1.714 0.825 2.057 0.4747 0.9859 -1.2593 + 217SOL OW 662 0.663 0.964 1.869 0.5258 0.4876 -0.0579 + 217SOL HW1 663 0.605 1.017 1.807 -0.0922 0.1273 0.2108 + 217SOL HW2 664 0.630 0.870 1.875 1.2251 0.2365 -0.0122 + 218SOL OW 665 1.391 0.303 1.820 -0.0150 -0.8881 -0.0310 + 218SOL HW1 666 1.345 0.378 1.773 1.3974 0.1789 0.2561 + 218SOL HW2 667 1.355 0.295 1.913 0.4666 0.0456 0.2477 + 219SOL OW 668 0.604 0.318 0.228 0.0561 0.4804 0.0733 + 219SOL HW1 669 0.688 0.350 0.272 0.0191 1.7513 -0.7746 + 219SOL HW2 670 0.598 0.219 0.238 0.3234 0.6770 2.4579 + 220SOL OW 671 0.723 1.311 2.406 0.2732 -0.0541 -0.1402 + 220SOL HW1 672 0.802 1.313 2.467 0.5695 -0.2177 -0.5169 + 220SOL HW2 673 0.739 1.244 2.333 -0.8590 -1.1978 0.6609 + 221SOL OW 674 0.340 1.302 1.883 -0.1934 0.1097 -0.5651 + 221SOL HW1 675 0.411 1.341 1.942 -1.2015 0.7966 0.1893 + 221SOL HW2 676 0.268 1.369 1.867 -1.0010 -0.8037 -0.8030 + 222SOL OW 677 1.221 0.901 2.255 -0.2742 -0.1177 -0.0534 + 222SOL HW1 678 1.292 0.930 2.318 -1.2825 1.3363 0.4406 + 222SOL HW2 679 1.197 0.977 2.194 0.1988 -1.2912 -1.7314 + 223SOL OW 680 1.627 0.265 1.704 0.3555 0.1591 0.0734 + 223SOL HW1 681 1.551 0.288 1.764 -0.5882 -1.1368 -0.6225 + 223SOL HW2 682 1.595 0.208 1.628 1.4968 2.0169 -1.8401 + 224SOL OW 683 1.506 0.658 2.266 -0.1781 -0.1798 -0.1750 + 224SOL HW1 684 1.417 0.622 2.239 -0.5984 0.3182 0.5460 + 224SOL HW2 685 1.547 0.706 2.188 -0.9339 0.3581 -0.2451 + 225SOL OW 686 1.145 0.174 0.285 0.6154 0.2228 0.3696 + 225SOL HW1 687 1.107 0.174 0.378 0.3767 1.5188 0.2782 + 225SOL HW2 688 1.070 0.169 0.219 0.6676 1.5359 0.2090 + 226SOL OW 689 1.376 0.246 2.138 0.3071 0.1338 -0.5827 + 226SOL HW1 690 1.380 0.151 2.167 0.1585 0.4368 0.4287 + 226SOL HW2 691 1.305 0.294 2.189 1.0898 1.0458 -0.3457 + 227SOL OW 692 1.246 0.520 1.710 0.0439 0.0383 -0.2158 + 227SOL HW1 693 1.221 0.581 1.634 2.8620 0.3626 -0.8915 + 227SOL HW2 694 1.183 0.536 1.787 -1.4267 1.2915 -1.6508 + 228SOL OW 695 1.736 1.938 0.298 -0.4404 -0.7782 0.0473 + 228SOL HW1 696 1.809 1.914 0.234 0.4823 1.7586 0.0892 + 228SOL HW2 697 1.777 1.970 0.384 -1.5800 1.3280 -0.1847 + 229SOL OW 698 0.870 0.943 2.026 0.1184 -0.2152 -0.4010 + 229SOL HW1 699 0.895 0.848 2.040 1.1300 -0.0916 -1.3351 + 229SOL HW2 700 0.780 0.948 1.983 -1.3223 -0.6722 2.4838 + 230SOL OW 701 1.123 0.824 1.764 0.6168 -0.1915 0.8576 + 230SOL HW1 702 1.076 0.801 1.849 -0.8233 1.9113 0.6616 + 230SOL HW2 703 1.062 0.805 1.687 1.0810 0.0099 0.4413 + 231SOL OW 704 1.400 0.970 2.432 -0.6087 0.0510 -0.1493 + 231SOL HW1 705 1.390 0.954 2.530 -0.0343 1.6236 0.1745 + 231SOL HW2 706 1.493 0.947 2.404 -0.4575 0.6157 -0.1183 + 232SOL OW 707 1.180 0.408 2.415 -0.1073 -0.2158 -0.3743 + 232SOL HW1 708 1.116 0.452 2.478 1.3802 2.3292 -0.5798 + 232SOL HW2 709 1.140 0.324 2.379 -2.0592 -0.2599 1.8649 + 233SOL OW 710 1.989 0.380 1.968 0.2730 -0.7478 0.4966 + 233SOL HW1 711 1.990 0.413 1.874 0.6258 -1.4588 0.2518 + 233SOL HW2 712 2.076 0.402 2.012 0.1340 -0.4748 0.6409 + 234SOL OW 713 1.882 1.088 2.197 0.2499 0.5941 0.3896 + 234SOL HW1 714 1.837 1.055 2.279 -0.5705 -0.2980 -0.4191 + 234SOL HW2 715 1.831 1.167 2.160 0.0806 0.4010 0.2069 + 235SOL OW 716 0.001 1.937 1.806 0.4859 -0.1335 0.6111 + 235SOL HW1 717 0.077 2.001 1.812 1.6327 -1.3585 -0.7813 + 235SOL HW2 718 0.023 1.863 1.742 -3.3281 1.4636 -2.6846 + 236SOL OW 719 2.034 0.060 0.067 -0.1102 0.7633 0.1632 + 236SOL HW1 720 2.022 -0.033 0.031 0.6318 1.1361 -1.0257 + 236SOL HW2 721 1.946 0.108 0.064 0.0083 0.8901 -1.4015 + 237SOL OW 722 1.124 1.839 1.594 -0.4215 0.5460 0.0184 + 237SOL HW1 723 1.040 1.890 1.612 -0.1907 1.1208 -0.5219 + 237SOL HW2 724 1.126 1.811 1.498 -0.1116 0.3183 0.0901 + 238SOL OW 725 1.286 0.714 2.069 -0.6044 -0.2005 0.3028 + 238SOL HW1 726 1.376 0.757 2.063 -0.2558 -0.8221 1.0347 + 238SOL HW2 727 1.222 0.777 2.113 -0.2704 -0.1460 0.7162 + 239SOL OW 728 1.940 1.629 1.964 -0.0021 -0.0224 0.0586 + 239SOL HW1 729 1.911 1.671 2.050 -1.1473 -1.0097 0.1683 + 239SOL HW2 730 1.984 1.541 1.984 -0.4823 -0.3607 -0.3820 + 240SOL OW 731 0.557 1.380 2.013 -0.2081 0.2029 -0.4125 + 240SOL HW1 732 0.646 1.346 2.043 -0.7305 -0.7899 0.0515 + 240SOL HW2 733 0.566 1.474 1.979 0.8714 0.3767 0.3469 + 241SOL OW 734 0.044 2.502 2.188 -0.4031 -0.3061 -0.0520 + 241SOL HW1 735 0.106 2.458 2.123 -1.6444 -0.8230 -0.9179 + 241SOL HW2 736 -0.004 2.431 2.240 0.5545 0.1106 1.3809 + 242SOL OW 737 0.131 0.200 0.304 -0.1638 0.1205 -0.1423 + 242SOL HW1 738 0.155 0.104 0.295 -1.0720 -0.0680 -0.5006 + 242SOL HW2 739 0.185 0.241 0.378 0.9363 -0.4208 -0.6427 + 243SOL OW 740 1.099 1.080 2.050 0.8621 -0.0675 -0.3977 + 243SOL HW1 741 1.106 1.106 1.953 1.4384 -1.1847 -0.6616 + 243SOL HW2 742 1.022 1.018 2.062 0.8306 0.0203 -0.1459 + 244SOL OW 743 0.903 0.644 2.097 -0.2587 -0.2387 -0.2971 + 244SOL HW1 744 0.821 0.592 2.120 -0.5369 -0.0366 -0.8245 + 244SOL HW2 745 0.955 0.663 2.180 -1.3030 0.5691 0.1831 + 245SOL OW 746 0.773 1.043 0.222 -0.1739 -0.1500 1.1038 + 245SOL HW1 747 0.828 1.116 0.179 0.8355 -0.7408 1.3786 + 245SOL HW2 748 0.783 0.959 0.170 2.5330 -1.3688 3.4896 + 246SOL OW 749 0.411 1.838 1.684 -0.4560 0.4008 0.5412 + 246SOL HW1 750 0.491 1.892 1.656 0.2413 -0.3469 1.0898 + 246SOL HW2 751 0.336 1.900 1.707 -0.3491 1.0843 -0.9038 + 247SOL OW 752 1.093 0.548 1.940 -0.3383 0.6599 0.0949 + 247SOL HW1 753 1.008 0.572 1.987 0.8938 1.0536 2.1541 + 247SOL HW2 754 1.168 0.605 1.976 1.5442 -2.4122 1.0948 + 248SOL OW 755 0.369 1.578 0.156 -0.0853 0.0939 -0.1407 + 248SOL HW1 756 0.324 1.655 0.112 -1.7156 1.6751 4.0771 + 248SOL HW2 757 0.455 1.558 0.110 -0.6138 3.1164 -2.5151 + 249SOL OW 758 1.911 2.093 2.392 0.6025 -0.4802 0.3858 + 249SOL HW1 759 1.851 2.171 2.412 1.3406 -0.2522 1.6909 + 249SOL HW2 760 1.913 2.078 2.293 0.2377 0.9871 0.1459 + 250SOL OW 761 0.522 1.041 0.315 -0.2238 0.3636 0.1764 + 250SOL HW1 762 0.491 0.946 0.313 -0.8589 0.5964 -1.8339 + 250SOL HW2 763 0.614 1.047 0.276 0.0416 0.4911 0.8207 + 251SOL OW 764 0.775 1.614 1.462 -0.0392 0.0064 0.7384 + 251SOL HW1 765 0.821 1.531 1.432 -0.4058 0.1202 -0.1290 + 251SOL HW2 766 0.807 1.638 1.554 0.2497 -0.9491 0.8869 + 252SOL OW 767 1.557 2.145 2.205 0.1626 -0.2456 0.1674 + 252SOL HW1 768 1.563 2.121 2.108 -0.7105 1.2374 -0.2585 + 252SOL HW2 769 1.466 2.181 2.225 0.5536 0.0811 1.3871 + 253SOL OW 770 0.053 1.237 1.614 -0.4904 -0.0842 0.2871 + 253SOL HW1 771 0.010 1.189 1.691 -1.3551 0.8576 0.4125 + 253SOL HW2 772 0.148 1.209 1.605 -1.1699 -2.3060 -0.0613 + 254SOL OW 773 0.800 2.004 2.065 -0.1133 0.0548 0.1006 + 254SOL HW1 774 0.900 1.995 2.062 -0.1340 -0.4790 0.8335 + 254SOL HW2 775 0.776 2.100 2.076 0.2627 0.4253 -2.2249 + 255SOL OW 776 0.320 1.531 1.116 0.6210 -0.4518 0.2193 + 255SOL HW1 777 0.268 1.613 1.091 0.4003 -0.2446 1.3432 + 255SOL HW2 778 0.256 1.457 1.140 0.8306 0.1292 2.6669 + 256SOL OW 779 0.432 2.350 1.308 0.4949 -1.1435 -0.3061 + 256SOL HW1 780 0.450 2.310 1.219 4.1743 0.0348 -0.1519 + 256SOL HW2 781 0.394 2.442 1.296 -0.1876 -1.4596 -0.6251 + 257SOL OW 782 1.569 2.130 0.205 -0.1767 -0.3009 0.3704 + 257SOL HW1 783 1.626 2.147 0.125 -0.3154 -0.1802 0.2956 + 257SOL HW2 784 1.608 2.055 0.258 -0.2437 -0.5798 0.0308 + 258SOL OW 785 1.284 2.119 0.414 -0.1206 -0.4621 0.0119 + 258SOL HW1 786 1.370 2.162 0.385 -1.0214 0.3395 -1.5490 + 258SOL HW2 787 1.282 2.111 0.513 1.2994 0.5221 0.1272 + 259SOL OW 788 0.860 2.374 1.705 0.1549 -0.3514 0.1793 + 259SOL HW1 789 0.857 2.369 1.805 0.3787 -0.4950 0.1786 + 259SOL HW2 790 0.945 2.333 1.672 0.5255 0.5693 -0.0086 + 260SOL OW 791 1.117 1.641 0.412 -0.2434 -0.5319 -0.2168 + 260SOL HW1 792 1.033 1.669 0.458 -0.7765 -2.2297 -0.1253 + 260SOL HW2 793 1.172 1.586 0.474 1.2369 1.0955 -0.0743 + 261SOL OW 794 1.456 2.253 1.707 0.5612 -0.1888 0.2258 + 261SOL HW1 795 1.416 2.162 1.706 -0.2954 0.1821 0.7491 + 261SOL HW2 796 1.513 2.265 1.625 -1.5082 -0.2317 -1.2243 + 262SOL OW 797 0.763 1.363 0.373 -0.2582 -0.0720 0.0983 + 262SOL HW1 798 0.833 1.330 0.436 0.4282 -0.2809 -0.7547 + 262SOL HW2 799 0.672 1.349 0.412 0.0679 -2.1663 0.1293 + 263SOL OW 800 0.222 2.383 1.999 -0.3363 -0.5116 0.0827 + 263SOL HW1 801 0.266 2.461 1.954 -1.3594 2.2178 3.7053 + 263SOL HW2 802 0.291 2.314 2.020 0.9139 0.3209 -1.2069 + 264SOL OW 803 1.156 0.693 0.628 -0.0935 -0.1220 0.0505 + 264SOL HW1 804 1.227 0.687 0.698 0.8225 -1.1045 -0.9604 + 264SOL HW2 805 1.197 0.685 0.538 -1.7343 -2.9957 -0.4798 + 265SOL OW 806 1.672 1.913 2.291 -0.4082 -0.4768 -0.6471 + 265SOL HW1 807 1.645 1.863 2.373 1.0269 -1.4932 -0.7763 + 265SOL HW2 808 1.644 2.009 2.299 0.0024 -0.5035 1.1377 + 266SOL OW 809 0.969 0.404 1.747 0.0392 0.4591 0.1643 + 266SOL HW1 810 1.010 0.438 1.832 -0.4346 0.6695 0.3085 + 266SOL HW2 811 0.888 0.458 1.725 -0.0453 0.1731 -0.2317 + 267SOL OW 812 0.914 2.071 0.693 0.3930 0.3743 0.1199 + 267SOL HW1 813 0.931 2.107 0.602 3.2380 -0.0467 0.4643 + 267SOL HW2 814 0.923 1.971 0.692 1.6650 0.4687 1.1040 + 268SOL OW 815 0.379 0.099 1.794 -0.0950 0.2946 -0.0010 + 268SOL HW1 816 0.460 0.072 1.846 -0.9120 0.9789 1.6766 + 268SOL HW2 817 0.400 0.180 1.739 0.0066 1.2608 1.4427 + 269SOL OW 818 1.511 1.786 0.029 0.1843 -0.2625 0.1466 + 269SOL HW1 819 1.541 1.738 0.112 -0.7854 1.0910 1.2956 + 269SOL HW2 820 1.454 1.864 0.055 2.3055 1.9407 -1.6245 + 270SOL OW 821 1.636 0.104 1.490 -0.5641 -0.2349 0.5679 + 270SOL HW1 822 1.555 0.133 1.439 0.1888 0.4839 -0.2253 + 270SOL HW2 823 1.650 0.006 1.478 0.0517 0.0682 -1.2522 + 271SOL OW 824 0.044 1.744 0.291 -0.0457 0.2260 -0.7158 + 271SOL HW1 825 0.109 1.687 0.340 0.4996 0.5293 -1.0856 + 271SOL HW2 826 0.093 1.812 0.236 -0.6822 0.8702 -0.4962 + 272SOL OW 827 1.124 2.389 0.607 0.2673 0.6223 0.2229 + 272SOL HW1 828 1.130 2.342 0.694 -0.2310 1.2202 0.5884 + 272SOL HW2 829 1.215 2.398 0.566 0.0994 -2.5616 -0.8787 + 273SOL OW 830 1.249 1.500 0.579 0.0715 0.3014 0.0328 + 273SOL HW1 831 1.253 1.514 0.678 1.4584 3.4764 -0.4371 + 273SOL HW2 832 1.342 1.497 0.542 -0.4928 3.1667 -1.6872 + 274SOL OW 833 1.028 0.132 1.749 0.5677 -0.1366 0.1025 + 274SOL HW1 834 0.996 0.225 1.735 -0.1725 -0.4097 -0.0396 + 274SOL HW2 835 0.951 0.069 1.742 0.9584 -0.7034 0.8051 + 275SOL OW 836 0.530 1.952 0.113 0.3625 0.6108 -0.1039 + 275SOL HW1 837 0.604 1.951 0.046 -0.0831 -1.3983 -0.5727 + 275SOL HW2 838 0.556 1.897 0.193 -0.9229 -0.7191 -0.5982 + 276SOL OW 839 0.782 0.007 1.407 -0.4321 -0.0377 0.3114 + 276SOL HW1 840 0.856 0.033 1.470 0.4430 0.5774 -0.9680 + 276SOL HW2 841 0.776 0.073 1.333 -1.7686 -0.5184 -0.0260 + 277SOL OW 842 1.992 2.083 1.450 0.4656 0.1726 0.4294 + 277SOL HW1 843 1.949 2.051 1.534 -0.0658 -1.6890 -0.5086 + 277SOL HW2 844 1.940 2.048 1.371 0.7873 2.1124 -0.6576 + 278SOL OW 845 0.765 0.047 0.811 -0.5302 -0.3928 0.8231 + 278SOL HW1 846 0.768 -0.052 0.800 -1.4340 -0.3378 0.0621 + 278SOL HW2 847 0.745 0.090 0.723 -3.5957 0.2993 1.8341 + 279SOL OW 848 0.108 2.030 0.954 -0.4477 -0.0052 0.7472 + 279SOL HW1 849 0.171 2.085 0.899 -1.8635 1.2979 0.4021 + 279SOL HW2 850 0.086 2.079 1.038 -1.7472 -0.0200 0.4263 + 280SOL OW 851 2.299 1.046 2.216 0.4435 0.1481 -0.3424 + 280SOL HW1 852 2.378 1.016 2.162 -0.9098 -3.0513 -0.6576 + 280SOL HW2 853 2.256 0.966 2.258 -0.8516 2.1974 2.2902 + 281SOL OW 854 0.278 1.647 0.410 -0.1462 0.6723 -0.8004 + 281SOL HW1 855 0.299 1.625 0.315 -0.0884 0.3121 -0.7043 + 281SOL HW2 856 0.348 1.606 0.470 0.5360 1.9677 -0.6950 + 282SOL OW 857 0.815 0.271 2.328 -0.1812 -0.0018 0.2274 + 282SOL HW1 858 0.794 0.338 2.399 -1.3511 -1.3679 1.2035 + 282SOL HW2 859 0.803 0.312 2.238 -0.5795 1.1743 0.8130 + 283SOL OW 860 0.246 1.583 0.715 0.0600 -0.2348 -0.1960 + 283SOL HW1 861 0.325 1.643 0.725 -0.6109 1.2033 -3.1852 + 283SOL HW2 862 0.180 1.603 0.788 -0.1345 2.6658 -1.1163 + 284SOL OW 863 0.985 1.992 1.153 -0.0937 0.4184 -0.4602 + 284SOL HW1 864 0.897 1.997 1.106 -1.6700 -2.1849 2.1660 + 284SOL HW2 865 1.052 1.945 1.094 -1.6162 -1.3907 -0.7718 + 285SOL OW 866 1.182 1.895 0.265 -0.3846 0.1857 -0.6051 + 285SOL HW1 867 1.159 1.828 0.335 -1.7636 1.4508 0.1739 + 285SOL HW2 868 1.224 1.975 0.307 0.8407 -0.0012 -1.4759 + 286SOL OW 869 0.371 2.193 0.128 -0.1114 -0.0424 -0.3687 + 286SOL HW1 870 0.360 2.164 0.223 -0.6487 0.8798 -0.1415 + 286SOL HW2 871 0.439 2.135 0.083 1.3133 0.5317 1.0191 + 287SOL OW 872 0.757 2.031 0.982 0.0817 -0.0100 0.6859 + 287SOL HW1 873 0.726 2.097 0.913 -0.1925 -0.4811 0.3552 + 287SOL HW2 874 0.684 1.966 1.000 0.0678 0.2570 1.6035 + 288SOL OW 875 1.091 2.250 0.832 0.2542 0.7582 0.0923 + 288SOL HW1 876 1.031 2.175 0.802 2.0556 -0.3328 -0.7944 + 288SOL HW2 877 1.060 2.283 0.921 -0.6764 -0.9022 0.4009 + 289SOL OW 878 0.328 2.430 0.577 -0.3200 -0.2694 0.0198 + 289SOL HW1 879 0.353 2.507 0.636 -1.9798 0.0949 0.2480 + 289SOL HW2 880 0.409 2.401 0.525 0.5944 0.8826 0.7765 + 290SOL OW 881 0.973 2.256 1.077 -0.1714 0.0772 -0.5441 + 290SOL HW1 882 0.875 2.274 1.091 -0.9520 -2.3208 -2.6860 + 290SOL HW2 883 0.997 2.168 1.118 0.3610 -0.8273 -2.7394 + 291SOL OW 884 0.522 1.623 1.862 0.0701 -0.3316 0.5934 + 291SOL HW1 885 0.480 1.708 1.830 -0.4709 -0.5355 0.7539 + 291SOL HW2 886 0.597 1.644 1.924 0.8569 0.0596 -0.4792 + 292SOL OW 887 1.471 1.781 0.478 -0.2913 0.0474 0.2775 + 292SOL HW1 888 1.488 1.838 0.397 -0.7505 -0.7463 -0.3897 + 292SOL HW2 889 1.532 1.809 0.552 0.5913 0.3648 -0.5535 + 293SOL OW 890 0.612 2.311 1.556 -0.3912 -0.2627 0.3548 + 293SOL HW1 891 0.603 2.345 1.462 -3.1507 -0.8402 0.3841 + 293SOL HW2 892 0.702 2.336 1.592 0.0982 1.3208 -1.8992 + 294SOL OW 893 0.716 2.243 0.809 -0.0832 0.8621 -0.1804 + 294SOL HW1 894 0.781 2.189 0.755 -0.2651 -2.1563 2.5366 + 294SOL HW2 895 0.623 2.225 0.777 -0.1514 -0.5369 0.7760 + 295SOL OW 896 0.288 1.306 0.136 0.4372 -0.0930 0.8802 + 295SOL HW1 897 0.349 1.252 0.079 -0.2425 0.0811 -0.0218 + 295SOL HW2 898 0.322 1.400 0.143 0.2549 0.0164 0.3386 + 296SOL OW 899 1.461 1.549 2.360 0.0644 -0.3958 0.4802 + 296SOL HW1 900 1.548 1.540 2.312 0.7877 0.4847 1.6150 + 296SOL HW2 901 1.458 1.636 2.410 -2.6195 0.8810 -1.8387 + 297SOL OW 902 1.939 1.892 0.129 -0.5708 -0.1936 -0.0441 + 297SOL HW1 903 1.931 1.939 0.041 -2.0077 1.2834 0.8532 + 297SOL HW2 904 2.007 1.819 0.122 2.1415 2.3870 -1.3026 + 298SOL OW 905 0.338 0.166 0.741 0.6833 -0.5701 0.5040 + 298SOL HW1 906 0.386 0.252 0.725 -0.3200 -0.2356 -0.6415 + 298SOL HW2 907 0.324 0.154 0.840 -1.2357 1.6732 0.5194 + 299SOL OW 908 0.317 2.266 2.321 0.2874 -0.3877 -0.2432 + 299SOL HW1 909 0.242 2.204 2.301 1.7722 -1.6489 -1.9503 + 299SOL HW2 910 0.358 2.242 2.409 0.2271 -1.1969 -0.4363 + 300SOL OW 911 1.325 2.410 1.442 -0.5746 -1.0643 -0.0467 + 300SOL HW1 912 1.315 2.472 1.519 -2.0978 2.3274 -2.9149 + 300SOL HW2 913 1.418 2.375 1.439 0.7169 2.2554 0.7119 + 301SOL OW 914 1.269 -0.006 0.869 0.2706 -0.1113 -0.2080 + 301SOL HW1 915 1.170 0.008 0.866 0.2677 -0.0921 -0.0540 + 301SOL HW2 916 1.315 0.083 0.866 0.3486 -0.2114 -2.6810 + 302SOL OW 917 1.653 1.687 0.238 0.1416 -0.1512 0.2297 + 302SOL HW1 918 1.714 1.609 0.225 0.8395 0.3800 0.3216 + 302SOL HW2 919 1.706 1.767 0.265 -0.3543 0.8709 -1.8148 + 303SOL OW 920 0.246 1.911 0.468 0.1234 0.4015 0.1569 + 303SOL HW1 921 0.155 1.921 0.508 0.9677 0.6437 2.0194 + 303SOL HW2 922 0.266 1.814 0.454 -0.5130 0.3569 -0.4985 + 304SOL OW 923 0.312 0.075 2.313 -0.1597 0.1709 -0.1440 + 304SOL HW1 924 0.213 0.073 2.303 -0.1462 0.6812 -0.3657 + 304SOL HW2 925 0.345 -0.018 2.330 -0.4252 -0.3738 -2.4843 + 305SOL OW 926 1.021 2.322 2.377 0.6664 -0.4911 -0.5536 + 305SOL HW1 927 0.997 2.236 2.421 1.9370 0.1984 1.5378 + 305SOL HW2 928 1.025 2.395 2.446 0.7982 0.9880 -2.1086 + 306SOL OW 929 1.606 1.802 0.695 0.6883 -0.1769 -0.0602 + 306SOL HW1 930 1.664 1.721 0.685 -0.6914 -1.1864 0.1111 + 306SOL HW2 931 1.565 1.803 0.786 1.5306 1.2677 0.3098 + 307SOL OW 932 1.876 1.515 0.224 -0.0639 -0.0260 -0.1396 + 307SOL HW1 933 1.896 1.425 0.262 1.3232 1.2600 2.2227 + 307SOL HW2 934 1.956 1.574 0.234 -0.4616 1.0626 -2.9855 + 308SOL OW 935 0.380 2.311 1.008 -0.2530 -0.9174 -0.2914 + 308SOL HW1 936 0.351 2.285 0.916 1.5177 -0.9179 -0.8531 + 308SOL HW2 937 0.348 2.242 1.073 -0.2201 -1.7080 -1.0939 + 309SOL OW 938 0.451 1.774 0.808 0.8110 -0.6452 -0.2272 + 309SOL HW1 939 0.396 1.756 0.890 0.2180 -1.6921 -0.8487 + 309SOL HW2 940 0.548 1.766 0.830 0.6580 -0.7029 0.4237 + 310SOL OW 941 1.530 1.798 1.731 -0.6852 0.1125 0.1833 + 310SOL HW1 942 1.523 1.712 1.781 -0.6456 0.2661 0.4530 + 310SOL HW2 943 1.570 1.781 1.640 -0.1576 -0.0696 0.4504 + 311SOL OW 944 0.965 2.322 1.964 -0.5007 -0.0901 0.1106 + 311SOL HW1 945 0.902 2.304 2.039 0.6801 -1.9317 0.6933 + 311SOL HW2 946 1.032 2.391 1.992 -1.4546 0.9031 -0.0539 + 312SOL OW 947 1.734 2.398 0.360 -0.1595 0.2103 0.5712 + 312SOL HW1 948 1.682 2.470 0.314 -1.0097 -1.2026 -0.7038 + 312SOL HW2 949 1.799 2.358 0.296 1.8218 1.2822 1.8763 + 313SOL OW 950 0.807 2.445 2.241 -0.1564 0.3099 0.1841 + 313SOL HW1 951 0.812 2.544 2.251 0.4414 0.2179 0.8550 + 313SOL HW2 952 0.884 2.403 2.288 0.7216 -0.3715 -1.8339 + 314SOL OW 953 0.955 1.715 0.955 -0.2927 -0.0203 -0.0649 + 314SOL HW1 954 0.957 1.752 0.862 -1.1705 -1.9667 -0.8514 + 314SOL HW2 955 1.028 1.758 1.008 0.2198 1.1058 -1.6372 + 315SOL OW 956 2.026 1.708 1.434 0.0110 -0.9267 0.4122 + 315SOL HW1 957 2.048 1.611 1.445 -0.5636 -0.8800 2.0435 + 315SOL HW2 958 1.991 1.744 1.521 -0.9475 0.4294 -0.5326 + 316SOL OW 959 2.198 2.211 1.781 0.1392 0.3014 0.1965 + 316SOL HW1 960 2.115 2.267 1.783 0.7186 1.1377 0.5217 + 316SOL HW2 961 2.273 2.260 1.824 1.0438 -0.0925 -0.9234 + 317SOL OW 962 2.457 2.064 0.045 -0.0935 0.6309 -0.2460 + 317SOL HW1 963 2.513 1.992 0.085 0.1001 1.0514 0.2498 + 317SOL HW2 964 2.365 2.059 0.082 0.1731 1.2326 0.5319 + 318SOL OW 965 0.718 2.323 1.079 0.5459 0.7062 0.6161 + 318SOL HW1 966 0.699 2.274 0.995 1.7574 0.4382 0.4917 + 318SOL HW2 967 0.635 2.370 1.111 -0.7720 -1.9507 1.1015 + 319SOL OW 968 1.357 -0.010 0.460 -0.1390 -0.1579 0.1144 + 319SOL HW1 969 1.383 -0.040 0.368 -1.5538 0.9287 -0.6492 + 319SOL HW2 970 1.401 0.077 0.480 -0.9873 0.3209 -0.1023 + 320SOL OW 971 0.951 1.588 1.220 0.0746 0.0908 -0.2747 + 320SOL HW1 972 0.991 1.548 1.137 -1.6563 1.0183 -1.5738 + 320SOL HW2 973 0.860 1.625 1.199 -0.9384 -0.8395 2.3389 + 321SOL OW 974 0.947 1.796 0.130 -0.2413 -0.3910 -0.1195 + 321SOL HW1 975 1.026 1.833 0.179 -1.9753 2.1133 0.8196 + 321SOL HW2 976 0.919 1.711 0.174 2.2366 -1.6084 -0.7969 + 322SOL OW 977 0.989 2.198 0.476 0.3455 0.3619 -0.2714 + 322SOL HW1 978 1.066 2.147 0.435 0.0448 -0.5317 0.2697 + 322SOL HW2 979 1.021 2.287 0.506 1.1253 0.0811 -0.2515 + 323SOL OW 980 0.984 1.811 0.694 0.6747 -0.3345 -0.2012 + 323SOL HW1 981 1.075 1.832 0.658 -0.9887 1.4355 -3.5228 + 323SOL HW2 982 0.939 1.745 0.634 -0.3517 -0.9766 1.2734 + 324SOL OW 983 1.978 2.403 1.816 -0.5410 0.2022 0.0377 + 324SOL HW1 984 1.934 2.459 1.746 0.0272 0.4625 -0.1073 + 324SOL HW2 985 2.022 2.462 1.884 0.9990 -0.0858 -0.7064 + 325SOL OW 986 0.212 1.875 0.093 0.3420 -0.4671 0.4626 + 325SOL HW1 987 0.212 1.810 0.017 0.9895 1.6842 -1.4125 + 325SOL HW2 988 0.301 1.919 0.099 -0.1625 0.4246 1.5632 + 326SOL OW 989 1.158 0.059 1.980 0.1156 0.3596 -0.3185 + 326SOL HW1 990 1.250 0.023 1.962 -0.4420 -0.7773 -0.9728 + 326SOL HW2 991 1.116 0.084 1.893 -0.4241 0.2923 -0.0751 + 327SOL OW 992 1.345 1.990 1.706 0.4566 0.8013 -0.6847 + 327SOL HW1 993 1.267 1.971 1.646 0.6149 -1.5907 -0.1516 + 327SOL HW2 994 1.402 1.909 1.713 1.7736 1.8442 0.7496 + 328SOL OW 995 0.873 1.964 1.760 0.0832 0.3037 0.1805 + 328SOL HW1 996 0.803 1.970 1.831 -0.1580 -1.2846 0.0975 + 328SOL HW2 997 0.835 1.995 1.673 -0.0693 0.8464 0.4377 + 329SOL OW 998 2.377 2.190 0.526 -0.2885 -0.1793 -0.0533 + 329SOL HW1 999 2.439 2.265 0.551 -0.0005 0.2174 -1.9169 + 329SOL HW2 1000 2.287 2.207 0.565 -0.5202 1.7018 -1.3523 + 330SOL OW 1001 0.551 1.410 1.688 0.0868 -0.2899 0.2656 + 330SOL HW1 1002 0.597 1.489 1.728 1.3397 -0.6456 -0.4768 + 330SOL HW2 1003 0.482 1.376 1.753 1.0687 0.0560 1.5089 + 331SOL OW 1004 0.988 2.037 2.414 0.5021 0.1383 -0.1807 + 331SOL HW1 1005 1.044 1.991 2.345 -1.7283 2.4264 -3.5963 + 331SOL HW2 1006 0.945 1.969 2.473 -0.0073 -2.0020 -2.9745 + 332SOL OW 1007 0.724 2.262 2.071 0.5959 0.0691 -0.2408 + 332SOL HW1 1008 0.640 2.275 2.018 1.1690 -0.0176 -1.1735 + 332SOL HW2 1009 0.734 2.338 2.135 -0.5492 -0.2718 0.3686 + 333SOL OW 1010 1.439 2.455 2.244 0.1628 -0.3982 0.1016 + 333SOL HW1 1011 1.372 2.381 2.236 -0.2618 -0.0339 0.2971 + 333SOL HW2 1012 1.511 2.441 2.176 -0.2906 -0.5989 -0.3433 + 334SOL OW 1013 1.415 2.351 0.219 -0.0722 0.1073 0.2292 + 334SOL HW1 1014 1.451 2.414 0.150 -1.6632 -0.5379 -1.2182 + 334SOL HW2 1015 1.469 2.267 0.218 0.0424 0.1817 -0.0879 + 335SOL OW 1016 1.294 2.104 1.952 0.2186 0.2298 -0.2964 + 335SOL HW1 1017 1.318 2.079 1.858 -0.2432 -1.8830 0.1237 + 335SOL HW2 1018 1.357 2.058 2.016 -0.0076 0.9656 0.4630 + 336SOL OW 1019 0.429 0.321 2.357 -0.0322 0.0866 -0.6709 + 336SOL HW1 1020 0.379 0.235 2.358 0.6369 -0.2954 1.2712 + 336SOL HW2 1021 0.421 0.365 2.447 -1.0642 2.4432 -1.9102 + 337SOL OW 1022 0.610 2.014 1.537 -0.1384 -0.7920 0.1955 + 337SOL HW1 1023 0.604 2.114 1.536 -0.7479 -0.8397 -1.4093 + 337SOL HW2 1024 0.700 1.986 1.504 -0.2060 -0.7987 0.0179 + 338SOL OW 1025 2.325 1.792 2.224 0.0882 0.6964 0.1254 + 338SOL HW1 1026 2.325 1.797 2.324 -0.3500 1.9083 0.0730 + 338SOL HW2 1027 2.288 1.704 2.195 -0.1745 0.5066 1.0266 + 339SOL OW 1028 0.876 0.110 0.171 0.2288 0.3332 0.4763 + 339SOL HW1 1029 0.849 0.017 0.196 -0.3968 0.6126 0.8464 + 339SOL HW2 1030 0.811 0.147 0.104 0.7110 0.3574 0.0118 + 340SOL OW 1031 2.333 2.344 2.368 0.1712 0.2136 -0.2041 + 340SOL HW1 1032 2.343 2.255 2.411 0.8521 -0.2747 -1.3804 + 340SOL HW2 1033 2.341 2.416 2.438 -0.0968 -0.6232 0.6890 + 341SOL OW 1034 2.471 0.208 0.068 -0.4668 0.1485 -0.6598 + 341SOL HW1 1035 2.530 0.200 0.148 -0.4968 0.6613 -0.5882 + 341SOL HW2 1036 2.403 0.134 0.070 -0.6955 0.3746 -0.0269 + 342SOL OW 1037 1.073 1.982 2.066 0.3169 -0.0715 0.5393 + 342SOL HW1 1038 1.122 1.939 2.142 2.3184 1.6563 0.2685 + 342SOL HW2 1039 1.138 2.032 2.008 -1.3819 -0.1535 -1.4920 + 343SOL OW 1040 0.871 2.291 0.226 -0.2222 -0.7186 0.4463 + 343SOL HW1 1041 0.960 2.329 0.202 0.2006 -0.0210 2.9895 + 343SOL HW2 1042 0.885 2.211 0.285 -1.2690 -0.6433 0.7925 + 344SOL OW 1043 1.071 2.162 1.751 -0.3130 0.2174 0.6990 + 344SOL HW1 1044 1.033 2.070 1.758 -1.2176 0.6194 1.1175 + 344SOL HW2 1045 1.049 2.214 1.834 1.1172 0.4702 0.9310 + 345SOL OW 1046 1.295 2.241 2.207 -0.2921 0.3886 0.3238 + 345SOL HW1 1047 1.226 2.211 2.273 0.0975 -1.7257 -0.2189 + 345SOL HW2 1048 1.252 2.258 2.118 -0.2966 0.1631 0.2823 + 346SOL OW 1049 1.814 0.189 2.384 0.6127 -0.4643 -0.1154 + 346SOL HW1 1050 1.873 0.269 2.396 2.7764 -1.6449 -2.5363 + 346SOL HW2 1051 1.745 0.208 2.314 0.4926 -0.3632 0.0300 + 347SOL OW 1052 1.901 0.006 1.181 -0.0377 0.1990 0.3416 + 347SOL HW1 1053 1.941 -0.014 1.091 -1.5917 -3.7864 0.4456 + 347SOL HW2 1054 1.805 0.030 1.169 0.2642 1.6007 0.7665 + 348SOL OW 1055 1.838 0.264 0.370 -0.0546 0.4702 -0.2398 + 348SOL HW1 1056 1.780 0.230 0.296 1.4985 -0.9724 -0.8288 + 348SOL HW2 1057 1.819 0.213 0.454 0.9143 -0.5669 -0.6374 + 349SOL OW 1058 0.558 0.988 0.737 -0.5022 -0.4767 0.7609 + 349SOL HW1 1059 0.552 0.984 0.837 -0.2241 -0.6086 0.7713 + 349SOL HW2 1060 0.474 0.952 0.698 -1.5838 1.7256 0.9882 + 350SOL OW 1061 0.022 1.484 0.546 -0.4916 0.5221 -0.5678 + 350SOL HW1 1062 0.110 1.501 0.591 -0.7025 -0.1147 0.1038 + 350SOL HW2 1063 0.036 1.427 0.466 -0.2353 0.8125 -0.7319 + 351SOL OW 1064 2.277 0.272 1.787 0.5312 -0.4627 0.1404 + 351SOL HW1 1065 2.274 0.196 1.852 -1.3914 0.1490 0.7687 + 351SOL HW2 1066 2.184 0.294 1.757 0.9065 2.6823 1.1928 + 352SOL OW 1067 1.355 1.991 0.074 0.5398 0.2248 0.3621 + 352SOL HW1 1068 1.422 2.044 0.125 0.9043 -0.3834 0.5159 + 352SOL HW2 1069 1.284 1.957 0.136 0.8502 -0.3111 0.4243 + 353SOL OW 1070 2.121 1.261 2.222 -0.1745 -0.4149 0.8054 + 353SOL HW1 1071 2.042 1.204 2.246 0.2475 -1.2004 0.3610 + 353SOL HW2 1072 2.199 1.202 2.203 -0.1764 0.2482 -1.3137 + 354SOL OW 1073 2.325 1.288 0.220 -0.0277 0.1941 0.6147 + 354SOL HW1 1074 2.289 1.326 0.134 1.0424 -0.5002 -0.1428 + 354SOL HW2 1075 2.311 1.189 0.221 0.6795 0.0956 0.8857 + 355SOL OW 1076 2.150 0.048 0.299 0.3228 -0.1232 0.5087 + 355SOL HW1 1077 2.110 0.067 0.210 1.2603 -0.9646 -0.0970 + 355SOL HW2 1078 2.077 0.038 0.367 -0.3119 2.7458 0.2929 + 356SOL OW 1079 1.604 0.807 1.769 -0.0644 0.0131 0.3030 + 356SOL HW1 1080 1.549 0.742 1.716 1.3328 -1.6933 0.9129 + 356SOL HW2 1081 1.587 0.900 1.737 -1.9565 -0.6720 -0.7041 + 357SOL OW 1082 2.158 0.773 1.564 0.2704 0.1498 -0.1483 + 357SOL HW1 1083 2.243 0.825 1.560 -0.2146 0.8596 -1.3518 + 357SOL HW2 1084 2.153 0.725 1.651 1.5631 0.6869 0.2336 + 358SOL OW 1085 1.401 0.253 1.428 -0.2580 -0.1313 -0.4160 + 358SOL HW1 1086 1.359 0.232 1.516 0.8454 0.9738 0.3877 + 358SOL HW2 1087 1.361 0.195 1.356 0.8538 -3.1180 1.3025 + 359SOL OW 1088 1.928 0.824 0.317 0.1731 0.2995 -0.1788 + 359SOL HW1 1089 1.956 0.736 0.280 -1.0142 0.0839 -0.5650 + 359SOL HW2 1090 1.855 0.810 0.384 0.2449 0.9569 0.0357 + 360SOL OW 1091 2.295 1.634 1.333 0.4287 0.3839 0.1485 + 360SOL HW1 1092 2.296 1.600 1.239 2.0094 -0.4518 0.4578 + 360SOL HW2 1093 2.214 1.600 1.381 -0.2522 0.6213 -0.8318 + 361SOL OW 1094 0.501 0.050 0.230 -0.3607 0.0898 -0.1581 + 361SOL HW1 1095 0.402 0.047 0.212 -0.5503 -1.4030 1.1302 + 361SOL HW2 1096 0.551 0.047 0.144 -1.4688 2.1237 -0.8841 + 362SOL OW 1097 2.101 1.950 0.745 -0.4182 -0.2914 0.3314 + 362SOL HW1 1098 2.194 1.976 0.771 -0.2337 -0.6590 0.0426 + 362SOL HW2 1099 2.036 2.015 0.784 -0.2284 -1.3804 2.5545 + 363SOL OW 1100 2.319 0.221 0.404 -0.1903 0.1861 -0.5579 + 363SOL HW1 1101 2.257 0.153 0.365 -0.4478 -0.1633 0.4508 + 363SOL HW2 1102 2.407 0.218 0.356 -0.6552 0.0782 -1.4101 + 364SOL OW 1103 2.130 1.464 1.444 0.0324 -0.3390 -0.1721 + 364SOL HW1 1104 2.137 1.368 1.417 -0.9432 -0.3395 -0.4430 + 364SOL HW2 1105 2.170 1.476 1.535 0.3037 -0.9735 -0.2039 + 365SOL OW 1106 2.168 0.508 1.199 0.2727 -0.2004 0.3924 + 365SOL HW1 1107 2.097 0.438 1.207 0.6328 -0.4959 1.0710 + 365SOL HW2 1108 2.250 0.478 1.248 0.0777 1.1308 1.5769 + 366SOL OW 1109 2.090 1.564 1.013 0.4177 -0.7587 0.0360 + 366SOL HW1 1110 2.100 1.600 0.920 -0.9913 -1.3189 -0.3353 + 366SOL HW2 1111 2.008 1.507 1.018 0.9770 -1.4589 1.3978 + 367SOL OW 1112 1.965 1.742 1.173 -0.4132 -0.1686 0.3674 + 367SOL HW1 1113 2.049 1.729 1.120 -0.2799 1.5311 0.1597 + 367SOL HW2 1114 1.984 1.726 1.270 0.3345 1.0331 0.4208 + 368SOL OW 1115 2.177 0.684 0.560 0.4315 -0.1155 0.4039 + 368SOL HW1 1116 2.171 0.596 0.514 -1.4253 0.0917 0.2260 + 368SOL HW2 1117 2.183 0.757 0.492 0.3228 0.0095 0.5275 + 369SOL OW 1118 2.186 2.136 0.010 0.0267 0.1960 -0.6067 + 369SOL HW1 1119 2.157 2.170 0.099 -0.0286 -2.8100 0.5651 + 369SOL HW2 1120 2.106 2.110 -0.044 0.1130 0.8454 -1.0482 + 370SOL OW 1121 0.113 2.236 1.185 -0.2936 0.5212 0.6852 + 370SOL HW1 1122 0.033 2.229 1.244 -2.0671 1.4138 -1.5416 + 370SOL HW2 1123 0.099 2.311 1.119 1.9201 0.0162 -0.3939 + 371SOL OW 1124 1.865 2.420 2.263 -0.2074 0.2007 -0.2933 + 371SOL HW1 1125 1.953 2.384 2.232 0.7422 -0.2356 2.7442 + 371SOL HW2 1126 1.877 2.515 2.294 -1.1449 0.6614 -1.3094 + 372SOL OW 1127 0.350 1.172 0.901 0.0625 0.9708 0.2582 + 372SOL HW1 1128 0.401 1.087 0.916 -0.6965 0.4244 -0.2791 + 372SOL HW2 1129 0.403 1.249 0.937 1.4427 0.4449 -0.6393 + 373SOL OW 1130 1.800 0.481 1.666 0.4179 -0.3942 0.3633 + 373SOL HW1 1131 1.765 0.566 1.706 0.4246 -0.0206 -0.4342 + 373SOL HW2 1132 1.731 0.410 1.673 0.7744 -0.6009 1.9472 + 374SOL OW 1133 2.071 0.637 0.930 0.1221 0.1866 -0.0653 + 374SOL HW1 1134 2.119 0.630 1.017 -1.8120 -0.4993 0.9623 + 374SOL HW2 1135 2.100 0.563 0.869 -0.2522 -0.7336 0.8689 + 375SOL OW 1136 2.249 1.583 2.090 -0.5083 0.3338 0.1416 + 375SOL HW1 1137 2.324 1.524 2.060 -0.6318 0.6809 -0.8636 + 375SOL HW2 1138 2.166 1.528 2.103 0.1221 -0.1860 2.0556 + 376SOL OW 1139 2.027 1.430 1.731 0.3200 -0.0384 -0.2472 + 376SOL HW1 1140 2.114 1.469 1.702 0.6490 -0.2389 0.4814 + 376SOL HW2 1141 2.021 1.431 1.830 -0.2012 -0.7002 -0.2680 + 377SOL OW 1142 0.290 0.355 0.471 0.6168 -0.5266 0.0097 + 377SOL HW1 1143 0.361 0.360 0.543 -0.4466 -0.8743 1.0877 + 377SOL HW2 1144 0.245 0.444 0.464 1.6018 -0.1166 -1.1274 + 378SOL OW 1145 2.115 0.416 0.746 -0.5798 -0.4277 -0.0387 + 378SOL HW1 1146 2.036 0.449 0.693 -2.1410 0.3338 2.6835 + 378SOL HW2 1147 2.194 0.406 0.686 -2.4624 -0.1200 -2.6069 + 379SOL OW 1148 0.088 1.220 0.915 0.3364 0.2799 0.1203 + 379SOL HW1 1149 0.179 1.217 0.873 1.3407 0.3226 2.2403 + 379SOL HW2 1150 0.096 1.255 1.009 -2.0788 1.8527 -0.2267 + 380SOL OW 1151 2.225 0.529 2.080 0.0577 -0.6475 -0.3409 + 380SOL HW1 1152 2.237 0.454 2.144 -0.3891 -1.3213 -1.0486 + 380SOL HW2 1153 2.308 0.586 2.080 -0.7401 0.5434 2.3484 + 381SOL OW 1154 2.293 0.033 1.647 -0.2322 0.5817 0.1066 + 381SOL HW1 1155 2.291 0.127 1.682 1.8630 0.9447 -0.6931 + 381SOL HW2 1156 2.381 -0.009 1.670 -1.6212 -1.5965 1.4970 + 382SOL OW 1157 2.465 0.613 1.612 0.4063 -0.1556 -0.6664 + 382SOL HW1 1158 2.459 0.591 1.710 -1.6980 1.9814 -0.2854 + 382SOL HW2 1159 2.455 0.712 1.600 -1.5121 -0.6357 -3.2013 + 383SOL OW 1160 2.321 1.044 1.257 0.3448 0.0973 0.2842 + 383SOL HW1 1161 2.416 1.018 1.236 -0.0825 0.0749 -1.6615 + 383SOL HW2 1162 2.292 1.115 1.194 -0.9866 0.0365 0.8249 + 384SOL OW 1163 1.572 1.606 0.923 0.1738 0.0875 -0.1555 + 384SOL HW1 1164 1.620 1.570 1.003 -1.5535 -0.8624 0.4761 + 384SOL HW2 1165 1.626 1.588 0.841 1.7080 0.5882 0.7356 + 385SOL OW 1166 1.666 2.246 2.445 -0.2904 0.1483 0.6452 + 385SOL HW1 1167 1.707 2.334 2.470 -0.9775 0.6151 0.1292 + 385SOL HW2 1168 1.609 2.257 2.364 -0.6049 -0.7153 0.7429 + 386SOL OW 1169 2.187 0.985 1.930 -0.2399 -0.5212 -0.0923 + 386SOL HW1 1170 2.199 1.021 2.023 -1.7452 -0.4518 0.0873 + 386SOL HW2 1171 2.165 0.888 1.935 2.0289 -1.0560 -0.4919 + 387SOL OW 1172 2.360 0.327 0.643 0.2375 0.2173 0.1785 + 387SOL HW1 1173 2.344 0.297 0.549 0.5341 -0.3513 0.3123 + 387SOL HW2 1174 2.442 0.384 0.646 0.8769 -0.7080 0.2904 + 388SOL OW 1175 2.225 1.220 1.076 0.5035 0.1209 0.2341 + 388SOL HW1 1176 2.128 1.214 1.101 0.8960 0.4363 1.8561 + 388SOL HW2 1177 2.234 1.211 0.977 -1.2693 0.9990 -0.0212 + 389SOL OW 1178 0.010 0.643 0.236 0.1243 -0.0100 0.1228 + 389SOL HW1 1179 0.036 0.719 0.176 -2.1087 0.2304 -0.5700 + 389SOL HW2 1180 -0.027 0.568 0.182 1.2262 -1.1363 0.9159 + 390SOL OW 1181 1.476 1.507 0.439 0.2506 -0.0608 -0.5035 + 390SOL HW1 1182 1.486 1.607 0.443 0.6189 -0.1369 0.8162 + 390SOL HW2 1183 1.430 1.481 0.355 0.4787 1.2076 -1.0244 + 391SOL OW 1184 1.831 1.990 1.252 0.5891 0.3729 -0.0417 + 391SOL HW1 1185 1.867 1.902 1.221 0.3481 0.1223 0.3726 + 391SOL HW2 1186 1.735 1.979 1.279 0.5810 0.7451 0.0884 + 392SOL OW 1187 2.468 1.587 0.898 0.2165 0.1495 0.0057 + 392SOL HW1 1188 2.422 1.545 0.976 0.1302 1.3673 0.6251 + 392SOL HW2 1189 2.417 1.568 0.815 -1.4110 1.4315 0.6781 + 393SOL OW 1190 1.867 1.380 0.999 -0.2806 0.5326 -0.2080 + 393SOL HW1 1191 1.814 1.440 1.059 -1.3320 0.9570 -1.5349 + 393SOL HW2 1192 1.809 1.351 0.923 1.1418 0.2863 -1.1994 + 394SOL OW 1193 2.018 0.299 1.687 -0.0601 -0.6307 0.1869 + 394SOL HW1 1194 1.998 0.203 1.667 -0.0384 -0.6609 0.3068 + 394SOL HW2 1195 1.936 0.354 1.669 -0.1988 -0.7286 0.5104 + 395SOL OW 1196 2.490 2.420 1.000 0.3180 0.7825 0.1612 + 395SOL HW1 1197 2.481 2.502 0.944 -0.0768 0.4320 -0.2985 + 395SOL HW2 1198 2.408 2.364 0.989 -0.2027 1.2016 1.8856 + 396SOL OW 1199 2.311 1.505 1.655 0.1798 -0.2062 -0.0887 + 396SOL HW1 1200 2.341 1.600 1.648 1.0004 -0.4976 -0.5832 + 396SOL HW2 1201 2.359 1.460 1.731 1.8744 -0.9987 -1.6170 + 397SOL OW 1202 0.064 0.331 1.168 0.1921 0.3437 -0.0246 + 397SOL HW1 1203 -0.020 0.300 1.213 0.3197 0.2665 0.1614 + 397SOL HW2 1204 0.119 0.251 1.141 0.8740 0.4211 1.1182 + 398SOL OW 1205 0.730 0.488 0.801 0.0792 0.3684 0.4724 + 398SOL HW1 1206 0.719 0.397 0.839 -0.0458 0.2822 0.2289 + 398SOL HW2 1207 0.823 0.499 0.766 0.2588 0.5191 0.9950 + 399SOL OW 1208 1.600 1.097 1.938 -0.1800 -0.3264 0.3774 + 399SOL HW1 1209 1.595 1.009 1.986 -1.9529 -0.3932 0.0923 + 399SOL HW2 1210 1.508 1.129 1.918 0.4690 1.3771 0.0510 + 400SOL OW 1211 2.334 1.492 1.113 -0.2012 -0.0510 -0.0053 + 400SOL HW1 1212 2.244 1.510 1.072 0.4859 -0.5906 -1.7865 + 400SOL HW2 1213 2.348 1.393 1.118 0.1469 0.0277 0.6351 + 401SOL OW 1214 1.747 1.467 1.860 -0.1564 -0.2856 -0.3440 + 401SOL HW1 1215 1.828 1.520 1.886 -0.3231 -0.6118 0.8726 + 401SOL HW2 1216 1.775 1.387 1.808 0.1986 0.3340 -1.1079 + 402SOL OW 1217 1.994 1.982 0.490 -0.0565 0.6986 -0.4478 + 402SOL HW1 1218 2.018 1.953 0.583 -0.7119 -0.9055 -0.7727 + 402SOL HW2 1219 1.909 2.035 0.492 -0.4258 0.0963 -0.2229 + 403SOL OW 1220 2.337 0.732 0.765 -0.1254 0.1577 -0.4268 + 403SOL HW1 1221 2.299 0.791 0.836 0.2923 -0.1522 0.0606 + 403SOL HW2 1222 2.270 0.722 0.691 -0.3815 0.8489 -0.2922 + 404SOL OW 1223 0.429 0.726 1.387 0.2268 -0.3812 0.1271 + 404SOL HW1 1224 0.375 0.646 1.363 0.4212 -0.4393 -0.1144 + 404SOL HW2 1225 0.382 0.809 1.357 -0.2530 -0.3705 0.8898 + 405SOL OW 1226 2.275 1.202 1.512 0.2336 -0.2289 -0.1414 + 405SOL HW1 1227 2.283 1.126 1.447 -1.8768 -1.0352 0.5045 + 405SOL HW2 1228 2.366 1.225 1.548 1.2999 -0.3469 -2.7034 + 406SOL OW 1229 2.000 1.335 0.637 -0.2842 -0.5205 0.0343 + 406SOL HW1 1230 1.984 1.272 0.713 -3.2520 1.4322 1.0889 + 406SOL HW2 1231 2.086 1.384 0.652 -0.1431 -1.1725 1.4132 + 407SOL OW 1232 1.905 1.166 0.089 0.3238 -0.2062 -0.7300 + 407SOL HW1 1233 2.003 1.144 0.090 0.7253 1.4982 -1.9089 + 407SOL HW2 1234 1.892 1.258 0.053 -1.7037 -0.3054 -0.2657 + 408SOL OW 1235 1.895 0.573 2.206 -0.5817 -0.3840 -0.1698 + 408SOL HW1 1236 1.900 0.530 2.116 1.9410 -0.0187 -0.2065 + 408SOL HW2 1237 1.881 0.672 2.195 -1.5547 -0.5155 -0.1402 + 409SOL OW 1238 1.436 0.106 2.503 0.2217 -0.1654 -0.2871 + 409SOL HW1 1239 1.435 0.051 2.419 0.1957 -2.2581 1.0619 + 409SOL HW2 1240 1.428 0.203 2.479 0.8445 -0.6935 -2.7347 + 410SOL OW 1241 2.420 0.900 1.609 0.1149 0.2779 -0.0215 + 410SOL HW1 1242 2.482 0.897 1.531 -0.3338 -0.6076 -0.3562 + 410SOL HW2 1243 2.444 0.976 1.669 -0.3581 1.7844 -1.7130 + 411SOL OW 1244 0.073 0.538 2.109 -0.0021 0.0808 -0.1278 + 411SOL HW1 1245 0.068 0.459 2.172 1.0686 -0.6840 -0.9990 + 411SOL HW2 1246 0.077 0.505 2.015 -1.2263 1.2298 -0.5951 + 412SOL OW 1247 0.096 2.298 1.526 -0.0657 -0.1225 0.3674 + 412SOL HW1 1248 0.178 2.242 1.514 -0.2350 -0.1359 -0.7527 + 412SOL HW2 1249 0.058 2.321 1.436 -1.2064 -0.0005 0.8745 + 413SOL OW 1250 0.096 0.546 1.004 -0.1729 -0.1494 0.1824 + 413SOL HW1 1251 0.065 0.466 1.056 0.7590 -0.6514 -0.0176 + 413SOL HW2 1252 0.085 0.528 0.906 1.4254 -0.6207 0.0834 + 414SOL OW 1253 0.165 1.521 1.867 0.4404 -0.8085 -0.2275 + 414SOL HW1 1254 0.154 1.537 1.769 0.7202 1.4634 0.0849 + 414SOL HW2 1255 0.217 1.597 1.907 -0.9448 -0.9761 1.9405 + 415SOL OW 1256 2.007 0.289 1.247 0.1841 0.4967 -0.0188 + 415SOL HW1 1257 1.974 0.236 1.169 -2.2662 0.5544 0.9651 + 415SOL HW2 1258 2.036 0.226 1.320 0.1311 0.4859 -0.0067 + 416SOL OW 1259 1.967 0.462 2.429 0.0699 0.4770 0.0343 + 416SOL HW1 1260 2.039 0.393 2.421 1.4796 1.6898 2.1391 + 416SOL HW2 1261 1.962 0.514 2.344 1.9793 0.6533 0.0124 + 417SOL OW 1262 2.167 1.012 0.672 -0.3014 0.2770 -0.1788 + 417SOL HW1 1263 2.261 0.999 0.703 -0.8235 -1.5031 0.6629 + 417SOL HW2 1264 2.156 0.972 0.581 -0.7610 -1.2786 0.5581 + 418SOL OW 1265 2.502 1.454 1.381 0.0329 0.7889 -0.1512 + 418SOL HW1 1266 2.427 1.513 1.353 1.6756 3.2849 0.6390 + 418SOL HW2 1267 2.472 1.395 1.456 -0.9232 2.2697 0.6370 + 419SOL OW 1268 2.047 0.214 0.941 0.5312 -0.8322 0.8547 + 419SOL HW1 1269 2.080 0.274 0.869 -0.0949 -0.9795 0.4457 + 419SOL HW2 1270 2.102 0.130 0.941 1.0877 -0.4720 1.1115 + 420SOL OW 1271 0.103 0.863 1.384 -0.0659 0.3396 -0.5100 + 420SOL HW1 1272 0.113 0.799 1.308 1.1685 0.1931 -0.2339 + 420SOL HW2 1273 0.187 0.918 1.392 0.2500 -0.4318 1.4615 + 421SOL OW 1274 0.089 1.300 0.359 0.0560 -0.5627 -0.0184 + 421SOL HW1 1275 -0.002 1.301 0.316 0.0880 2.2912 -0.1052 + 421SOL HW2 1276 0.159 1.312 0.289 0.2293 1.6878 0.4948 + 422SOL OW 1277 2.431 0.988 0.696 0.5741 -0.2010 -0.3269 + 422SOL HW1 1278 2.500 1.010 0.627 -0.2499 -1.3280 -1.5142 + 422SOL HW2 1279 2.469 0.923 0.762 0.5302 -1.0631 -1.1582 + 423SOL OW 1280 2.088 1.857 2.091 0.0091 -0.3557 -0.3943 + 423SOL HW1 1281 2.096 1.867 1.992 -0.8955 -1.4358 -0.5784 + 423SOL HW2 1282 2.173 1.819 2.128 -0.1507 -1.2467 -0.9332 + 424SOL OW 1283 2.265 0.845 1.026 0.6981 -0.1314 -0.4218 + 424SOL HW1 1284 2.227 0.814 1.113 0.2246 0.0859 -0.5474 + 424SOL HW2 1285 2.229 0.936 1.004 1.7648 0.3273 -0.2537 + 425SOL OW 1286 2.428 1.397 2.006 0.1907 0.2966 0.3319 + 425SOL HW1 1287 2.451 1.355 2.094 -0.0720 -0.1240 0.2036 + 425SOL HW2 1288 2.511 1.433 1.964 0.8249 -2.2483 -0.6778 + 426SOL OW 1289 2.131 0.872 2.316 -0.1969 -0.0615 -0.7262 + 426SOL HW1 1290 2.061 0.825 2.261 1.1210 -1.5672 -1.1249 + 426SOL HW2 1291 2.169 0.808 2.383 -1.2712 1.5666 1.4634 + 427SOL OW 1292 0.132 0.824 0.059 -0.1479 -0.8070 0.2626 + 427SOL HW1 1293 0.136 0.841 -0.039 1.0117 -2.1086 0.0647 + 427SOL HW2 1294 0.148 0.910 0.109 3.1598 -0.8068 -0.6980 + 428SOL OW 1295 2.199 1.935 1.826 -0.1941 -0.2706 0.5941 + 428SOL HW1 1296 2.298 1.941 1.834 -0.4225 -1.2112 4.4270 + 428SOL HW2 1297 2.160 2.027 1.831 0.3915 0.0243 -0.0699 + 429SOL OW 1298 1.693 1.315 2.117 -0.5679 0.0768 0.3366 + 429SOL HW1 1299 1.600 1.276 2.120 -0.0005 -1.3945 -0.8893 + 429SOL HW2 1300 1.714 1.342 2.023 1.0822 -1.6408 0.2022 + 430SOL OW 1301 2.118 2.354 2.169 -0.0153 -0.2914 0.6566 + 430SOL HW1 1302 2.103 2.266 2.124 0.0195 0.1092 -0.1569 + 430SOL HW2 1303 2.190 2.345 2.238 1.2031 -0.5055 -0.6323 + 431SOL OW 1304 0.088 2.126 2.275 -0.5856 0.2642 0.0815 + 431SOL HW1 1305 0.082 2.042 2.221 -0.3472 -0.0715 0.5660 + 431SOL HW2 1306 0.030 2.118 2.356 -1.0114 0.7987 -0.1726 + 432SOL OW 1307 2.144 0.732 1.916 0.2694 -0.2776 -0.0174 + 432SOL HW1 1308 2.160 0.660 1.983 1.2975 0.9608 1.1029 + 432SOL HW2 1309 2.057 0.716 1.869 0.0601 -1.7434 0.8619 + 433SOL OW 1310 0.270 2.177 0.786 -0.1130 -0.0014 -0.1345 + 433SOL HW1 1311 0.228 2.250 0.731 -0.5829 -0.5751 -0.5379 + 433SOL HW2 1312 0.349 2.140 0.737 0.4553 0.6137 0.3176 + 434SOL OW 1313 0.620 0.875 1.539 0.8572 -0.5462 -0.2585 + 434SOL HW1 1314 0.699 0.817 1.559 0.1466 -2.1708 -2.0196 + 434SOL HW2 1315 0.550 0.820 1.493 -1.8582 0.5599 2.5055 + 435SOL OW 1316 2.195 0.697 0.023 -0.5784 -0.2445 0.3740 + 435SOL HW1 1317 2.128 0.673 0.093 -0.4783 -2.0083 -0.1020 + 435SOL HW2 1318 2.273 0.635 0.029 -0.8121 -0.7643 -1.6255 + 436SOL OW 1319 2.169 2.219 0.270 -0.3676 0.3552 0.0468 + 436SOL HW1 1320 2.189 2.132 0.315 -2.0695 -0.4787 -0.7848 + 436SOL HW2 1321 2.185 2.294 0.334 1.5864 -0.5269 0.6131 + 437SOL OW 1322 2.144 2.271 0.641 -0.0486 -0.4048 -0.2326 + 437SOL HW1 1323 2.093 2.328 0.577 -0.3028 0.3462 0.6279 + 437SOL HW2 1324 2.084 2.242 0.715 0.4630 -0.5412 0.1324 + 438SOL OW 1325 0.123 0.020 1.706 0.1107 0.2737 -0.0079 + 438SOL HW1 1326 0.119 -0.053 1.638 0.0629 -0.6334 0.9534 + 438SOL HW2 1327 0.218 0.035 1.733 -0.2076 -2.1718 2.6793 + 439SOL OW 1328 1.937 2.104 2.123 -0.1326 0.2322 -0.1292 + 439SOL HW1 1329 1.915 2.143 2.034 -1.3180 -0.1483 -0.0157 + 439SOL HW2 1330 1.985 2.017 2.111 2.1439 1.5001 -0.3843 + 440SOL OW 1331 0.114 0.196 1.479 -0.3507 0.4331 -0.6294 + 440SOL HW1 1332 0.128 0.282 1.527 2.1590 0.9013 -2.1241 + 440SOL HW2 1333 0.114 0.120 1.544 -3.3393 1.6197 0.7727 + 441SOL OW 1334 0.053 1.295 2.236 -0.1082 -0.5348 0.0424 + 441SOL HW1 1335 0.044 1.204 2.194 -1.2677 -0.8595 1.0066 + 441SOL HW2 1336 0.132 1.295 2.298 2.1784 0.2093 -2.8091 + 442SOL OW 1337 2.162 1.073 0.031 -0.4067 0.5364 -0.4887 + 442SOL HW1 1338 2.226 1.034 0.098 -1.0486 -0.2840 -0.3461 + 442SOL HW2 1339 2.133 1.002 -0.033 -0.1531 1.2166 -1.3681 + 443SOL OW 1340 2.416 1.103 1.810 0.4325 0.2871 0.1521 + 443SOL HW1 1341 2.485 1.064 1.871 1.2617 1.4646 -0.0176 + 443SOL HW2 1342 2.327 1.102 1.854 0.9065 0.5004 1.1163 + 444SOL OW 1343 1.698 1.537 2.256 0.3235 -0.7436 0.0901 + 444SOL HW1 1344 1.716 1.468 2.185 1.9147 0.2418 -0.4950 + 444SOL HW2 1345 1.756 1.617 2.239 -3.1381 1.6756 -0.5322 + 445SOL OW 1346 1.759 2.097 0.562 0.1030 -0.1721 0.0720 + 445SOL HW1 1347 1.705 2.057 0.637 0.8340 -2.0618 -0.4032 + 445SOL HW2 1348 1.719 2.184 0.535 -1.8733 -0.8745 0.7032 + 446SOL OW 1349 1.886 0.826 2.115 0.3977 -0.1907 -0.0720 + 446SOL HW1 1350 1.881 0.919 2.151 -4.5331 0.4683 -2.1076 + 446SOL HW2 1351 1.927 0.828 2.023 1.0118 -0.1273 0.2036 + 447SOL OW 1352 2.224 0.258 2.171 -0.1555 -0.4693 -0.8040 + 447SOL HW1 1353 2.189 0.195 2.101 -0.5908 -0.6931 -0.3824 + 447SOL HW2 1354 2.323 0.244 2.181 0.1116 0.3406 -2.1710 + 448SOL OW 1355 1.894 0.779 1.823 -0.7720 0.4001 0.6652 + 448SOL HW1 1356 1.795 0.781 1.835 -0.8888 0.1948 -0.2196 + 448SOL HW2 1357 1.919 0.835 1.744 -0.2468 -0.1315 0.4516 + 449SOL OW 1358 0.031 2.242 0.259 -0.1660 0.5484 -0.1767 + 449SOL HW1 1359 0.021 2.166 0.196 0.4118 -1.0786 1.6515 + 449SOL HW2 1360 -0.012 2.219 0.346 1.7351 1.4977 1.0483 + 450SOL OW 1361 1.456 1.858 2.095 -0.2303 0.4725 0.6161 + 450SOL HW1 1362 1.473 1.883 1.999 -1.9057 -1.5581 -0.2294 + 450SOL HW2 1363 1.539 1.819 2.135 -0.5007 -1.7910 -1.0119 + 451SOL OW 1364 1.836 0.487 1.348 0.0434 -0.2300 -0.2792 + 451SOL HW1 1365 1.912 0.425 1.328 0.4821 -0.0145 0.6752 + 451SOL HW2 1366 1.840 0.514 1.444 -1.8811 -1.0836 0.0536 + 452SOL OW 1367 2.218 0.036 1.961 0.2723 -0.0478 -0.0255 + 452SOL HW1 1368 2.169 -0.012 2.034 0.6709 -0.5865 -0.1135 + 452SOL HW2 1369 2.302 -0.014 1.939 2.0046 2.0707 1.6887 + 453SOL OW 1370 2.333 0.432 0.085 -0.2089 -0.0669 0.5374 + 453SOL HW1 1371 2.386 0.349 0.100 0.0539 -0.0320 -0.1462 + 453SOL HW2 1372 2.243 0.409 0.049 0.0944 -0.0297 -0.2586 + 454SOL OW 1373 1.900 0.926 1.565 -0.6943 -0.2451 0.4122 + 454SOL HW1 1374 1.963 0.991 1.607 -0.7608 0.0199 0.0966 + 454SOL HW2 1375 1.951 0.848 1.529 -0.5903 -0.2418 0.5522 + 455SOL OW 1376 0.148 0.822 0.827 -0.1340 0.3622 0.3718 + 455SOL HW1 1377 0.229 0.835 0.884 0.0757 1.8342 -0.2564 + 455SOL HW2 1378 0.112 0.730 0.842 0.8894 0.1481 1.6265 + 456SOL OW 1379 0.079 1.039 2.108 -0.2956 0.2773 -0.3305 + 456SOL HW1 1380 0.081 0.961 2.170 -0.0646 -0.3845 -1.1711 + 456SOL HW2 1381 0.165 1.043 2.057 -0.3036 1.0867 -0.2861 + 457SOL OW 1382 2.161 0.276 2.434 0.9041 0.1557 0.1216 + 457SOL HW1 1383 2.190 0.263 2.339 2.2078 -0.7725 0.6471 + 457SOL HW2 1384 2.129 0.190 2.472 -0.0291 0.6199 0.3862 + 458SOL OW 1385 0.365 1.822 2.134 -0.2750 0.7429 -0.2475 + 458SOL HW1 1386 0.391 1.765 2.212 -0.0754 0.2751 -0.6490 + 458SOL HW2 1387 0.266 1.837 2.135 -0.6677 -1.6646 -1.5087 + 459SOL OW 1388 1.977 0.948 1.159 0.4203 -0.9365 1.0126 + 459SOL HW1 1389 2.016 0.869 1.208 0.0644 -0.5187 1.9627 + 459SOL HW2 1390 2.000 1.032 1.207 0.0653 -0.5209 0.4616 + 460SOL OW 1391 0.400 1.559 2.268 0.0671 -0.0062 0.0358 + 460SOL HW1 1392 0.435 1.509 2.189 0.3210 1.0228 -0.5112 + 460SOL HW2 1393 0.461 1.545 2.346 0.5327 0.0248 -0.3166 + 461SOL OW 1394 1.979 2.206 0.867 -0.0014 -0.2298 -0.4253 + 461SOL HW1 1395 2.032 2.276 0.916 -0.3943 0.5507 -1.1241 + 461SOL HW2 1396 1.908 2.170 0.928 -0.8473 1.1382 -0.5915 + 462SOL OW 1397 1.421 0.260 0.332 0.1535 -0.3299 -0.7052 + 462SOL HW1 1398 1.441 0.346 0.284 -0.0799 -0.5474 -1.1975 + 462SOL HW2 1399 1.331 0.227 0.304 -0.4482 0.0865 0.6877 + 463SOL OW 1400 2.422 2.305 1.909 -0.2079 -0.0033 -0.6604 + 463SOL HW1 1401 2.400 2.245 1.986 0.9632 -0.0949 -0.3951 + 463SOL HW2 1402 2.520 2.304 1.893 -0.4344 0.1354 -2.0671 + 464SOL OW 1403 1.375 2.276 0.690 0.7472 -0.5603 -0.1370 + 464SOL HW1 1404 1.402 2.344 0.622 3.3145 -0.5055 0.9252 + 464SOL HW2 1405 1.332 2.321 0.768 -0.2544 -0.4368 -0.7542 + 465SOL OW 1406 1.599 2.269 1.444 0.4349 -0.6032 0.0465 + 465SOL HW1 1407 1.697 2.255 1.456 0.2422 -2.7051 -0.6757 + 465SOL HW2 1408 1.572 2.238 1.353 -1.2584 -2.0695 1.0254 + 466SOL OW 1409 1.984 1.782 1.737 0.2003 -0.2370 0.3223 + 466SOL HW1 1410 2.066 1.835 1.758 0.2141 -0.2415 0.2828 + 466SOL HW2 1411 1.958 1.728 1.816 0.8476 -1.0498 -0.0250 + 467SOL OW 1412 1.629 2.329 0.589 0.3462 0.0463 0.7110 + 467SOL HW1 1413 1.654 2.368 0.500 -0.0412 1.0438 1.0329 + 467SOL HW2 1414 1.670 2.384 0.662 -0.2549 -0.1097 1.1698 + 468SOL OW 1415 2.330 1.775 0.022 0.2112 0.6602 -0.6006 + 468SOL HW1 1416 2.371 1.810 0.107 -2.9078 -0.4964 1.4249 + 468SOL HW2 1417 2.378 1.691 -0.005 0.2389 0.1826 0.8807 + 469SOL OW 1418 0.451 1.441 0.602 -0.3555 0.3278 -0.1406 + 469SOL HW1 1419 0.358 1.466 0.628 -0.6543 0.4821 -1.3475 + 469SOL HW2 1420 0.457 1.342 0.591 -0.4795 0.3521 -0.4423 + 470SOL OW 1421 2.464 1.863 1.395 -0.3057 0.1008 -0.2844 + 470SOL HW1 1422 2.398 1.920 1.444 -0.7448 -1.0662 0.4988 + 470SOL HW2 1423 2.414 1.799 1.336 0.1202 -1.3068 0.8988 + 471SOL OW 1424 2.207 1.968 0.338 -0.5918 0.2944 -0.6642 + 471SOL HW1 1425 2.124 1.980 0.393 -0.8259 0.3903 -1.0305 + 471SOL HW2 1426 2.235 1.872 0.341 0.4873 0.6709 1.1514 + 472SOL OW 1427 0.838 1.552 0.209 0.1817 -0.0236 -0.0733 + 472SOL HW1 1428 0.828 1.473 0.269 0.4971 -0.1540 -0.1864 + 472SOL HW2 1429 0.882 1.523 0.123 0.3661 0.2880 -0.0846 + 473SOL OW 1430 1.906 2.241 0.194 0.1957 0.1645 0.0970 + 473SOL HW1 1431 1.998 2.209 0.216 0.3507 0.1554 -0.5766 + 473SOL HW2 1432 1.844 2.163 0.185 0.1521 0.1626 0.3890 + 474SOL OW 1433 2.169 0.023 1.301 0.1411 -0.1058 -0.0064 + 474SOL HW1 1434 2.153 -0.032 1.382 0.4649 1.0453 0.8454 + 474SOL HW2 1435 2.248 0.083 1.315 -0.6642 1.1301 -0.6220 + 475SOL OW 1436 2.336 2.252 1.307 0.4067 -0.2465 0.1779 + 475SOL HW1 1437 2.301 2.191 1.378 1.0171 -1.5879 -0.6583 + 475SOL HW2 1438 2.274 2.330 1.296 -1.8706 -2.1482 -0.6895 + 476SOL OW 1439 2.134 2.331 1.523 0.1688 -0.0291 0.6261 + 476SOL HW1 1440 2.185 2.399 1.576 1.2622 -0.1154 -0.2985 + 476SOL HW2 1441 2.159 2.239 1.553 -0.8364 -0.0429 1.4415 + 477SOL OW 1442 2.260 2.063 1.517 0.3743 -0.2866 0.4888 + 477SOL HW1 1443 2.256 2.047 1.615 -1.3576 0.7491 0.6022 + 477SOL HW2 1444 2.168 2.054 1.478 1.6665 -4.8862 -1.7102 + 478SOL OW 1445 0.195 1.754 1.003 0.1642 0.1509 -0.4375 + 478SOL HW1 1446 0.113 1.698 0.990 -0.6871 1.2319 0.2403 + 478SOL HW2 1447 0.171 1.850 0.993 0.9631 0.5898 1.7092 + 479SOL OW 1448 2.316 2.220 0.976 0.5245 0.2527 -0.6757 + 479SOL HW1 1449 2.332 2.148 0.907 -0.1597 -0.6599 0.1053 + 479SOL HW2 1450 2.345 2.187 1.066 0.0815 0.9041 -0.2925 + 480SOL OW 1451 1.906 0.062 1.592 0.2019 0.2107 0.5782 + 480SOL HW1 1452 1.821 0.096 1.550 -0.5734 -0.8526 1.2684 + 480SOL HW2 1453 1.939 -0.016 1.540 -0.4017 -0.6988 1.5633 + 481SOL OW 1454 0.343 2.149 0.382 -0.2411 1.0557 -0.2505 + 481SOL HW1 1455 0.302 2.070 0.426 -0.6432 1.0700 -0.5996 + 481SOL HW2 1456 0.295 2.232 0.411 0.3333 1.1997 0.3048 + 482SOL OW 1457 1.528 2.243 0.935 0.0963 -0.0443 0.1693 + 482SOL HW1 1458 1.498 2.264 0.842 -1.1134 2.0947 1.0213 + 482SOL HW2 1459 1.616 2.196 0.932 0.7768 1.3518 -1.9856 + 483SOL OW 1460 1.589 2.109 1.930 -1.3578 -0.4535 -0.0463 + 483SOL HW1 1461 1.687 2.120 1.911 -1.6170 0.5870 -0.8645 + 483SOL HW2 1462 1.536 2.161 1.862 -2.4683 -0.7577 0.5710 + 484SOL OW 1463 0.454 0.416 0.687 0.4383 0.2280 -0.0422 + 484SOL HW1 1464 0.545 0.452 0.710 0.4395 -0.6899 1.4598 + 484SOL HW2 1465 0.385 0.465 0.740 0.1687 0.1538 -0.3309 + 485SOL OW 1466 0.275 1.879 1.431 -0.4697 0.4966 -0.0556 + 485SOL HW1 1467 0.180 1.861 1.403 -0.4353 0.2952 -0.0465 + 485SOL HW2 1468 0.318 1.793 1.460 -0.7094 0.8118 1.2507 + 486SOL OW 1469 0.611 2.055 0.442 0.2638 -0.4659 -0.1749 + 486SOL HW1 1470 0.652 1.995 0.374 0.3648 -1.7107 0.9622 + 486SOL HW2 1471 0.525 2.093 0.407 1.0101 -0.0210 -1.5057 + 487SOL OW 1472 0.484 2.060 0.699 -0.1832 -0.7353 0.0184 + 487SOL HW1 1473 0.549 2.046 0.624 0.5169 0.8016 0.3208 + 487SOL HW2 1474 0.469 1.974 0.747 1.0315 -1.2662 -0.5361 + 488SOL OW 1475 0.325 2.156 1.520 0.4250 0.2317 0.2172 + 488SOL HW1 1476 0.384 2.216 1.466 0.8702 0.6509 1.1547 + 488SOL HW2 1477 0.347 2.060 1.500 -0.9046 0.3681 -1.9455 + 489SOL OW 1478 2.378 2.443 0.161 -0.4125 0.6928 0.5214 + 489SOL HW1 1479 2.298 2.464 0.216 0.0586 1.4653 0.9152 + 489SOL HW2 1480 2.412 2.351 0.184 -2.0814 -0.2732 -0.7389 + 490SOL OW 1481 1.854 2.307 1.406 -0.4866 -0.1044 -0.1018 + 490SOL HW1 1482 1.880 2.354 1.321 -1.0483 -1.2603 -0.9289 + 490SOL HW2 1483 1.924 2.238 1.428 -0.6406 -0.2093 0.0579 + 491SOL OW 1484 0.557 2.328 1.829 -0.2933 -0.1969 -0.1137 + 491SOL HW1 1485 0.488 2.270 1.873 -0.9463 -1.1368 -2.3413 + 491SOL HW2 1486 0.550 2.318 1.730 2.8241 -0.0143 -0.3490 + 492SOL OW 1487 0.053 2.386 0.610 -0.7958 -0.2809 0.5076 + 492SOL HW1 1488 0.027 2.425 0.698 -1.3996 -1.0347 0.6636 + 492SOL HW2 1489 0.144 2.419 0.585 -0.5801 -0.1454 1.4616 + 493SOL OW 1490 1.771 2.200 1.073 0.3400 -0.1111 0.0901 + 493SOL HW1 1491 1.719 2.280 1.103 0.4926 0.3090 -0.7570 + 493SOL HW2 1492 1.784 2.138 1.151 1.2903 1.2617 1.0426 + 494SOL OW 1493 1.658 2.452 2.051 -0.0026 0.5941 0.1879 + 494SOL HW1 1494 1.718 2.377 2.079 -0.1698 0.3886 0.0033 + 494SOL HW2 1495 1.712 2.523 2.005 0.0932 0.3853 -0.0248 + 495SOL OW 1496 1.867 1.749 2.191 -0.2906 -0.8671 0.2651 + 495SOL HW1 1497 1.962 1.778 2.181 -0.9890 1.5960 0.6452 + 495SOL HW2 1498 1.810 1.829 2.208 -2.3124 -2.4474 0.9136 + 496SOL OW 1499 0.515 1.974 1.948 0.2443 0.1771 -0.0584 + 496SOL HW1 1500 0.450 1.914 1.996 -0.4166 1.8475 1.1573 + 496SOL HW2 1501 0.607 1.935 1.954 -0.5244 -1.8754 -1.2224 + 497SOL OW 1502 1.887 1.420 2.452 -0.2713 -0.3493 0.0434 + 497SOL HW1 1503 1.878 1.465 2.541 0.5269 0.6359 -0.3667 + 497SOL HW2 1504 1.816 1.455 2.389 0.0796 0.0222 -0.1473 + 498SOL OW 1505 2.367 1.997 0.804 0.3099 -0.0684 -0.4102 + 498SOL HW1 1506 2.443 1.989 0.869 0.3357 -0.6781 -0.5177 + 498SOL HW2 1507 2.396 1.966 0.714 -0.0696 -0.3104 -0.4498 + 499SOL OW 1508 1.817 1.991 1.653 0.3519 -0.3283 -0.9418 + 499SOL HW1 1509 1.722 1.965 1.634 0.4823 -0.0322 -2.0247 + 499SOL HW2 1510 1.864 1.915 1.697 -0.8245 0.0839 1.0774 + 500SOL OW 1511 2.103 2.383 1.030 1.0390 0.0925 0.2549 + 500SOL HW1 1512 2.114 2.421 1.122 -2.1572 -0.0181 0.7007 + 500SOL HW2 1513 2.190 2.345 0.999 2.5301 1.5297 2.5979 + 501SOL OW 1514 0.246 2.042 1.744 0.4353 -0.0005 -0.1605 + 501SOL HW1 1515 0.319 2.089 1.793 0.4261 0.2928 -0.4246 + 501SOL HW2 1516 0.227 2.090 1.658 0.2538 -0.3424 -0.3142 + 2.46933 2.46933 2.46933 diff --git a/tests/data/parsers/gromacs/fe_test/confout.gro b/tests/data/parsers/gromacs/fe_test/confout.gro new file mode 100644 index 0000000000000000000000000000000000000000..bd9fcd2bc330fc1e6b27b3ccc085781deb9b50c1 --- /dev/null +++ b/tests/data/parsers/gromacs/fe_test/confout.gro @@ -0,0 +1,1519 @@ +tryptophane in water + 1516 + 1TRP CB 1 1.392 1.368 1.218 0.0222 -0.1887 -0.1321 + 1TRP CG 2 1.421 1.221 1.258 -0.4287 -0.1410 -0.3437 + 1TRP CD1 3 1.357 1.145 1.350 -0.3387 -0.3816 0.1607 + 1TRP HD1 4 1.292 1.183 1.430 -1.5549 -0.0434 -0.7495 + 1TRP CD2 5 1.493 1.136 1.176 -0.0090 -0.0968 -0.3731 + 1TRP NE1 6 1.393 1.011 1.330 -0.3027 0.2882 0.9981 + 1TRP HE1 7 1.343 0.932 1.367 0.1898 -2.7947 -1.2945 + 1TRP CE2 8 1.470 1.009 1.222 0.0132 0.3421 0.6786 + 1TRP CE3 9 1.575 1.162 1.063 0.1320 0.1156 0.1790 + 1TRP HE3 10 1.598 1.268 1.028 1.4873 -1.3640 1.3375 + 1TRP CZ2 11 1.525 0.904 1.148 -0.2382 0.8861 -0.4484 + 1TRP HZ2 12 1.513 0.800 1.181 -0.2944 1.5769 -1.8046 + 1TRP CZ3 13 1.633 1.060 0.995 0.5437 -0.3638 0.1778 + 1TRP HZ3 14 1.701 1.091 0.914 1.3391 0.6012 -0.0116 + 1TRP CH2 15 1.602 0.930 1.036 0.0989 0.6317 -0.0134 + 1TRP HH2 16 1.632 0.839 0.988 0.8555 3.5533 0.7101 + 2SOL OW 17 2.359 0.240 1.332 -0.2896 -0.6574 -0.0574 + 2SOL HW1 18 2.314 0.319 1.374 1.3488 -0.3604 1.1811 + 2SOL HW2 19 2.438 0.213 1.388 1.4295 -0.7727 -2.5016 + 3SOL OW 20 0.005 0.139 0.801 -0.5728 -0.0146 -0.1349 + 3SOL HW1 21 -0.050 0.208 0.752 -1.0025 -0.6452 -0.5510 + 3SOL HW2 22 0.098 0.138 0.764 -0.8338 -0.3303 -0.7862 + 4SOL OW 23 0.642 1.128 1.399 0.0638 0.1157 0.4535 + 4SOL HW1 24 0.681 1.170 1.480 0.8946 -0.3891 0.3123 + 4SOL HW2 25 0.641 1.028 1.409 1.5358 -0.0344 -0.7610 + 5SOL OW 26 1.717 1.417 0.518 -0.1731 0.3493 0.0555 + 5SOL HW1 27 1.624 1.438 0.489 -0.5356 -1.5522 -0.1978 + 5SOL HW2 28 1.777 1.407 0.438 0.3826 2.1923 0.2421 + 6SOL OW 29 1.390 0.673 0.091 -0.2244 -0.3855 -0.0400 + 6SOL HW1 30 1.457 0.712 0.028 0.7820 -0.5380 0.9095 + 6SOL HW2 31 1.432 0.595 0.139 -1.0776 -0.4650 0.5787 + 7SOL OW 32 0.839 0.944 0.685 0.7721 0.1262 -0.0499 + 7SOL HW1 33 0.745 0.974 0.695 1.2119 1.1580 1.1072 + 7SOL HW2 34 0.843 0.862 0.627 -1.1947 -1.9547 2.7194 + 8SOL OW 35 1.442 0.378 2.428 0.0385 0.8425 -0.0053 + 8SOL HW1 36 1.345 0.399 2.413 -0.2616 -1.8194 -2.0933 + 8SOL HW2 37 1.493 0.392 2.343 1.1667 0.6133 0.6276 + 9SOL OW 38 0.767 1.038 1.154 0.3936 -0.4497 0.5647 + 9SOL HW1 39 0.746 1.093 1.234 -1.9609 -1.2622 0.5299 + 9SOL HW2 40 0.806 1.096 1.082 3.5918 0.0783 2.6818 + 10SOL OW 41 0.868 1.054 1.691 -0.5976 0.4033 -0.2868 + 10SOL HW1 42 0.819 1.136 1.661 -1.5452 -0.0604 -0.0407 + 10SOL HW2 43 0.815 1.009 1.764 -0.9285 -1.3238 -1.5741 + 11SOL OW 44 0.824 0.771 0.925 0.0975 0.2654 -0.1193 + 11SOL HW1 45 0.725 0.757 0.927 0.0829 0.3021 -0.4256 + 11SOL HW2 46 0.845 0.848 0.864 0.1961 1.3649 1.2772 + 12SOL OW 47 0.916 0.791 1.597 0.0519 -1.0959 -0.0550 + 12SOL HW1 48 0.914 0.882 1.636 -2.5340 -0.5271 -1.4515 + 12SOL HW2 49 0.950 0.796 1.503 0.3834 -1.6373 0.0334 + 13SOL OW 50 0.604 1.673 1.223 -0.6412 -0.5188 -0.1442 + 13SOL HW1 51 0.658 1.672 1.307 1.3136 1.1532 -1.3568 + 13SOL HW2 52 0.545 1.592 1.220 -0.5801 -0.6801 2.7243 + 14SOL OW 53 1.622 1.606 1.451 -0.2337 0.2739 -0.5144 + 14SOL HW1 54 1.530 1.586 1.487 -0.2062 -0.0469 -0.6221 + 14SOL HW2 55 1.686 1.539 1.487 -0.0775 0.3781 -0.6019 + 15SOL OW 56 0.767 0.562 1.673 -0.1676 -0.7373 -0.0262 + 15SOL HW1 57 0.811 0.646 1.641 0.7313 -0.4306 2.0323 + 15SOL HW2 58 0.685 0.586 1.726 -0.1941 -1.1917 0.1349 + 16SOL OW 59 1.974 -0.001 0.515 -0.7260 0.1617 0.0583 + 16SOL HW1 60 1.875 -0.013 0.509 -0.7016 -0.2774 0.5400 + 16SOL HW2 61 1.994 0.079 0.572 -0.8229 0.8893 -0.9125 + 17SOL OW 62 1.579 1.834 1.303 -0.2398 0.6008 -0.2434 + 17SOL HW1 63 1.486 1.862 1.325 -0.2420 1.2211 -1.0346 + 17SOL HW2 64 1.602 1.751 1.353 -1.1487 0.5584 0.0987 + 18SOL OW 65 0.979 1.415 1.445 -0.7881 -0.3863 -0.2763 + 18SOL HW1 66 0.997 1.487 1.378 1.3692 -0.2990 0.3896 + 18SOL HW2 67 0.987 1.326 1.400 2.3808 -0.3934 0.2096 + 19SOL OW 68 0.178 1.548 1.591 -0.0664 -0.0502 0.2314 + 19SOL HW1 69 0.272 1.563 1.560 -0.2232 1.0367 0.2855 + 19SOL HW2 70 0.130 1.489 1.525 0.4751 -0.1227 -0.0976 + 20SOL OW 71 0.158 1.034 0.210 0.0877 0.5622 0.6961 + 20SOL HW1 72 0.244 1.007 0.253 0.1448 0.2511 0.3854 + 20SOL HW2 73 0.155 1.134 0.202 0.0329 0.6267 1.5123 + 21SOL OW 74 1.251 1.030 0.377 0.3851 -0.0077 -0.1092 + 21SOL HW1 75 1.177 0.980 0.331 0.5232 0.3840 -0.7563 + 21SOL HW2 76 1.221 1.123 0.398 0.7504 0.2080 -0.5277 + 22SOL OW 77 0.417 0.774 0.344 0.5415 0.4989 -0.0271 + 22SOL HW1 78 0.501 0.742 0.387 0.7445 -0.1686 -0.9068 + 22SOL HW2 79 0.402 0.723 0.260 -2.0634 -1.1868 1.4060 + 23SOL OW 80 1.926 1.300 0.375 0.5117 0.4414 -0.0400 + 23SOL HW1 81 1.926 1.203 0.352 0.6579 0.4979 -0.2708 + 23SOL HW2 82 1.958 1.312 0.469 -3.8829 -0.1423 1.5880 + 24SOL OW 83 2.183 1.470 0.348 -0.0357 0.1882 0.4782 + 24SOL HW1 84 2.091 1.442 0.375 -0.1474 -1.9290 -2.0278 + 24SOL HW2 85 2.232 1.392 0.308 1.5595 2.2216 -1.6012 + 25SOL OW 86 0.518 1.364 1.026 -0.3144 0.0419 -0.0145 + 25SOL HW1 87 0.584 1.412 0.967 0.4707 -0.3978 0.4942 + 25SOL HW2 88 0.450 1.429 1.059 0.0059 0.5531 -0.3534 + 26SOL OW 89 0.778 0.425 0.439 -0.2593 -0.2622 -0.4019 + 26SOL HW1 90 0.878 0.432 0.446 -0.3043 -1.1692 1.3306 + 26SOL HW2 91 0.742 0.385 0.523 -1.8568 -2.2736 -2.0041 + 27SOL OW 92 2.166 0.905 0.396 -0.0932 -0.1628 0.2552 + 27SOL HW1 93 2.075 0.880 0.361 0.2745 -0.1909 -0.7012 + 27SOL HW2 94 2.229 0.913 0.319 0.2016 2.0470 0.7044 + 28SOL OW 95 1.499 2.184 1.209 -0.1674 0.2553 0.1768 + 28SOL HW1 96 1.425 2.118 1.220 0.7157 -0.8440 -0.4263 + 28SOL HW2 97 1.510 2.207 1.112 -0.4111 1.2100 0.3747 + 29SOL OW 98 1.162 1.543 0.163 0.0435 0.0830 -0.6819 + 29SOL HW1 99 1.259 1.522 0.179 -0.2874 -1.0990 -0.2170 + 29SOL HW2 100 1.124 1.585 0.246 -0.3608 -1.3345 -0.1425 + 30SOL OW 101 1.036 1.176 0.205 -0.6468 -0.6407 0.0025 + 30SOL HW1 102 1.024 1.228 0.120 1.4165 -1.6224 -0.9191 + 30SOL HW2 103 1.068 1.237 0.277 0.8096 -0.4390 -0.8091 + 31SOL OW 104 1.006 0.916 0.307 0.0113 -0.6496 0.2422 + 31SOL HW1 105 0.970 1.007 0.285 1.0415 -0.1369 0.6703 + 31SOL HW2 106 1.049 0.877 0.225 0.7124 -0.2088 0.3961 + 32SOL OW 107 2.163 1.398 2.473 -0.6709 0.0234 -0.4801 + 32SOL HW1 108 2.065 1.414 2.486 -0.6236 1.6290 -1.9810 + 32SOL HW2 109 2.177 1.343 2.391 -0.2950 0.2124 -0.5436 + 33SOL OW 110 1.056 0.069 1.450 -0.1433 0.1759 -0.7167 + 33SOL HW1 111 1.060 0.168 1.462 -0.4752 0.1636 -0.4995 + 33SOL HW2 112 1.149 0.033 1.439 0.1651 0.2362 1.4904 + 34SOL OW 113 1.740 0.592 1.100 -0.5052 0.3322 0.0781 + 34SOL HW1 114 1.772 0.552 1.185 1.0968 0.1097 -0.6179 + 34SOL HW2 115 1.779 0.684 1.090 -0.4912 0.2648 -0.5170 + 35SOL OW 116 1.353 0.889 1.624 0.3226 -0.0573 -0.2900 + 35SOL HW1 117 1.276 0.906 1.685 -0.0703 -1.8990 -0.2412 + 35SOL HW2 118 1.422 0.960 1.636 -0.8541 0.9591 0.5087 + 36SOL OW 119 1.084 0.352 1.486 -0.2083 0.1942 -0.7003 + 36SOL HW1 120 1.173 0.396 1.493 -0.7069 1.3860 -1.7282 + 36SOL HW2 121 1.040 0.351 1.576 1.3955 -1.5678 0.0569 + 37SOL OW 122 0.338 0.877 0.628 -0.2424 -0.2506 -0.1923 + 37SOL HW1 123 0.326 0.884 0.529 -0.7397 -0.2455 -0.1354 + 37SOL HW2 124 0.249 0.859 0.670 0.1752 -1.5293 0.1361 + 38SOL OW 125 0.429 2.221 2.049 -0.1605 -0.6987 -0.2243 + 38SOL HW1 126 0.391 2.234 2.140 -1.6483 -0.1909 -0.9108 + 38SOL HW2 127 0.441 2.124 2.031 2.1449 -0.7288 1.3149 + 39SOL OW 128 0.088 0.548 0.695 -0.6510 -0.6541 0.4207 + 39SOL HW1 129 0.006 0.605 0.705 1.0487 1.6419 1.4042 + 39SOL HW2 130 0.134 0.569 0.610 0.8019 0.5200 1.4896 + 40SOL OW 131 2.279 0.469 1.456 0.3865 0.2949 -0.3291 + 40SOL HW1 132 2.212 0.520 1.510 0.3752 0.2167 -0.2701 + 40SOL HW2 133 2.371 0.498 1.481 0.5194 -2.1680 2.1596 + 41SOL OW 134 1.079 1.418 0.976 -0.4269 -0.4671 0.0646 + 41SOL HW1 135 1.013 1.446 0.906 -0.9077 -0.4351 0.5298 + 41SOL HW2 136 1.171 1.444 0.948 -0.6843 0.0473 -0.2946 + 42SOL OW 137 0.356 0.549 0.916 -0.0918 -0.1594 -0.2259 + 42SOL HW1 138 0.414 0.512 0.989 -0.5066 0.8413 0.6040 + 42SOL HW2 139 0.263 0.562 0.951 -0.4541 -0.3245 -1.1288 + 43SOL OW 140 0.872 1.354 0.625 -0.7236 0.5861 0.3238 + 43SOL HW1 141 0.800 1.381 0.688 -0.6114 -2.2788 1.7636 + 43SOL HW2 142 0.937 1.294 0.673 1.1157 0.9520 -1.6630 + 44SOL OW 143 0.319 2.054 1.218 -0.1179 0.2860 0.0540 + 44SOL HW1 144 0.259 2.133 1.231 -1.0976 -0.5351 0.4990 + 44SOL HW2 145 0.320 1.999 1.302 -0.8533 -1.1534 -0.8842 + 45SOL OW 146 1.774 1.147 1.350 0.2465 0.3412 -0.3359 + 45SOL HW1 147 1.755 1.091 1.431 -1.9766 2.1395 0.4056 + 45SOL HW2 148 1.698 1.140 1.286 0.7234 1.1837 -1.0056 + 46SOL OW 149 1.336 1.929 1.361 -0.4613 -0.6059 -0.2319 + 46SOL HW1 150 1.267 1.875 1.313 -1.0674 0.0574 -0.1162 + 46SOL HW2 151 1.291 1.989 1.428 0.0613 1.1975 -1.4731 + 47SOL OW 152 1.325 0.628 0.413 0.4969 -0.1469 -0.1713 + 47SOL HW1 153 1.338 0.622 0.314 0.6308 1.1857 -0.2319 + 47SOL HW2 154 1.411 0.607 0.459 0.3699 -1.0247 -0.3271 + 48SOL OW 155 2.076 1.099 1.693 0.2004 -0.5366 0.1832 + 48SOL HW1 156 2.128 1.076 1.775 -0.7039 1.5540 1.3738 + 48SOL HW2 157 2.128 1.163 1.637 -0.7144 0.8968 0.9578 + 49SOL OW 158 1.395 1.420 0.192 0.3189 0.2648 0.0694 + 49SOL HW1 159 1.446 1.431 0.106 1.8017 2.5219 1.2141 + 49SOL HW2 160 1.413 1.330 0.230 1.6354 0.1855 -0.7165 + 50SOL OW 161 0.690 0.474 2.120 0.0547 0.1370 0.3073 + 50SOL HW1 162 0.594 0.478 2.145 0.0963 0.9302 0.3505 + 50SOL HW2 163 0.700 0.422 2.035 -0.5346 1.0033 -0.2959 + 51SOL OW 164 1.979 1.647 0.485 -0.3019 -0.2851 0.0215 + 51SOL HW1 165 2.071 1.671 0.517 0.0472 -0.2183 -1.0453 + 51SOL HW2 166 1.918 1.725 0.498 -0.0763 -0.1382 0.2001 + 52SOL OW 167 2.114 1.690 0.154 0.1642 0.5467 0.2192 + 52SOL HW1 168 2.182 1.729 0.092 1.2648 -0.5520 0.7400 + 52SOL HW2 169 2.159 1.654 0.236 -1.1680 0.9807 1.1542 + 53SOL OW 170 1.125 2.393 0.181 -0.1977 -0.4375 0.4168 + 53SOL HW1 171 1.139 2.476 0.236 -1.4423 -1.0207 1.6183 + 53SOL HW2 172 1.212 2.346 0.170 0.5370 1.0499 -0.3201 + 54SOL OW 173 2.455 1.910 0.561 -0.4327 -0.1546 -0.3588 + 54SOL HW1 174 2.389 1.844 0.525 -0.0614 -0.3612 -0.6548 + 54SOL HW2 175 2.432 2.002 0.527 -0.3677 -0.2774 -0.7391 + 55SOL OW 176 0.962 1.182 1.028 0.0273 -0.2293 0.0756 + 55SOL HW1 177 0.971 1.146 0.935 0.8075 1.0533 -0.3502 + 55SOL HW2 178 1.002 1.274 1.032 -0.4055 -0.1052 1.5696 + 56SOL OW 179 0.032 0.293 2.258 1.1650 0.0196 -0.1635 + 56SOL HW1 180 0.046 0.300 2.356 -3.1828 -1.3685 0.6029 + 56SOL HW2 181 0.047 0.198 2.228 0.0706 -0.0879 -0.4010 + 57SOL OW 182 1.278 0.136 1.635 -0.0874 1.0434 0.1812 + 57SOL HW1 183 1.337 0.163 1.711 -0.9840 2.9759 0.1916 + 57SOL HW2 184 1.186 0.118 1.668 0.6520 -2.8815 0.3125 + 58SOL OW 185 0.245 2.436 0.224 0.6051 0.1867 0.1715 + 58SOL HW1 186 0.305 2.368 0.181 1.0123 1.0692 -0.6865 + 58SOL HW2 187 0.157 2.394 0.246 1.5936 -1.1545 1.5639 + 59SOL OW 188 0.570 0.651 2.392 0.3627 -0.1322 -0.4533 + 59SOL HW1 189 0.641 0.584 2.414 -0.4665 -0.6209 0.7773 + 59SOL HW2 190 0.492 0.638 2.454 -0.3391 1.1142 -1.0717 + 60SOL OW 191 0.436 1.626 1.510 0.1499 0.3058 0.1147 + 60SOL HW1 192 0.431 1.705 1.572 -0.3435 -0.7761 1.4701 + 60SOL HW2 193 0.523 1.579 1.524 0.3616 0.5047 -0.5591 + 61SOL OW 194 1.145 0.476 1.083 -0.5855 0.2588 0.1400 + 61SOL HW1 195 1.213 0.545 1.108 0.1641 -0.1010 -0.8629 + 61SOL HW2 196 1.089 0.511 1.007 0.9713 -0.9194 -1.5779 + 62SOL OW 197 0.677 1.685 0.953 0.4965 -0.3113 0.6510 + 62SOL HW1 198 0.641 1.686 1.047 0.1187 -0.5264 0.5045 + 62SOL HW2 199 0.776 1.698 0.957 0.8206 -2.7893 1.2347 + 63SOL OW 200 1.329 0.769 0.818 0.0680 0.3618 0.0390 + 63SOL HW1 201 1.405 0.719 0.861 -0.3340 0.8606 1.3446 + 63SOL HW2 202 1.285 0.827 0.886 0.2832 2.2113 -1.3839 + 64SOL OW 203 0.574 1.681 0.533 -0.2924 0.2909 -0.5352 + 64SOL HW1 204 0.533 1.742 0.601 2.8620 1.6180 0.2273 + 64SOL HW2 205 0.551 1.586 0.554 -1.4514 0.8853 0.8959 + 65SOL OW 206 2.154 0.436 0.422 -0.5101 0.0897 0.5080 + 65SOL HW1 207 2.155 0.464 0.326 -2.8720 0.6079 0.6129 + 65SOL HW2 208 2.196 0.345 0.431 0.7429 0.5186 -0.8313 + 66SOL OW 209 0.624 0.071 2.468 0.2602 0.2109 -0.5091 + 66SOL HW1 210 0.581 0.132 2.402 -0.9645 -0.3339 -0.2337 + 66SOL HW2 211 0.642 -0.017 2.424 -2.4030 -0.8275 0.4156 + 67SOL OW 212 1.474 0.320 0.601 -0.5738 0.4082 -0.1710 + 67SOL HW1 213 1.508 0.413 0.612 -1.5451 0.7980 -0.4308 + 67SOL HW2 214 1.438 0.308 0.508 1.2105 -0.7679 -0.7175 + 68SOL OW 215 1.083 0.817 1.380 0.3182 0.5128 0.6026 + 68SOL HW1 216 1.021 0.781 1.311 0.9529 0.5757 -0.0004 + 68SOL HW2 217 1.162 0.756 1.389 1.1047 1.4365 0.0081 + 69SOL OW 218 1.315 1.497 0.832 0.3250 -0.9657 0.2081 + 69SOL HW1 219 1.359 1.415 0.796 -1.0650 -1.4139 -0.4902 + 69SOL HW2 220 1.383 1.556 0.874 1.5160 -1.8747 -0.4492 + 70SOL OW 221 0.042 0.771 1.123 0.0378 -0.3427 -0.2459 + 70SOL HW1 222 0.076 0.682 1.093 0.3508 -0.1886 -0.3528 + 70SOL HW2 223 -0.054 0.780 1.097 -0.4596 -1.3127 1.2244 + 71SOL OW 224 0.996 0.104 0.930 -0.1197 0.1694 0.0119 + 71SOL HW1 225 0.903 0.085 0.898 0.2637 -0.9105 -0.4686 + 71SOL HW2 226 1.007 0.070 1.023 0.0417 -0.4112 -0.2215 + 72SOL OW 227 0.997 0.758 2.326 -0.1767 0.0676 -0.3158 + 72SOL HW1 228 0.937 0.807 2.389 2.0336 0.9301 1.1460 + 72SOL HW2 229 1.082 0.809 2.314 0.6128 -1.5429 -1.7039 + 73SOL OW 230 0.708 0.083 1.932 0.4141 0.0279 -0.7011 + 73SOL HW1 231 0.653 0.100 2.014 -0.2238 0.6774 -1.2603 + 73SOL HW2 232 0.672 0.003 1.883 -0.0860 0.5081 -1.1157 + 74SOL OW 233 0.629 0.261 0.941 0.0058 -0.3800 -0.1803 + 74SOL HW1 234 0.677 0.177 0.915 0.7957 -0.5052 1.7066 + 74SOL HW2 235 0.531 0.243 0.945 0.0321 -0.8114 -1.3405 + 75SOL OW 236 1.457 0.233 1.030 0.3760 0.2222 0.2252 + 75SOL HW1 237 1.389 0.220 1.102 0.5752 1.6204 0.6719 + 75SOL HW2 238 1.413 0.274 0.950 0.2856 -0.7469 -0.2269 + 76SOL OW 239 1.772 1.599 0.735 0.2336 0.0175 0.7285 + 76SOL HW1 240 1.751 1.522 0.675 -0.2358 1.0876 -0.4921 + 76SOL HW2 241 1.866 1.630 0.718 -0.5448 1.5565 -0.8442 + 77SOL OW 242 1.560 0.516 0.902 -0.1713 -0.1260 -0.0530 + 77SOL HW1 243 1.607 0.527 0.990 0.6815 -0.7299 -0.4335 + 77SOL HW2 244 1.539 0.420 0.888 -2.1612 0.2324 0.4407 + 78SOL OW 245 1.939 1.120 0.801 -0.3225 0.0763 -0.4146 + 78SOL HW1 246 2.010 1.078 0.744 -1.3012 1.2834 -2.5571 + 78SOL HW2 247 1.913 1.056 0.873 2.8432 -0.4144 0.3235 + 79SOL OW 248 2.417 1.519 2.405 -0.5429 -0.2762 0.4696 + 79SOL HW1 249 2.334 1.476 2.440 -1.2702 0.5328 -0.2226 + 79SOL HW2 250 2.447 1.471 2.323 0.1605 -1.0995 1.2164 + 80SOL OW 251 1.739 1.301 0.757 -0.0267 0.5795 -0.6100 + 80SOL HW1 252 1.797 1.219 0.749 -1.1117 -0.2466 -0.1069 + 80SOL HW2 253 1.734 1.345 0.667 -1.2005 -1.1399 -1.4170 + 81SOL OW 254 1.558 0.509 0.227 -0.1968 0.0228 0.1568 + 81SOL HW1 255 1.595 0.518 0.135 0.6416 -1.9141 0.2933 + 81SOL HW2 256 1.624 0.547 0.293 0.0212 -0.2740 0.1114 + 82SOL OW 257 0.654 1.789 0.300 -0.1497 0.3047 -0.3994 + 82SOL HW1 258 0.610 1.768 0.388 1.6998 1.3361 0.8032 + 82SOL HW2 259 0.706 1.709 0.269 -0.5105 0.0597 -0.3740 + 83SOL OW 260 1.374 1.205 1.794 0.0081 0.3866 -0.1821 + 83SOL HW1 261 1.274 1.215 1.791 0.2033 2.2399 -1.0439 + 83SOL HW2 262 1.414 1.251 1.715 1.5827 0.0133 0.3913 + 84SOL OW 263 1.488 1.817 1.040 -0.6774 -0.8041 0.2222 + 84SOL HW1 264 1.521 1.827 1.134 -0.0876 0.3388 -0.0946 + 84SOL HW2 265 1.524 1.733 1.000 1.1126 -0.0231 0.1812 + 85SOL OW 266 1.717 1.022 0.205 -0.0056 0.4686 0.1811 + 85SOL HW1 267 1.774 1.095 0.168 -0.9245 0.6777 -0.8455 + 85SOL HW2 268 1.773 0.940 0.220 0.6884 0.8718 -0.2096 + 86SOL OW 269 1.334 0.245 0.798 0.5283 -0.3323 0.3135 + 86SOL HW1 270 1.401 0.271 0.728 -0.6098 0.1250 -0.6210 + 86SOL HW2 271 1.242 0.265 0.765 -0.0323 -0.2281 1.9061 + 87SOL OW 272 1.412 1.247 2.271 -0.3597 -0.0854 -0.1614 + 87SOL HW1 273 1.469 1.315 2.317 -1.7900 1.2581 -0.3314 + 87SOL HW2 274 1.382 1.178 2.336 -0.4752 0.5217 0.4288 + 88SOL OW 275 0.576 0.696 0.841 0.0972 -0.0643 -0.6026 + 88SOL HW1 276 0.632 0.619 0.811 -0.4777 0.7693 -3.9397 + 88SOL HW2 277 0.481 0.668 0.850 0.4013 -0.5104 1.2170 + 89SOL OW 278 0.625 0.674 1.183 -0.0332 0.2576 0.5967 + 89SOL HW1 279 0.584 0.680 1.274 -0.6191 2.4519 0.1990 + 89SOL HW2 280 0.708 0.729 1.180 1.0749 -1.4220 0.3874 + 90SOL OW 281 1.359 0.730 1.416 0.2680 -0.3179 -0.0369 + 90SOL HW1 282 1.438 0.669 1.419 1.5195 1.2526 -0.1434 + 90SOL HW2 283 1.351 0.778 1.503 1.3331 1.8303 -1.0810 + 91SOL OW 284 0.187 0.604 0.432 0.6076 0.2400 0.5763 + 91SOL HW1 285 0.115 0.619 0.364 -0.2981 -0.5095 1.3510 + 91SOL HW2 286 0.267 0.658 0.409 -0.8192 2.4156 0.6334 + 92SOL OW 287 0.503 0.437 1.136 0.3160 0.2630 0.3959 + 92SOL HW1 288 0.566 0.514 1.148 0.7161 0.0469 -0.3048 + 92SOL HW2 289 0.555 0.357 1.104 -0.3705 0.1754 -0.4980 + 93SOL OW 290 1.453 1.286 0.747 -0.3488 -0.5393 0.1702 + 93SOL HW1 291 1.553 1.286 0.751 -0.3340 -0.4142 -0.1410 + 93SOL HW2 292 1.423 1.223 0.675 -0.5181 -1.1781 0.8017 + 94SOL OW 293 1.024 0.496 0.178 0.3668 -0.1780 -1.2026 + 94SOL HW1 294 1.049 0.455 0.267 -0.2178 -1.8447 -1.7904 + 94SOL HW2 295 1.056 0.590 0.175 -0.6685 0.2781 1.2646 + 95SOL OW 296 -0.002 1.731 1.641 -0.3405 -0.0928 -0.3668 + 95SOL HW1 297 -0.014 1.783 1.556 1.0268 -0.2299 -0.6577 + 95SOL HW2 298 0.077 1.670 1.631 1.1767 1.5042 1.7961 + 96SOL OW 299 0.531 0.437 1.873 0.1353 0.6562 0.5980 + 96SOL HW1 300 0.481 0.402 1.794 2.1471 -0.6449 -0.1204 + 96SOL HW2 301 0.484 0.410 1.957 -1.7137 1.5780 -0.1289 + 97SOL OW 302 1.788 1.397 1.539 -0.1142 0.0990 0.1503 + 97SOL HW1 303 1.811 1.323 1.476 0.1853 -0.2427 0.6554 + 97SOL HW2 304 1.869 1.425 1.590 -0.4395 0.0636 0.7032 + 98SOL OW 305 1.063 2.493 1.185 0.1615 0.0075 -0.1068 + 98SOL HW1 306 1.026 2.410 1.145 -0.0992 0.2868 -0.4435 + 98SOL HW2 307 1.048 2.492 1.284 -0.2026 -0.1580 -0.1642 + 99SOL OW 308 0.102 0.799 2.231 0.5033 0.3668 0.1845 + 99SOL HW1 309 0.201 0.795 2.215 0.3543 -0.1796 -0.5987 + 99SOL HW2 310 0.058 0.719 2.190 -0.6277 2.1278 -2.1149 + 100SOL OW 311 0.917 0.780 1.166 -0.7598 0.1799 -0.1637 + 100SOL HW1 312 0.931 0.876 1.189 0.1321 0.6521 -2.6403 + 100SOL HW2 313 0.886 0.772 1.071 1.0213 -2.1111 -0.5673 + 101SOL OW 314 1.264 0.944 0.990 0.7837 0.0970 -0.3110 + 101SOL HW1 315 1.346 0.982 1.034 1.3210 -0.5423 -0.7433 + 101SOL HW2 316 1.205 1.018 0.959 2.4836 0.6219 -2.3848 + 102SOL OW 317 0.661 0.659 0.416 0.2695 -0.1673 -0.6611 + 102SOL HW1 318 0.662 0.560 0.433 0.7629 -0.0495 0.0169 + 102SOL HW2 319 0.750 0.698 0.441 -0.6057 0.7683 1.0671 + 103SOL OW 320 0.421 0.339 1.661 -0.3145 -0.1758 0.6157 + 103SOL HW1 321 0.462 0.327 1.570 -0.2590 -0.6074 0.6948 + 103SOL HW2 322 0.336 0.391 1.653 -0.5046 -0.5341 0.2687 + 104SOL OW 323 2.273 1.471 0.683 0.2064 1.0250 -0.7705 + 104SOL HW1 324 2.279 1.383 0.730 -0.1643 1.5507 0.2640 + 104SOL HW2 325 2.343 1.476 0.613 -0.4783 -0.5544 -1.5856 + 105SOL OW 326 0.290 0.168 1.278 0.4197 0.0190 -0.2410 + 105SOL HW1 327 0.214 0.170 1.342 0.2508 -1.9422 -0.3689 + 105SOL HW2 328 0.372 0.206 1.323 -0.1546 0.3942 0.5033 + 106SOL OW 329 1.391 1.386 2.031 0.3023 -0.4000 0.3337 + 106SOL HW1 330 1.391 1.334 2.116 1.7948 -0.9645 -0.0144 + 106SOL HW2 331 1.398 1.324 1.953 1.8106 0.2766 -0.0897 + 107SOL OW 332 0.010 0.442 1.864 0.7723 0.7974 -0.8840 + 107SOL HW1 333 -0.061 0.377 1.839 1.0905 -0.4797 1.4155 + 107SOL HW2 334 0.089 0.432 1.803 0.1311 0.1998 -1.6027 + 108SOL OW 335 1.567 0.608 0.545 0.1399 -0.4840 -0.0720 + 108SOL HW1 336 1.645 0.583 0.487 0.0051 -1.3027 0.1106 + 108SOL HW2 337 1.600 0.659 0.625 0.4379 -0.3893 -0.2542 + 109SOL OW 338 0.996 0.569 0.862 -0.3572 0.6182 0.1242 + 109SOL HW1 339 1.062 0.612 0.800 0.2747 -0.3104 0.1603 + 109SOL HW2 340 0.924 0.635 0.884 0.6251 1.6697 0.1920 + 110SOL OW 341 1.035 1.437 1.714 -0.6474 0.7274 0.6817 + 110SOL HW1 342 1.037 1.418 1.616 -0.8214 -1.0377 1.0208 + 110SOL HW2 343 1.108 1.502 1.736 0.6267 -0.3324 -0.3179 + 111SOL OW 344 1.492 1.550 1.838 -0.1157 -0.1731 -0.2837 + 111SOL HW1 345 1.439 1.486 1.893 -0.1589 1.2433 1.3476 + 111SOL HW2 346 1.589 1.526 1.843 -0.1587 -0.2618 0.1362 + 112SOL OW 347 0.414 1.227 1.270 -0.5001 0.6732 -0.4532 + 112SOL HW1 348 0.434 1.279 1.187 -0.9003 -0.1969 -1.1085 + 112SOL HW2 349 0.496 1.222 1.327 0.3700 -0.4698 -1.7829 + 113SOL OW 350 0.329 0.642 0.127 0.3019 -0.2662 0.6578 + 113SOL HW1 351 0.303 0.547 0.143 0.0750 0.0119 1.9196 + 113SOL HW2 352 0.249 0.693 0.093 -0.0129 -0.1252 1.6153 + 114SOL OW 353 1.992 0.593 0.194 -0.5359 -0.5448 -0.1922 + 114SOL HW1 354 1.934 0.562 0.269 -0.5717 0.9617 0.4028 + 114SOL HW2 355 1.971 0.540 0.111 -1.8013 -0.9199 0.3725 + 115SOL OW 356 1.121 1.245 0.464 -0.4026 0.4198 -0.7597 + 115SOL HW1 357 1.157 1.335 0.490 1.0759 0.0803 -1.6120 + 115SOL HW2 358 1.048 1.219 0.527 1.5537 0.6492 1.6038 + 116SOL OW 359 0.290 0.482 1.283 0.0792 -0.0284 -0.0197 + 116SOL HW1 360 0.383 0.465 1.249 0.3434 -0.3544 0.8465 + 116SOL HW2 361 0.224 0.445 1.218 0.5629 -0.0082 -0.5287 + 117SOL OW 362 0.761 1.152 2.174 -0.4820 -1.0516 0.0512 + 117SOL HW1 363 0.808 1.075 2.131 -0.1864 -0.0600 -1.3976 + 117SOL HW2 364 0.776 1.235 2.121 -2.4376 -0.3745 0.5300 + 118SOL OW 365 1.778 0.208 0.916 -0.6577 0.8034 -0.2331 + 118SOL HW1 366 1.875 0.219 0.939 -1.1020 -2.1329 3.1881 + 118SOL HW2 367 1.723 0.269 0.972 -0.9939 0.6267 -0.3716 + 119SOL OW 368 1.793 0.521 0.404 -0.1589 0.5203 0.1911 + 119SOL HW1 369 1.848 0.555 0.481 -1.1960 0.4464 0.9746 + 119SOL HW2 370 1.797 0.422 0.402 1.3252 0.5886 -0.9479 + 120SOL OW 371 0.530 0.954 1.025 0.2550 -0.0849 -0.4171 + 120SOL HW1 372 0.546 0.858 1.000 0.7964 -0.3159 0.8049 + 120SOL HW2 373 0.614 0.993 1.063 -0.3030 0.5231 0.2055 + 121SOL OW 374 0.963 0.391 1.255 0.4059 -0.9932 -0.4904 + 121SOL HW1 375 1.019 0.381 1.337 -2.1253 0.3226 1.4137 + 121SOL HW2 376 1.009 0.451 1.190 0.7114 0.9920 1.5408 + 122SOL OW 377 1.508 0.607 1.642 0.3802 0.2499 -0.1243 + 122SOL HW1 378 1.417 0.589 1.680 0.6975 1.6901 1.3607 + 122SOL HW2 379 1.520 0.553 1.559 -1.5425 -0.5334 0.0719 + 123SOL OW 380 0.746 0.214 1.235 -0.3181 -0.0195 -0.4078 + 123SOL HW1 381 0.836 0.257 1.247 -1.2282 1.4113 1.2792 + 123SOL HW2 382 0.717 0.224 1.140 1.1548 -0.1989 -0.8826 + 124SOL OW 383 1.915 0.583 0.662 0.0021 -0.0137 0.3393 + 124SOL HW1 384 1.848 0.618 0.728 -0.7829 2.2434 -1.6273 + 124SOL HW2 385 1.994 0.643 0.659 0.4420 -0.6095 -0.1284 + 125SOL OW 386 0.510 0.243 1.415 -0.8359 0.0201 -0.5361 + 125SOL HW1 387 0.565 0.168 1.451 -0.3661 1.4026 1.6755 + 125SOL HW2 388 0.570 0.306 1.364 -0.9457 -0.2665 -1.0148 + 126SOL OW 389 1.087 1.791 1.324 0.2119 -0.2431 -0.1297 + 126SOL HW1 390 1.036 1.712 1.290 -1.2661 0.9730 -0.7552 + 126SOL HW2 391 1.065 1.871 1.269 2.1370 0.4844 0.1500 + 127SOL OW 392 0.760 0.152 0.540 -0.4781 -0.5407 -0.3212 + 127SOL HW1 393 0.851 0.145 0.498 -1.2637 1.9275 -2.4747 + 127SOL HW2 394 0.701 0.079 0.504 -0.2374 -0.3111 -1.1855 + 128SOL OW 395 1.679 0.938 2.394 0.3919 -0.5648 0.7317 + 128SOL HW1 396 1.715 0.982 2.476 1.9082 0.2887 -0.3625 + 128SOL HW2 397 1.703 0.841 2.395 0.9253 -0.4339 1.0355 + 129SOL OW 398 2.106 1.681 0.759 -0.8021 -0.2317 -0.2331 + 129SOL HW1 399 2.122 1.779 0.757 -1.4494 -0.1006 0.8381 + 129SOL HW2 400 2.186 1.633 0.721 -0.2282 0.6735 -0.1697 + 130SOL OW 401 1.212 1.857 1.032 0.1618 -0.0204 -0.5382 + 130SOL HW1 402 1.225 1.924 0.960 -0.2738 0.2281 -0.3865 + 130SOL HW2 403 1.299 1.810 1.051 0.4127 0.3471 -0.7925 + 131SOL OW 404 0.150 1.331 1.188 -0.0638 0.3699 0.0718 + 131SOL HW1 405 0.097 1.380 1.257 -0.5425 -0.0371 -0.0002 + 131SOL HW2 406 0.161 1.236 1.216 -1.4073 -0.1356 -1.0355 + 132SOL OW 407 0.881 2.057 1.458 -0.5062 0.4183 0.1749 + 132SOL HW1 408 0.922 1.998 1.389 -0.1267 2.2981 -1.2032 + 132SOL HW2 409 0.918 2.149 1.451 -1.0099 0.8259 2.3989 + 133SOL OW 410 0.355 0.376 0.160 -0.8237 0.3037 0.2370 + 133SOL HW1 411 0.290 0.343 0.229 0.4017 0.1835 1.3573 + 133SOL HW2 412 0.448 0.366 0.196 -0.2306 1.0904 -1.0895 + 134SOL OW 413 1.640 0.133 0.236 0.2097 -0.0200 0.3051 + 134SOL HW1 414 1.562 0.182 0.275 1.4889 0.0369 2.8642 + 134SOL HW2 415 1.631 0.130 0.136 -2.9028 0.2136 0.5531 + 135SOL OW 416 0.848 1.639 0.517 0.5877 -0.1544 0.1057 + 135SOL HW1 417 0.849 1.539 0.520 -0.4834 -0.1378 1.4202 + 135SOL HW2 418 0.753 1.671 0.512 0.9732 0.7734 -1.1911 + 136SOL OW 419 2.313 2.146 2.107 0.3678 -0.3304 0.4163 + 136SOL HW1 420 2.286 2.050 2.114 -0.1675 -0.1682 0.6285 + 136SOL HW2 421 2.382 2.167 2.176 1.6861 -0.9647 -0.6952 + 137SOL OW 422 1.267 0.993 0.650 0.0816 -0.0898 0.3381 + 137SOL HW1 423 1.246 0.987 0.552 -0.9004 2.2580 0.3861 + 137SOL HW2 424 1.294 0.903 0.684 -0.1142 -1.0353 -1.9744 + 138SOL OW 425 0.852 1.637 1.719 -0.5050 -0.1830 -0.2262 + 138SOL HW1 426 0.888 1.548 1.747 -0.4884 -0.8264 -2.2058 + 138SOL HW2 427 0.895 1.710 1.772 -0.7249 -1.3804 1.5951 + 139SOL OW 428 0.841 1.664 2.372 -0.3791 0.1052 -0.6736 + 139SOL HW1 429 0.804 1.745 2.418 -0.2968 -0.7138 0.8755 + 139SOL HW2 430 0.939 1.675 2.360 -0.1085 -0.3901 0.9240 + 140SOL OW 431 1.329 2.046 0.861 -0.0187 0.4492 0.0761 + 140SOL HW1 432 1.268 2.123 0.841 -1.1304 -0.2740 0.6388 + 140SOL HW2 433 1.417 2.081 0.892 0.0356 1.5143 -1.2601 + 141SOL OW 434 0.382 0.133 1.007 -0.3718 0.0492 -0.0034 + 141SOL HW1 435 0.392 0.033 1.007 -3.6065 -0.3136 -2.1000 + 141SOL HW2 436 0.339 0.162 1.093 -1.3356 -0.5869 -0.2631 + 142SOL OW 437 1.256 1.642 2.021 -0.1413 -0.3451 0.1252 + 142SOL HW1 438 1.284 1.554 2.061 0.5298 -0.3398 -0.3289 + 142SOL HW2 439 1.313 1.715 2.058 0.1197 -0.2678 -0.4207 + 143SOL OW 440 0.974 1.179 1.303 0.2785 -0.0255 -0.7193 + 143SOL HW1 441 0.956 1.085 1.332 -3.0040 0.4434 -1.1205 + 143SOL HW2 442 0.964 1.186 1.203 -2.0745 1.2410 -0.4360 + 144SOL OW 443 1.053 0.319 0.789 -0.6449 -0.0608 -0.4752 + 144SOL HW1 444 1.019 0.249 0.852 0.3846 1.0378 1.3283 + 144SOL HW2 445 1.027 0.410 0.823 3.7557 0.7827 0.7973 + 145SOL OW 446 1.478 1.161 0.244 -0.2343 0.2415 -0.3320 + 145SOL HW1 447 1.407 1.113 0.295 0.7489 1.8696 2.6372 + 145SOL HW2 448 1.558 1.102 0.236 -0.8415 -0.4863 -1.1010 + 146SOL OW 449 0.343 0.965 1.295 0.4094 0.0226 0.4577 + 146SOL HW1 450 0.386 1.055 1.299 1.4829 -0.4922 0.3913 + 146SOL HW2 451 0.303 0.951 1.205 -0.1419 0.6082 0.6078 + 147SOL OW 452 1.023 1.116 0.713 0.2473 -0.1063 0.3897 + 147SOL HW1 453 0.956 1.045 0.693 -0.3974 0.6709 -0.2092 + 147SOL HW2 454 1.115 1.078 0.706 -0.1323 -1.2818 1.6217 + 148SOL OW 455 1.241 0.216 1.189 0.7020 0.7371 0.0707 + 148SOL HW1 456 1.207 0.298 1.142 -0.3043 1.2657 1.7289 + 148SOL HW2 457 1.175 0.142 1.181 1.5774 0.0845 -1.3596 + 149SOL OW 458 2.362 0.925 0.221 -0.4705 0.4078 0.0755 + 149SOL HW1 459 2.358 0.825 0.217 -0.0230 0.4037 -0.3535 + 149SOL HW2 460 2.458 0.954 0.211 -0.7200 0.9269 -0.8391 + 150SOL OW 461 2.312 1.235 0.802 0.2815 -0.3126 -0.5034 + 150SOL HW1 462 2.286 1.167 0.734 0.7539 0.1476 -1.1558 + 150SOL HW2 463 2.408 1.221 0.828 0.0440 -0.6115 0.2180 + 151SOL OW 464 0.299 1.052 1.973 -0.2563 -0.4070 0.0048 + 151SOL HW1 465 0.350 0.983 1.920 -0.1426 0.0525 -0.4876 + 151SOL HW2 466 0.313 1.142 1.932 -0.2410 -0.0583 0.7703 + 152SOL OW 467 0.921 0.229 2.043 0.5008 -0.7757 0.3696 + 152SOL HW1 468 0.851 0.185 1.986 -1.0815 2.6138 -0.4079 + 152SOL HW2 469 1.009 0.225 1.997 -0.1417 -0.8745 -0.8621 + 153SOL OW 470 1.873 0.837 0.951 -0.3757 0.0452 -0.1903 + 153SOL HW1 471 1.894 0.895 1.030 -1.6452 1.8554 -1.1769 + 153SOL HW2 472 1.945 0.769 0.941 0.7768 0.9938 1.4120 + 154SOL OW 473 0.577 2.397 0.445 0.0251 0.5166 -0.1897 + 154SOL HW1 474 0.608 2.303 0.429 1.4863 1.1304 -1.0660 + 154SOL HW2 475 0.554 2.440 0.358 1.0168 1.5300 0.0414 + 155SOL OW 476 1.120 0.757 0.107 0.6039 0.2375 0.2933 + 155SOL HW1 477 1.216 0.731 0.093 -0.1409 -1.3110 -2.2956 + 155SOL HW2 478 1.072 0.754 0.019 -1.8453 0.8870 1.5852 + 156SOL OW 479 0.140 1.028 1.100 0.0816 -0.2370 -0.6667 + 156SOL HW1 480 0.115 0.932 1.089 1.9298 -0.8389 0.3674 + 156SOL HW2 481 0.138 1.074 1.011 0.0719 -1.4402 -1.2831 + 157SOL OW 482 1.251 1.898 0.628 0.6906 0.0194 -0.5708 + 157SOL HW1 483 1.287 1.956 0.701 -0.2597 -1.6986 1.2831 + 157SOL HW2 484 1.326 1.846 0.587 1.0295 -0.0127 0.0870 + 158SOL OW 485 0.691 0.495 1.402 0.0212 0.1208 -0.2915 + 158SOL HW1 486 0.764 0.456 1.346 -0.1823 -0.5057 -0.1246 + 158SOL HW2 487 0.718 0.495 1.498 0.3281 1.1004 -0.3795 + 159SOL OW 488 1.389 1.537 1.544 -0.0435 0.1025 -0.1512 + 159SOL HW1 489 1.387 1.558 1.641 0.0235 -0.5487 -0.0113 + 159SOL HW2 490 1.297 1.547 1.505 -0.2754 -0.7257 0.2004 + 160SOL OW 491 0.080 1.883 2.100 -0.0688 0.1732 0.0424 + 160SOL HW1 492 0.062 1.902 2.003 0.2392 0.5230 0.0505 + 160SOL HW2 493 0.001 1.838 2.140 -0.0646 -0.2879 -0.4599 + 161SOL OW 494 1.735 0.861 0.511 -0.3402 0.2399 0.0065 + 161SOL HW1 495 1.699 0.953 0.495 -0.4246 0.1896 -0.0958 + 161SOL HW2 496 1.759 0.851 0.608 -0.8034 0.2055 0.1227 + 162SOL OW 497 1.036 0.179 0.532 -0.1081 0.1922 0.8664 + 162SOL HW1 498 1.081 0.093 0.554 0.9864 1.1635 2.4447 + 162SOL HW2 499 1.008 0.224 0.617 -0.7928 1.3314 0.0354 + 163SOL OW 500 0.920 0.765 0.501 -0.2510 -0.2210 -0.7087 + 163SOL HW1 501 1.005 0.749 0.552 0.9013 0.3320 -2.4410 + 163SOL HW2 502 0.936 0.835 0.431 -1.7895 -1.1131 -1.9503 + 164SOL OW 503 2.082 0.735 1.295 0.4249 -0.4244 0.2965 + 164SOL HW1 504 2.109 0.750 1.390 5.3659 -0.6195 -0.9820 + 164SOL HW2 505 2.128 0.653 1.261 -1.5591 -0.5305 -2.1722 + 165SOL OW 506 1.708 1.564 1.147 -0.3537 0.6914 0.5265 + 165SOL HW1 507 1.697 1.550 1.245 -1.5857 1.9763 0.5810 + 165SOL HW2 508 1.743 1.656 1.129 1.0810 0.0282 -0.1819 + 166SOL OW 509 0.983 1.388 0.028 -0.2959 0.3491 0.0329 + 166SOL HW1 510 0.987 1.392 -0.072 0.5810 -0.4792 0.0366 + 166SOL HW2 511 1.043 1.458 0.066 0.5222 -0.3284 -0.0119 + 167SOL OW 512 0.539 1.933 1.116 0.3576 0.2759 0.4930 + 167SOL HW1 513 0.531 1.840 1.152 1.5986 0.4525 1.2208 + 167SOL HW2 514 0.460 1.987 1.146 0.3292 -0.1579 1.1944 + 168SOL OW 515 1.207 2.184 1.498 0.1009 -0.6412 -0.0757 + 168SOL HW1 516 1.161 2.207 1.583 -1.1528 1.2262 -1.2523 + 168SOL HW2 517 1.259 2.263 1.466 1.8688 -1.8384 -0.2290 + 169SOL OW 518 1.294 0.681 1.159 0.4261 -0.8195 0.2222 + 169SOL HW1 519 1.336 0.683 1.250 2.4909 0.6500 -0.7359 + 169SOL HW2 520 1.288 0.774 1.123 0.4764 -1.4862 -1.5460 + 170SOL OW 521 1.054 1.403 2.213 -0.1934 0.2781 0.0010 + 170SOL HW1 522 1.107 1.478 2.252 0.0654 -0.1206 0.4152 + 170SOL HW2 523 1.111 1.352 2.149 -0.1608 0.0080 0.2474 + 171SOL OW 524 2.287 1.692 0.448 -0.0633 -0.0322 0.4529 + 171SOL HW1 525 2.257 1.598 0.432 0.9408 -0.7273 2.6207 + 171SOL HW2 526 2.378 1.705 0.408 0.9919 -0.7914 2.5911 + 172SOL OW 527 0.174 1.084 0.534 0.1989 -0.7885 -0.1893 + 172SOL HW1 528 0.270 1.078 0.559 0.5925 -0.3086 -1.5181 + 172SOL HW2 529 0.157 1.172 0.488 -1.3779 0.1416 2.1510 + 173SOL OW 530 0.322 1.228 1.561 0.1542 0.7224 -0.0505 + 173SOL HW1 531 0.317 1.214 1.462 0.7142 0.6127 -0.0638 + 173SOL HW2 532 0.346 1.323 1.580 2.4843 0.1364 -0.0597 + 174SOL OW 533 1.756 2.429 0.801 -0.3242 0.2392 -0.0323 + 174SOL HW1 534 1.841 2.378 0.817 0.2459 0.8767 -1.0291 + 174SOL HW2 535 1.757 2.512 0.859 1.5745 2.3512 -3.0041 + 175SOL OW 536 0.690 2.265 2.453 0.0404 -0.0626 -0.3040 + 175SOL HW1 537 0.719 2.256 2.549 1.9340 4.4104 -0.3896 + 175SOL HW2 538 0.763 2.232 2.394 0.6892 1.2611 -0.2642 + 176SOL OW 539 1.978 1.210 1.169 -0.0134 -0.6311 0.2827 + 176SOL HW1 540 1.929 1.275 1.111 0.0319 -0.7966 0.0573 + 176SOL HW2 541 1.921 1.184 1.247 -0.3226 -0.8982 -0.0310 + 177SOL OW 542 0.191 0.453 1.553 -0.4545 -0.2689 -0.5258 + 177SOL HW1 543 0.226 0.473 1.461 1.9695 2.8222 1.0495 + 177SOL HW2 544 0.111 0.510 1.571 -0.2338 -0.0570 -0.2379 + 178SOL OW 545 0.675 1.433 0.798 -0.0812 -0.0538 0.2757 + 178SOL HW1 546 0.685 1.528 0.827 1.6071 0.3500 -1.6096 + 178SOL HW2 547 0.597 1.425 0.735 0.8670 0.3792 -0.9433 + 179SOL OW 548 1.690 0.720 0.781 0.2080 -0.9340 -0.0317 + 179SOL HW1 549 1.740 0.773 0.849 -0.7877 -1.0963 0.8280 + 179SOL HW2 550 1.643 0.643 0.825 0.7704 -1.9140 -1.1138 + 180SOL OW 551 1.599 0.011 1.094 -0.0358 -0.3913 -0.7269 + 180SOL HW1 552 1.558 0.096 1.062 -0.7118 -0.2892 0.3917 + 180SOL HW2 553 1.557 -0.067 1.047 -1.0164 -0.2392 -0.1152 + 181SOL OW 554 0.480 1.155 0.548 0.3270 0.3422 0.1531 + 181SOL HW1 555 0.497 1.119 0.456 0.1405 -0.3648 0.3859 + 181SOL HW2 556 0.513 1.089 0.616 0.3831 0.8205 0.5888 + 182SOL OW 557 0.769 1.282 1.572 0.1401 -0.1699 -0.5988 + 182SOL HW1 558 0.715 1.349 1.623 0.6010 0.2897 -0.7114 + 182SOL HW2 559 0.859 1.321 1.551 0.8479 -1.2490 0.3715 + 183SOL OW 560 1.076 0.189 2.288 -0.6144 -0.5050 0.5933 + 183SOL HW1 561 0.982 0.217 2.307 -0.1636 1.3233 0.1924 + 183SOL HW2 562 1.077 0.123 2.213 -1.5334 -0.1292 0.2519 + 184SOL OW 563 1.676 1.143 0.495 0.2350 0.0197 -0.4462 + 184SOL HW1 564 1.704 1.239 0.501 1.1824 -0.2320 -0.7194 + 184SOL HW2 565 1.645 1.122 0.403 3.1418 -0.7540 -1.2788 + 185SOL OW 566 1.730 0.199 0.618 0.1224 0.4855 -0.3147 + 185SOL HW1 567 1.638 0.228 0.593 -0.3972 0.2704 1.3304 + 185SOL HW2 568 1.730 0.166 0.712 1.3361 -2.0262 -1.1878 + 186SOL OW 569 0.579 1.539 2.452 0.0840 -0.5633 -0.0065 + 186SOL HW1 570 0.612 1.446 2.432 -1.1695 -0.9448 -0.3170 + 186SOL HW2 571 0.657 1.599 2.468 0.9139 -1.6176 -0.0628 + 187SOL OW 572 0.495 1.059 1.704 -0.2507 -0.5818 -0.3063 + 187SOL HW1 573 0.528 0.996 1.634 -1.7976 -1.1968 -0.4934 + 187SOL HW2 574 0.438 1.128 1.661 -0.4180 -0.3965 0.2222 + 188SOL OW 575 1.805 0.163 1.934 -0.2357 0.1542 0.2156 + 188SOL HW1 576 1.739 0.191 1.864 -1.2898 -0.1301 1.0827 + 188SOL HW2 577 1.884 0.224 1.931 -0.8925 0.9986 -0.3190 + 189SOL OW 578 0.432 1.201 2.411 -0.2862 0.6931 -0.2269 + 189SOL HW1 579 0.462 1.148 2.332 -0.3581 -3.0089 2.1708 + 189SOL HW2 580 0.512 1.235 2.461 -0.0755 -3.0085 2.0617 + 190SOL OW 581 0.839 1.388 2.042 0.5477 0.3272 0.4669 + 190SOL HW1 582 0.932 1.405 2.075 0.1375 2.3168 0.6108 + 190SOL HW2 583 0.789 1.475 2.035 -1.0718 -0.6481 -0.2955 + 191SOL OW 584 1.868 2.152 1.881 -0.2213 0.1533 -0.4084 + 191SOL HW1 585 1.866 2.080 1.812 0.4270 -0.0720 -0.1971 + 191SOL HW2 586 1.892 2.239 1.838 -0.2673 0.0998 -0.5423 + 192SOL OW 587 1.642 0.339 2.206 -0.0893 0.4909 0.3041 + 192SOL HW1 588 1.689 0.363 2.121 -0.1227 0.9602 0.4149 + 192SOL HW2 589 1.571 0.272 2.187 0.6049 -0.1961 0.1293 + 193SOL OW 590 2.016 1.374 1.998 0.4146 0.2139 -0.0577 + 193SOL HW1 591 1.967 1.295 1.961 1.5199 -0.4828 -0.0301 + 193SOL HW2 592 2.069 1.346 2.078 -1.3236 1.5337 1.6238 + 194SOL OW 593 0.419 0.469 2.143 0.5019 -0.1999 -0.0289 + 194SOL HW1 594 0.365 0.551 2.160 0.6849 0.2650 -1.7007 + 194SOL HW2 595 0.413 0.408 2.223 -0.0944 1.1668 0.9724 + 195SOL OW 596 1.881 1.190 1.881 -0.5279 -0.1640 0.2740 + 195SOL HW1 597 1.945 1.150 1.815 -0.1364 0.4600 0.2744 + 195SOL HW2 598 1.798 1.133 1.886 -1.4409 0.8983 -2.2735 + 196SOL OW 599 1.127 1.673 2.346 0.1557 0.4150 0.0643 + 196SOL HW1 600 1.152 1.658 2.442 -0.7367 2.4110 0.6178 + 196SOL HW2 601 1.180 1.750 2.310 0.1174 -0.0077 -0.8887 + 197SOL OW 602 1.110 1.184 1.782 0.4839 0.1519 -0.2785 + 197SOL HW1 603 1.096 1.280 1.759 1.0988 0.6573 1.4188 + 197SOL HW2 604 1.041 1.128 1.735 -0.1541 1.4578 -0.9144 + 198SOL OW 605 1.210 1.630 1.749 -0.3842 0.2610 -0.6020 + 198SOL HW1 606 1.237 1.636 1.844 -0.7175 1.0828 -0.5633 + 198SOL HW2 607 1.178 1.719 1.717 -0.7306 -0.1256 -1.3390 + 199SOL OW 608 1.675 0.589 2.469 0.1802 -0.5932 -0.2516 + 199SOL HW1 609 1.755 0.531 2.449 0.2163 -0.7556 0.3460 + 199SOL HW2 610 1.607 0.577 2.398 1.0830 0.2703 -1.2734 + 200SOL OW 611 0.570 0.708 1.903 -0.3726 -0.1308 -0.2104 + 200SOL HW1 612 0.550 0.611 1.888 -0.5425 -0.0636 -0.4139 + 200SOL HW2 613 0.544 0.733 1.996 -3.7454 0.6029 -1.3284 + 201SOL OW 614 0.976 1.731 1.946 -0.0830 0.1698 0.1299 + 201SOL HW1 615 1.071 1.704 1.956 -0.0660 -0.0765 -0.6844 + 201SOL HW2 616 0.968 1.831 1.955 0.3831 0.2876 -0.8144 + 202SOL OW 617 0.791 0.807 0.050 -0.1512 0.2487 0.4695 + 202SOL HW1 618 0.777 0.737 0.120 -0.9311 -0.0619 0.0067 + 202SOL HW2 619 0.735 0.785 -0.030 0.6862 0.6369 -0.2237 + 203SOL OW 620 0.727 1.647 2.063 0.3356 -0.0792 0.3263 + 203SOL HW1 621 0.816 1.680 2.032 -0.6541 1.4814 -0.9348 + 203SOL HW2 622 0.725 1.644 2.163 1.0652 2.0210 0.4218 + 204SOL OW 623 1.597 1.046 1.629 0.4860 -0.3409 -0.1244 + 204SOL HW1 624 1.692 1.024 1.608 0.8070 1.1936 -0.2722 + 204SOL HW2 625 1.584 1.145 1.627 -1.2799 -0.5808 -0.8446 + 205SOL OW 626 0.721 1.947 2.379 -0.0042 -0.7968 -0.1995 + 205SOL HW1 627 0.812 1.989 2.375 -0.5302 0.4482 0.9234 + 205SOL HW2 628 0.667 1.978 2.301 -0.7918 1.5558 1.2686 + 206SOL OW 629 1.424 2.430 1.910 -0.0551 0.1372 0.0784 + 206SOL HW1 630 1.426 2.356 1.843 -1.8117 -0.3691 0.5926 + 206SOL HW2 631 1.515 2.440 1.951 1.1240 0.6670 -2.6089 + 207SOL OW 632 0.506 1.060 2.184 0.2008 0.0545 0.0017 + 207SOL HW1 633 0.605 1.073 2.173 -0.0131 1.0019 -0.8562 + 207SOL HW2 634 0.460 1.079 2.098 -0.6923 -0.8905 0.2666 + 208SOL OW 635 0.747 0.460 0.043 0.0151 0.0605 0.4859 + 208SOL HW1 636 0.837 0.468 0.087 -0.9264 1.1505 2.1960 + 208SOL HW2 637 0.687 0.403 0.099 -1.4596 2.1626 1.0926 + 209SOL OW 638 0.387 0.798 2.184 0.2568 0.0833 0.1876 + 209SOL HW1 639 0.414 0.894 2.174 1.1954 -0.0556 1.3124 + 209SOL HW2 640 0.457 0.749 2.235 -0.9935 -0.8494 1.0104 + 210SOL OW 641 1.550 1.306 1.599 0.3082 -0.4441 -0.5582 + 210SOL HW1 642 1.481 1.368 1.562 0.2449 0.5978 1.2975 + 210SOL HW2 643 1.640 1.349 1.594 0.2294 -0.1001 0.9584 + 211SOL OW 644 0.520 0.161 2.111 0.0606 -0.2621 -0.3882 + 211SOL HW1 645 0.531 0.254 2.148 1.4583 -0.6853 0.2643 + 211SOL HW2 646 0.440 0.118 2.151 -0.6233 0.6905 -0.7314 + 212SOL OW 647 1.065 0.434 0.441 -0.0571 -0.1014 0.0607 + 212SOL HW1 648 1.075 0.348 0.491 -3.5982 0.5233 1.9071 + 212SOL HW2 649 1.137 0.498 0.470 0.6901 -1.3517 0.9622 + 213SOL OW 650 0.185 1.662 2.396 0.0441 -0.1191 -0.5072 + 213SOL HW1 651 0.108 1.600 2.413 -0.8615 1.0617 -0.3365 + 213SOL HW2 652 0.254 1.613 2.342 -1.4146 -0.7712 -1.8344 + 214SOL OW 653 1.256 1.934 2.297 0.0021 0.4126 0.0034 + 214SOL HW1 654 1.326 1.929 2.226 0.9221 -0.8085 0.9816 + 214SOL HW2 655 1.298 1.962 2.384 -0.5754 -1.0140 0.7556 + 215SOL OW 656 1.540 0.495 1.385 0.0816 0.1891 -0.5099 + 215SOL HW1 657 1.615 0.474 1.322 -1.3614 -0.2444 -2.1095 + 215SOL HW2 658 1.466 0.428 1.373 0.8269 -1.3998 3.4326 + 216SOL OW 659 1.617 0.817 2.054 0.1060 0.1307 0.3943 + 216SOL HW1 660 1.590 0.796 1.960 0.8529 -0.4230 0.2941 + 216SOL HW2 661 1.717 0.825 2.058 0.1478 -0.8737 1.3475 + 217SOL OW 662 0.668 0.967 1.869 0.4613 0.2202 0.1051 + 217SOL HW1 663 0.602 1.020 1.816 -0.1277 0.4033 1.0106 + 217SOL HW2 664 0.642 0.871 1.869 1.1633 0.0192 -0.9833 + 218SOL OW 665 1.390 0.295 1.820 -0.0672 -0.7109 0.0524 + 218SOL HW1 666 1.351 0.379 1.783 -0.2662 -0.1099 1.5903 + 218SOL HW2 667 1.368 0.288 1.917 1.9778 -1.3412 0.4880 + 219SOL OW 668 0.607 0.322 0.229 0.5779 0.3510 0.1934 + 219SOL HW1 669 0.675 0.367 0.288 -2.4650 1.6155 2.7728 + 219SOL HW2 670 0.589 0.230 0.263 -1.8002 1.3799 1.7515 + 220SOL OW 671 0.724 1.310 2.405 0.0610 -0.1755 -0.0229 + 220SOL HW1 672 0.811 1.318 2.454 0.9685 1.2616 -1.8390 + 220SOL HW2 673 0.733 1.239 2.334 -0.1618 0.1641 -0.3900 + 221SOL OW 674 0.337 1.303 1.877 -0.3337 0.1211 -0.6517 + 221SOL HW1 675 0.405 1.341 1.940 0.0271 -0.7274 -0.5313 + 221SOL HW2 676 0.262 1.368 1.865 -0.0515 0.5782 0.0917 + 222SOL OW 677 1.216 0.901 2.253 -0.6080 0.0567 -0.2537 + 222SOL HW1 678 1.278 0.937 2.323 -1.2487 0.0090 0.3353 + 222SOL HW2 679 1.201 0.970 2.183 0.3746 -0.0425 -0.5663 + 223SOL OW 680 1.631 0.268 1.706 0.4748 0.4034 0.2814 + 223SOL HW1 681 1.540 0.267 1.748 -0.6643 -2.5414 -2.2041 + 223SOL HW2 682 1.628 0.224 1.616 4.2766 0.6691 -0.0497 + 224SOL OW 683 1.504 0.656 2.264 -0.2434 -0.2107 -0.1759 + 224SOL HW1 684 1.410 0.631 2.241 -0.6836 1.3476 -0.1361 + 224SOL HW2 685 1.542 0.712 2.190 -0.0024 0.7281 0.6542 + 225SOL OW 686 1.151 0.176 0.288 0.5558 0.2840 0.2579 + 225SOL HW1 687 1.112 0.188 0.380 0.3952 0.8578 0.1199 + 225SOL HW2 688 1.079 0.190 0.220 1.1739 2.1567 -0.0258 + 226SOL OW 689 1.379 0.248 2.133 0.3727 0.1785 -0.4520 + 226SOL HW1 690 1.383 0.154 2.167 0.2163 0.1332 -0.5603 + 226SOL HW2 691 1.310 0.299 2.183 -0.0761 0.0256 -0.9137 + 227SOL OW 692 1.247 0.521 1.707 0.2001 0.1314 -0.3864 + 227SOL HW1 693 1.243 0.587 1.632 1.3282 0.9906 0.3129 + 227SOL HW2 694 1.175 0.541 1.774 -0.2462 -0.1060 -0.7910 + 228SOL OW 695 1.733 1.931 0.299 -0.2974 -0.5344 0.1018 + 228SOL HW1 696 1.813 1.929 0.240 0.5442 0.3421 1.2027 + 228SOL HW2 697 1.755 1.979 0.383 -2.2034 0.4002 0.0827 + 229SOL OW 698 0.872 0.939 2.024 0.3138 -0.4599 0.0626 + 229SOL HW1 699 0.896 0.842 2.029 -0.6433 -0.7302 -0.5831 + 229SOL HW2 700 0.780 0.949 1.986 1.2320 0.7929 -1.8783 + 230SOL OW 701 1.129 0.822 1.773 0.5479 -0.0891 0.9110 + 230SOL HW1 702 1.075 0.817 1.857 0.4917 1.0769 0.9609 + 230SOL HW2 703 1.071 0.799 1.695 0.5927 -1.1517 1.1928 + 231SOL OW 704 1.395 0.971 2.431 -0.3959 0.1589 -0.0887 + 231SOL HW1 705 1.389 0.972 2.530 -0.2583 1.9787 -0.0995 + 231SOL HW2 706 1.491 0.962 2.403 -0.2196 1.8754 -0.0596 + 232SOL OW 707 1.179 0.407 2.411 -0.1433 -0.0032 -0.3292 + 232SOL HW1 708 1.127 0.463 2.477 0.6831 -0.0262 0.3435 + 232SOL HW2 709 1.127 0.324 2.390 -0.5046 0.1008 0.1458 + 233SOL OW 710 1.992 0.373 1.973 0.2718 -0.6044 0.5080 + 233SOL HW1 711 1.999 0.389 1.875 1.0782 -3.2105 0.1316 + 233SOL HW2 712 2.077 0.399 2.017 0.1693 -0.1310 0.4319 + 234SOL OW 713 1.883 1.094 2.201 0.0054 0.6027 0.4554 + 234SOL HW1 714 1.832 1.057 2.278 -0.3634 0.5317 0.1786 + 234SOL HW2 715 1.834 1.172 2.163 0.2655 0.7356 0.3926 + 235SOL OW 716 0.006 1.936 1.813 0.5951 -0.0063 0.8096 + 235SOL HW1 717 0.093 1.981 1.792 1.1209 -2.5321 -2.4943 + 235SOL HW2 718 -0.020 1.876 1.738 -4.0762 0.7763 1.7539 + 236SOL OW 719 2.032 0.068 0.067 -0.2605 0.7679 -0.0689 + 236SOL HW1 720 2.031 -0.024 0.027 1.0446 0.6293 0.2182 + 236SOL HW2 721 1.945 0.114 0.047 -0.1756 0.1681 -1.8163 + 237SOL OW 722 1.120 1.845 1.594 -0.3734 0.6494 0.0361 + 237SOL HW1 723 1.038 1.900 1.612 -0.1098 0.8736 0.5431 + 237SOL HW2 724 1.119 1.815 1.499 -1.1523 0.4771 0.0957 + 238SOL OW 725 1.280 0.712 2.071 -0.5983 -0.2454 0.2140 + 238SOL HW1 726 1.374 0.745 2.066 -0.2501 -1.3313 -0.5080 + 238SOL HW2 727 1.228 0.769 2.134 1.2548 -1.3243 2.7713 + 239SOL OW 728 1.940 1.628 1.964 -0.0935 -0.1747 -0.0870 + 239SOL HW1 729 1.900 1.667 2.047 -0.3489 0.2862 -0.4246 + 239SOL HW2 730 1.979 1.539 1.985 -0.1447 -0.0530 0.5332 + 240SOL OW 731 0.554 1.383 2.010 -0.3041 0.3094 -0.1487 + 240SOL HW1 732 0.642 1.340 2.034 -0.2017 -0.2688 -1.5596 + 240SOL HW2 733 0.570 1.474 1.974 -0.2232 -0.1013 -1.1576 + 241SOL OW 734 0.041 2.498 2.188 -0.2430 -0.3742 0.0228 + 241SOL HW1 735 0.084 2.448 2.113 -2.4450 -1.1993 -0.7112 + 241SOL HW2 736 -0.003 2.434 2.250 -0.4632 0.4634 0.7365 + 242SOL OW 737 0.129 0.201 0.304 -0.1852 0.1516 0.0182 + 242SOL HW1 738 0.160 0.109 0.283 1.6330 1.1272 -1.7474 + 242SOL HW2 739 0.191 0.244 0.369 0.0643 0.7721 -0.6118 + 243SOL OW 740 1.108 1.078 2.046 0.9911 -0.2481 -0.3699 + 243SOL HW1 741 1.124 1.107 1.951 1.9466 1.0812 0.1791 + 243SOL HW2 742 1.021 1.030 2.053 -0.3951 2.0449 -1.4294 + 244SOL OW 743 0.900 0.643 2.095 -0.3371 0.0025 -0.1513 + 244SOL HW1 744 0.820 0.584 2.105 0.3444 -1.2221 -1.6616 + 244SOL HW2 745 0.934 0.670 2.185 -2.6163 0.7706 0.4915 + 245SOL OW 746 0.771 1.041 0.232 -0.1704 -0.1731 0.8888 + 245SOL HW1 747 0.835 1.111 0.200 0.6027 -0.1477 2.4837 + 245SOL HW2 748 0.803 0.951 0.203 1.2807 -0.2782 2.7959 + 246SOL OW 749 0.408 1.841 1.689 -0.1431 0.2174 0.4668 + 246SOL HW1 750 0.490 1.890 1.661 -0.2118 0.1177 0.0864 + 246SOL HW2 751 0.333 1.906 1.701 -0.1750 0.2337 0.1860 + 247SOL OW 752 1.091 0.556 1.941 -0.0866 0.7382 0.1523 + 247SOL HW1 753 1.018 0.578 2.006 0.7474 0.6279 1.1317 + 247SOL HW2 754 1.180 0.572 1.984 0.5404 -2.8150 0.3149 + 248SOL OW 755 0.368 1.580 0.155 -0.1320 0.2811 -0.1264 + 248SOL HW1 756 0.308 1.659 0.146 -1.4052 -0.4351 1.9647 + 248SOL HW2 757 0.443 1.588 0.089 -1.4919 2.0857 -1.5046 + 249SOL OW 758 1.917 2.088 2.395 0.6632 -0.4259 0.3493 + 249SOL HW1 759 1.859 2.161 2.432 0.3511 -1.4245 1.8727 + 249SOL HW2 760 1.916 2.091 2.295 0.2845 1.3615 0.3942 + 250SOL OW 761 0.519 1.044 0.316 -0.3133 0.2578 0.0526 + 250SOL HW1 762 0.485 0.952 0.298 -0.4365 0.4820 -0.8903 + 250SOL HW2 763 0.614 1.050 0.286 -0.0383 0.1915 0.9046 + 251SOL OW 764 0.773 1.614 1.469 -0.2353 -0.0151 0.6216 + 251SOL HW1 765 0.820 1.533 1.434 0.1820 0.1665 0.7532 + 251SOL HW2 766 0.803 1.631 1.563 -0.9669 -0.2070 0.8864 + 252SOL OW 767 1.557 2.144 2.207 -0.0700 0.0213 0.2543 + 252SOL HW1 768 1.569 2.132 2.108 1.5873 0.7690 0.3542 + 252SOL HW2 769 1.466 2.180 2.226 -0.4498 -0.2717 -0.9955 + 253SOL OW 770 0.048 1.237 1.615 -0.4834 0.0347 0.0222 + 253SOL HW1 771 0.004 1.202 1.698 -0.0194 1.2317 0.7755 + 253SOL HW2 772 0.140 1.198 1.607 -0.3387 0.3093 0.3383 + 254SOL OW 773 0.799 2.004 2.066 -0.0605 -0.0480 0.0012 + 254SOL HW1 774 0.899 1.998 2.073 -0.1125 0.8992 1.5159 + 254SOL HW2 775 0.773 2.099 2.051 -0.6613 -0.4782 -1.7820 + 255SOL OW 776 0.327 1.526 1.118 0.7577 -0.4516 0.3199 + 255SOL HW1 777 0.278 1.611 1.098 1.2377 -0.2998 -0.1977 + 255SOL HW2 778 0.264 1.461 1.160 0.4402 0.2435 0.9366 + 256SOL OW 779 0.438 2.339 1.305 0.6108 -1.0913 -0.1831 + 256SOL HW1 780 0.483 2.311 1.221 2.1827 0.0869 0.2629 + 256SOL HW2 781 0.385 2.422 1.290 -1.3194 -2.3793 -0.6643 + 257SOL OW 782 1.566 2.126 0.209 -0.3576 -0.5077 0.3153 + 257SOL HW1 783 1.613 2.157 0.126 -1.8683 1.9130 0.3454 + 257SOL HW2 784 1.619 2.053 0.252 1.9434 0.2790 -1.1476 + 258SOL OW 785 1.283 2.114 0.414 -0.0500 -0.5385 -0.0410 + 258SOL HW1 786 1.351 2.173 0.370 -2.6877 1.5135 -1.4245 + 258SOL HW2 787 1.294 2.118 0.513 1.1595 0.5867 -0.2141 + 259SOL OW 788 0.862 2.371 1.707 0.2607 -0.2151 0.2146 + 259SOL HW1 789 0.859 2.354 1.805 -0.0175 -1.9939 -0.0924 + 259SOL HW2 790 0.945 2.330 1.669 -0.4684 -0.9876 -0.5575 + 260SOL OW 791 1.113 1.638 0.409 -0.5508 -0.0614 -0.2994 + 260SOL HW1 792 1.021 1.637 0.448 -1.2759 -3.5883 -2.0475 + 260SOL HW2 793 1.176 1.594 0.473 -0.4749 0.4098 -0.0506 + 261SOL OW 794 1.463 2.249 1.709 0.6955 -0.5179 0.1204 + 261SOL HW1 795 1.402 2.170 1.706 -1.8146 1.3958 -0.5013 + 261SOL HW2 796 1.496 2.268 1.616 -1.0281 0.8902 -0.2300 + 262SOL OW 797 0.760 1.361 0.375 -0.2507 -0.2108 0.2252 + 262SOL HW1 798 0.832 1.329 0.437 -0.5641 0.2205 0.8164 + 262SOL HW2 799 0.672 1.323 0.403 0.0992 -2.6594 -1.9321 + 263SOL OW 800 0.218 2.379 2.000 -0.3741 -0.2803 0.0720 + 263SOL HW1 801 0.246 2.474 1.985 -2.1500 0.5965 2.2807 + 263SOL HW2 802 0.300 2.322 2.009 0.6977 1.0319 -1.1142 + 264SOL OW 803 1.154 0.690 0.628 -0.1733 -0.4659 -0.0577 + 264SOL HW1 804 1.230 0.701 0.692 -0.4227 3.3710 -0.3651 + 264SOL HW2 805 1.191 0.664 0.538 0.5852 -0.7714 0.3359 + 265SOL OW 806 1.669 1.906 2.285 -0.1779 -0.8580 -0.5158 + 265SOL HW1 807 1.642 1.856 2.367 -1.4348 0.0376 -0.3720 + 265SOL HW2 808 1.640 2.002 2.294 -0.6619 -0.8459 -2.1741 + 266SOL OW 809 0.969 0.408 1.748 -0.0124 0.2519 0.0405 + 266SOL HW1 810 1.007 0.447 1.831 -0.0257 1.2025 -0.4008 + 266SOL HW2 811 0.886 0.458 1.722 -0.1323 -0.1823 -0.4194 + 267SOL OW 812 0.917 2.075 0.695 0.3323 0.4197 0.3722 + 267SOL HW1 813 0.956 2.112 0.611 0.9908 0.7670 0.8235 + 267SOL HW2 814 0.943 1.979 0.705 1.7380 0.8506 1.0495 + 268SOL OW 815 0.378 0.102 1.795 -0.1830 0.3538 0.1835 + 268SOL HW1 816 0.453 0.077 1.855 -0.1797 0.1032 0.0744 + 268SOL HW2 817 0.398 0.190 1.750 -0.2007 0.5547 0.5718 + 269SOL OW 818 1.513 1.783 0.030 0.2729 -0.3212 -0.0285 + 269SOL HW1 819 1.544 1.752 0.120 1.1688 1.1101 0.1548 + 269SOL HW2 820 1.471 1.873 0.038 0.6539 -0.0425 -1.0926 + 270SOL OW 821 1.630 0.100 1.495 -0.5339 -0.4653 0.4243 + 270SOL HW1 822 1.564 0.146 1.436 1.4015 1.8110 -0.0270 + 270SOL HW2 823 1.646 0.007 1.461 -0.7858 0.2151 -1.6047 + 271SOL OW 824 0.043 1.747 0.283 -0.1149 0.3058 -0.7667 + 271SOL HW1 825 0.109 1.694 0.338 -0.5554 0.8227 0.2663 + 271SOL HW2 826 0.092 1.814 0.228 0.3612 -0.4558 -1.2860 + 272SOL OW 827 1.126 2.396 0.607 0.2125 0.8154 -0.0902 + 272SOL HW1 828 1.124 2.354 0.698 -0.9673 1.4321 0.1665 + 272SOL HW2 829 1.214 2.377 0.564 0.0701 -1.0341 0.4383 + 273SOL OW 830 1.250 1.503 0.579 0.1200 0.3295 -0.0757 + 273SOL HW1 831 1.266 1.533 0.673 1.3505 0.0807 -0.2001 + 273SOL HW2 832 1.333 1.515 0.525 -0.4922 0.1998 -1.0630 + 274SOL OW 833 1.033 0.131 1.751 0.4617 -0.0530 0.2051 + 274SOL HW1 834 0.993 0.223 1.743 -0.1948 -0.2277 1.5797 + 274SOL HW2 835 0.962 0.062 1.739 1.0076 -0.4002 -1.1428 + 275SOL OW 836 0.534 1.957 0.112 0.3189 0.4665 -0.1148 + 275SOL HW1 837 0.599 1.945 0.037 -0.5464 0.5686 -0.8990 + 275SOL HW2 838 0.553 1.891 0.184 0.6216 -0.2235 -0.8211 + 276SOL OW 839 0.777 0.007 1.410 -0.4824 0.0770 0.3487 + 276SOL HW1 840 0.866 0.029 1.451 1.2326 -1.2365 -2.5400 + 276SOL HW2 841 0.759 0.070 1.335 -1.5667 -0.2522 0.3368 + 277SOL OW 842 1.996 2.083 1.454 0.4053 -0.1505 0.4104 + 277SOL HW1 843 1.942 2.041 1.527 -1.0504 -0.1603 -0.6813 + 277SOL HW2 844 1.952 2.067 1.366 1.3980 1.1228 -0.3230 + 278SOL OW 845 0.758 0.044 0.819 -0.7752 -0.1672 0.7351 + 278SOL HW1 846 0.749 -0.055 0.811 -1.9894 -0.1337 1.7559 + 278SOL HW2 847 0.721 0.088 0.737 -1.1135 -0.4961 0.7139 + 279SOL OW 848 0.104 2.030 0.962 -0.3626 0.0338 0.9108 + 279SOL HW1 849 0.155 2.089 0.900 -1.0312 -0.3205 0.0310 + 279SOL HW2 850 0.085 2.080 1.047 1.4161 0.1787 1.2376 + 280SOL OW 851 2.302 1.048 2.211 0.1874 0.3184 -0.5640 + 280SOL HW1 852 2.373 0.993 2.167 0.2268 -1.1189 1.2846 + 280SOL HW2 853 2.248 0.991 2.272 -0.6851 2.0267 0.2952 + 281SOL OW 854 0.277 1.653 0.401 0.0339 0.6162 -0.9588 + 281SOL HW1 855 0.303 1.621 0.310 0.7739 -1.0979 -0.1510 + 281SOL HW2 856 0.346 1.623 0.468 -0.7924 1.3984 0.2533 + 282SOL OW 857 0.813 0.270 2.329 -0.1567 -0.0822 0.0830 + 282SOL HW1 858 0.778 0.328 2.404 -1.3908 -0.6115 -0.0880 + 282SOL HW2 859 0.802 0.319 2.242 0.5012 0.1836 0.1464 + 283SOL OW 860 0.247 1.582 0.713 0.0197 -0.0221 -0.2357 + 283SOL HW1 861 0.313 1.655 0.700 -1.5895 1.2311 -1.3546 + 283SOL HW2 862 0.173 1.613 0.773 -0.9556 -0.5399 -1.1563 + 284SOL OW 863 0.983 1.994 1.149 -0.1633 0.1009 -0.3582 + 284SOL HW1 864 0.888 1.985 1.120 -0.2767 -0.2334 0.1261 + 284SOL HW2 865 1.043 1.942 1.087 -0.2661 0.5208 -0.8148 + 285SOL OW 866 1.178 1.897 0.260 -0.3583 0.3366 -0.3996 + 285SOL HW1 867 1.150 1.832 0.330 -0.1436 -0.6759 -1.2602 + 285SOL HW2 868 1.221 1.977 0.304 -1.3595 0.2737 0.6859 + 286SOL OW 869 0.371 2.192 0.123 0.0451 -0.0605 -0.6106 + 286SOL HW1 870 0.349 2.181 0.220 -1.2293 2.0328 -0.6303 + 286SOL HW2 871 0.451 2.138 0.100 0.9225 0.1717 1.8452 + 287SOL OW 872 0.758 2.029 0.989 0.1178 -0.3259 0.7478 + 287SOL HW1 873 0.729 2.093 0.918 0.4957 -0.3164 0.5965 + 287SOL HW2 874 0.678 1.987 1.031 -0.3257 3.5112 3.9121 + 288SOL OW 875 1.093 2.255 0.833 0.1484 0.3655 0.0727 + 288SOL HW1 876 1.047 2.178 0.789 0.7446 0.8932 -1.4874 + 288SOL HW2 877 1.055 2.268 0.925 -0.2292 -1.5216 0.1901 + 289SOL OW 878 0.325 2.426 0.577 -0.3066 -0.4160 -0.0241 + 289SOL HW1 879 0.323 2.507 0.636 -3.0763 -0.3964 -0.1167 + 289SOL HW2 880 0.415 2.418 0.535 0.3868 1.9146 0.9700 + 290SOL OW 881 0.972 2.256 1.072 0.0542 0.0293 -0.4927 + 290SOL HW1 882 0.873 2.264 1.065 0.1571 0.6593 -1.2331 + 290SOL HW2 883 0.997 2.161 1.091 -0.6083 -0.4028 -1.7623 + 291SOL OW 884 0.524 1.620 1.869 0.2427 -0.1510 0.7670 + 291SOL HW1 885 0.474 1.698 1.829 -0.5880 -1.3462 -0.5606 + 291SOL HW2 886 0.603 1.654 1.919 0.1994 1.5242 -0.2568 + 292SOL OW 887 1.466 1.782 0.479 -0.5779 0.1113 0.0633 + 292SOL HW1 888 1.492 1.827 0.394 1.2811 -1.3431 -0.1646 + 292SOL HW2 889 1.534 1.802 0.550 -0.2524 -1.5174 0.2240 + 293SOL OW 890 0.608 2.307 1.559 -0.3876 -0.4179 0.3384 + 293SOL HW1 891 0.572 2.337 1.471 -3.0157 -0.6858 1.2971 + 293SOL HW2 892 0.698 2.348 1.574 -0.7283 1.0828 -1.6471 + 294SOL OW 893 0.715 2.249 0.807 -0.1658 0.4686 -0.1763 + 294SOL HW1 894 0.782 2.181 0.779 0.6085 0.7154 1.0649 + 294SOL HW2 895 0.624 2.221 0.777 0.3574 -0.3564 -0.9837 + 295SOL OW 896 0.291 1.305 0.146 0.2730 -0.0481 1.1033 + 295SOL HW1 897 0.337 1.255 0.073 -2.1585 0.4419 -0.7787 + 295SOL HW2 898 0.323 1.400 0.146 -0.0375 0.0561 0.4097 + 296SOL OW 899 1.461 1.545 2.365 -0.1065 -0.4069 0.5563 + 296SOL HW1 900 1.554 1.541 2.330 0.3916 -0.4483 1.8806 + 296SOL HW2 901 1.440 1.639 2.394 -0.8639 -0.1562 -0.8015 + 297SOL OW 902 1.932 1.891 0.128 -0.7906 0.1257 -0.1323 + 297SOL HW1 903 1.921 1.950 0.048 -0.0644 0.8753 0.3146 + 297SOL HW2 904 2.017 1.839 0.119 -0.1550 1.0057 0.6441 + 298SOL OW 905 0.344 0.161 0.746 0.4624 -0.3627 0.5050 + 298SOL HW1 906 0.385 0.247 0.714 0.1729 -0.7733 -0.9848 + 298SOL HW2 907 0.332 0.165 0.846 2.6612 0.3744 0.7470 + 299SOL OW 908 0.321 2.261 2.318 0.5428 -0.5524 -0.3850 + 299SOL HW1 909 0.246 2.203 2.289 -0.9246 1.3077 -0.3451 + 299SOL HW2 910 0.349 2.236 2.410 -1.4958 0.2185 0.4506 + 300SOL OW 911 1.320 2.403 1.442 -0.3666 -0.3798 -0.0129 + 300SOL HW1 912 1.300 2.484 1.497 -0.4153 0.1121 -0.7546 + 300SOL HW2 913 1.419 2.388 1.438 -0.2942 0.2730 -0.7742 + 301SOL OW 914 1.273 -0.007 0.866 0.4669 -0.0389 -0.3339 + 301SOL HW1 915 1.174 0.003 0.876 0.5927 -0.6923 1.8937 + 301SOL HW2 916 1.313 0.081 0.840 -0.7792 0.0525 -1.9477 + 302SOL OW 917 1.654 1.685 0.240 0.0914 -0.2773 0.1780 + 302SOL HW1 918 1.727 1.617 0.233 1.3956 1.0101 1.1013 + 302SOL HW2 919 1.694 1.775 0.251 -1.6427 0.6051 -0.6431 + 303SOL OW 920 0.247 1.915 0.470 0.0588 0.4888 0.2660 + 303SOL HW1 921 0.165 1.922 0.528 0.9276 -0.3301 1.6058 + 303SOL HW2 922 0.261 1.820 0.444 -0.4557 0.8896 -1.4906 + 304SOL OW 923 0.311 0.076 2.311 -0.1383 0.0447 -0.2468 + 304SOL HW1 924 0.212 0.084 2.296 0.0205 1.2499 -0.6859 + 304SOL HW2 925 0.337 -0.020 2.307 -1.0840 -0.1758 -1.5138 + 305SOL OW 926 1.026 2.317 2.371 0.4829 -0.3919 -0.5159 + 305SOL HW1 927 1.024 2.235 2.427 2.8039 -0.3779 -0.3846 + 305SOL HW2 928 1.046 2.396 2.429 2.9379 -0.3825 -1.3486 + 306SOL OW 929 1.613 1.801 0.695 0.6952 0.0732 0.0836 + 306SOL HW1 930 1.668 1.718 0.696 1.3182 0.4871 1.6940 + 306SOL HW2 931 1.580 1.820 0.788 1.2373 2.0618 -0.1133 + 307SOL OW 932 1.875 1.515 0.223 -0.0057 0.1181 -0.1173 + 307SOL HW1 933 1.906 1.449 0.291 0.4839 2.9033 2.4203 + 307SOL HW2 934 1.947 1.584 0.210 -1.0536 0.9044 -1.7556 + 308SOL OW 935 0.378 2.301 1.006 -0.0858 -0.9786 -0.1873 + 308SOL HW1 936 0.362 2.279 0.909 0.4467 -0.4672 -0.3960 + 308SOL HW2 937 0.343 2.227 1.063 -0.6137 -1.1802 -0.7638 + 309SOL OW 938 0.459 1.767 0.805 0.8667 -0.6853 -0.3245 + 309SOL HW1 939 0.390 1.750 0.875 -1.1835 0.3243 -2.0760 + 309SOL HW2 940 0.550 1.753 0.844 -0.3032 -1.6999 2.0938 + 310SOL OW 941 1.523 1.799 1.732 -0.6193 0.0221 0.1311 + 310SOL HW1 942 1.510 1.715 1.785 -1.7518 0.3339 0.3392 + 310SOL HW2 943 1.568 1.776 1.645 -0.2700 -0.6994 0.4939 + 311SOL OW 944 0.962 2.321 1.964 -0.0220 -0.0981 -0.0270 + 311SOL HW1 945 0.898 2.292 2.035 -1.5913 -0.4102 -1.5729 + 311SOL HW2 946 1.013 2.401 1.996 -2.0779 0.9306 0.7244 + 312SOL OW 947 1.733 2.399 0.366 0.0566 0.1048 0.5524 + 312SOL HW1 948 1.683 2.464 0.308 1.0400 0.1922 -0.2096 + 312SOL HW2 949 1.812 2.364 0.315 0.7613 -0.0323 1.7510 + 313SOL OW 950 0.806 2.449 2.243 -0.0046 0.4198 0.2157 + 313SOL HW1 951 0.814 2.547 2.261 -0.1661 0.2345 1.2784 + 313SOL HW2 952 0.890 2.403 2.272 0.3501 0.3369 -0.9243 + 314SOL OW 953 0.952 1.716 0.953 -0.2722 0.2049 -0.2499 + 314SOL HW1 954 0.951 1.729 0.854 -0.2201 -1.9624 -0.5525 + 314SOL HW2 955 1.035 1.756 0.991 0.9717 -1.2424 -1.4220 + 315SOL OW 956 2.024 1.700 1.439 -0.2621 -0.7216 0.5007 + 315SOL HW1 957 2.044 1.604 1.459 -0.1321 -0.6511 0.7112 + 315SOL HW2 958 1.988 1.744 1.520 0.3168 -0.4221 0.5943 + 316SOL OW 959 2.198 2.213 1.783 -0.0899 0.2174 0.1954 + 316SOL HW1 960 2.128 2.285 1.788 1.5338 1.7964 0.6734 + 316SOL HW2 961 2.286 2.251 1.813 1.0554 -1.6205 -0.8340 + 317SOL OW 962 2.456 2.071 0.044 -0.0161 0.7532 0.0300 + 317SOL HW1 963 2.512 1.996 0.078 -0.3603 -0.2583 -1.6063 + 317SOL HW2 964 2.361 2.059 0.073 -0.5651 -0.7984 -2.3183 + 318SOL OW 965 0.723 2.330 1.085 0.3497 0.6486 0.5840 + 318SOL HW1 966 0.716 2.289 0.994 1.2959 2.6935 -0.4195 + 318SOL HW2 967 0.631 2.350 1.120 -0.0924 -1.5916 0.7787 + 319SOL OW 968 1.356 -0.011 0.462 -0.1424 -0.1189 0.2219 + 319SOL HW1 969 1.364 -0.039 0.366 -1.5509 -0.7523 0.2704 + 319SOL HW2 970 1.392 0.081 0.473 -0.8107 0.3156 -1.1095 + 320SOL OW 971 0.952 1.588 1.217 0.0289 -0.1082 -0.2433 + 320SOL HW1 972 0.974 1.561 1.124 -1.4772 1.4966 -1.0857 + 320SOL HW2 973 0.856 1.616 1.221 -0.0900 -0.7814 1.9325 + 321SOL OW 974 0.945 1.794 0.129 -0.1116 -0.0565 -0.1349 + 321SOL HW1 975 1.009 1.846 0.185 -1.2186 0.6202 0.5002 + 321SOL HW2 976 0.936 1.702 0.166 0.7296 -0.2573 -0.4125 + 322SOL OW 977 0.993 2.201 0.472 0.5344 0.2089 -0.4801 + 322SOL HW1 978 1.069 2.147 0.436 0.7656 0.5067 -0.4408 + 322SOL HW2 979 1.029 2.284 0.513 0.3328 -0.4545 1.0562 + 323SOL OW 980 0.990 1.807 0.692 0.5581 -0.4060 -0.2680 + 323SOL HW1 981 1.067 1.840 0.637 0.1134 0.0315 -0.6389 + 323SOL HW2 982 0.938 1.740 0.639 0.1276 0.0172 -0.3854 + 324SOL OW 983 1.973 2.404 1.817 -0.4337 -0.0096 0.1633 + 324SOL HW1 984 1.939 2.458 1.740 0.6009 -0.5675 -0.6983 + 324SOL HW2 985 2.034 2.460 1.873 1.1398 -0.4446 -1.0834 + 325SOL OW 986 0.215 1.871 0.099 0.2869 -0.3144 0.6283 + 325SOL HW1 987 0.214 1.825 0.010 -0.3788 0.9102 0.0009 + 325SOL HW2 988 0.300 1.923 0.108 -0.0559 0.3136 0.3088 + 326SOL OW 989 1.159 0.062 1.976 0.1068 0.1779 -0.3703 + 326SOL HW1 990 1.249 0.022 1.956 0.3626 0.6632 -0.1838 + 326SOL HW2 991 1.115 0.089 1.891 0.4257 0.5609 -0.4152 + 327SOL OW 992 1.349 1.998 1.700 0.4507 0.8110 -0.5603 + 327SOL HW1 993 1.274 1.952 1.652 0.7917 -1.5548 1.1458 + 327SOL HW2 994 1.422 1.932 1.718 1.9392 2.5570 -0.1053 + 328SOL OW 995 0.874 1.966 1.761 0.1350 0.2337 0.0870 + 328SOL HW1 996 0.805 1.964 1.833 0.4263 -0.1161 0.3553 + 328SOL HW2 997 0.835 2.008 1.679 0.0400 1.3705 0.6996 + 329SOL OW 998 2.374 2.188 0.524 -0.3309 -0.2165 -0.4222 + 329SOL HW1 999 2.439 2.260 0.547 -0.1709 -0.8930 1.2832 + 329SOL HW2 1000 2.283 2.211 0.560 -0.2286 -0.9718 0.3238 + 330SOL OW 1001 0.553 1.407 1.691 0.2466 -0.2725 0.2700 + 330SOL HW1 1002 0.596 1.490 1.727 -1.5680 0.6348 0.4015 + 330SOL HW2 1003 0.494 1.367 1.761 1.0405 -1.6267 0.1678 + 331SOL OW 1004 0.991 2.037 2.411 0.1602 -0.0442 -0.2964 + 331SOL HW1 1005 1.036 2.019 2.324 -0.1087 2.5632 -1.0012 + 331SOL HW2 1006 0.971 1.951 2.457 4.6869 -1.3217 -0.5890 + 332SOL OW 1007 0.729 2.262 2.069 0.3845 -0.0861 -0.1351 + 332SOL HW1 1008 0.652 2.276 2.007 1.0061 0.2822 -0.8237 + 332SOL HW2 1009 0.731 2.335 2.137 -0.0184 -0.2356 0.0408 + 333SOL OW 1010 1.441 2.452 2.245 0.3092 -0.1472 0.1778 + 333SOL HW1 1011 1.375 2.378 2.235 0.6678 -0.3843 -0.4693 + 333SOL HW2 1012 1.513 2.442 2.176 0.4477 0.7097 0.1931 + 334SOL OW 1013 1.414 2.352 0.221 -0.1780 0.0482 0.1248 + 334SOL HW1 1014 1.427 2.415 0.145 -2.3667 0.7259 0.2861 + 334SOL HW2 1015 1.478 2.276 0.212 1.5554 1.5994 -0.8004 + 335SOL OW 1016 1.295 2.105 1.950 0.0246 0.0356 -0.1631 + 335SOL HW1 1017 1.308 2.062 1.860 -1.3424 -1.0301 0.1406 + 335SOL HW2 1018 1.367 2.074 2.012 1.9858 2.1145 -1.3674 + 336SOL OW 1019 0.428 0.321 2.351 -0.1150 -0.0239 -0.4429 + 336SOL HW1 1020 0.388 0.231 2.364 0.9129 -0.4525 -0.2322 + 336SOL HW2 1021 0.411 0.377 2.433 -0.8815 0.0237 -0.6369 + 337SOL OW 1022 0.609 2.006 1.539 -0.1042 -0.7666 0.2875 + 337SOL HW1 1023 0.593 2.104 1.530 -1.2275 -0.9428 0.3142 + 337SOL HW2 1024 0.696 1.982 1.497 -0.4935 0.0120 -0.9715 + 338SOL OW 1025 2.326 1.800 2.225 0.0563 0.9558 0.0412 + 338SOL HW1 1026 2.320 1.810 2.324 -0.3340 0.6488 0.0485 + 338SOL HW2 1027 2.301 1.707 2.199 2.1966 0.4347 -0.1778 + 339SOL OW 1028 0.878 0.113 0.176 0.1497 0.3601 0.4509 + 339SOL HW1 1029 0.849 0.023 0.206 0.5055 0.4072 0.9290 + 339SOL HW2 1030 0.817 0.145 0.102 0.6177 -0.6707 -0.3797 + 340SOL OW 1031 2.336 2.347 2.365 0.3809 0.3351 -0.2804 + 340SOL HW1 1032 2.332 2.251 2.393 -2.6834 -0.1303 -2.1390 + 340SOL HW2 1033 2.340 2.405 2.446 -0.0043 -1.2919 0.9282 + 341SOL OW 1034 2.467 0.210 0.062 -0.3146 0.2184 -0.5851 + 341SOL HW1 1035 2.531 0.213 0.139 0.4506 1.7165 -1.2766 + 341SOL HW2 1036 2.408 0.130 0.071 1.4331 -0.9871 0.2396 + 342SOL OW 1037 1.076 1.981 2.071 0.3707 -0.1306 0.5388 + 342SOL HW1 1038 1.142 1.960 2.143 1.4994 2.0842 0.1762 + 342SOL HW2 1039 1.122 2.033 1.999 -1.5239 0.4222 -0.2578 + 343SOL OW 1040 0.870 2.284 0.230 -0.1009 -0.7223 0.3688 + 343SOL HW1 1041 0.959 2.329 0.230 -0.3495 -0.2212 1.8324 + 343SOL HW2 1042 0.867 2.216 0.303 -2.0113 1.4295 2.3230 + 344SOL OW 1043 1.068 2.164 1.758 -0.2817 0.2617 0.6673 + 344SOL HW1 1044 1.010 2.083 1.766 -2.8220 2.0193 0.4305 + 344SOL HW2 1045 1.058 2.221 1.840 0.6456 0.8702 0.3643 + 345SOL OW 1046 1.291 2.244 2.210 -0.4461 0.1850 0.3653 + 345SOL HW1 1047 1.223 2.201 2.270 -0.7191 -0.1284 -0.1701 + 345SOL HW2 1048 1.254 2.251 2.118 0.6918 -1.0890 -0.1983 + 346SOL OW 1049 1.821 0.186 2.382 0.8071 -0.2382 -0.2041 + 346SOL HW1 1050 1.890 0.258 2.376 0.9405 -0.4607 -1.3537 + 346SOL HW2 1051 1.743 0.209 2.324 -0.6050 0.5676 1.9705 + 347SOL OW 1052 1.898 0.008 1.184 -0.4536 0.1347 0.3160 + 347SOL HW1 1053 1.925 -0.047 1.105 -1.5490 -2.4855 1.7297 + 347SOL HW2 1054 1.806 0.044 1.170 0.0128 1.0830 -0.3310 + 348SOL OW 1055 1.837 0.267 0.367 0.0017 0.1393 -0.2898 + 348SOL HW1 1056 1.788 0.218 0.296 -0.0426 -1.2003 0.6399 + 348SOL HW2 1057 1.825 0.220 0.454 0.0727 1.7460 0.6019 + 349SOL OW 1058 0.553 0.984 0.745 -0.4908 -0.3294 0.8153 + 349SOL HW1 1059 0.555 0.974 0.844 0.4648 -1.1462 0.7105 + 349SOL HW2 1060 0.468 0.945 0.710 0.4436 -2.5897 1.0300 + 350SOL OW 1061 0.018 1.490 0.540 -0.2986 0.5834 -0.6234 + 350SOL HW1 1062 0.100 1.507 0.594 -1.2264 1.1068 0.6261 + 350SOL HW2 1063 0.040 1.425 0.467 0.7537 -0.9053 0.9633 + 351SOL OW 1064 2.281 0.267 1.789 0.3902 -0.4029 0.3276 + 351SOL HW1 1065 2.259 0.198 1.858 -1.5446 -0.0656 0.0445 + 351SOL HW2 1066 2.197 0.313 1.759 1.4277 0.6520 -0.9864 + 352SOL OW 1067 1.360 1.994 0.078 0.5869 0.3355 0.3722 + 352SOL HW1 1068 1.424 2.049 0.132 -0.4248 1.0907 0.8052 + 352SOL HW2 1069 1.291 1.955 0.138 0.4055 -0.1613 -0.1574 + 353SOL OW 1070 2.120 1.256 2.229 -0.0471 -0.4758 0.6425 + 353SOL HW1 1071 2.042 1.197 2.248 -0.2437 -0.4090 0.0608 + 353SOL HW2 1072 2.200 1.200 2.208 0.2592 -0.5560 1.9786 + 354SOL OW 1073 2.325 1.288 0.225 0.0691 -0.0756 0.4357 + 354SOL HW1 1074 2.290 1.321 0.138 -0.7680 -0.5406 0.5924 + 354SOL HW2 1075 2.318 1.189 0.229 0.7106 -0.1120 0.7727 + 355SOL OW 1076 2.153 0.047 0.305 0.2666 -0.0669 0.5566 + 355SOL HW1 1077 2.113 0.048 0.213 -0.3604 -2.1780 0.7850 + 355SOL HW2 1078 2.080 0.053 0.373 0.6253 0.0262 0.9344 + 356SOL OW 1079 1.604 0.808 1.774 0.0808 0.1111 0.6439 + 356SOL HW1 1080 1.571 0.726 1.727 2.5871 -1.1719 1.0916 + 356SOL HW2 1081 1.571 0.889 1.726 -0.6380 -1.1669 -1.0520 + 357SOL OW 1082 2.161 0.774 1.563 0.3113 0.0870 -0.0932 + 357SOL HW1 1083 2.237 0.836 1.545 -0.9907 1.3698 -1.2506 + 357SOL HW2 1084 2.169 0.737 1.655 1.2813 1.7258 0.4957 + 358SOL OW 1085 1.398 0.251 1.424 -0.1804 -0.2420 -0.4183 + 358SOL HW1 1086 1.363 0.232 1.515 -0.1538 -0.8490 -0.5349 + 358SOL HW2 1087 1.362 0.184 1.359 -0.9387 0.7464 -1.0167 + 359SOL OW 1088 1.929 0.828 0.315 0.0040 0.4092 -0.2325 + 359SOL HW1 1089 1.939 0.739 0.270 -2.0546 0.6282 -1.1457 + 359SOL HW2 1090 1.859 0.821 0.387 0.4445 1.0755 0.2540 + 360SOL OW 1091 2.301 1.639 1.333 0.7363 0.6242 -0.0668 + 360SOL HW1 1092 2.320 1.594 1.246 2.1746 -0.4081 0.7732 + 360SOL HW2 1093 2.216 1.604 1.372 0.4803 0.5558 -0.6933 + 361SOL OW 1094 0.497 0.051 0.229 -0.3498 0.2111 -0.0963 + 361SOL HW1 1095 0.399 0.033 0.226 -0.1524 -1.0808 1.2494 + 361SOL HW2 1096 0.531 0.064 0.136 -1.8597 1.0289 -0.5418 + 362SOL OW 1097 2.097 1.948 0.749 -0.3745 -0.1382 0.4027 + 362SOL HW1 1098 2.193 1.969 0.768 -0.0929 -0.3703 -0.7335 + 362SOL HW2 1099 2.038 2.003 0.808 0.4789 -0.7796 1.8698 + 363SOL OW 1100 2.318 0.223 0.398 0.0055 0.2168 -0.5619 + 363SOL HW1 1101 2.256 0.149 0.370 0.2027 -0.2875 0.3239 + 363SOL HW2 1102 2.404 0.216 0.347 0.0774 -0.2495 -0.3738 + 364SOL OW 1103 2.129 1.459 1.444 -0.1151 -0.6564 0.1284 + 364SOL HW1 1104 2.131 1.366 1.407 -0.3884 -0.0639 -1.3884 + 364SOL HW2 1105 2.188 1.464 1.524 2.6355 -1.3008 -1.8141 + 365SOL OW 1106 2.171 0.506 1.203 0.3229 -0.2100 0.3313 + 365SOL HW1 1107 2.108 0.428 1.207 1.3940 -1.1571 -0.7278 + 365SOL HW2 1108 2.248 0.489 1.264 -0.4464 0.9615 1.6465 + 366SOL OW 1109 2.095 1.555 1.012 0.5224 -0.8937 -0.2173 + 366SOL HW1 1110 2.088 1.592 0.919 -1.1880 -0.3508 0.1155 + 366SOL HW2 1111 2.020 1.491 1.028 1.2299 -1.5304 0.5422 + 367SOL OW 1112 1.960 1.742 1.178 -0.6081 0.2541 0.6035 + 367SOL HW1 1113 2.036 1.726 1.116 -2.0260 -1.9292 -0.6144 + 367SOL HW2 1114 1.991 1.732 1.273 0.7262 -0.0952 0.1348 + 368SOL OW 1115 2.180 0.682 0.563 0.1247 -0.1803 0.2367 + 368SOL HW1 1116 2.161 0.598 0.513 -0.2003 0.2058 -0.2909 + 368SOL HW2 1117 2.186 0.759 0.499 0.3941 0.2033 0.7168 + 369SOL OW 1118 2.186 2.137 0.004 -0.0652 0.0318 -0.5759 + 369SOL HW1 1119 2.166 2.145 0.102 1.4994 -1.5360 -0.1136 + 369SOL HW2 1120 2.101 2.119 -0.046 -0.8858 0.9566 0.4804 + 370SOL OW 1121 0.110 2.241 1.191 -0.3497 0.5013 0.5248 + 370SOL HW1 1122 0.017 2.245 1.230 -0.8385 1.8320 -0.7485 + 370SOL HW2 1123 0.119 2.312 1.121 1.6920 0.4755 0.7618 + 371SOL OW 1124 1.863 2.420 2.260 -0.1562 -0.0874 -0.2200 + 371SOL HW1 1125 1.959 2.393 2.249 0.4185 1.6509 0.3270 + 371SOL HW2 1126 1.859 2.517 2.284 -2.0730 -0.0974 -0.4779 + 372SOL OW 1127 0.352 1.182 0.903 0.3013 0.9780 0.2116 + 372SOL HW1 1128 0.389 1.091 0.922 -1.3230 0.5204 1.2641 + 372SOL HW2 1129 0.417 1.251 0.935 1.1779 0.1906 0.1600 + 373SOL OW 1130 1.804 0.477 1.669 0.4584 -0.5039 0.3655 + 373SOL HW1 1131 1.766 0.564 1.698 -0.1609 -0.2798 -1.1377 + 373SOL HW2 1132 1.739 0.403 1.689 0.7673 -0.5739 1.1519 + 374SOL OW 1133 2.072 0.638 0.929 0.0039 0.0358 -0.0151 + 374SOL HW1 1134 2.099 0.623 1.024 -1.9502 -0.8082 0.4318 + 374SOL HW2 1135 2.096 0.558 0.875 -0.2326 -0.1112 0.0918 + 375SOL OW 1136 2.243 1.585 2.092 -0.5407 0.1160 0.2287 + 375SOL HW1 1137 2.312 1.530 2.044 -1.5929 0.4176 -1.6676 + 375SOL HW2 1138 2.168 1.526 2.121 0.1607 -0.0885 1.6514 + 376SOL OW 1139 2.030 1.431 1.728 0.3428 0.1340 -0.3079 + 376SOL HW1 1140 2.123 1.463 1.709 0.8440 -0.7681 0.6157 + 376SOL HW2 1141 2.021 1.409 1.825 0.1537 -2.9603 -0.9955 + 377SOL OW 1142 0.295 0.350 0.471 0.4925 -0.5351 -0.0584 + 377SOL HW1 1143 0.359 0.355 0.548 0.3009 -0.1943 0.0793 + 377SOL HW2 1144 0.262 0.441 0.450 1.4066 -0.4775 -1.2769 + 378SOL OW 1145 2.108 0.411 0.746 -0.7790 -0.5514 0.1247 + 378SOL HW1 1146 2.024 0.456 0.715 -0.5468 0.8797 1.5066 + 378SOL HW2 1147 2.172 0.402 0.670 -1.6490 -0.3951 -0.6197 + 379SOL OW 1148 0.091 1.223 0.917 0.2939 0.4105 0.2269 + 379SOL HW1 1149 0.189 1.214 0.899 0.6657 -0.3950 2.6011 + 379SOL HW2 1150 0.077 1.281 0.997 -1.2915 2.7956 -1.7344 + 380SOL OW 1151 2.225 0.523 2.077 0.0283 -0.5541 -0.1594 + 380SOL HW1 1152 2.230 0.435 2.124 -0.9189 -1.9864 -2.7115 + 380SOL HW2 1153 2.306 0.577 2.100 0.4314 -1.9066 1.7254 + 381SOL OW 1154 2.292 0.039 1.648 -0.0285 0.5217 0.0536 + 381SOL HW1 1155 2.307 0.134 1.675 1.0158 0.4863 -0.3885 + 381SOL HW2 1156 2.364 -0.019 1.686 -1.4961 -0.3318 1.5744 + 382SOL OW 1157 2.468 0.613 1.606 0.0849 0.0802 -0.5292 + 382SOL HW1 1158 2.441 0.609 1.702 -1.4618 1.6285 -0.8742 + 382SOL HW2 1159 2.446 0.703 1.570 0.0400 -0.7201 -2.5115 + 383SOL OW 1160 2.324 1.045 1.260 0.3576 0.1901 0.3948 + 383SOL HW1 1161 2.413 1.017 1.225 -0.2140 -0.4196 -0.5470 + 383SOL HW2 1162 2.284 1.113 1.199 -0.3756 -0.4422 0.1762 + 384SOL OW 1163 1.573 1.605 0.921 0.1386 -0.2026 -0.3062 + 384SOL HW1 1164 1.603 1.564 1.007 -1.5528 -0.4092 0.1854 + 384SOL HW2 1165 1.647 1.598 0.853 2.0008 1.2191 1.5284 + 385SOL OW 1166 1.663 2.248 2.453 -0.3239 0.2329 0.8249 + 385SOL HW1 1167 1.701 2.340 2.460 -0.1767 0.3904 -1.7582 + 385SOL HW2 1168 1.618 2.237 2.364 2.4076 -3.1875 -0.1902 + 386SOL OW 1169 2.185 0.982 1.929 -0.1803 -0.0355 -0.0742 + 386SOL HW1 1170 2.180 1.009 2.025 -1.8980 -1.7503 0.3386 + 386SOL HW2 1171 2.191 0.883 1.923 2.1644 0.2033 -1.6828 + 387SOL OW 1172 2.363 0.330 0.645 0.4012 0.2306 0.1908 + 387SOL HW1 1173 2.353 0.287 0.555 1.0826 -0.8764 0.6334 + 387SOL HW2 1174 2.446 0.385 0.646 -0.1644 1.0985 -0.1899 + 388SOL OW 1175 2.230 1.221 1.078 0.5619 0.0527 0.2183 + 388SOL HW1 1176 2.138 1.224 1.116 0.8549 1.1744 0.8456 + 388SOL HW2 1177 2.226 1.232 0.979 0.1929 2.4077 0.4813 + 389SOL OW 1178 0.010 0.643 0.236 -0.0886 0.0487 -0.1352 + 389SOL HW1 1179 0.034 0.709 0.164 1.3484 -1.7363 -1.3268 + 389SOL HW2 1180 -0.020 0.558 0.194 -0.2412 -0.6636 1.4032 + 390SOL OW 1181 1.478 1.507 0.434 0.2096 0.1106 -0.4912 + 390SOL HW1 1182 1.491 1.605 0.448 0.4708 -0.0039 0.0980 + 390SOL HW2 1183 1.449 1.490 0.340 2.9966 0.5115 -1.4514 + 391SOL OW 1184 1.836 1.993 1.252 0.4623 0.3045 0.0300 + 391SOL HW1 1185 1.876 1.908 1.218 1.3842 1.0084 -0.6584 + 391SOL HW2 1186 1.740 1.977 1.276 0.4929 -0.8091 -0.5623 + 392SOL OW 1187 2.470 1.589 0.898 0.1611 0.2873 -0.0363 + 392SOL HW1 1188 2.428 1.558 0.983 1.0627 0.8311 0.6073 + 392SOL HW2 1189 2.405 1.577 0.823 -0.7950 0.2186 0.7954 + 393SOL OW 1190 1.863 1.386 0.997 -0.4458 0.6822 -0.1595 + 393SOL HW1 1191 1.799 1.451 1.038 -1.4321 1.0568 -2.2904 + 393SOL HW2 1192 1.828 1.355 0.909 2.0921 0.5715 -1.1603 + 394SOL OW 1193 2.017 0.293 1.690 -0.1104 -0.5349 0.3425 + 394SOL HW1 1194 1.996 0.200 1.659 -0.3404 0.1150 -1.5199 + 394SOL HW2 1195 1.939 0.353 1.670 0.7629 0.4325 -0.2004 + 395SOL OW 1196 2.493 2.429 1.002 0.3577 0.9398 0.2841 + 395SOL HW1 1197 2.483 2.503 0.936 0.4916 -0.0439 -0.8457 + 395SOL HW2 1198 2.415 2.367 0.996 1.4523 -0.3846 -0.5098 + 396SOL OW 1199 2.312 1.503 1.655 0.0709 -0.1926 -0.0066 + 396SOL HW1 1200 2.352 1.594 1.645 1.0269 -0.5987 0.1255 + 396SOL HW2 1201 2.372 1.446 1.711 0.7167 -1.6671 -2.1512 + 397SOL OW 1202 0.067 0.335 1.166 0.4296 0.3345 -0.3502 + 397SOL HW1 1203 -0.010 0.306 1.222 1.1251 0.9637 0.9202 + 397SOL HW2 1204 0.131 0.258 1.156 1.4716 0.9507 1.6712 + 398SOL OW 1205 0.730 0.490 0.805 -0.0308 0.0794 0.2452 + 398SOL HW1 1206 0.717 0.403 0.852 -0.5084 1.1363 2.1006 + 398SOL HW2 1207 0.827 0.503 0.784 0.4391 0.3813 2.5268 + 399SOL OW 1208 1.598 1.093 1.943 -0.1468 -0.3375 0.5207 + 399SOL HW1 1209 1.570 1.009 1.988 -2.4752 0.2390 0.1744 + 399SOL HW2 1210 1.519 1.137 1.900 1.7836 -0.2465 -3.0973 + 400SOL OW 1211 2.331 1.491 1.112 -0.2154 -0.1348 -0.1789 + 400SOL HW1 1212 2.246 1.508 1.063 -0.2749 0.2618 0.0627 + 400SOL HW2 1213 2.344 1.392 1.124 -0.9636 -0.1642 0.3609 + 401SOL OW 1214 1.745 1.463 1.857 -0.2285 -0.4252 -0.3345 + 401SOL HW1 1215 1.818 1.522 1.891 -1.5317 0.9146 0.1665 + 401SOL HW2 1216 1.784 1.392 1.798 1.3915 0.7328 -0.6683 + 402SOL OW 1217 1.992 1.988 0.486 -0.3225 0.5722 -0.3167 + 402SOL HW1 1218 2.028 1.954 0.573 2.3310 1.0285 -1.2188 + 402SOL HW2 1219 1.911 2.044 0.504 0.7387 1.4200 1.9562 + 403SOL OW 1220 2.337 0.732 0.762 0.1105 -0.0373 -0.2238 + 403SOL HW1 1221 2.298 0.777 0.842 -0.4479 -2.4332 0.8613 + 403SOL HW2 1222 2.267 0.725 0.690 -0.2017 -0.4318 0.1195 + 404SOL OW 1223 0.431 0.722 1.389 0.2390 -0.3989 0.2833 + 404SOL HW1 1224 0.377 0.643 1.361 0.0561 -0.1127 -0.1726 + 404SOL HW2 1225 0.388 0.806 1.356 1.3781 -0.2214 -0.7929 + 405SOL OW 1226 2.276 1.199 1.510 0.0342 -0.3752 -0.2773 + 405SOL HW1 1227 2.268 1.124 1.445 -0.9124 0.3190 -0.9698 + 405SOL HW2 1228 2.373 1.219 1.526 0.2719 -0.7569 -1.2166 + 406SOL OW 1229 1.999 1.330 0.637 -0.0226 -0.4134 -0.0005 + 406SOL HW1 1230 1.958 1.281 0.715 -1.4866 0.1996 -0.3635 + 406SOL HW2 1231 2.082 1.377 0.667 -0.4793 -0.3237 1.1698 + 407SOL OW 1232 1.908 1.165 0.082 0.3137 -0.0610 -0.6860 + 407SOL HW1 1233 2.005 1.150 0.061 -0.2071 -0.3502 -2.9516 + 407SOL HW2 1234 1.878 1.252 0.044 -0.6558 -0.5834 -1.1269 + 408SOL OW 1235 1.890 0.570 2.203 -0.4691 -0.3037 -0.3859 + 408SOL HW1 1236 1.918 0.524 2.119 1.3706 -0.9821 0.5813 + 408SOL HW2 1237 1.866 0.665 2.183 -1.2224 -0.7872 -1.8637 + 409SOL OW 1238 1.439 0.103 2.499 0.3407 -0.3928 -0.4799 + 409SOL HW1 1239 1.433 0.039 2.422 -0.5106 -0.0377 -0.7159 + 409SOL HW2 1240 1.437 0.197 2.464 0.6342 -0.2355 -0.0698 + 410SOL OW 1241 2.421 0.901 1.608 0.0954 0.0574 -0.1949 + 410SOL HW1 1242 2.474 0.899 1.523 -1.0423 0.7553 -0.9310 + 410SOL HW2 1243 2.432 0.991 1.652 -1.9725 0.8728 -1.3182 + 411SOL OW 1244 0.073 0.539 2.109 -0.0339 0.0557 0.0441 + 411SOL HW1 1245 0.073 0.453 2.160 0.2595 -0.5359 -0.9319 + 411SOL HW2 1246 0.049 0.520 2.013 -3.2043 1.4938 0.5205 + 412SOL OW 1247 0.095 2.297 1.529 -0.0835 -0.0584 0.2997 + 412SOL HW1 1248 0.176 2.241 1.509 -0.0956 0.1428 -0.3021 + 412SOL HW2 1249 0.043 2.312 1.445 -1.6713 -1.6240 1.0114 + 413SOL OW 1250 0.095 0.544 1.004 0.0278 -0.3178 -0.0968 + 413SOL HW1 1251 0.074 0.463 1.059 0.5730 -0.0386 0.5332 + 413SOL HW2 1252 0.089 0.521 0.907 -0.9811 -0.8039 0.0825 + 414SOL OW 1253 0.170 1.513 1.865 0.4710 -0.8086 -0.1956 + 414SOL HW1 1254 0.167 1.545 1.770 1.7786 0.2247 0.1100 + 414SOL HW2 1255 0.204 1.586 1.924 -1.5572 -1.0317 1.2684 + 415SOL OW 1256 2.008 0.294 1.248 0.0818 0.4554 0.1802 + 415SOL HW1 1257 1.962 0.247 1.173 -0.1356 1.3090 -0.2253 + 415SOL HW2 1258 2.041 0.227 1.314 0.9522 -0.3594 -1.0691 + 416SOL OW 1259 1.968 0.466 2.431 0.2069 0.3649 0.3835 + 416SOL HW1 1260 2.052 0.412 2.437 1.0810 1.7219 0.4266 + 416SOL HW2 1261 1.963 0.510 2.341 -1.4843 -1.3908 -0.3750 + 417SOL OW 1262 2.164 1.014 0.670 -0.2775 0.0760 -0.1212 + 417SOL HW1 1263 2.256 0.985 0.699 -0.1793 -0.8344 -1.3377 + 417SOL HW2 1264 2.142 0.971 0.583 -1.4701 1.0909 -0.3124 + 418SOL OW 1265 2.501 1.462 1.381 -0.1746 0.7786 0.2025 + 418SOL HW1 1266 2.449 1.544 1.360 2.2570 2.4998 0.7581 + 418SOL HW2 1267 2.455 1.411 1.455 -2.2482 1.0465 -0.8830 + 419SOL OW 1268 2.052 0.206 0.949 0.4989 -0.7641 0.6986 + 419SOL HW1 1269 2.086 0.270 0.880 1.1485 -0.0670 1.6632 + 419SOL HW2 1270 2.114 0.127 0.954 1.2879 -0.0885 1.5712 + 420SOL OW 1271 0.103 0.866 1.381 0.0115 0.2266 -0.0946 + 420SOL HW1 1272 0.102 0.812 1.297 -3.0263 2.4823 -1.5455 + 420SOL HW2 1273 0.190 0.915 1.389 0.3147 -0.0264 -1.8683 + 421SOL OW 1274 0.090 1.295 0.358 0.2211 -0.3156 -0.1830 + 421SOL HW1 1275 0.001 1.312 0.315 0.3608 -0.3783 -0.5045 + 421SOL HW2 1276 0.163 1.325 0.296 0.4056 0.5652 0.4573 + 422SOL OW 1277 -0.032 0.986 0.693 0.5803 -0.1520 -0.3482 + 422SOL HW1 1278 0.027 1.012 0.616 -0.2006 1.4378 -0.4300 + 422SOL HW2 1279 0.010 0.911 0.744 1.2862 -0.9651 -2.1071 + 423SOL OW 1280 2.089 1.855 2.087 0.0901 -0.1093 -0.4474 + 423SOL HW1 1281 2.091 1.850 1.987 -0.1330 -1.7828 -0.3752 + 423SOL HW2 1282 2.171 1.812 2.124 -0.1724 -0.1411 0.0968 + 424SOL OW 1283 2.272 0.844 1.022 0.7163 -0.0238 -0.2988 + 424SOL HW1 1284 2.224 0.815 1.105 -0.9238 0.2651 -1.1282 + 424SOL HW2 1285 2.246 0.938 1.000 1.8637 0.2192 -0.6212 + 425SOL OW 1286 2.430 1.400 2.009 0.1826 0.3559 0.3028 + 425SOL HW1 1287 2.456 1.354 2.094 0.9529 -0.0095 -0.1348 + 425SOL HW2 1288 2.511 1.415 1.953 -0.5791 -1.0023 -1.1789 + 426SOL OW 1289 2.129 0.871 2.309 -0.2345 -0.1618 -0.6512 + 426SOL HW1 1290 2.069 0.817 2.249 0.2204 0.0776 -1.3226 + 426SOL HW2 1291 2.148 0.818 2.392 -2.2685 0.2056 0.0816 + 427SOL OW 1292 0.131 0.814 0.060 -0.0927 -1.1430 -0.0573 + 427SOL HW1 1293 0.134 0.821 -0.040 -1.2619 -1.4863 -0.1306 + 427SOL HW2 1294 0.167 0.898 0.101 0.2926 -0.9596 -0.7703 + 428SOL OW 1295 2.196 1.933 1.833 -0.3612 -0.1229 0.7505 + 428SOL HW1 1296 2.291 1.919 1.861 -0.8081 -2.5374 1.1521 + 428SOL HW2 1297 2.178 2.031 1.824 2.6293 0.3040 -0.9885 + 429SOL OW 1298 1.688 1.314 2.118 -0.3665 -0.2285 0.0033 + 429SOL HW1 1299 1.603 1.262 2.115 0.3306 -1.3755 -0.0903 + 429SOL HW2 1300 1.722 1.328 2.025 0.4280 -1.2239 0.1487 + 430SOL OW 1301 2.118 2.351 2.176 0.0652 -0.2109 0.6909 + 430SOL HW1 1302 2.101 2.265 2.128 -0.4359 -0.2222 0.8820 + 430SOL HW2 1303 2.200 2.343 2.232 0.8097 -0.1073 -0.3754 + 431SOL OW 1304 0.081 2.128 2.274 -0.7540 0.1656 -0.2012 + 431SOL HW1 1305 0.087 2.040 2.227 1.1463 -0.0210 0.3396 + 431SOL HW2 1306 0.042 2.115 2.365 2.9941 -0.7385 1.3313 + 432SOL OW 1307 2.146 0.727 1.916 0.2181 -0.6164 0.0094 + 432SOL HW1 1308 2.174 0.660 1.984 1.2974 -0.9396 -0.7394 + 432SOL HW2 1309 2.053 0.707 1.885 -0.5815 0.0089 1.9545 + 433SOL OW 1310 0.268 2.178 0.785 -0.2858 0.2748 -0.0457 + 433SOL HW1 1311 0.225 2.239 0.719 -0.0945 -1.3407 -1.6692 + 433SOL HW2 1312 0.349 2.137 0.744 -0.4740 -1.1507 1.0121 + 434SOL OW 1313 0.627 0.870 1.536 0.6092 -0.5225 -0.3351 + 434SOL HW1 1314 0.702 0.803 1.538 0.5383 -0.6699 -2.0863 + 434SOL HW2 1315 0.542 0.823 1.514 0.0743 -0.2900 1.2511 + 435SOL OW 1316 2.190 0.693 0.028 -0.4393 -0.4181 0.5504 + 435SOL HW1 1317 2.122 0.658 0.092 -0.7239 -0.7978 0.0404 + 435SOL HW2 1318 2.261 0.625 0.014 -1.3334 -1.0627 -0.9461 + 436SOL OW 1319 2.165 2.222 0.270 -0.4350 0.3244 0.0051 + 436SOL HW1 1320 2.178 2.129 0.302 -0.0139 -0.1491 -1.5472 + 436SOL HW2 1321 2.198 2.286 0.340 0.8595 -0.7040 0.3439 + 437SOL OW 1322 2.143 2.267 0.638 -0.1910 -0.3365 -0.3473 + 437SOL HW1 1323 2.087 2.334 0.589 -0.7516 0.5792 1.5158 + 437SOL HW2 1324 2.091 2.232 0.716 0.9173 -1.3469 -0.0650 + 438SOL OW 1325 0.125 2.492 1.705 0.1290 0.2874 -0.0680 + 438SOL HW1 1326 0.117 2.407 1.653 -0.1516 -0.5429 1.3276 + 438SOL HW2 1327 0.209 2.492 1.758 -0.9129 -0.0767 1.6216 + 439SOL OW 1328 1.938 2.105 2.123 0.2296 0.0832 0.2094 + 439SOL HW1 1329 1.893 2.129 2.037 -2.0879 -1.9938 0.8315 + 439SOL HW2 1330 2.002 2.030 2.108 1.2561 1.0098 -0.0751 + 440SOL OW 1331 0.110 0.200 1.474 -0.4918 0.4471 -0.3063 + 440SOL HW1 1332 0.154 0.284 1.505 2.6049 -0.4658 -2.2015 + 440SOL HW2 1333 0.088 0.143 1.554 -1.4215 2.4336 0.8849 + 441SOL OW 1334 0.052 1.289 2.236 -0.0185 -0.5311 0.0345 + 441SOL HW1 1335 0.032 1.196 2.209 -1.0941 -0.8426 1.8429 + 441SOL HW2 1336 0.147 1.295 2.269 0.9492 -0.3667 -2.7083 + 442SOL OW 1337 2.158 1.078 0.028 -0.4107 0.4314 -0.2820 + 442SOL HW1 1338 2.219 1.028 0.089 -0.4765 -0.7061 -1.1375 + 442SOL HW2 1339 2.136 1.021 -0.052 0.3388 2.1981 -1.7861 + 443SOL OW 1340 2.421 1.105 1.813 0.5002 0.1489 0.4114 + 443SOL HW1 1341 2.495 1.083 1.876 0.7492 2.1407 0.8108 + 443SOL HW2 1342 2.333 1.100 1.861 0.4709 -1.0459 0.2318 + 444SOL OW 1343 1.702 1.532 2.258 0.5062 -0.3318 0.3520 + 444SOL HW1 1344 1.724 1.463 2.188 -0.5266 -1.3206 0.9976 + 444SOL HW2 1345 1.735 1.621 2.228 -0.2403 -0.6931 -1.5666 + 445SOL OW 1346 1.759 2.094 0.561 -0.0876 -0.3769 -0.1631 + 445SOL HW1 1347 1.721 2.033 0.631 2.0004 -2.3938 -0.7330 + 445SOL HW2 1348 1.706 2.179 0.558 -0.4758 -0.4394 3.5520 + 446SOL OW 1349 1.890 0.826 2.114 0.3148 0.0362 -0.1786 + 446SOL HW1 1350 1.854 0.918 2.131 -0.4659 -0.0542 -1.2867 + 446SOL HW2 1351 1.937 0.824 2.026 0.8203 -0.4879 0.1020 + 447SOL OW 1352 2.223 0.253 2.163 -0.0772 -0.4444 -0.8425 + 447SOL HW1 1353 2.189 0.186 2.097 0.4725 -1.2999 -0.2454 + 447SOL HW2 1354 2.323 0.253 2.163 -0.0663 0.8408 -1.3190 + 448SOL OW 1355 1.885 0.784 1.829 -0.9719 0.4788 0.5728 + 448SOL HW1 1356 1.785 0.777 1.827 -0.8874 -0.5426 -1.0023 + 448SOL HW2 1357 1.917 0.832 1.748 -0.1156 -0.2576 0.4619 + 449SOL OW 1358 0.030 2.246 0.259 -0.0926 0.2974 0.1614 + 449SOL HW1 1359 0.032 2.160 0.207 1.4456 0.1739 0.4296 + 449SOL HW2 1360 0.005 2.227 0.354 1.2499 0.0289 0.4590 + 450SOL OW 1361 1.452 1.862 2.099 -0.5719 0.2847 0.3376 + 450SOL HW1 1362 1.464 1.871 2.001 0.1811 -0.6496 0.3392 + 450SOL HW2 1363 1.533 1.818 2.139 -0.4328 1.5619 1.5046 + 451SOL OW 1364 1.836 0.485 1.345 -0.1075 -0.1174 -0.2366 + 451SOL HW1 1365 1.909 0.420 1.327 -0.8302 -0.7660 -0.8067 + 451SOL HW2 1366 1.823 0.494 1.444 -1.5257 -2.5224 -0.1915 + 452SOL OW 1367 2.221 0.036 1.962 0.3228 0.0694 0.2013 + 452SOL HW1 1368 2.178 -0.018 2.034 0.8419 -0.7592 -0.1099 + 452SOL HW2 1369 2.315 0.005 1.948 0.6419 1.0799 0.0546 + 453SOL OW 1370 2.331 0.433 0.092 -0.1248 0.2745 0.7512 + 453SOL HW1 1371 2.400 0.361 0.089 2.0500 2.3943 -1.1078 + 453SOL HW2 1372 2.250 0.404 0.042 0.9291 -0.6904 -0.4056 + 454SOL OW 1373 1.893 0.924 1.570 -0.6575 -0.1233 0.6148 + 454SOL HW1 1374 1.955 0.996 1.601 -0.8287 0.6119 -0.7254 + 454SOL HW2 1375 1.946 0.850 1.529 -0.6401 0.4361 -0.3907 + 455SOL OW 1376 0.147 0.826 0.831 -0.0481 0.4686 0.3660 + 455SOL HW1 1377 0.229 0.849 0.884 -0.1398 0.9290 0.3135 + 455SOL HW2 1378 0.118 0.733 0.853 0.1420 0.5165 0.8309 + 456SOL OW 1379 0.076 1.041 2.105 -0.2462 0.1293 -0.3113 + 456SOL HW1 1380 0.083 0.954 2.153 0.4148 -0.6525 -1.8212 + 456SOL HW2 1381 0.161 1.059 2.055 -0.3897 1.6174 -0.0422 + 457SOL OW 1382 2.168 0.277 2.434 0.5940 0.1070 -0.0686 + 457SOL HW1 1383 2.208 0.256 2.345 1.2082 -0.6151 0.3783 + 457SOL HW2 1384 2.129 0.194 2.474 0.1679 0.4643 0.2594 + 458SOL OW 1385 0.362 1.830 2.131 -0.3758 0.7720 -0.2933 + 458SOL HW1 1386 0.388 1.761 2.199 -0.4104 -0.7509 -1.8209 + 458SOL HW2 1387 0.263 1.827 2.118 -0.1850 -0.0062 -1.5660 + 459SOL OW 1388 1.981 0.937 1.170 0.3497 -1.0997 1.0841 + 459SOL HW1 1389 2.020 0.870 1.232 0.6767 0.2490 2.3583 + 459SOL HW2 1390 2.005 1.029 1.201 0.9628 -0.4139 -1.3280 + 460SOL OW 1391 0.400 1.559 2.267 -0.0695 0.0262 -0.1580 + 460SOL HW1 1392 0.434 1.517 2.183 -0.3915 0.5226 -0.5321 + 460SOL HW2 1393 0.470 1.551 2.338 0.7929 0.9569 -0.8998 + 461SOL OW 1394 1.978 2.204 0.863 -0.1155 -0.1168 -0.3593 + 461SOL HW1 1395 2.034 2.273 0.909 0.7797 -0.9963 -0.1078 + 461SOL HW2 1396 1.900 2.181 0.921 -0.6261 0.9541 -0.6103 + 462SOL OW 1397 1.421 0.258 0.325 -0.0973 -0.1487 -0.5907 + 462SOL HW1 1398 1.445 0.338 0.270 0.7050 -0.9854 -1.4725 + 462SOL HW2 1399 1.328 0.228 0.303 -0.0833 0.0251 -0.8834 + 463SOL OW 1400 2.419 2.305 1.902 -0.2727 0.1082 -0.7187 + 463SOL HW1 1401 2.405 2.242 1.978 -0.0130 -0.4402 -1.1275 + 463SOL HW2 1402 2.517 2.314 1.883 -0.2350 1.4525 0.0274 + 464SOL OW 1403 1.381 2.270 0.690 0.5021 -0.5176 0.0686 + 464SOL HW1 1404 1.442 2.326 0.633 4.2065 -3.0070 1.5173 + 464SOL HW2 1405 1.329 2.330 0.751 0.0213 1.7984 -2.5263 + 465SOL OW 1406 1.601 2.262 1.446 -0.0950 -0.6908 0.2961 + 465SOL HW1 1407 1.700 2.250 1.438 0.0027 1.7197 -2.5472 + 465SOL HW2 1408 1.556 2.222 1.366 -1.3459 -0.9506 1.1246 + 466SOL OW 1409 1.986 1.780 1.740 0.1562 -0.1162 0.3582 + 466SOL HW1 1410 2.072 1.827 1.759 0.6559 -0.8943 -0.0098 + 466SOL HW2 1411 1.968 1.712 1.812 0.9525 -1.5162 -0.7693 + 467SOL OW 1412 1.632 2.330 0.596 0.2113 0.1436 0.6750 + 467SOL HW1 1413 1.661 2.375 0.511 1.2433 0.1295 1.0227 + 467SOL HW2 1414 1.673 2.377 0.674 0.8360 -1.0509 1.0687 + 468SOL OW 1415 2.333 1.781 0.017 0.3168 0.5177 -0.3090 + 468SOL HW1 1416 2.343 1.803 0.114 -2.0129 -0.7323 0.2372 + 468SOL HW2 1417 2.377 1.693 -0.001 -0.1388 0.2571 -0.1632 + 469SOL OW 1418 0.448 1.443 0.600 -0.2223 0.1235 -0.2448 + 469SOL HW1 1419 0.356 1.470 0.629 0.4001 0.2252 1.6447 + 469SOL HW2 1420 0.450 1.345 0.582 -0.8961 0.2564 -1.0480 + 470SOL OW 1421 2.460 1.863 1.393 -0.4180 -0.0365 -0.1020 + 470SOL HW1 1422 2.393 1.925 1.434 -0.2313 1.6504 -2.2731 + 470SOL HW2 1423 2.413 1.786 1.351 -0.7126 -0.9214 1.8148 + 471SOL OW 1424 2.201 1.969 0.332 -0.4915 0.0289 -0.6086 + 471SOL HW1 1425 2.116 1.981 0.382 -0.7807 -0.1732 -1.0570 + 471SOL HW2 1426 2.241 1.880 0.352 0.5856 0.8766 1.0840 + 472SOL OW 1427 0.840 1.553 0.207 0.2849 0.1750 -0.1872 + 472SOL HW1 1428 0.815 1.477 0.268 -2.6512 1.2149 -0.0896 + 472SOL HW2 1429 0.878 1.517 0.122 -1.1291 -1.3975 -0.1519 + 473SOL OW 1430 1.907 2.243 0.195 -0.0012 0.2903 0.0741 + 473SOL HW1 1431 2.002 2.222 0.218 0.2832 2.3757 0.9078 + 473SOL HW2 1432 1.854 2.159 0.188 1.7360 -0.8311 0.3921 + 474SOL OW 1433 2.172 0.021 1.301 0.4121 -0.2338 0.0089 + 474SOL HW1 1434 2.150 -0.015 1.391 -0.7291 1.8591 0.5851 + 474SOL HW2 1435 2.235 0.098 1.310 -1.5317 1.4766 -0.7807 + 475SOL OW 1436 2.340 2.249 1.308 0.3548 -0.3661 0.0495 + 475SOL HW1 1437 2.318 2.179 1.376 2.1376 -0.5842 0.4086 + 475SOL HW2 1438 2.260 2.307 1.294 -0.7993 -1.8159 0.5328 + 476SOL OW 1439 2.136 2.332 1.529 0.1790 0.2058 0.4979 + 476SOL HW1 1440 2.196 2.396 1.576 0.8714 -0.3781 0.4076 + 476SOL HW2 1441 2.149 2.240 1.565 -1.0962 0.1745 0.8935 + 477SOL OW 1442 2.263 2.059 1.521 0.4280 -0.5616 0.3116 + 477SOL HW1 1443 2.246 2.061 1.619 -0.6125 2.1448 0.0701 + 477SOL HW2 1444 2.186 2.016 1.474 1.1348 -2.2866 0.7051 + 478SOL OW 1445 0.197 1.755 0.999 0.2156 0.1770 -0.3300 + 478SOL HW1 1446 0.110 1.710 0.977 0.2524 1.1563 -2.5489 + 478SOL HW2 1447 0.182 1.854 1.007 0.8120 0.1680 0.9654 + 479SOL OW 1448 2.321 2.222 0.970 0.5460 0.2141 -0.5296 + 479SOL HW1 1449 2.326 2.146 0.905 -0.7623 0.3224 -0.7590 + 479SOL HW2 1450 2.339 2.188 1.062 -1.0154 -0.5541 -0.5012 + 480SOL OW 1451 1.907 0.064 1.597 0.0825 0.2413 0.4344 + 480SOL HW1 1452 1.815 0.087 1.567 -0.7019 -0.9243 1.9584 + 480SOL HW2 1453 1.936 -0.021 1.554 -0.1117 -0.1630 1.1101 + 481SOL OW 1454 0.341 2.159 0.380 -0.1983 1.0537 -0.0823 + 481SOL HW1 1455 0.300 2.076 0.417 0.2886 0.4265 -0.9536 + 481SOL HW2 1456 0.296 2.239 0.420 0.1558 0.3791 1.6888 + 482SOL OW 1457 1.529 2.242 0.936 0.1586 -0.1077 0.1168 + 482SOL HW1 1458 1.487 2.283 0.855 -1.1012 1.4632 1.5426 + 482SOL HW2 1459 1.624 2.217 0.916 0.6338 2.6052 -1.0664 + 483SOL OW 1460 1.575 2.104 1.929 -1.3242 -0.4034 -0.0357 + 483SOL HW1 1461 1.671 2.125 1.910 -1.3641 0.3040 0.5172 + 483SOL HW2 1462 1.517 2.157 1.867 -1.3755 -0.1722 0.2061 + 484SOL OW 1463 0.458 0.418 0.687 0.3404 0.1556 0.0962 + 484SOL HW1 1464 0.550 0.443 0.716 0.7075 -1.1005 0.0118 + 484SOL HW2 1465 0.391 0.471 0.740 1.1061 0.9509 0.2674 + 485SOL OW 1466 0.270 1.884 1.430 -0.4916 0.6355 -0.1662 + 485SOL HW1 1467 0.174 1.870 1.408 -0.8031 1.2768 0.7617 + 485SOL HW2 1468 0.309 1.801 1.468 -0.9051 0.6282 0.2463 + 486SOL OW 1469 0.613 2.051 0.440 0.1908 -0.3905 -0.1857 + 486SOL HW1 1470 0.653 1.975 0.389 -0.0188 -1.8619 1.7986 + 486SOL HW2 1471 0.531 2.083 0.394 0.2566 -1.4005 -1.0199 + 487SOL OW 1472 0.484 2.052 0.699 0.2172 -0.7685 0.0562 + 487SOL HW1 1473 0.543 2.052 0.619 -1.4943 0.4314 -1.2170 + 487SOL HW2 1474 0.475 1.959 0.735 0.2522 -1.4308 -1.6654 + 488SOL OW 1475 0.329 2.158 1.520 0.4096 0.2715 -0.1068 + 488SOL HW1 1476 0.393 2.222 1.477 0.8234 0.5347 0.8755 + 488SOL HW2 1477 0.340 2.067 1.480 -0.4344 0.8935 -1.7748 + 489SOL OW 1478 2.371 2.451 0.165 -0.8656 0.8952 0.2147 + 489SOL HW1 1479 2.297 2.475 0.227 -0.2440 0.7147 1.0282 + 489SOL HW2 1480 2.406 2.360 0.187 0.9272 1.7998 1.1160 + 490SOL OW 1481 1.850 2.306 1.404 -0.2193 -0.0707 -0.1885 + 490SOL HW1 1482 1.874 2.351 1.318 0.1469 0.7964 0.3595 + 490SOL HW2 1483 1.922 2.240 1.428 0.4063 0.7398 0.1907 + 491SOL OW 1484 0.555 2.327 1.827 -0.0625 0.0015 -0.1908 + 491SOL HW1 1485 0.483 2.262 1.852 -0.1049 -0.4893 -1.5805 + 491SOL HW2 1486 0.579 2.315 1.731 2.4409 -0.3889 0.4583 + 492SOL OW 1487 0.047 2.384 0.615 -0.4973 -0.1903 0.5445 + 492SOL HW1 1488 0.010 2.423 0.699 -1.7308 0.5839 -0.3456 + 492SOL HW2 1489 0.140 2.416 0.601 -0.2660 -0.3656 1.6422 + 493SOL OW 1490 1.775 2.199 1.073 0.5177 0.0217 -0.0569 + 493SOL HW1 1491 1.724 2.280 1.103 0.2957 -0.4385 0.8042 + 493SOL HW2 1492 1.800 2.144 1.153 1.5172 -0.2556 -0.5630 + 494SOL OW 1493 1.657 2.456 2.053 -0.1842 0.3258 0.2040 + 494SOL HW1 1494 1.716 2.387 2.092 -0.2356 1.4943 2.3923 + 494SOL HW2 1495 1.713 2.527 2.010 -0.0447 0.5338 0.7287 + 495SOL OW 1496 1.863 1.741 2.194 -0.4720 -0.7210 0.3384 + 495SOL HW1 1497 1.945 1.797 2.181 -2.0677 1.4330 -0.6081 + 495SOL HW2 1498 1.788 1.799 2.225 -1.4146 -2.8417 2.0709 + 496SOL OW 1499 0.516 1.975 1.948 -0.0123 0.0689 0.0489 + 496SOL HW1 1500 0.453 1.931 2.011 0.6733 1.3048 1.6022 + 496SOL HW2 1501 0.604 1.928 1.951 0.1935 0.4810 0.4279 + 497SOL OW 1502 1.883 1.416 2.452 -0.3822 -0.3883 -0.0901 + 497SOL HW1 1503 1.878 1.471 2.535 -0.6388 -0.0181 -0.3469 + 497SOL HW2 1504 1.822 1.454 2.383 0.7150 0.0210 -0.8564 + 498SOL OW 1505 2.369 1.996 0.800 0.1019 -0.1731 -0.3731 + 498SOL HW1 1506 2.447 1.990 0.863 0.3203 0.7895 -0.5586 + 498SOL HW2 1507 2.397 1.964 0.709 0.2340 0.0363 -0.4045 + 499SOL OW 1508 1.821 1.987 1.645 0.4700 -0.3914 -0.7505 + 499SOL HW1 1509 1.727 1.968 1.616 0.5031 0.5832 -1.5245 + 499SOL HW2 1510 1.858 1.908 1.694 -0.3733 -1.2037 -1.4118 + 500SOL OW 1511 2.114 2.385 1.032 1.0377 0.2955 0.2767 + 500SOL HW1 1512 2.098 2.420 1.125 -0.4623 0.2904 0.0357 + 500SOL HW2 1513 2.206 2.347 1.026 0.7481 -0.7557 2.1024 + 501SOL OW 1514 0.249 2.043 1.744 0.1941 0.1346 0.1065 + 501SOL HW1 1515 0.325 2.086 1.793 0.5277 -1.0255 0.6155 + 501SOL HW2 1516 0.240 2.085 1.654 2.1449 -0.4543 -0.3775 + 2.46916 2.46916 2.46916 diff --git a/tests/data/parsers/gromacs/fe_test/dhdl.xvg b/tests/data/parsers/gromacs/fe_test/dhdl.xvg new file mode 100644 index 0000000000000000000000000000000000000000..f583ca06e3298362ca3d04671c6ea5614ed3ed83 --- /dev/null +++ b/tests/data/parsers/gromacs/fe_test/dhdl.xvg @@ -0,0 +1,18 @@ +# This file was created Tue Jul 25 19:07:31 2017 +# Created by: +# :-) GROMACS - gmx mdrun, VERSION 5.1.4 (-: +# +# Executable: /Users/bonat/GROMACS/BUILD/bin/gmx_mpi +# Data prefix: /Users/bonat/GROMACS/BUILD +# Command line: +# gmx_mpi mdrun -notunepme +# gmx mdrun is part of G R O M A C S: +# +# Groningen Machine for Chemical Simulation +# +@ title "dH/d\xl\f{}" +@ xaxis label "Time (ps)" +@ yaxis label "dH/d\xl\f{} (kJ/mol [\xl\f{}]\S-1\N)" +@TYPE xy +@ subtitle "T = 298 (K) " +0.0000 -99.382027 diff --git a/tests/data/parsers/gromacs/fe_test/ener.edr b/tests/data/parsers/gromacs/fe_test/ener.edr new file mode 100644 index 0000000000000000000000000000000000000000..16db080533520235897735e9d246df2ad4320c28 Binary files /dev/null and b/tests/data/parsers/gromacs/fe_test/ener.edr differ diff --git a/tests/data/parsers/gromacs/fe_test/grompp.err b/tests/data/parsers/gromacs/fe_test/grompp.err new file mode 100644 index 0000000000000000000000000000000000000000..4d8187a3bcb092d5fb15be29012bb2f408dc8e10 --- /dev/null +++ b/tests/data/parsers/gromacs/fe_test/grompp.err @@ -0,0 +1,85 @@ + :-) GROMACS - gmx grompp, VERSION 5.1.4 (-: + + GROMACS is written by: + Emile Apol Rossen Apostolov Herman J.C. Berendsen Par Bjelkmar + Aldert van Buuren Rudi van Drunen Anton Feenstra Sebastian Fritsch + Gerrit Groenhof Christoph Junghans Anca Hamuraru Vincent Hindriksen + Dimitrios Karkoulis Peter Kasson Jiri Kraus Carsten Kutzner + Per Larsson Justin A. Lemkul Magnus Lundborg Pieter Meulenhoff + Erik Marklund Teemu Murtola Szilard Pall Sander Pronk + Roland Schulz Alexey Shvetsov Michael Shirts Alfons Sijbers + Peter Tieleman Teemu Virolainen Christian Wennberg Maarten Wolf + and the project leaders: + Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel + +Copyright (c) 1991-2000, University of Groningen, The Netherlands. +Copyright (c) 2001-2015, The GROMACS development team at +Uppsala University, Stockholm University and +the Royal Institute of Technology, Sweden. +check out http://www.gromacs.org for more information. + +GROMACS is free software; you can redistribute it and/or modify it +under the terms of the GNU Lesser General Public License +as published by the Free Software Foundation; either version 2.1 +of the License, or (at your option) any later version. + +GROMACS: gmx grompp, VERSION 5.1.4 +Executable: /Users/bonat/GROMACS/BUILD/bin/gmx_mpi +Data prefix: /Users/bonat/GROMACS/BUILD +Command line: + gmx_mpi grompp -f ./grompp.mdp -c ./conf -p ./topol -maxwarn 10 + +Ignoring obsolete mdp entry 'optimize_fft' +Replacing old mdp entry 'verlet-buffer-drift' by 'verlet-buffer-tolerance' +Replacing old mdp entry 'nstxtcout' by 'nstxout-compressed' +Replacing old mdp entry 'xtc_precision' by 'compressed-x-precision' + +WARNING 1 [file ./grompp.mdp, line 343]: + You are using soft-core interactions while the Van der Waals interactions + are not decoupled (note that the sc-coul option is only active when using + lambda states). Although this will not lead to errors, you will need much + more sampling than without soft-core interactions. Consider using + sc-alpha=0. + + +NOTE 1 [file ./grompp.mdp]: + The group cutoff scheme is deprecated since GROMACS 5.0 and will be + removed in a future release when all interaction forms are supported for + the verlet scheme. The verlet scheme already scales better, and it is + compatible with GPUs and other accelerators. + + +NOTE 2 [file ./grompp.mdp]: + With PME there is a minor soft core effect present at the cut-off, + proportional to (LJsigma/rcoulomb)^6. This could have a minor effect on + energy conservation, but usually other effects dominate. With a common + sigma value of 0.34 nm the fraction of the particle-particle potential at + the cut-off at lambda=0.5 is around 1.5e-04, while ewald-rtol is 1.0e-05. + + +NOTE 3 [file ./grompp.mdp]: + nstcomm < nstcalcenergy defeats the purpose of nstcalcenergy, setting + nstcomm to nstcalcenergy + + +NOTE 4 [file ./grompp.mdp]: + The Berendsen thermostat does not generate the correct kinetic energy + distribution. You might want to consider using the V-rescale thermostat. + +Generated 165 of the 1596 non-bonded parameter combinations + +WARNING 2 [file topol.top, line 48]: + Some parameters for bonded interaction involving perturbed atoms are + specified explicitly in state A, but not B - copying A to B + +Excluding 3 bonded neighbours molecule type 'Protein' +Excluding 2 bonded neighbours molecule type 'SOL' +Number of degrees of freedom in T-Coupling group System is 3045.00 +Estimate for the relative computational load of the PME mesh part: 0.48 + +There were 4 notes + +There were 2 warnings + +Thanx for Using GROMACS - Have a Nice Day + diff --git a/tests/data/parsers/gromacs/fe_test/grompp.mdp b/tests/data/parsers/gromacs/fe_test/grompp.mdp new file mode 100644 index 0000000000000000000000000000000000000000..27d0481bfd2cc44ada84e35e2c3c7bfb59a8160f --- /dev/null +++ b/tests/data/parsers/gromacs/fe_test/grompp.mdp @@ -0,0 +1,342 @@ +; +; File 'mdout.mdp' was generated +; By user: mark (1302) +; On host: amd2 +; At date: Wed Dec 19 13:43:19 2012 +; + +; VARIOUS PREPROCESSING OPTIONS +; Preprocessor information: use cpp syntax. +; e.g.: -I/home/joe/doe -I/home/mary/roe +include = +; e.g.: -DPOSRES -DFLEXIBLE (note these variable names are case sensitive) +define = + +; RUN CONTROL PARAMETERS +integrator = md +; Start time and timestep in ps +tinit = 0.0 +dt = 0.0005 +nsteps = 20 +; For exact run continuation or redoing part of a run +init_step = 0 +; Part index is updated automatically on checkpointing (keeps files separate) +simulation-part = 1 +; mode for center of mass motion removal +comm-mode = Linear +; number of steps for center of mass motion removal +nstcomm = 1 +; group(s) for center of mass motion removal +comm-grps = + +; LANGEVIN DYNAMICS OPTIONS +; Friction coefficient (amu/ps) and random seed +bd-fric = 0 +ld_seed = 975196 + +; ENERGY MINIMIZATION OPTIONS +; Force tolerance and initial step-size +emtol = 10 +emstep = 0.01 +; Max number of iterations in relax-shells +niter = 20 +; Step size (ps^2) for minimization of flexible constraints +fcstep = 0 +; Frequency of steepest descents steps when doing CG +nstcgsteep = 200 +nbfgscorr = 10 + +; TEST PARTICLE INSERTION OPTIONS +rtpi = 0.05 + +; OUTPUT CONTROL OPTIONS +; Output frequency for coords (x), velocities (v) and forces (f) +nstxout = 20 +nstvout = 20 +nstfout = 20 +; Output frequency for energies to log file and energy file +nstlog = 4 +nstcalcenergy = 5 +nstenergy = 5 +; Output frequency and precision for .xtc file +nstxtcout = 0 +xtc_precision = 200 +; This selects the subset of atoms for the .xtc file. You can +; select multiple groups. By default all atoms will be written. +xtc-grps = +; Selection of energy groups +energygrps = protein + +; NEIGHBORSEARCHING PARAMETERS +; cut-off scheme (group: using charge groups, Verlet: particle based cut-offs) +cutoff-scheme = Group +; nblist update frequency +nstlist = 5 +; ns algorithm (simple or grid) +ns_type = grid +; Periodic boundary conditions: xyz, no, xy +pbc = xyz +periodic-molecules = no +; Allowed energy drift due to the Verlet buffer in kJ/mol/ps per atom, +; a value of -1 means: use rlist +verlet-buffer-drift = 0.005 +; nblist cut-off +rlist = 0.9 +; long-range cut-off for switched potentials +rlistlong = -1 +nstcalclr = -1 + +; OPTIONS FOR ELECTROSTATICS AND VDW +; Method for doing electrostatics +coulomb_type = pme +coulomb-modifier = Potential-shift-Verlet +rcoulomb_switch = 0 +rcoulomb = 0.9 +; Relative dielectric constant for the medium and the reaction field +epsilon_r = 1.0 +epsilon_rf = 1 +; Method for doing Van der Waals +vdw_type = Cut-off +vdw-modifier = Potential-shift-Verlet +; cut-off lengths +rvdw_switch = 0 +rvdw = 1.2 +; Apply long range dispersion corrections for Energy and Pressure +dispcorr = enerpres +; Extension of the potential lookup tables beyond the cut-off +table-extension = 1 +; Seperate tables between energy group pairs +energygrp-table = +; Spacing for the PME/PPPM FFT grid +fourierspacing = 0.12 +; FFT grid size, when a value is 0 fourierspacing will be used +fourier_nx = 20 +fourier_ny = 20 +fourier_nz = 20 +; EWALD/PME/PPPM parameters +pme_order = 4 +ewald_rtol = 1e-05 +ewald_geometry = 3d +epsilon_surface = 0 +optimize_fft = no + +; IMPLICIT SOLVENT ALGORITHM +implicit_solvent = No + +; GENERALIZED BORN ELECTROSTATICS +; Algorithm for calculating Born radii +gb_algorithm = Still +; Frequency of calculating the Born radii inside rlist +nstgbradii = 1 +; Cutoff for Born radii calculation; the contribution from atoms +; between rlist and rgbradii is updated every nstlist steps +rgbradii = 2 +; Dielectric coefficient of the implicit solvent +gb-epsilon-solvent = 80 +; Salt concentration in M for Generalized Born models +gb_saltconc = 0 +; Scaling factors used in the OBC GB model. Default values are OBC(II) +gb-obc-alpha = 1 +gb-obc-beta = 0.8 +gb-obc-gamma = 4.85 +gb-dielectric-offset = 0.009 +sa-algorithm = Ace-approximation +; Surface tension (kJ/mol/nm^2) for the SA (nonpolar surface) part of GBSA +; The value -1 will set default value for Still/HCT/OBC GB-models. +sa-surface-tension = -1 + +; OPTIONS FOR WEAK COUPLING ALGORITHMS +; Temperature coupling +tcoupl = Berendsen +nsttcouple = -1 +nh-chain-length = 10 +print-nose-hoover-chain-variables = no +; Groups to couple separately +tc-grps = system +; Time constant (ps) and reference temperature (K) +tau_t = 0.5 +ref_t = 298 +; pressure coupling +Pcoupl = Berendsen +Pcoupltype = Isotropic +nstpcouple = -1 +; Time constant (ps), compressibility (1/bar) and reference P (bar) +tau_p = 1.0 +compressibility = 4.6e-5 +ref_p = 1 +; Scaling of reference coordinates, No, All or COM +refcoord-scaling = No + +; OPTIONS FOR QMMM calculations +QMMM = no +; Groups treated Quantum Mechanically +QMMM-grps = +; QM method +QMmethod = +; QMMM scheme +QMMMscheme = normal +; QM basisset +QMbasis = +; QM charge +QMcharge = +; QM multiplicity +QMmult = +; Surface Hopping +SH = +; CAS space options +CASorbitals = +CASelectrons = +SAon = +SAoff = +SAsteps = +; Scale factor for MM charges +MMChargeScaleFactor = 1 +; Optimization of QM subsystem +bOPT = +bTS = + +; SIMULATED ANNEALING +; Type of annealing for each temperature group (no/single/periodic) +annealing = +; Number of time points to use for specifying annealing in each group +annealing-npoints = +; List of times at the annealing points for each group +annealing-time = +; Temp. at each annealing point, for each group. +annealing-temp = + +; GENERATE VELOCITIES FOR STARTUP RUN +gen_vel = no +gen_temp = 298 +gen_seed = 171533 + +; OPTIONS FOR BONDS +constraints = none +; Type of constraint algorithm +constraint-algorithm = Lincs +; Do not constrain the start configuration +continuation = no +; Use successive overrelaxation to reduce the number of shake iterations +Shake-SOR = no +; Relative tolerance of shake +shake-tol = 1e-04 +; Highest order in the expansion of the constraint coupling matrix +lincs-order = 4 +; Number of iterations in the final step of LINCS. 1 is fine for +; normal simulations, but use 2 to conserve energy in NVE runs. +; For energy minimization with constraints it should be 4 to 8. +lincs-iter = 1 +; Lincs will write a warning to the stderr if in one step a bond +; rotates over more degrees than +lincs-warnangle = 30 +; Convert harmonic bonds to morse potentials +morse = no + +; ENERGY GROUP EXCLUSIONS +; Pairs of energy groups for which all non-bonded interactions are excluded +energygrp-excl = + +; WALLS +; Number of walls, type, atom types, densities and box-z scale factor for Ewald +nwall = 0 +wall-type = 9-3 +wall-r-linpot = -1 +wall-atomtype = +wall-density = +wall-ewald-zfac = 3 + +; COM PULLING +; Pull type: no, umbrella, constraint or constant-force +pull = no + +; ENFORCED ROTATION +; Enforced rotation: No or Yes +rotation = no + +; NMR refinement stuff +; Distance restraints type: No, Simple or Ensemble +disre = No +; Force weighting of pairs in one distance restraint: Conservative or Equal +disre-weighting = Conservative +; Use sqrt of the time averaged times the instantaneous violation +disre-mixed = no +disre-fc = 200 +disre-tau = 0 +; Output frequency for pair distances to energy file +nstdisreout = 20 +; Orientation restraints: No or Yes +orire = no +; Orientation restraints force constant and tau for time averaging +orire-fc = 0 +orire-tau = 0 +orire-fitgrp = +; Output frequency for trace(SD) and S to energy file +nstorireout = 20 + +; Free energy variables +free-energy = yes +couple-moltype = +couple-lambda0 = vdw-q +couple-lambda1 = vdw-q +couple-intramol = no +init_lambda = 0 +delta-lambda = 0.05 +nstdhdl = 100 +fep-lambdas = +mass-lambdas = +coul-lambdas = +vdw-lambdas = +bonded-lambdas = +restraint-lambdas = +temperature-lambdas = +calc-lambda-neighbors = 0 +init-lambda-weights = +dhdl-print-energy = no +sc_alpha = 0.6 +sc_power = 1 +sc-r-power = 6 +sc_sigma = 0.28 +sc-coul = no +separate-dhdl-file = yes +dhdl-derivatives = yes +dh_hist_size = 0 +dh_hist_spacing = 0.1 + +; Non-equilibrium MD stuff +acc-grps = +accelerate = +freezegrps = +freezedim = +cos-acceleration = 0 +deform = + +; simulated tempering variables +simulated-tempering = no +simulated-tempering-scaling = geometric +sim-temp-low = 300 +sim-temp-high = 300 + +; Electric fields +; Format is number of terms (int) and for all terms an amplitude (real) +; and a phase angle (real) +E-x = +E-xt = +E-y = +E-yt = +E-z = +E-zt = + +; AdResS parameters +adress = no + +; User defined thingies +user1-grps = +user2-grps = +userint1 = 0 +userint2 = 0 +userint3 = 0 +userint4 = 0 +userreal1 = 0 +userreal2 = 0 +userreal3 = 0 +userreal4 = 0 diff --git a/tests/data/parsers/gromacs/fe_test/grompp.out b/tests/data/parsers/gromacs/fe_test/grompp.out new file mode 100644 index 0000000000000000000000000000000000000000..92943dc3150fb2293b4e588449e65e129652d7a0 --- /dev/null +++ b/tests/data/parsers/gromacs/fe_test/grompp.out @@ -0,0 +1,8 @@ +Analysing residue names: +There are: 1 Protein residues +There are: 500 Water residues +Analysing Protein... +Largest charge group radii for Van der Waals: 0.180, 0.165 nm +Largest charge group radii for Coulomb: 0.180, 0.174 nm +Using a fourier grid of 20x20x20, spacing 0.123 0.123 0.123 +This run will generate roughly 0 Mb of data diff --git a/tests/data/parsers/gromacs/fe_test/mdout.mdp b/tests/data/parsers/gromacs/fe_test/mdout.mdp new file mode 100644 index 0000000000000000000000000000000000000000..226ca3dd393505152b26350b7b5840b9813570de --- /dev/null +++ b/tests/data/parsers/gromacs/fe_test/mdout.mdp @@ -0,0 +1,355 @@ +; +; File 'mdout.mdp' was generated +; By user: bonat (501) +; On host: iMacBerk.local +; At date: Tue Jul 25 19:07:30 2017 + +; + +; VARIOUS PREPROCESSING OPTIONS +; Preprocessor information: use cpp syntax. +; e.g.: -I/home/joe/doe -I/home/mary/roe +include = +; e.g.: -DPOSRES -DFLEXIBLE (note these variable names are case sensitive) +define = + +; RUN CONTROL PARAMETERS +integrator = md +; Start time and timestep in ps +tinit = 0.0 +dt = 0.0005 +nsteps = 20 +; For exact run continuation or redoing part of a run +init_step = 0 +; Part index is updated automatically on checkpointing (keeps files separate) +simulation-part = 1 +; mode for center of mass motion removal +comm-mode = Linear +; number of steps for center of mass motion removal +nstcomm = 1 +; group(s) for center of mass motion removal +comm-grps = + +; LANGEVIN DYNAMICS OPTIONS +; Friction coefficient (amu/ps) and random seed +bd-fric = 0 +ld_seed = 975196 + +; ENERGY MINIMIZATION OPTIONS +; Force tolerance and initial step-size +emtol = 10 +emstep = 0.01 +; Max number of iterations in relax-shells +niter = 20 +; Step size (ps^2) for minimization of flexible constraints +fcstep = 0 +; Frequency of steepest descents steps when doing CG +nstcgsteep = 200 +nbfgscorr = 10 + +; TEST PARTICLE INSERTION OPTIONS +rtpi = 0.05 + +; OUTPUT CONTROL OPTIONS +; Output frequency for coords (x), velocities (v) and forces (f) +nstxout = 20 +nstvout = 20 +nstfout = 20 +; Output frequency for energies to log file and energy file +nstlog = 4 +nstcalcenergy = 5 +nstenergy = 5 +; Output frequency and precision for .xtc file +nstxout-compressed = 0 +compressed-x-precision = 200 +; This selects the subset of atoms for the compressed +; trajectory file. You can select multiple groups. By +; default, all atoms will be written. +compressed-x-grps = +; Selection of energy groups +energygrps = protein + +; NEIGHBORSEARCHING PARAMETERS +; cut-off scheme (Verlet: particle based cut-offs, group: using charge groups) +cutoff-scheme = Group +; nblist update frequency +nstlist = 5 +; ns algorithm (simple or grid) +ns_type = grid +; Periodic boundary conditions: xyz, no, xy +pbc = xyz +periodic-molecules = no +; Allowed energy error due to the Verlet buffer in kJ/mol/ps per atom, +; a value of -1 means: use rlist +verlet-buffer-tolerance = 0.005 +; nblist cut-off +rlist = 0.9 +; long-range cut-off for switched potentials +rlistlong = -1 +nstcalclr = -1 + +; OPTIONS FOR ELECTROSTATICS AND VDW +; Method for doing electrostatics +coulomb_type = pme +coulomb-modifier = Potential-shift-Verlet +rcoulomb_switch = 0 +rcoulomb = 0.9 +; Relative dielectric constant for the medium and the reaction field +epsilon_r = 1.0 +epsilon_rf = 1 +; Method for doing Van der Waals +vdw_type = Cut-off +vdw-modifier = Potential-shift-Verlet +; cut-off lengths +rvdw_switch = 0 +rvdw = 1.2 +; Apply long range dispersion corrections for Energy and Pressure +dispcorr = enerpres +; Extension of the potential lookup tables beyond the cut-off +table-extension = 1 +; Separate tables between energy group pairs +energygrp-table = +; Spacing for the PME/PPPM FFT grid +fourierspacing = 0.12 +; FFT grid size, when a value is 0 fourierspacing will be used +fourier_nx = 20 +fourier_ny = 20 +fourier_nz = 20 +; EWALD/PME/PPPM parameters +pme_order = 4 +ewald_rtol = 1e-05 +ewald-rtol-lj = 0.001 +lj-pme-comb-rule = Geometric +ewald_geometry = 3d +epsilon_surface = 0 + +; IMPLICIT SOLVENT ALGORITHM +implicit_solvent = No + +; GENERALIZED BORN ELECTROSTATICS +; Algorithm for calculating Born radii +gb_algorithm = Still +; Frequency of calculating the Born radii inside rlist +nstgbradii = 1 +; Cutoff for Born radii calculation; the contribution from atoms +; between rlist and rgbradii is updated every nstlist steps +rgbradii = 2 +; Dielectric coefficient of the implicit solvent +gb-epsilon-solvent = 80 +; Salt concentration in M for Generalized Born models +gb_saltconc = 0 +; Scaling factors used in the OBC GB model. Default values are OBC(II) +gb-obc-alpha = 1 +gb-obc-beta = 0.8 +gb-obc-gamma = 4.85 +gb-dielectric-offset = 0.009 +sa-algorithm = Ace-approximation +; Surface tension (kJ/mol/nm^2) for the SA (nonpolar surface) part of GBSA +; The value -1 will set default value for Still/HCT/OBC GB-models. +sa-surface-tension = -1 + +; OPTIONS FOR WEAK COUPLING ALGORITHMS +; Temperature coupling +tcoupl = Berendsen +nsttcouple = -1 +nh-chain-length = 10 +print-nose-hoover-chain-variables = no +; Groups to couple separately +tc-grps = system +; Time constant (ps) and reference temperature (K) +tau_t = 0.5 +ref_t = 298 +; pressure coupling +Pcoupl = Berendsen +Pcoupltype = Isotropic +nstpcouple = -1 +; Time constant (ps), compressibility (1/bar) and reference P (bar) +tau_p = 1.0 +compressibility = 4.6e-5 +ref_p = 1 +; Scaling of reference coordinates, No, All or COM +refcoord-scaling = No + +; OPTIONS FOR QMMM calculations +QMMM = no +; Groups treated Quantum Mechanically +QMMM-grps = +; QM method +QMmethod = +; QMMM scheme +QMMMscheme = normal +; QM basisset +QMbasis = +; QM charge +QMcharge = +; QM multiplicity +QMmult = +; Surface Hopping +SH = +; CAS space options +CASorbitals = +CASelectrons = +SAon = +SAoff = +SAsteps = +; Scale factor for MM charges +MMChargeScaleFactor = 1 +; Optimization of QM subsystem +bOPT = +bTS = + +; SIMULATED ANNEALING +; Type of annealing for each temperature group (no/single/periodic) +annealing = +; Number of time points to use for specifying annealing in each group +annealing-npoints = +; List of times at the annealing points for each group +annealing-time = +; Temp. at each annealing point, for each group. +annealing-temp = + +; GENERATE VELOCITIES FOR STARTUP RUN +gen_vel = no +gen_temp = 298 +gen_seed = 171533 + +; OPTIONS FOR BONDS +constraints = none +; Type of constraint algorithm +constraint-algorithm = Lincs +; Do not constrain the start configuration +continuation = no +; Use successive overrelaxation to reduce the number of shake iterations +Shake-SOR = no +; Relative tolerance of shake +shake-tol = 1e-04 +; Highest order in the expansion of the constraint coupling matrix +lincs-order = 4 +; Number of iterations in the final step of LINCS. 1 is fine for +; normal simulations, but use 2 to conserve energy in NVE runs. +; For energy minimization with constraints it should be 4 to 8. +lincs-iter = 1 +; Lincs will write a warning to the stderr if in one step a bond +; rotates over more degrees than +lincs-warnangle = 30 +; Convert harmonic bonds to morse potentials +morse = no + +; ENERGY GROUP EXCLUSIONS +; Pairs of energy groups for which all non-bonded interactions are excluded +energygrp-excl = + +; WALLS +; Number of walls, type, atom types, densities and box-z scale factor for Ewald +nwall = 0 +wall-type = 9-3 +wall-r-linpot = -1 +wall-atomtype = +wall-density = +wall-ewald-zfac = 3 + +; COM PULLING +pull = no + +; ENFORCED ROTATION +; Enforced rotation: No or Yes +rotation = no + +; Group to display and/or manipulate in interactive MD session +IMD-group = + +; NMR refinement stuff +; Distance restraints type: No, Simple or Ensemble +disre = No +; Force weighting of pairs in one distance restraint: Conservative or Equal +disre-weighting = Conservative +; Use sqrt of the time averaged times the instantaneous violation +disre-mixed = no +disre-fc = 200 +disre-tau = 0 +; Output frequency for pair distances to energy file +nstdisreout = 20 +; Orientation restraints: No or Yes +orire = no +; Orientation restraints force constant and tau for time averaging +orire-fc = 0 +orire-tau = 0 +orire-fitgrp = +; Output frequency for trace(SD) and S to energy file +nstorireout = 20 + +; Free energy variables +free-energy = yes +couple-moltype = +couple-lambda0 = vdw-q +couple-lambda1 = vdw-q +couple-intramol = no +init_lambda = 0 +init-lambda-state = -1 +delta-lambda = 0.05 +nstdhdl = 100 +fep-lambdas = +mass-lambdas = +coul-lambdas = +vdw-lambdas = +bonded-lambdas = +restraint-lambdas = +temperature-lambdas = +calc-lambda-neighbors = 0 +init-lambda-weights = +dhdl-print-energy = no +sc_alpha = 0.6 +sc_power = 1 +sc-r-power = 6 +sc_sigma = 0.28 +sc-coul = no +separate-dhdl-file = yes +dhdl-derivatives = yes +dh_hist_size = 0 +dh_hist_spacing = 0.1 + +; Non-equilibrium MD stuff +acc-grps = +accelerate = +freezegrps = +freezedim = +cos-acceleration = 0 +deform = + +; simulated tempering variables +simulated-tempering = no +simulated-tempering-scaling = geometric +sim-temp-low = 300 +sim-temp-high = 300 + +; Electric fields +; Format is number of terms (int) and for all terms an amplitude (real) +; and a phase angle (real) +E-x = +; Time dependent (pulsed) electric field. Format is omega, time for pulse +; peak, and sigma (width) for pulse. Sigma = 0 removes pulse, leaving +; the field to be a cosine function. +E-xt = +E-y = +E-yt = +E-z = +E-zt = + +; Ion/water position swapping for computational electrophysiology setups +; Swap positions along direction: no, X, Y, Z +swapcoords = no + +; AdResS parameters +adress = no + +; User defined thingies +user1-grps = +user2-grps = +userint1 = 0 +userint2 = 0 +userint3 = 0 +userint4 = 0 +userreal1 = 0 +userreal2 = 0 +userreal3 = 0 +userreal4 = 0 diff --git a/tests/data/parsers/gromacs/fe_test/mdrun.out b/tests/data/parsers/gromacs/fe_test/mdrun.out new file mode 100644 index 0000000000000000000000000000000000000000..6e51ba2d4840bd2cb32f8effb7d665dc86a371c5 --- /dev/null +++ b/tests/data/parsers/gromacs/fe_test/mdrun.out @@ -0,0 +1,70 @@ + :-) GROMACS - gmx mdrun, VERSION 5.1.4 (-: + + GROMACS is written by: + Emile Apol Rossen Apostolov Herman J.C. Berendsen Par Bjelkmar + Aldert van Buuren Rudi van Drunen Anton Feenstra Sebastian Fritsch + Gerrit Groenhof Christoph Junghans Anca Hamuraru Vincent Hindriksen + Dimitrios Karkoulis Peter Kasson Jiri Kraus Carsten Kutzner + Per Larsson Justin A. Lemkul Magnus Lundborg Pieter Meulenhoff + Erik Marklund Teemu Murtola Szilard Pall Sander Pronk + Roland Schulz Alexey Shvetsov Michael Shirts Alfons Sijbers + Peter Tieleman Teemu Virolainen Christian Wennberg Maarten Wolf + and the project leaders: + Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel + +Copyright (c) 1991-2000, University of Groningen, The Netherlands. +Copyright (c) 2001-2015, The GROMACS development team at +Uppsala University, Stockholm University and +the Royal Institute of Technology, Sweden. +check out http://www.gromacs.org for more information. + +GROMACS is free software; you can redistribute it and/or modify it +under the terms of the GNU Lesser General Public License +as published by the Free Software Foundation; either version 2.1 +of the License, or (at your option) any later version. + +GROMACS: gmx mdrun, VERSION 5.1.4 +Executable: /Users/bonat/GROMACS/BUILD/bin/gmx_mpi +Data prefix: /Users/bonat/GROMACS/BUILD +Command line: + gmx_mpi mdrun -notunepme + + +Running on 1 node with total 4 logical cores +Hardware detected on host iMacBerk.local (the node of MPI rank 0): + CPU info: + Vendor: GenuineIntel + Brand: Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz + SIMD instructions most likely to fit this hardware: AVX2_256 + SIMD instructions selected at GROMACS compile time: AVX2_256 + +Reading file topol.tpr, VERSION 5.1.4 (single precision) +Using 2 MPI processes + + +NOTE: This file uses the deprecated 'group' cutoff_scheme. This will be +removed in a future release when 'verlet' supports all interaction forms. + +starting mdrun 'tryptophane in water' +20 steps, 0.0 ps. + +NOTE: the minimum cell size is smaller than 1.05 times the cell size limit, will not turn on dynamic load balancing + + +Writing final coordinates. + + Average load imbalance: 23.5 % + Part of the total run time spent waiting due to load imbalance: 3.6 % + + +NOTE: 8 % of the run time was spent communicating energies, + you might want to use the -gcom option of mdrun + + + Core t (s) Wall t (s) (%) + Time: 0.093 0.047 200.0 + (ns/day) (hour/ns) +Performance: 19.428 1.235 + +Thanx for Using GROMACS - Have a Nice Day + diff --git a/tests/data/parsers/gromacs/fe_test/reference_d.edr b/tests/data/parsers/gromacs/fe_test/reference_d.edr new file mode 100644 index 0000000000000000000000000000000000000000..00ab2e53782e7269299098c49efad26417172840 Binary files /dev/null and b/tests/data/parsers/gromacs/fe_test/reference_d.edr differ diff --git a/tests/data/parsers/gromacs/fe_test/reference_d.tpr b/tests/data/parsers/gromacs/fe_test/reference_d.tpr new file mode 100644 index 0000000000000000000000000000000000000000..ee0071f4757dfb5b0bb3ce197014197fe402b657 Binary files /dev/null and b/tests/data/parsers/gromacs/fe_test/reference_d.tpr differ diff --git a/tests/data/parsers/gromacs/fe_test/reference_d.trr b/tests/data/parsers/gromacs/fe_test/reference_d.trr new file mode 100644 index 0000000000000000000000000000000000000000..154ee8673dff6f3bd8da2da89560f48c4851ee12 Binary files /dev/null and b/tests/data/parsers/gromacs/fe_test/reference_d.trr differ diff --git a/tests/data/parsers/gromacs/fe_test/reference_d.warn b/tests/data/parsers/gromacs/fe_test/reference_d.warn new file mode 100644 index 0000000000000000000000000000000000000000..4632bf9e1e291422335da8d41bbb2480d7943c6b --- /dev/null +++ b/tests/data/parsers/gromacs/fe_test/reference_d.warn @@ -0,0 +1,11 @@ +WARNING 1 [file ./grompp.mdp, line 343]: + You are using soft-core interactions while the Van der Waals interactions + are not decoupled (note that the sc-coul option is only active when using + lambda states). Although this will not lead to errors, you will need much + more sampling than without soft-core interactions. Consider using + sc-alpha=0. + +WARNING 2 [file topol.top, line 48]: + Some parameters for bonded interaction involving perturbed atoms are + specified explicitly in state A, but not B - copying A to B + diff --git a/tests/data/parsers/gromacs/fe_test/reference_s.edr b/tests/data/parsers/gromacs/fe_test/reference_s.edr new file mode 100644 index 0000000000000000000000000000000000000000..3fc2904654cd28af416b27365c8f919bb7557d03 Binary files /dev/null and b/tests/data/parsers/gromacs/fe_test/reference_s.edr differ diff --git a/tests/data/parsers/gromacs/fe_test/reference_s.tpr b/tests/data/parsers/gromacs/fe_test/reference_s.tpr new file mode 100644 index 0000000000000000000000000000000000000000..6c214763b44dd4ec3dccc9067fed319a246d25d6 Binary files /dev/null and b/tests/data/parsers/gromacs/fe_test/reference_s.tpr differ diff --git a/tests/data/parsers/gromacs/fe_test/reference_s.trr b/tests/data/parsers/gromacs/fe_test/reference_s.trr new file mode 100644 index 0000000000000000000000000000000000000000..a28461012db90db92dee93bb2bd23a9a0d5d063c Binary files /dev/null and b/tests/data/parsers/gromacs/fe_test/reference_s.trr differ diff --git a/tests/data/parsers/gromacs/fe_test/reference_s.warn b/tests/data/parsers/gromacs/fe_test/reference_s.warn new file mode 100644 index 0000000000000000000000000000000000000000..4632bf9e1e291422335da8d41bbb2480d7943c6b --- /dev/null +++ b/tests/data/parsers/gromacs/fe_test/reference_s.warn @@ -0,0 +1,11 @@ +WARNING 1 [file ./grompp.mdp, line 343]: + You are using soft-core interactions while the Van der Waals interactions + are not decoupled (note that the sc-coul option is only active when using + lambda states). Although this will not lead to errors, you will need much + more sampling than without soft-core interactions. Consider using + sc-alpha=0. + +WARNING 2 [file topol.top, line 48]: + Some parameters for bonded interaction involving perturbed atoms are + specified explicitly in state A, but not B - copying A to B + diff --git a/tests/data/parsers/gromacs/fe_test/state.cpt b/tests/data/parsers/gromacs/fe_test/state.cpt new file mode 100644 index 0000000000000000000000000000000000000000..1b633ae2479afa0ff5bc39d3c377e8f20f0cf415 Binary files /dev/null and b/tests/data/parsers/gromacs/fe_test/state.cpt differ diff --git a/tests/data/parsers/gromacs/fe_test/state_prev.cpt b/tests/data/parsers/gromacs/fe_test/state_prev.cpt new file mode 100644 index 0000000000000000000000000000000000000000..4df058b15ee4fd6245a52d207dc26e9fd7f6e174 Binary files /dev/null and b/tests/data/parsers/gromacs/fe_test/state_prev.cpt differ diff --git a/tests/data/parsers/gromacs/fe_test/topol.top b/tests/data/parsers/gromacs/fe_test/topol.top new file mode 100644 index 0000000000000000000000000000000000000000..7036d925e71b23db62c00e26bd56ca008e5856b3 --- /dev/null +++ b/tests/data/parsers/gromacs/fe_test/topol.top @@ -0,0 +1,145 @@ +; +; File 'res.top' was generated +; By user: hessb (2102) +; On host: pckr59 +; At date: Wed Sep 14 17:33:28 2005 +; +; This is your topology file +; tryptophane in water +; +; Include forcefield parameters +#include "gromos53a6.ff/forcefield.itp" + +[ bondtypes ] + DUM DUM 2 0.0 0.0 + +[ dihedraltypes ] + CH3 C 2 gi_1 + DUM DUM 2 0.0 0.0 + +[ moleculetype ] +; Name nrexcl +Protein 3 + +[ atoms ] +; nr type resnr residue atom cgnr charge mass typeB chargeB massB + 1 CH3 1 TRP CB 1 0 15.035 DUM 0 15.035 + 2 C 1 TRP CG 2 -0.21 12.011 DUM 0 12.011 + 3 C 1 TRP CD1 2 -0.14 12.011 DUM 0 12.011 + 4 HC 1 TRP HD1 2 0.14 1.008 DUM 0 1.008 + 5 C 1 TRP CD2 2 0 12.011 DUM 0 12.011 + 6 NR 1 TRP NE1 2 -0.1 14.0067 DUM 0 14.0067 + 7 H 1 TRP HE1 2 0.31 1.008 DUM 0 1.008 + 8 C 1 TRP CE2 2 0 12.011 DUM 0 12.011 + 9 C 1 TRP CE3 3 -0.14 12.011 DUM 0 12.011 + 10 HC 1 TRP HE3 3 0.14 1.008 DUM 0 1.008 + 11 C 1 TRP CZ2 4 -0.14 12.011 DUM 0 12.011 + 12 HC 1 TRP HZ2 4 0.14 1.008 DUM 0 1.008 + 13 C 1 TRP CZ3 5 -0.14 12.011 DUM 0 12.011 + 14 HC 1 TRP HZ3 5 0.14 1.008 DUM 0 1.008 + 15 C 1 TRP CH2 6 -0.14 12.011 DUM 0 12.011 + 16 HC 1 TRP HH2 6 0.14 1.008 DUM 0 1.008 + +[ bonds ] +; ai aj funct c0 c1 c2 c3 +#ifdef GENERATE_ERROR + 1 2 2 ;gb_27 ;gb_27 +#else + 1 2 2 gb_27 ;gb_27 +#endif + 2 3 2 gb_10 ;gb_10 + 2 5 2 gb_16 gb_16 + 3 4 2 gb_3 gb_3 + 3 6 2 gb_10 gb_10 + 5 8 2 gb_16 gb_16 + 5 9 2 gb_16 gb_16 + 6 7 2 gb_2 gb_2 + 6 8 2 gb_10 gb_10 + 8 11 2 gb_16 gb_16 + 9 10 2 gb_3 gb_3 + 9 13 2 gb_16 gb_16 + 11 12 2 gb_3 gb_3 + 11 15 2 gb_16 gb_16 + 13 14 2 gb_3 gb_3 + 13 15 2 gb_16 gb_16 + 15 16 2 gb_3 gb_3 + +[ angles ] +; ai aj ak funct c0 c1 c2 c3 + 1 2 3 2 ga_37 ga_37 + 1 2 5 2 ga_37 ga_37 + 3 2 5 2 ga_7 ga_7 + 2 3 4 2 ga_36 ga_36 + 2 3 6 2 ga_7 ga_7 + 4 3 6 2 ga_36 ga_36 + 2 5 8 2 ga_7 ga_7 + 2 5 9 2 ga_39 ga_39 + 8 5 9 2 ga_27 ga_27 + 3 6 7 2 ga_36 ga_36 + 3 6 8 2 ga_7 ga_7 + 7 6 8 2 ga_36 ga_36 + 5 8 6 2 ga_7 ga_7 + 5 8 11 2 ga_27 ga_27 + 6 8 11 2 ga_39 ga_39 + 5 9 10 2 ga_25 ga_25 + 5 9 13 2 ga_27 ga_27 + 10 9 13 2 ga_25 ga_25 + 8 11 12 2 ga_25 ga_25 + 8 11 15 2 ga_27 ga_27 + 12 11 15 2 ga_25 ga_25 + 9 13 14 2 ga_25 ga_25 + 9 13 15 2 ga_27 ga_27 + 14 13 15 2 ga_25 ga_25 + 11 15 13 2 ga_27 ga_27 + 11 15 16 2 ga_25 ga_25 + 13 15 16 2 ga_25 ga_25 + +[ dihedrals ] +; ai aj ak al funct c0 c1 c2 c3 + 1 5 3 2 2 gi_1 0 0 + 2 9 8 5 2 gi_1 gi_1 + 2 5 8 6 2 gi_1 gi_1 + 2 3 6 8 2 gi_1 gi_1 + 3 2 6 4 2 gi_1 gi_1 + 3 6 8 5 2 gi_1 gi_1 + 3 2 5 8 2 gi_1 gi_1 + 5 2 3 6 2 gi_1 gi_1 + 5 8 11 15 2 gi_1 gi_1 + 5 9 13 15 2 gi_1 gi_1 + 6 3 8 7 2 gi_1 gi_1 + 6 11 5 8 2 gi_1 gi_1 + 8 5 9 13 2 gi_1 gi_1 + 8 11 15 13 2 gi_1 gi_1 + 9 5 13 10 2 gi_1 gi_1 + 9 5 8 11 2 gi_1 gi_1 + 9 13 15 11 2 gi_1 gi_1 + 11 8 15 12 2 gi_1 gi_1 + 13 9 15 14 2 gi_1 gi_1 + 15 11 13 16 2 gi_1 gi_1 + +; Include Position restraint file +#ifdef POSRES +#include "posre.itp" +#endif + +; Include water topology +#include "gromos53a6.ff/spce.itp" + +#ifdef POSRES_WATER +; Position restraint for each water oxygen +[ position_restraints ] +; i funct fcx fcy fcz + 1 1 1000 1000 1000 +#endif + +; Include generic topology for ions +#include "gromos53a6.ff/ions.itp" + +[ system ] +; Name +tryptophane in water + +[ molecules ] +; Compound #mols +Protein 1 +SOL 500 diff --git a/tests/data/parsers/gromacs/fe_test/topol.tpr b/tests/data/parsers/gromacs/fe_test/topol.tpr new file mode 100644 index 0000000000000000000000000000000000000000..0906204293cb7e7bb02ec7ec6c497d105ed613b3 Binary files /dev/null and b/tests/data/parsers/gromacs/fe_test/topol.tpr differ diff --git a/tests/data/parsers/gromacs/fe_test/traj.trr b/tests/data/parsers/gromacs/fe_test/traj.trr new file mode 100644 index 0000000000000000000000000000000000000000..901fd18574c25a6bdac2bbbf130a2981950c36b5 Binary files /dev/null and b/tests/data/parsers/gromacs/fe_test/traj.trr differ diff --git a/tests/data/parsers/gromacs/protein_fsfg/.nvt.trr_offsets.npz b/tests/data/parsers/gromacs/protein_fsfg/.nvt.trr_offsets.npz deleted file mode 100644 index 66bc95d4b609c7163f4d8e93e115c6190cad13fd..0000000000000000000000000000000000000000 Binary files a/tests/data/parsers/gromacs/protein_fsfg/.nvt.trr_offsets.npz and /dev/null differ diff --git a/tests/data/parsers/gromacs/protein_small_nowater/md.log b/tests/data/parsers/gromacs/protein_small_nowater/md.log new file mode 100644 index 0000000000000000000000000000000000000000..300c0c967127ba87e0782f4023b4f6710a0c658a --- /dev/null +++ b/tests/data/parsers/gromacs/protein_small_nowater/md.log @@ -0,0 +1,555 @@ + :-) GROMACS - gmx mdrun, 2019.1 (-: + + GROMACS is written by: + Emile Apol Rossen Apostolov Paul Bauer Herman J.C. Berendsen + Par Bjelkmar Christian Blau Viacheslav Bolnykh Kevin Boyd + Aldert van Buuren Rudi van Drunen Anton Feenstra Alan Gray + Gerrit Groenhof Anca Hamuraru Vincent Hindriksen M. Eric Irrgang + Aleksei Iupinov Christoph Junghans Joe Jordan Dimitrios Karkoulis + Peter Kasson Jiri Kraus Carsten Kutzner Per Larsson + Justin A. Lemkul Viveca Lindahl Magnus Lundborg Erik Marklund + Pascal Merz Pieter Meulenhoff Teemu Murtola Szilard Pall + Sander Pronk Roland Schulz Michael Shirts Alexey Shvetsov + Alfons Sijbers Peter Tieleman Jon Vincent Teemu Virolainen + Christian Wennberg Maarten Wolf + and the project leaders: + Mark Abraham, Berk Hess, Erik Lindahl, and David van der Spoel + +Copyright (c) 1991-2000, University of Groningen, The Netherlands. +Copyright (c) 2001-2018, The GROMACS development team at +Uppsala University, Stockholm University and +the Royal Institute of Technology, Sweden. +check out http://www.gromacs.org for more information. + +GROMACS is free software; you can redistribute it and/or modify it +under the terms of the GNU Lesser General Public License +as published by the Free Software Foundation; either version 2.1 +of the License, or (at your option) any later version. + +GROMACS: gmx mdrun, version 2019.1 +Executable: /usr/bin/gmx +Data prefix: /usr +Working dir: /data/bee14/rudzinski/cluster_tmp_ext/FAIRmat/GRO_test/protein_small/no_water +Process ID: 7800 +Command line: + gmx mdrun -s protein_small_nowater.tpr -o protein_small_nowater.trr + +GROMACS version: 2019.1 +Precision: single +Memory model: 64 bit +MPI library: thread_mpi +OpenMP support: enabled (GMX_OPENMP_MAX_THREADS = 64) +GPU support: disabled +SIMD instructions: SSE2 +FFT library: fftw-3.3.8-sse2-avx +RDTSCP usage: disabled +TNG support: enabled +Hwloc support: hwloc-1.11.12 +Tracing support: disabled +C compiler: /usr/bin/cc GNU 8.2.0 +C compiler flags: -msse2 -g -O2 -fdebug-prefix-map=/build/gromacs-HPcNkA/gromacs-2019.1=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -O3 -DNDEBUG -funroll-all-loops -fexcess-precision=fast +C++ compiler: /usr/bin/c++ GNU 8.2.0 +C++ compiler flags: -msse2 -g -O2 -fdebug-prefix-map=/build/gromacs-HPcNkA/gromacs-2019.1=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -std=c++11 -O3 -DNDEBUG -funroll-all-loops -fexcess-precision=fast + + +Running on 1 node with total 6 cores, 6 logical cores +Hardware detected: + CPU info: + Vendor: Intel + Brand: Intel(R) Core(TM) i5-8500 CPU @ 3.00GHz + Family: 6 Model: 158 Stepping: 10 + Features: aes apic avx avx2 clfsh cmov cx8 cx16 f16c fma hle htt intel lahf mmx msr nonstop_tsc pcid pclmuldq pdcm pdpe1gb popcnt pse rdrnd rdtscp rtm sse2 sse3 sse4.1 sse4.2 ssse3 tdt x2apic + Hardware topology: Full, with devices + Sockets, cores, and logical processors: + Socket 0: [ 0] [ 1] [ 2] [ 3] [ 4] [ 5] + Numa nodes: + Node 0 (33601642496 bytes mem): 0 1 2 3 4 5 + Latency: + 0 + 0 1.00 + Caches: + L1: 32768 bytes, linesize 64 bytes, assoc. 8, shared 1 ways + L2: 262144 bytes, linesize 64 bytes, assoc. 4, shared 1 ways + L3: 9437184 bytes, linesize 64 bytes, assoc. 12, shared 6 ways + PCI devices: + 0000:00:02.0 Id: 8086:3e92 Class: 0x0300 Numa: 0 + 0000:00:17.0 Id: 8086:a352 Class: 0x0106 Numa: 0 + 0000:01:00.0 Id: 144d:a804 Class: 0x0108 Numa: 0 + 0000:02:00.0 Id: 1d6a:07b1 Class: 0x0200 Numa: 0 + 0000:00:1f.6 Id: 8086:15bb Class: 0x0200 Numa: 0 + +Highest SIMD level requested by all nodes in run: AVX2_256 +SIMD instructions selected at compile time: SSE2 +This program was compiled for different hardware than you are running on, +which could influence performance. +The current CPU can measure timings more accurately than the code in +gmx mdrun was configured to use. This might affect your simulation +speed as accurate timings are needed for load-balancing. +Please consider rebuilding gmx mdrun with the GMX_USE_RDTSCP=ON CMake option. + +++++ PLEASE READ AND CITE THE FOLLOWING REFERENCE ++++ +M. J. Abraham, T. Murtola, R. Schulz, S. Páll, J. C. Smith, B. Hess, E. +Lindahl +GROMACS: High performance molecular simulations through multi-level +parallelism from laptops to supercomputers +SoftwareX 1 (2015) pp. 19-25 +-------- -------- --- Thank You --- -------- -------- + + +++++ PLEASE READ AND CITE THE FOLLOWING REFERENCE ++++ +S. Páll, M. J. Abraham, C. Kutzner, B. Hess, E. Lindahl +Tackling Exascale Software Challenges in Molecular Dynamics Simulations with +GROMACS +In S. Markidis & E. Laure (Eds.), Solving Software Challenges for Exascale 8759 (2015) pp. 3-27 +-------- -------- --- Thank You --- -------- -------- + + +++++ PLEASE READ AND CITE THE FOLLOWING REFERENCE ++++ +S. Pronk, S. Páll, R. Schulz, P. Larsson, P. Bjelkmar, R. Apostolov, M. R. +Shirts, J. C. Smith, P. M. Kasson, D. van der Spoel, B. Hess, and E. Lindahl +GROMACS 4.5: a high-throughput and highly parallel open source molecular +simulation toolkit +Bioinformatics 29 (2013) pp. 845-54 +-------- -------- --- Thank You --- -------- -------- + + +++++ PLEASE READ AND CITE THE FOLLOWING REFERENCE ++++ +B. Hess and C. Kutzner and D. van der Spoel and E. Lindahl +GROMACS 4: Algorithms for highly efficient, load-balanced, and scalable +molecular simulation +J. Chem. Theory Comput. 4 (2008) pp. 435-447 +-------- -------- --- Thank You --- -------- -------- + + +++++ PLEASE READ AND CITE THE FOLLOWING REFERENCE ++++ +D. van der Spoel, E. Lindahl, B. Hess, G. Groenhof, A. E. Mark and H. J. C. +Berendsen +GROMACS: Fast, Flexible and Free +J. Comp. Chem. 26 (2005) pp. 1701-1719 +-------- -------- --- Thank You --- -------- -------- + + +++++ PLEASE READ AND CITE THE FOLLOWING REFERENCE ++++ +E. Lindahl and B. Hess and D. van der Spoel +GROMACS 3.0: A package for molecular simulation and trajectory analysis +J. Mol. Mod. 7 (2001) pp. 306-317 +-------- -------- --- Thank You --- -------- -------- + + +++++ PLEASE READ AND CITE THE FOLLOWING REFERENCE ++++ +H. J. C. Berendsen, D. van der Spoel and R. van Drunen +GROMACS: A message-passing parallel molecular dynamics implementation +Comp. Phys. Comm. 91 (1995) pp. 43-56 +-------- -------- --- Thank You --- -------- -------- + + +++++ PLEASE CITE THE DOI FOR THIS VERSION OF GROMACS ++++ +https://doi.org/10.5281/zenodo.2564764 +-------- -------- --- Thank You --- -------- -------- + +Input Parameters: + integrator = md + tinit = 0 + dt = 0.002 + nsteps = 500 + init-step = 0 + simulation-part = 1 + comm-mode = Linear + nstcomm = 100 + bd-fric = 0 + ld-seed = 1572129507 + emtol = 10 + emstep = 0.01 + niter = 20 + fcstep = 0 + nstcgsteep = 1000 + nbfgscorr = 10 + rtpi = 0.05 + nstxout = 100 + nstvout = 100 + nstfout = 100 + nstlog = 100 + nstcalcenergy = 100 + nstenergy = 100 + nstxout-compressed = 0 + compressed-x-precision = 1000 + cutoff-scheme = Verlet + nstlist = 1 + ns-type = Grid + pbc = xyz + periodic-molecules = false + verlet-buffer-tolerance = 0.005 + rlist = 1.2 + coulombtype = PME + coulomb-modifier = Potential-shift + rcoulomb-switch = 0 + rcoulomb = 1.2 + epsilon-r = 1 + epsilon-rf = inf + vdw-type = Cut-off + vdw-modifier = Potential-shift + rvdw-switch = 0 + rvdw = 1.2 + DispCorr = EnerPres + table-extension = 1 + fourierspacing = 0.08 + fourier-nx = 48 + fourier-ny = 48 + fourier-nz = 48 + pme-order = 6 + ewald-rtol = 1e-06 + ewald-rtol-lj = 0.001 + lj-pme-comb-rule = Geometric + ewald-geometry = 0 + epsilon-surface = 0 + tcoupl = V-rescale + nsttcouple = 1 + nh-chain-length = 0 + print-nose-hoover-chain-variables = false + pcoupl = No + pcoupltype = Isotropic + nstpcouple = -1 + tau-p = 2 + compressibility (3x3): + compressibility[ 0]={ 0.00000e+00, 0.00000e+00, 0.00000e+00} + compressibility[ 1]={ 0.00000e+00, 0.00000e+00, 0.00000e+00} + compressibility[ 2]={ 0.00000e+00, 0.00000e+00, 0.00000e+00} + ref-p (3x3): + ref-p[ 0]={ 0.00000e+00, 0.00000e+00, 0.00000e+00} + ref-p[ 1]={ 0.00000e+00, 0.00000e+00, 0.00000e+00} + ref-p[ 2]={ 0.00000e+00, 0.00000e+00, 0.00000e+00} + refcoord-scaling = No + posres-com (3): + posres-com[0]= 0.00000e+00 + posres-com[1]= 0.00000e+00 + posres-com[2]= 0.00000e+00 + posres-comB (3): + posres-comB[0]= 0.00000e+00 + posres-comB[1]= 0.00000e+00 + posres-comB[2]= 0.00000e+00 + QMMM = false + QMconstraints = 0 + QMMMscheme = 0 + MMChargeScaleFactor = 1 +qm-opts: + ngQM = 0 + constraint-algorithm = Lincs + continuation = false + Shake-SOR = false + shake-tol = 0.0001 + lincs-order = 4 + lincs-iter = 1 + lincs-warnangle = 30 + nwall = 0 + wall-type = 9-3 + wall-r-linpot = -1 + wall-atomtype[0] = -1 + wall-atomtype[1] = -1 + wall-density[0] = 0 + wall-density[1] = 0 + wall-ewald-zfac = 3 + pull = false + awh = false + rotation = false + interactiveMD = false + disre = No + disre-weighting = Conservative + disre-mixed = false + dr-fc = 1000 + dr-tau = 0 + nstdisreout = 100 + orire-fc = 0 + orire-tau = 0 + nstorireout = 100 + free-energy = no + cos-acceleration = 0 + deform (3x3): + deform[ 0]={ 0.00000e+00, 0.00000e+00, 0.00000e+00} + deform[ 1]={ 0.00000e+00, 0.00000e+00, 0.00000e+00} + deform[ 2]={ 0.00000e+00, 0.00000e+00, 0.00000e+00} + simulated-tempering = false + swapcoords = no + userint1 = 0 + userint2 = 0 + userint3 = 0 + userint4 = 0 + userreal1 = 0 + userreal2 = 0 + userreal3 = 0 + userreal4 = 0 + applied-forces: + electric-field: + x: + E0 = 0 + omega = 0 + t0 = 0 + sigma = 0 + y: + E0 = 0 + omega = 0 + t0 = 0 + sigma = 0 + z: + E0 = 0 + omega = 0 + t0 = 0 + sigma = 0 +grpopts: + nrdf: 286 + ref-t: 300 + tau-t: 0.1 +annealing: No +annealing-npoints: 0 + acc: 0 0 0 + nfreeze: N N N + energygrp-flags[ 0]: 0 + + +Using 1 MPI thread +Using 6 OpenMP threads + +Pinning threads with an auto-selected logical core stride of 1 +System total charge: 0.000 +Will do PME sum in reciprocal space for electrostatic interactions. + +++++ PLEASE READ AND CITE THE FOLLOWING REFERENCE ++++ +U. Essmann, L. Perera, M. L. Berkowitz, T. Darden, H. Lee and L. G. Pedersen +A smooth particle mesh Ewald method +J. Chem. Phys. 103 (1995) pp. 8577-8592 +-------- -------- --- Thank You --- -------- -------- + +Using a Gaussian width (1/beta) of 0.34693 nm for Ewald +Potential shift: LJ r^-12: -1.122e-01 r^-6: -3.349e-01, Ewald -8.333e-07 +Initialized non-bonded Ewald correction tables, spacing: 9.71e-04 size: 1237 + +Long Range LJ corr.: <C6> 8.9729e-04 +Generated table with 1100 data points for Ewald. +Tabscale = 500 points/nm +Generated table with 1100 data points for LJ6. +Tabscale = 500 points/nm +Generated table with 1100 data points for LJ12. +Tabscale = 500 points/nm +Generated table with 1100 data points for 1-4 COUL. +Tabscale = 500 points/nm +Generated table with 1100 data points for 1-4 LJ6. +Tabscale = 500 points/nm +Generated table with 1100 data points for 1-4 LJ12. +Tabscale = 500 points/nm + +Using SIMD 4x4 nonbonded short-range kernels + +Using a 4x4 pair-list setup: + updated every 1 steps, buffer 0.000 nm, rlist 1.200 nm +At tolerance 0.005 kJ/mol/ps per atom, equivalent classical 1x1 list would be: + updated every 1 steps, buffer 0.000 nm, rlist 1.200 nm + +Using Lorentz-Berthelot Lennard-Jones combination rule + +Removing pbc first time + +Initializing LINear Constraint Solver + +++++ PLEASE READ AND CITE THE FOLLOWING REFERENCE ++++ +B. Hess and H. Bekker and H. J. C. Berendsen and J. G. E. M. Fraaije +LINCS: A Linear Constraint Solver for molecular simulations +J. Comp. Chem. 18 (1997) pp. 1463-1472 +-------- -------- --- Thank You --- -------- -------- + +The number of constraints is 53 +Center of mass motion removal mode is Linear +We have the following groups for center of mass motion removal: + 0: rest + +++++ PLEASE READ AND CITE THE FOLLOWING REFERENCE ++++ +G. Bussi, D. Donadio and M. Parrinello +Canonical sampling through velocity rescaling +J. Chem. Phys. 126 (2007) pp. 014101 +-------- -------- --- Thank You --- -------- -------- + +There are: 114 Atoms + +Constraining the starting coordinates (step 0) + +Constraining the coordinates at t0-dt (step 0) +RMS relative constraint deviation after constraining: 4.77e-07 +Initial temperature: 5.42006e-08 K + +Started mdrun on rank 0 Tue May 16 11:18:57 2023 + + Step Time + 0 0.00000 + + Energies (kJ/mol) + Bond Angle Proper Dih. Improper Dih. LJ-14 + 1.21801e+01 5.02938e+01 2.61787e+02 4.23868e+00 1.32459e+02 + Coulomb-14 LJ (SR) Disper. corr. Coulomb (SR) Coul. recip. + 1.91224e+03 -1.56170e+02 -8.57799e-01 -2.28859e+03 6.82665e+01 + Potential Kinetic En. Total Energy Conserved En. Temperature + -4.15062e+00 2.09867e+00 -2.05195e+00 -8.93438e+00 1.76512e+00 + Pres. DC (bar) Pressure (bar) Constr. rmsd + -4.49684e-01 2.05410e+02 7.15209e-07 + + Step Time + 100 0.20000 + + Energies (kJ/mol) + Bond Angle Proper Dih. Improper Dih. LJ-14 + 4.18410e+01 1.23354e+02 3.04964e+02 8.50456e+00 1.23473e+02 + Coulomb-14 LJ (SR) Disper. corr. Coulomb (SR) Coul. recip. + 1.94664e+03 -1.42612e+02 -8.57799e-01 -2.37491e+03 5.60740e+01 + Potential Kinetic En. Total Energy Conserved En. Temperature + 8.64711e+01 2.55379e+02 3.41850e+02 -9.87625e+00 2.14790e+02 + Pres. DC (bar) Pressure (bar) Constr. rmsd + -4.49684e-01 -7.12195e+01 1.01265e-06 + + Step Time + 200 0.40000 + + Energies (kJ/mol) + Bond Angle Proper Dih. Improper Dih. LJ-14 + 5.68856e+01 1.46971e+02 3.35419e+02 9.65667e+00 1.35286e+02 + Coulomb-14 LJ (SR) Disper. corr. Coulomb (SR) Coul. recip. + 1.96185e+03 -1.40832e+02 -8.57799e-01 -2.39564e+03 4.47462e+01 + Potential Kinetic En. Total Energy Conserved En. Temperature + 1.53478e+02 3.71764e+02 5.25243e+02 -1.02906e+01 3.12678e+02 + Pres. DC (bar) Pressure (bar) Constr. rmsd + -4.49684e-01 -5.32981e+01 9.37655e-07 + + Step Time + 300 0.60000 + + Energies (kJ/mol) + Bond Angle Proper Dih. Improper Dih. LJ-14 + 4.37455e+01 1.59882e+02 3.26740e+02 1.57364e+01 1.32501e+02 + Coulomb-14 LJ (SR) Disper. corr. Coulomb (SR) Coul. recip. + 1.95903e+03 -1.25587e+02 -8.57799e-01 -2.40349e+03 4.23952e+01 + Potential Kinetic En. Total Energy Conserved En. Temperature + 1.50092e+02 3.83148e+02 5.33240e+02 -9.79419e+00 3.22253e+02 + Pres. DC (bar) Pressure (bar) Constr. rmsd + -4.49684e-01 2.67290e+02 1.49463e-06 + + Step Time + 400 0.80000 + + Energies (kJ/mol) + Bond Angle Proper Dih. Improper Dih. LJ-14 + 6.13774e+01 1.62513e+02 3.15811e+02 2.24041e+01 1.20317e+02 + Coulomb-14 LJ (SR) Disper. corr. Coulomb (SR) Coul. recip. + 1.93363e+03 -1.23649e+02 -8.57799e-01 -2.42024e+03 2.94336e+01 + Potential Kinetic En. Total Energy Conserved En. Temperature + 1.00739e+02 4.01817e+02 5.02556e+02 -1.25479e+01 3.37954e+02 + Pres. DC (bar) Pressure (bar) Constr. rmsd + -4.49684e-01 -1.70244e+02 1.13494e-06 + + Step Time + 500 1.00000 + +Writing checkpoint, step 500 at Tue May 16 11:18:57 2023 + + + Energies (kJ/mol) + Bond Angle Proper Dih. Improper Dih. LJ-14 + 6.13568e+01 1.57183e+02 3.42677e+02 1.35199e+01 1.20833e+02 + Coulomb-14 LJ (SR) Disper. corr. Coulomb (SR) Coul. recip. + 1.89232e+03 -1.32902e+02 -8.57799e-01 -2.36951e+03 3.43696e+01 + Potential Kinetic En. Total Energy Conserved En. Temperature + 1.18997e+02 3.20719e+02 4.39716e+02 -7.44028e+00 2.69746e+02 + Pres. DC (bar) Pressure (bar) Constr. rmsd + -4.49684e-01 3.72109e+01 1.13533e-06 + + <====== ############### ==> + <==== A V E R A G E S ====> + <== ############### ======> + + Statistics over 501 steps using 6 frames + + Energies (kJ/mol) + Bond Angle Proper Dih. Improper Dih. LJ-14 + 4.62311e+01 1.33366e+02 3.14566e+02 1.23434e+01 1.27478e+02 + Coulomb-14 LJ (SR) Disper. corr. Coulomb (SR) Coul. recip. + 1.93429e+03 -1.36959e+02 -8.57799e-01 -2.37540e+03 4.58809e+01 + Potential Kinetic En. Total Energy Conserved En. Temperature + 1.00938e+02 2.89154e+02 3.90092e+02 -9.81394e+00 2.43198e+02 + Pres. DC (bar) Pressure (bar) Constr. rmsd + -4.49684e-01 3.58582e+01 0.00000e+00 + + Total Virial (kJ/mol) + -6.52325e+01 -3.97984e+01 -1.16052e+02 + -3.97982e+01 1.25697e+02 2.31280e+01 + -1.16052e+02 2.31273e+01 1.24038e+02 + + Pressure (bar) + 1.48579e+02 3.56697e+01 1.21237e+02 + 3.56695e+01 -1.31675e+01 -2.77821e+01 + 1.21238e+02 -2.77814e+01 -2.78367e+01 + + + M E G A - F L O P S A C C O U N T I N G + + NB=Group-cutoff nonbonded kernels NxN=N-by-N cluster Verlet kernels + RF=Reaction-Field VdW=Van der Waals QSTab=quadratic-spline table + W3=SPC/TIP3p W4=TIP4p (single or pairs) + V&F=Potential and force V=Potential only F=Force only + + Computing: M-Number M-Flops % Flops +----------------------------------------------------------------------------- + Pair Search distance check 0.473268 4.259 0.0 + NxN QSTab Elec. + LJ [F] 3.469672 142.257 0.9 + NxN QSTab Elec. + LJ [V&F] 0.042040 2.480 0.0 + NxN QSTab Elec. [F] 0.152344 5.180 0.0 + NxN QSTab Elec. [V&F] 0.001976 0.081 0.0 + 1,4 nonbonded interactions 0.138276 12.445 0.1 + Calc Weights 0.171342 6.168 0.0 + Spread Q Bspline 12.336624 24.673 0.2 + Gather F Bspline 12.336624 74.020 0.5 + 3D-FFT 1856.661912 14853.295 97.4 + Solve PME 1.154304 73.875 0.5 + Shift-X 0.057114 0.343 0.0 + Bonds 0.031062 1.833 0.0 + Angles 0.098697 16.581 0.1 + Propers 0.141282 32.354 0.2 + Impropers 0.015030 3.126 0.0 + Virial 0.000954 0.017 0.0 + Stop-CM 0.000798 0.008 0.0 + Calc-Ekin 0.057228 1.545 0.0 + Lincs 0.026659 1.600 0.0 + Lincs-Mat 0.084504 0.338 0.0 + Constraint-V 0.053212 0.426 0.0 + Constraint-Vir 0.000318 0.008 0.0 +----------------------------------------------------------------------------- + Total 15256.911 100.0 +----------------------------------------------------------------------------- + + + R E A L C Y C L E A N D T I M E A C C O U N T I N G + +On 1 MPI rank, each using 6 OpenMP threads + + Computing: Num Num Call Wall time Giga-Cycles + Ranks Threads Count (s) total sum % +----------------------------------------------------------------------------- + Neighbor search 1 6 501 0.007 0.127 4.1 + Force 1 6 501 0.007 0.118 3.8 + PME mesh 1 6 501 0.135 2.436 78.2 + NB X/F buffer ops. 1 6 501 0.001 0.020 0.6 + Write traj. 1 6 6 0.012 0.210 6.8 + Update 1 6 501 0.004 0.079 2.5 + Constraints 1 6 503 0.003 0.046 1.5 + Rest 0.004 0.080 2.6 +----------------------------------------------------------------------------- + Total 0.173 3.116 100.0 +----------------------------------------------------------------------------- + Breakdown of PME mesh computation +----------------------------------------------------------------------------- + PME spread 1 6 501 0.024 0.425 13.6 + PME gather 1 6 501 0.013 0.231 7.4 + PME 3D-FFT 1 6 1002 0.079 1.418 45.5 + PME solve Elec 1 6 501 0.020 0.354 11.4 +----------------------------------------------------------------------------- + + Core t (s) Wall t (s) (%) + Time: 1.029 0.173 594.6 + (ns/day) (hour/ns) +Performance: 500.059 0.048 +Finished mdrun on rank 0 Tue May 16 11:18:57 2023 + diff --git a/tests/data/parsers/tabular/my_schema.archive.yaml b/tests/data/parsers/tabular/my_schema.archive.yaml index ec09a2ab757628c48d1c3b9216b8a16636e16244..d73f5ce865754ee0f3f160700931d1f6199370e9 100644 --- a/tests/data/parsers/tabular/my_schema.archive.yaml +++ b/tests/data/parsers/tabular/my_schema.archive.yaml @@ -9,10 +9,13 @@ definitions: default: Test.xlsx m_annotations: tabular_parser: - comment: '#' - new_entry: - - row_to_entries: - - root + parsing_options: + comment: '#' + mapping_options: + - mapping_mode: row + file_mode: multiple_new_entries + sections: + - '#root' my_quantity_1: type: str m_annotations: diff --git a/tests/data/schemas/nomadschemaexample/__init__.py b/tests/data/schemas/nomadschemaexample/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..23e80ae8195b8a2491b5a1545621c31034f90c94 --- /dev/null +++ b/tests/data/schemas/nomadschemaexample/__init__.py @@ -0,0 +1 @@ +from .schema import * diff --git a/tests/data/schemas/nomadschemaexample/nomad_plugin.yaml b/tests/data/schemas/nomadschemaexample/nomad_plugin.yaml new file mode 100644 index 0000000000000000000000000000000000000000..44965ba31bfaee6453cf6d1a86a9e6071fe083be --- /dev/null +++ b/tests/data/schemas/nomadschemaexample/nomad_plugin.yaml @@ -0,0 +1,5 @@ +plugin_type: schema +name: NOMAD's example schema plugin +description: | + This is a simple hello world schema. This is meant as a template. + Fork the github project to create your own schemas. \ No newline at end of file diff --git a/tests/data/schemas/nomadschemaexample/schema.py b/tests/data/schemas/nomadschemaexample/schema.py new file mode 100644 index 0000000000000000000000000000000000000000..2fa06b8dc118b8274c3b5cd47fd53eeeed561506 --- /dev/null +++ b/tests/data/schemas/nomadschemaexample/schema.py @@ -0,0 +1,73 @@ +from nomad.metainfo import Quantity, Package, Section, MEnum, Datetime, MSection, SubSection +from nomad.datamodel.data import EntryData +from nomad.datamodel.metainfo.annotations import ELNAnnotation, ELNComponentEnum +import numpy as np + +m_package = Package() + + +class MySection(MSection): + m_def = Section() + name = Quantity( + type=str, + a_eln=ELNAnnotation(component=ELNComponentEnum.StringEditQuantity), + description='For testing subsection quantity.' + ) + + +class MySchema(EntryData): + name = Quantity( + type=str, + a_eln=ELNAnnotation(component=ELNComponentEnum.StringEditQuantity), + description='For testing string field.' + ) + message = Quantity( + type=MEnum(['A', 'B']), + a_eln=ELNAnnotation(component=ELNComponentEnum.EnumEditQuantity), + description='For testing enum field.' + ) + empty = Quantity( + type=str, + a_eln=ELNAnnotation(component=ELNComponentEnum.StringEditQuantity), + description='For testing empty field.' + ) + valid = Quantity( + type=bool, + a_eln=ELNAnnotation(component=ELNComponentEnum.BoolEditQuantity), + description='For testing boolean field.' + ) + count = Quantity( + type=int, + a_eln=ELNAnnotation(component=ELNComponentEnum.NumberEditQuantity), + description='For testing integer field.' + ) + frequency = Quantity( + type=float, + unit='1/s', + a_eln=ELNAnnotation(component=ELNComponentEnum.NumberEditQuantity), + description='For testing floating point field.' + ) + timestamp = Quantity( + type=Datetime, + a_eln=ELNAnnotation(component=ELNComponentEnum.DateTimeEditQuantity), + description='For testing datetime field.' + ) + reference_section = Quantity( + type=MySection, + a_eln=ELNAnnotation(component=ELNComponentEnum.ReferenceEditQuantity), + description='For testing section reference.' + ) + non_scalar = Quantity( + type=np.float64, + shape=[3, 3], + description='For testing non-scalar field.' + ) + + child = SubSection(section_def=MySection, repeats=False) + child_repeating = SubSection(section_def=MySection, repeats=True) + + def normalize(self, archive, logger): + super(MySchema, self).normalize(archive, logger) + + +m_package.__init_metainfo__() diff --git a/tests/data/test_examples.py b/tests/data/test_examples.py index 7420ed14259e12999e3a9c83c663f638dcfe1355..6b1e22bd2531c28451fd8b9be5c3a2bf12404ba8 100644 --- a/tests/data/test_examples.py +++ b/tests/data/test_examples.py @@ -18,24 +18,9 @@ import pytest -from nomad import files -from nomad.processing import Upload, Entry, ProcessStatus +from nomad.processing import Entry, ProcessStatus from tests.normalizing.conftest import run_processing - - -def _create_upload(upload_id, user_id, file_paths=None): - if file_paths is None: - file_paths = [] - upload = Upload( - upload_id=upload_id, - main_author=user_id) - upload.save() - files.StagingUploadFiles(upload_id=upload.upload_id, create=True) - for file_path in file_paths: - upload.staging_upload_files.add_rawfiles(file_path) - upload.process_upload() - upload.block_until_complete() - return upload +from tests.test_utils import create_upload @pytest.mark.parametrize('mainfile, assert_xpaths', [ @@ -65,21 +50,83 @@ def test_sample_tabular(mainfile, assert_xpaths, raw_files, no_warn): assert archive.m_xpath(xpath) is not None -@pytest.mark.parametrize('test_files', [ +@pytest.mark.parametrize('test_files,number_of_entries', [ pytest.param([ 'examples/data/docs/tabular-parser-entry-mode.archive.yaml', 'examples/data/docs/tabular-parser-entry-mode.xlsx' - ], id='simple_entry_mode'), + ], 5, id='simple_entry_mode'), pytest.param([ 'examples/data/docs/tabular-parser-complex.archive.yaml', 'examples/data/docs/data_file_1.csv', 'examples/data/docs/data_file_2.csv' - ], id='complex_entry_mode') + ], 6, id='complex_entry_mode') ]) -def test_sample_entry_mode(test_files, mongo, test_user, raw_files, monkeypatch, proc_infra): - upload = _create_upload('test_upload_id', test_user.user_id, test_files) +def test_sample_entry_mode(mongo, test_user, raw_files, monkeypatch, proc_infra, test_files, number_of_entries): + upload = create_upload('test_upload_id', test_user.user_id, test_files) assert upload is not None - assert upload.processed_entries_count == 6 + assert upload.processed_entries_count == number_of_entries for entry in Entry.objects(upload_id='test_upload_id'): assert entry.process_status == ProcessStatus.SUCCESS + + +@pytest.mark.parametrize('test_files, status', [ + pytest.param([ + 'examples/data/docs/tabular-parser_1_column_current-entry_to-root.archive.yaml', + 'examples/data/docs/test.xlsx' + ], ProcessStatus.SUCCESS, id='test_1'), + pytest.param([ + 'examples/data/docs/tabular-parser_2_column_current-entry_to-path.archive.yaml', + 'examples/data/docs/test.xlsx' + ], ProcessStatus.SUCCESS, id='test_2'), + pytest.param([ + 'examples/data/docs/tabular-parser_3_row_current-entry_to-path.archive.yaml', + 'examples/data/docs/test.xlsx' + ], ProcessStatus.SUCCESS, id='test_3'), + pytest.param([ + 'examples/data/docs/tabular-parser_4_column_single-new-entry_to-path.archive.yaml', + 'examples/data/docs/test.xlsx' + ], ProcessStatus.SUCCESS, id='test_4'), + pytest.param([ + 'examples/data/docs/tabular-parser_5_row_single-new-entry_to-path.archive.yaml', + 'examples/data/docs/test.xlsx' + ], ProcessStatus.SUCCESS, id='test_5'), + pytest.param([ + 'examples/data/docs/tabular-parser_6_row_multiple-new-entries_to-root.archive.yaml', + 'examples/data/docs/test.xlsx' + ], ProcessStatus.SUCCESS, id='test_6'), + pytest.param([ + 'examples/data/docs/tabular-parser_7_row_multiple-new-entries_to-path.archive.yaml', + 'examples/data/docs/test.xlsx' + ], ProcessStatus.SUCCESS, id='test_7'), + pytest.param([ + 'examples/data/docs/tabular-parser_8_row_current-entry_to-path_subsubsection.archive.yaml', + 'examples/data/docs/test.xlsx' + ], ProcessStatus.SUCCESS, id='test_8'), + pytest.param([ + 'examples/data/docs/tabular-parser_np1_row_current-entry_to-root.archive.yaml', + 'examples/data/docs/test.xlsx' + ], ProcessStatus.SUCCESS, id='test_9'), + pytest.param([ + 'examples/data/docs/tabular-parser_np2_column_single-new-entry_to-root.archive.yaml', + 'examples/data/docs/test.xlsx' + ], ProcessStatus.SUCCESS, id='test_10'), + pytest.param([ + 'examples/data/docs/tabular-parser_np3_row_single-new-entry_to-root.archive.yaml', + 'examples/data/docs/test.xlsx' + ], ProcessStatus.SUCCESS, id='test_11'), + pytest.param([ + 'examples/data/docs/tabular-parser_np4_column_multiple-new-entries_to-root.archive.yaml', + 'examples/data/docs/test.xlsx' + ], ProcessStatus.SUCCESS, id='test_12'), + pytest.param([ + 'examples/data/docs/tabular-parser_np5_column_multiple-new-entries_to-path.archive.yaml', + 'examples/data/docs/test.xlsx' + ], ProcessStatus.SUCCESS, id='test_13'), +]) +def test_tabular_doc_examples(mongo, test_user, raw_files, monkeypatch, proc_infra, test_files, status): + upload = create_upload('test_upload_id', test_user.user_id, test_files) + assert upload is not None + + for entry in Entry.objects(upload_id='test_upload_id'): + assert entry.process_status == status diff --git a/tests/datamodel/metainfo/eln/test_system.py b/tests/datamodel/metainfo/eln/test_system.py index 4638c62145ed3a2706d33e1a71c6db6f10a7095e..6941acc78af75152fb9923cec58f98f01aa4afa4 100644 --- a/tests/datamodel/metainfo/eln/test_system.py +++ b/tests/datamodel/metainfo/eln/test_system.py @@ -22,8 +22,7 @@ from tests.normalizing.conftest import run_processing, run_normalize from nomad.datamodel.data import User -@pytest.mark.skip() -def test_substance(raw_files, no_warn): +def test_substance(raw_files): directory = 'tests/data/datamodel/metainfo/eln' mainfile = 'test_substance.archive.yaml' test_archive = run_processing(directory, mainfile) diff --git a/tests/datamodel/metainfo/simulation/__init__.py b/tests/datamodel/metainfo/simulation/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..db96892bc39fc672a63d1827096f3e0fcf7a818c --- /dev/null +++ b/tests/datamodel/metainfo/simulation/__init__.py @@ -0,0 +1,17 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# diff --git a/tests/datamodel/metainfo/simulation/test_workflow.py b/tests/datamodel/metainfo/simulation/test_workflow.py new file mode 100644 index 0000000000000000000000000000000000000000..175031c42fde176547ecbeda8bffc3651bdc72a3 --- /dev/null +++ b/tests/datamodel/metainfo/simulation/test_workflow.py @@ -0,0 +1,246 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import pytest +import random +import numpy as np +import os + +from tests.parsing.test_parsing import parse_file +from tests.normalizing.conftest import run_normalize +from nomad.utils import get_logger +from nomad.datamodel import EntryArchive, EntryMetadata +from nomad.datamodel.metainfo.workflow import Task +from nomad.datamodel.metainfo.simulation import Run, Calculation +from nomad.datamodel.metainfo.workflow import Link +from nomad.datamodel.metainfo.simulation.workflow import ( + SimulationWorkflow, SimulationWorkflowMethod, SimulationWorkflowResults, + ChemicalReaction +) + + +LOGGER = get_logger(__name__) + + +class TestSimulationWorkflow: + ''' + Tests for the base simulation workflow class. + ''' + + n_calc = 10 + + @pytest.fixture(autouse=True) + def serial_simulation(self) -> EntryArchive: + ''' + Simulation with calculations done in serial. + ''' + archive = EntryArchive() + archive.metadata = EntryMetadata(entry_type='Workflow') + archive.workflow2 = SimulationWorkflow( + method=SimulationWorkflowMethod(), results=SimulationWorkflowResults()) + + archive.run.append(Run(calculation=[ + Calculation(time_physical=t, time_calculation=1) for t in range(1, self.n_calc + 1)])) + return archive + + def test_tasks_serial(self, serial_simulation): + ''' + Test tasks creation of purely serial calculation. + ''' + workflow = serial_simulation.workflow2 + workflow.normalize(serial_simulation, LOGGER) + assert len(workflow.tasks) == self.n_calc + + assert workflow.inputs[0].section == workflow.tasks[0].inputs[0].section + for n, task in enumerate(workflow.tasks[:-1]): + assert task.name == f'Step {n + 1}' + assert len(task.inputs) == 1 + assert len(task.outputs) == 1 + assert task.outputs[0].section == workflow.tasks[n + 1].inputs[0].section + assert workflow.outputs[0].section == workflow.tasks[-1].outputs[0].section + + def test_tasks_defined(self, serial_simulation): + ''' + Test tasks creation skipped if tasks are predefined + ''' + workflow = SimulationWorkflow(tasks=[Task(name='1')]) + serial_simulation.workflow2 = workflow + workflow.normalize(serial_simulation, LOGGER) + + assert len(serial_simulation.workflow2.tasks) == 1 + assert serial_simulation.workflow2.tasks[0].name == '1' + + def test_tasks_no_time(self, serial_simulation): + ''' + Test tasks creation skipped if at least one calculation has no time info. + ''' + + for key in ['time_physical', 'time_calculation']: + calc = serial_simulation.run[0].calculation[random.randint(0, self.n_calc - 1)] + calc.m_set(calc.m_get_quantity_definition(key), None) + serial_simulation.workflow2.normalize(serial_simulation, LOGGER) + assert not serial_simulation.workflow2.tasks + + @pytest.mark.parametrize('calculation_indices', [ + # parallel (0 to 3), 4, 5, parallel (6 to 9) + [[0, 1, 2, 3], [4], [5], [6, 7, 8, 9]], + # 0, parallel (1 to 2), 4, 5, 6, 7, 8, 8 + [[0], [1, 2], [3], [4], [5], [6], [7], [8], [9]], + # parallel (0 to 8), 9 + [[0, 1, 2, 3, 4, 5, 6, 7, 8], [9]] + ]) + def test_task_not_serial(self, serial_simulation, calculation_indices): + ''' + Test creation for mixed serial and parallel tasks. + ''' + def _create_times(indices, start_time=0): + times = [] + for n in indices: + if not isinstance(n, int): + times.extend(sorted(_create_times(n, start_time=times[-1][1] if times else 0), key=lambda x: x[1])) + else: + calc_time = random.random() + dt = random.random() * 0.1 # small perturbation + times.append([n, calc_time + start_time + dt, calc_time]) + return times + + for n, time_physical, time_calculation in _create_times(calculation_indices): + serial_simulation.run[-1].calculation[n].time_physical = time_physical + serial_simulation.run[-1].calculation[n].time_calculation = time_calculation + + workflow = serial_simulation.workflow2 + workflow.normalize(serial_simulation, LOGGER) + assert len(workflow.tasks) == 10 + + # workflow inputs as inputs to first parallel tasks + for n in calculation_indices[0]: + assert workflow.tasks[n].name == 'Step 1' + assert workflow.tasks[n].inputs[0].section == workflow.inputs[0].section + + # outputs of previous tasks are inputs of succeeding tasks in series + for i in range(1, len(calculation_indices)): + for n1 in calculation_indices[i]: + assert workflow.tasks[n1].name == f'Step {i + 1}' + inputs = [input.section for input in workflow.tasks[n1].inputs] + for n0 in calculation_indices[i - 1]: + assert workflow.tasks[n0].outputs[-1].section in inputs + + # last parallel tasks oututs as workflow outputs + for n in calculation_indices[-1]: + assert workflow.tasks[n].outputs[0].section in [output.section for output in workflow.outputs] + + +class TestChemicalReactionWorkflow: + ''' + Contains tests for the matinfo defintion and normalization of the chemical reaction + workflow. + ''' + + @pytest.fixture(autouse=True, scope='class') + def dft_archives(self): + ''' + Parse all relevant dft calculations. + ''' + test_dir = 'tests/data/datamodel/metainfo/simulation/workflow/chemical_reaction' + + archives = {} + for root, _, names in os.walk(test_dir): + for filename in names: + if filename not in ['vasprun.xml', 'OUTCAR']: + continue + archives[os.path.basename(root)] = run_normalize(parse_file( + ('parsers/vasp', os.path.join(root, filename)))) + return archives + + @pytest.fixture(autouse=True) + def segregation_workflow_archive(self, dft_archives): + ''' + Constructs a chemical reaction workflow archive describing the segregation of H + from RhCu_CH4 into RhCu_CH3 and RhCu_H through a transition state RhCu_CH3_H. + ''' + formula_type = [ + ['RhCu_CH4', 'reactant'], + ['RhCu', 'reactant'], + ['RhCu_CH3_H', 'transition state'], + ['RhCu_CH3', 'product'], + ['RhCu_xHfcc', 'product'], + ] + workflow = ChemicalReaction() + for formula, type in formula_type: + archive = dft_archives[formula] + workflow.inputs.append(Link( + name=f'{formula} {type}', section=archive.run[0].calculation[-1])) + # add also slab to transition state to preserve mass balance + if formula == 'RhCu': + workflow.inputs.append(Link( + name=f'transition state {formula}', section=archive.run[0].calculation[-1])) + + return EntryArchive(metadata=EntryMetadata(entry_type='Workflow'), workflow2=workflow) + + @pytest.fixture(autouse=True) + def adsorption_workflow_archive(self, dft_archives): + ''' + Constructs a chemical reaction workflow archive describing the adsorption of N + in PdAg. + ''' + + formula_type = [ + ['N', 'reactant'], + ['PdAg', 'reactant'], + ['NPdAg', 'product'], + ] + workflow = ChemicalReaction() + for formula, type in formula_type: + archive = dft_archives[formula] + workflow.inputs.append(Link( + name=f'{formula} {type}', section=archive.run[0].calculation[-1])) + + return EntryArchive(metadata=EntryMetadata(entry_type='Workflow'), workflow2=workflow) + + @pytest.mark.parametrize('workflow_archive, reaction_energy, activation_energy', [ + pytest.param('segregation_workflow_archive', 4.41467915e-20, 1.02994872e-19, id='segregation'), + pytest.param('adsorption_workflow_archive', -3.04029682e-19, None, id='adsorption')]) + def test_reaction_energy(self, request, workflow_archive, reaction_energy, activation_energy): + ''' + Test the calculation of reaction and activation energy. + ''' + workflow_archive = request.getfixturevalue(workflow_archive) + workflow = workflow_archive.workflow2 + workflow.normalize(workflow_archive, LOGGER) + + assert np.isclose(workflow.results.reaction_energy.magnitude, reaction_energy, atol=0, rtol=1e6) + if activation_energy: + assert np.isclose(workflow.results.activation_energy.magnitude, activation_energy, atol=0, rtol=1e6) + assert len(workflow.tasks) == 1 + + def test_system_checks(self, segregation_workflow_archive): + ''' + Test the checks for the consistency of the system from reactants + ''' + workflow = segregation_workflow_archive.workflow2 + # change the system size in an input to make them inconsistent + lattice = np.array(workflow.inputs[-1].section.system_ref.atoms.lattice_vectors) + workflow.inputs[-1].section.system_ref.atoms.lattice_vectors = np.ones((3, 3)) + workflow.normalize(segregation_workflow_archive, LOGGER) + assert workflow.results.reaction_energy is None + + # change the chemical composition in an input to make them inconsistent + workflow.inputs[-1].section.system_ref.atoms.lattice_vectoprs = lattice + workflow.inputs[0].section.system_ref.atoms.labels = ['C'] + workflow.normalize(segregation_workflow_archive, LOGGER) + assert workflow.results.reaction_energy is None diff --git a/tests/datamodel/metainfo/test_annotations.py b/tests/datamodel/metainfo/test_annotations.py index 33d7c5f7daa1fa2be989f3e5d2c5ac0cee15203a..a0791d0befb920f8e9dded611135a10b4ed0d293 100644 --- a/tests/datamodel/metainfo/test_annotations.py +++ b/tests/datamodel/metainfo/test_annotations.py @@ -20,7 +20,8 @@ import pytest from pydantic import ValidationError from nomad.metainfo import Quantity -from nomad.datamodel.metainfo.annotations import PlotAnnotation, ELNAnnotation +from nomad.datamodel.metainfo.annotations import PlotAnnotation, ELNAnnotation, PlotlyGraphObjectAnnotation +from nomad.datamodel.metainfo.plot import PlotlyError @pytest.mark.parametrize('quantity, annotation, result, error', [ @@ -82,3 +83,16 @@ def test_plot_validation(annotation, result, error): PlotAnnotation(**annotation) else: assert PlotAnnotation(**annotation).dict(exclude_none=True) == (result or annotation) + + +@pytest.mark.parametrize('annotation, result, error_type, error', [ + pytest.param({'x': 'x'}, None, PlotlyError, True, id='data-required'), + pytest.param({'data': {}}, None, ValidationError, True, id='not_empty'), + pytest.param({'data': {'x': 'x'}}, None, ValidationError, False, id='plain'), +]) +def test_plotly_graph_object_validation(annotation, result, error_type, error): + if error: + with pytest.raises(error_type): + PlotlyGraphObjectAnnotation(**annotation) + else: + assert PlotlyGraphObjectAnnotation(**annotation).dict(exclude_none=True) == (result or annotation) diff --git a/tests/datamodel/metainfo/test_plotly.py b/tests/datamodel/metainfo/test_plotly.py new file mode 100644 index 0000000000000000000000000000000000000000..1a9daf2faaa7db9e5ca5ba4a214b4b547af55605 --- /dev/null +++ b/tests/datamodel/metainfo/test_plotly.py @@ -0,0 +1,17 @@ +import json +from tests.normalizing.conftest import run_processing + + +def test_plotly_snapshot(raw_files): + directory = 'tests/data/datamodel/metainfo/plotly' + mainfile = 'plotly.schema.archive.yaml' + plotly_archive = run_processing(directory, mainfile) + + f = open('tests/data/datamodel/metainfo/plotly/snapshot.archive.json') + snapshot = json.load(f) + f.close() + + figures = plotly_archive.data['figures'] + snapshot_figures = snapshot['figures'] + for i in range(0, 4): + assert json.dumps(figures[i].figure, sort_keys=True) == json.dumps(snapshot_figures[i], sort_keys=True) diff --git a/tests/datamodel/metainfo/test_substance.py b/tests/datamodel/metainfo/test_substance.py new file mode 100644 index 0000000000000000000000000000000000000000..6eebdaf447f2a73f3f4c014adc7817e7968999a5 --- /dev/null +++ b/tests/datamodel/metainfo/test_substance.py @@ -0,0 +1,92 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +from typing import Iterable +import pytest +import json + +from tests.normalizing.conftest import run_processing +from nomad.datamodel.metainfo import basesections + + +class MockResponse: + + def __init__(self, json: dict): + self._json = json + self.status_code = 200 + + def json(self): + return self._json + + @property + def ok(self): + return True + + +@pytest.fixture(scope='function') +def external_api_fixture(monkeypatch): + + with open('tests/data/datamodel/metainfo/external_api_mock_response.json', 'r') as fp: + mock_responses = json.load(fp) + + def pub_chem_api_get_properties(cid: int, properties: Iterable[str]): + return MockResponse(mock_responses['pub_chem_api_get_properties'][str(cid)]) + + def pub_chem_api_get_synonyms(cid: int): + return MockResponse(mock_responses['pub_chem_api_get_synonyms'][str(cid)]) + + def pub_chem_api_search(path: str, search: str): + return MockResponse(mock_responses['pub_chem_api_search']) + + def cas_api_search(search: str): + return MockResponse(mock_responses['cas_api_search']) + + def cas_api_details(cas_rn: str): + return MockResponse(mock_responses['cas_api_details']) + + monkeypatch.setattr(basesections, 'pub_chem_api_get_properties', pub_chem_api_get_properties) + monkeypatch.setattr(basesections, 'pub_chem_api_get_synonyms', pub_chem_api_get_synonyms) + monkeypatch.setattr(basesections, 'pub_chem_api_search', pub_chem_api_search) + monkeypatch.setattr(basesections, 'cas_api_search', cas_api_search) + monkeypatch.setattr(basesections, 'cas_api_details', cas_api_details) + + +@pytest.mark.parametrize('mainfile', [ + pytest.param('test_substance.archive.yaml', id='Substance'), + pytest.param('test_cas_substance.archive.yaml', id='CASSubstance'), + pytest.param('test_pub_chem_substance.archive.yaml', id='PubChemSubstance'), + pytest.param('test_not_overwrite_substance.archive.yaml', id='not-overwrite'), +]) +def test_substance(mainfile, external_api_fixture): + directory = 'tests/data/datamodel/metainfo' + test_archive = run_processing(directory, mainfile) + + # Check that the material results section was populated by the normalizer + assert "I" in test_archive.results.material.elements + assert "Pb" in test_archive.results.material.elements + assert len(test_archive.results.material.elemental_composition) == 2 + for composition in test_archive.results.material.elemental_composition: + if composition.element == 'I': + assert composition.atomic_fraction == 2 / 3 + elif composition.element == 'Pb': + assert composition.atomic_fraction == 1 / 3 + else: + raise ValueError( + f'Unknown element "{composition.element}" in' + ' results.material.elemental_composition' + ) diff --git a/tests/datamodel/test_metadata.py b/tests/datamodel/test_metadata.py index 1f197d5f3c285e857e84835932d486f0e25eda8c..9b7292d56636283c56c6efd7ffc564db6b4843cb 100644 --- a/tests/datamodel/test_metadata.py +++ b/tests/datamodel/test_metadata.py @@ -21,61 +21,118 @@ import numpy as np from datetime import datetime import pytz -from nomad.metainfo import MSection, Quantity, Section, Datetime, MEnum, SubSection +from nomad.metainfo import Quantity, MSection, SubSection, Datetime, MEnum from nomad.datamodel.datamodel import EntryMetadata, SearchableQuantity, EntryArchive +from nomad.metainfo.elasticsearch_extension import schema_separator from nomad.datamodel import EntryData +# from tests.data.schemas.nomadschemaexample.schema import MySchema +from tests.config import python_schema_name -@pytest.mark.parametrize('source_quantity,source_value,target_quantity,target_value', [ - pytest.param(Quantity(type=str), 'test', SearchableQuantity.text_value, 'test', id='text'), - pytest.param(Quantity(type=MEnum('one', 'two')), 'two', SearchableQuantity.keyword_value, 'two', id='keyword'), - pytest.param(Quantity(type=np.float64), 1.2, SearchableQuantity.double_value, 1.2, id='np-double'), - pytest.param(Quantity(type=float), 1.2, SearchableQuantity.double_value, 1.2, id='python-double'), - pytest.param(Quantity(type=int), 1, SearchableQuantity.long_value, 1, id='long'), - pytest.param(Quantity(type=Datetime), datetime.fromtimestamp(0, tz=pytz.UTC), SearchableQuantity.date_value, "1970-01-01T00:00:00+00:00", id='date'), +@pytest.mark.parametrize('source_quantity, source_value, target_quantity, target_value', [ + pytest.param(Quantity(type=str), 'test', SearchableQuantity.str_value, 'test', id='text'), + pytest.param(Quantity(type=MEnum('one', 'two')), 'two', SearchableQuantity.str_value, 'two', id='keyword'), + pytest.param(Quantity(type=np.float64), 1.2, SearchableQuantity.float_value, 1.2, id='np-double'), + pytest.param(Quantity(type=float), 1.2, SearchableQuantity.float_value, 1.2, id='python-double'), + pytest.param(Quantity(type=int), 1, SearchableQuantity.int_value, 1, id='long'), + pytest.param(Quantity(type=Datetime), datetime.fromtimestamp(0, tz=pytz.UTC), SearchableQuantity.datetime_value, datetime(1970, 1, 1, 0, 0, tzinfo=pytz.UTC), id='date'), pytest.param(Quantity(type=str, shape=['*']), ['test'], None, None, id='shape'), pytest.param(Quantity(type=str), None, None, None, id='None'), pytest.param(Quantity(type=str, default='test'), None, None, None, id='default'), ]) -def test_searchable_quantities(source_quantity, source_value, target_quantity, target_value): - source_quantity.name = 'test_quantity' - section_def = Section(name='MySection', quantities=[source_quantity], base_sections=[EntryData]) - section = section_def.section_cls() # pylint: disable=not-callable +def test_search_quantities(source_quantity, source_value, target_quantity, target_value): + + class Base(MSection): + test_quantity = source_quantity + + class TestSchema(EntryData, Base): + pass + + schema = TestSchema() if source_value: - section.test_quantity = source_value + schema.test_quantity = source_value - archive = EntryArchive(data=section, metadata=EntryMetadata()) + archive = EntryArchive(data=schema, metadata=EntryMetadata()) archive.metadata.apply_archive_metadata(archive) if target_quantity: - assert len(archive.metadata.searchable_quantities) == 1 + assert len(archive.metadata.search_quantities) == 1 else: - assert len(archive.metadata.searchable_quantities) == 0 + assert len(archive.metadata.search_quantities) == 0 return - searchable_quantity = archive.metadata.searchable_quantities[0] + searchable_quantity = archive.metadata.search_quantities[0] assert searchable_quantity.m_get(target_quantity) == target_value - assert searchable_quantity.path == 'data.test_quantity' - assert searchable_quantity.section_definition == 'MySection' - assert searchable_quantity.quantity_name == 'test_quantity' + assert searchable_quantity.id == f'data.test_quantity{schema_separator}test_metadata.TestSchema' + assert searchable_quantity.definition == 'test_metadata.Base.test_quantity' -def test_searchable_quantities_nested(): +def test_search_quantities_nested(): class MySubSection(MSection): value = Quantity(type=str) - class MySection(EntryData, MySubSection): + class TestSchema(EntryData, MySubSection): children = SubSection(section=MySubSection, repeats=True) archive = EntryArchive(metadata=EntryMetadata(entry_name='test')) - archive.data = MySection(value='root') + archive.data = TestSchema(value='root') archive.data.children.append(MySubSection(value='child1')) archive.data.children.append(MySubSection(value='child2')) archive.metadata.apply_archive_metadata(archive) - assert len(archive.metadata.searchable_quantities) == 3 + assert len(archive.metadata.search_quantities) == 3 data = [ - (item.path, item.text_value) - for item in archive.metadata.searchable_quantities] - assert data == [('data.value', 'root'), ('data.children.value', 'child1'), ('data.children.value', 'child2')] + (item.id, item.str_value) + for item in archive.metadata.search_quantities] + assert data == [ + (f'data.value{schema_separator}test_metadata.TestSchema', 'root'), + (f'data.children.value{schema_separator}test_metadata.TestSchema', 'child1'), + (f'data.children.value{schema_separator}test_metadata.TestSchema', 'child2') + ] + + +def populate_child(data): + from nomadschemaexample.schema import MySection + data.child = MySection(name='test') + + +def populate_reference(data): + from nomadschemaexample.schema import MySection + data.child = MySection() + data.reference_section = data.child + + +@pytest.mark.parametrize('source_quantity, source_value, target_quantity, target_value, definition', [ + pytest.param('name', 'test', SearchableQuantity.str_value, 'test', f'{python_schema_name}.name', id='str'), + pytest.param('count', 1, SearchableQuantity.int_value, 1, f'{python_schema_name}.count', id='int'), + pytest.param('frequency', 1.0, SearchableQuantity.float_value, 1.0, f'{python_schema_name}.frequency', id='float'), + pytest.param('timestamp', datetime.fromtimestamp(0, tz=pytz.UTC), SearchableQuantity.datetime_value, datetime(1970, 1, 1, 0, 0, tzinfo=pytz.UTC), f'{python_schema_name}.timestamp', id='datetime'), + pytest.param('non_scalar', np.eye(3), None, np.eye(3), None, id='non-scalar'), + pytest.param('reference_section', populate_reference, None, datetime(1970, 1, 1, 0, 0, tzinfo=pytz.UTC), None, id='references are skipped'), + pytest.param('child.name', populate_child, SearchableQuantity.str_value, 'test', 'nomadschemaexample.schema.MySection.name', id='child quantity'), +]) +def test_search_quantities_plugin(plugin_schema, source_quantity, source_value, target_quantity, target_value, definition): + '''Tests that different types of search quantities are loaded correctly from + plugin and saved into the search_quantities field.''' + from nomadschemaexample.schema import MySchema + + data = MySchema() + + if callable(source_value): + source_value(data) + else: + setattr(data, source_quantity, source_value) + archive = EntryArchive(data=data, metadata=EntryMetadata()) + archive.metadata.apply_archive_metadata(archive) + + if target_quantity: + assert len(archive.metadata.search_quantities) == 1 + else: + assert len(archive.metadata.search_quantities) == 0 + return + + searchable_quantity = archive.metadata.search_quantities[0] + assert searchable_quantity.m_get(target_quantity) == target_value + assert searchable_quantity.id == f'data.{source_quantity}{schema_separator}{python_schema_name}' + assert searchable_quantity.definition == definition diff --git a/tests/graph/__init__.py b/tests/graph/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tests/archive/test_query_reader.py b/tests/graph/test_graph_reader.py similarity index 69% rename from tests/archive/test_query_reader.py rename to tests/graph/test_graph_reader.py index 379149a54274087a9d6be0c163e94ce25ba701bf..e3391e3a064bca320aa5d59de4f9c421fa4da81c 100644 --- a/tests/archive/test_query_reader.py +++ b/tests/graph/test_graph_reader.py @@ -21,8 +21,8 @@ from datetime import datetime import pytest -from nomad.archive.query_reader import ( - EntryReader, UploadReader, UserReader, FileSystemReader, MongoReader, GeneralReader +from nomad.graph.graph_reader import ( + EntryReader, UploadReader, UserReader, FileSystemReader, MongoReader, GeneralReader, Token ) from nomad.datamodel import EntryArchive from nomad.utils.exampledata import ExampleData @@ -75,6 +75,12 @@ def assert_dict(d1, d2): assert_time(v, d2[k]) +user_dict = { + 'name': 'Sheldon Cooper', 'first_name': 'Sheldon', 'last_name': 'Cooper', + 'email': 'sheldon.cooper@nomad-coe.eu', 'user_id': '00000000-0000-0000-0000-000000000001', + 'username': 'scooper', 'is_admin': False, 'is_oasis_admin': True} + + # noinspection SpellCheckingInspection,DuplicatedCode def test_remote_reference(json_dict, example_data_with_reference, test_user): def increment(): @@ -112,7 +118,7 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): 'm_request': { 'directive': 'plain' }, - 'm_uploads': { + Token.UPLOADS: { 'm_request': { 'directive': 'plain' }, @@ -121,13 +127,13 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): 'name': 'Sheldon Cooper', 'first_name': 'Sheldon', 'last_name': 'Cooper', 'email': 'sheldon.cooper@nomad-coe.eu', 'user_id': '00000000-0000-0000-0000-000000000001', 'username': 'scooper', 'is_admin': False, 'is_oasis_admin': True, - 'm_uploads': {'id_published_with_ref': 'id_published_with_ref'}}) + Token.UPLOADS: {'id_published_with_ref': 'id_published_with_ref'}}) __user_print('link to uploads, resolve with metadata', { 'm_request': { 'directive': 'plain' }, - 'm_uploads': { + Token.UPLOADS: { 'm_request': { 'directive': 'resolved', 'resolve_type': 'upload' @@ -136,25 +142,26 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): }, result={ 'name': 'Sheldon Cooper', 'first_name': 'Sheldon', 'last_name': 'Cooper', 'email': 'sheldon.cooper@nomad-coe.eu', 'user_id': '00000000-0000-0000-0000-000000000001', - 'username': 'scooper', 'is_admin': False, 'is_oasis_admin': True, 'm_uploads': { + 'username': 'scooper', 'is_admin': False, 'is_oasis_admin': True, Token.UPLOADS: { 'id_published_with_ref': { 'process_running': False, 'current_process': 'process_upload', 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': '2023-03-05T21:24:22.172000', 'upload_id': 'id_published_with_ref', 'upload_name': 'name_published', 'upload_create_time': '2023-03-05T21:24:22.171000', - 'main_author': '00000000-0000-0000-0000-000000000001', 'coauthors': [], - 'reviewers': [], 'viewers': ['00000000-0000-0000-0000-000000000001'], - 'writers': ['00000000-0000-0000-0000-000000000001'], 'published': False, + 'main_author': user_dict, 'coauthors': [], + 'reviewers': [], 'viewers': [user_dict], + 'writers': [user_dict], 'published': False, + 'processing_failed': 0, 'processing_successful': 6, 'published_to': [], 'publish_time': None, 'with_embargo': False, - 'embargo_length': 0, 'license': 'CC BY 4.0', 'entries': 6, + 'embargo_length': 0, 'license': 'CC BY 4.0', 'n_entries': 6, 'upload_files_server_path': 'id_published_with_ref'}}}) __user_print('link to uploads, resolve with metadata, form 2 using dict style with explicit upload id', { 'm_request': { 'directive': 'plain' }, - 'm_uploads': { + Token.UPLOADS: { 'id_published_with_ref': { 'm_request': { 'directive': 'plain', @@ -164,25 +171,26 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): }, result={ 'name': 'Sheldon Cooper', 'first_name': 'Sheldon', 'last_name': 'Cooper', 'email': 'sheldon.cooper@nomad-coe.eu', 'user_id': '00000000-0000-0000-0000-000000000001', - 'username': 'scooper', 'is_admin': False, 'is_oasis_admin': True, 'm_uploads': { + 'username': 'scooper', 'is_admin': False, 'is_oasis_admin': True, Token.UPLOADS: { 'id_published_with_ref': { 'process_running': False, 'current_process': 'process_upload', 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': '2023-03-05T21:30:22.807000', 'upload_id': 'id_published_with_ref', 'upload_name': 'name_published', 'upload_create_time': '2023-03-05T21:30:22.806000', - 'main_author': '00000000-0000-0000-0000-000000000001', 'coauthors': [], - 'reviewers': [], 'viewers': ['00000000-0000-0000-0000-000000000001'], - 'writers': ['00000000-0000-0000-0000-000000000001'], 'published': False, + 'main_author': user_dict, 'coauthors': [], + 'reviewers': [], 'viewers': [user_dict], + 'writers': [user_dict], 'published': False, + 'processing_failed': 0, 'processing_successful': 6, 'published_to': [], 'publish_time': None, 'with_embargo': False, - 'embargo_length': 0, 'license': 'CC BY 4.0', 'entries': 6, + 'embargo_length': 0, 'license': 'CC BY 4.0', 'n_entries': 6, 'upload_files_server_path': 'id_published_with_ref'}}}) __user_print('link to entries directly from user, resolve with metadata', { 'm_request': { 'directive': 'plain' }, - 'm_entries': { + Token.ENTRIES: { 'm_request': { 'directive': 'resolved', 'resolve_type': 'entry' @@ -191,73 +199,73 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): }, result={ 'name': 'Sheldon Cooper', 'first_name': 'Sheldon', 'last_name': 'Cooper', 'email': 'sheldon.cooper@nomad-coe.eu', 'user_id': '00000000-0000-0000-0000-000000000001', - 'username': 'scooper', 'is_admin': False, 'is_oasis_admin': True, 'm_entries': { + 'username': 'scooper', 'is_admin': False, 'is_oasis_admin': True, Token.ENTRIES: { 'id_01': { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_01', 'entry_create_time': '2023-03-05T21:27:24.488000', - 'mainfile': 'mainfile_for_id_01', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', - 'parser_name': 'parsers/vasp', 'entry_metadata': None}, + 'mainfile_path': 'mainfile_for_id_01', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', + 'parser_name': 'parsers/vasp'}, 'id_02': { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_02', 'entry_create_time': '2023-03-05T21:27:24.489000', - 'mainfile': 'mainfile_for_id_02', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', - 'parser_name': 'parsers/vasp', 'entry_metadata': None}, + 'mainfile_path': 'mainfile_for_id_02', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', + 'parser_name': 'parsers/vasp'}, 'id_03': { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_03', 'entry_create_time': '2023-03-05T21:27:24.490000', - 'mainfile': 'mainfile_for_id_03', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', - 'parser_name': 'parsers/vasp', 'entry_metadata': None}, + 'mainfile_path': 'mainfile_for_id_03', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', + 'parser_name': 'parsers/vasp'}, 'id_04': { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_04', 'entry_create_time': '2023-03-05T21:27:24.491000', - 'mainfile': 'mainfile_for_id_04', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', - 'parser_name': 'parsers/vasp', 'entry_metadata': None}, + 'mainfile_path': 'mainfile_for_id_04', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', + 'parser_name': 'parsers/vasp'}, 'id_05': { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_05', 'entry_create_time': '2023-03-05T21:27:24.492000', - 'mainfile': 'mainfile_for_id_05', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', - 'parser_name': 'parsers/vasp', 'entry_metadata': None}, + 'mainfile_path': 'mainfile_for_id_05', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', + 'parser_name': 'parsers/vasp'}, 'id_06': { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_06', 'entry_create_time': '2023-03-05T21:27:24.493000', - 'mainfile': 'mainfile_for_id_06', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', - 'parser_name': 'parsers/vasp', 'entry_metadata': None}}}) + 'mainfile_path': 'mainfile_for_id_06', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', + 'parser_name': 'parsers/vasp'}}}) __user_print( 'link to entries directly from user, resolve with metadata, form 2 using dict style with explicit entry id', { 'm_request': { 'directive': 'plain' }, - 'm_entries': { + Token.ENTRIES: { 'id_01': '*' } }, result={ 'name': 'Sheldon Cooper', 'first_name': 'Sheldon', 'last_name': 'Cooper', 'email': 'sheldon.cooper@nomad-coe.eu', 'user_id': '00000000-0000-0000-0000-000000000001', - 'username': 'scooper', 'is_admin': False, 'is_oasis_admin': True, 'm_entries': { + 'username': 'scooper', 'is_admin': False, 'is_oasis_admin': True, Token.ENTRIES: { 'id_01': { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_01', 'entry_create_time': '2023-03-05T21:30:22.809000', - 'mainfile': 'mainfile_for_id_01', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', - 'parser_name': 'parsers/vasp', 'entry_metadata': None}}}) + 'mainfile_path': 'mainfile_for_id_01', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', + 'parser_name': 'parsers/vasp'}}}) __user_print('link to entries from uploads, resolve with metadata', { 'm_request': { 'directive': 'plain' }, - 'm_uploads': { + Token.UPLOADS: { 'id_published_with_ref': { 'm_request': { 'directive': 'plain', }, - 'm_entries': { + Token.ENTRIES: { 'm_request': { 'directive': 'resolved', 'resolve_type': 'entry' @@ -269,86 +277,87 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): }, result={ 'name': 'Sheldon Cooper', 'first_name': 'Sheldon', 'last_name': 'Cooper', 'email': 'sheldon.cooper@nomad-coe.eu', 'user_id': '00000000-0000-0000-0000-000000000001', - 'username': 'scooper', 'is_admin': False, 'is_oasis_admin': True, 'm_uploads': { + 'username': 'scooper', 'is_admin': False, 'is_oasis_admin': True, Token.UPLOADS: { 'id_published_with_ref': { 'process_running': False, 'current_process': 'process_upload', 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': '2023-03-05T21:31:56.873000', 'upload_id': 'id_published_with_ref', 'upload_name': 'name_published', 'upload_create_time': '2023-03-05T21:31:56.872000', - 'main_author': '00000000-0000-0000-0000-000000000001', 'coauthors': [], - 'reviewers': [], 'viewers': ['00000000-0000-0000-0000-000000000001'], - 'writers': ['00000000-0000-0000-0000-000000000001'], 'published': False, + 'main_author': user_dict, 'coauthors': [], + 'reviewers': [], 'viewers': [user_dict], + 'writers': [user_dict], 'published': False, + 'processing_failed': 0, 'processing_successful': 6, 'published_to': [], 'publish_time': None, 'with_embargo': False, - 'embargo_length': 0, 'license': 'CC BY 4.0', 'entries': 6, + 'embargo_length': 0, 'license': 'CC BY 4.0', 'n_entries': 6, 'upload_files_server_path': 'id_published_with_ref', - 'm_entries': { + Token.ENTRIES: { 'id_01': { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_01', 'entry_create_time': '2023-03-05T21:31:56.875000', - 'mainfile': 'mainfile_for_id_01', 'mainfile_key': None, + 'mainfile_path': 'mainfile_for_id_01', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', - 'parser_name': 'parsers/vasp', 'entry_metadata': None}, + 'parser_name': 'parsers/vasp'}, 'id_02': { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_02', 'entry_create_time': '2023-03-05T21:31:56.876000', - 'mainfile': 'mainfile_for_id_02', 'mainfile_key': None, + 'mainfile_path': 'mainfile_for_id_02', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', - 'parser_name': 'parsers/vasp', 'entry_metadata': None}, + 'parser_name': 'parsers/vasp'}, 'id_03': { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_03', 'entry_create_time': '2023-03-05T21:31:56.877000', - 'mainfile': 'mainfile_for_id_03', 'mainfile_key': None, + 'mainfile_path': 'mainfile_for_id_03', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', - 'parser_name': 'parsers/vasp', 'entry_metadata': None}, + 'parser_name': 'parsers/vasp'}, 'id_04': { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_04', 'entry_create_time': '2023-03-05T21:31:56.878000', - 'mainfile': 'mainfile_for_id_04', 'mainfile_key': None, + 'mainfile_path': 'mainfile_for_id_04', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', - 'parser_name': 'parsers/vasp', 'entry_metadata': None}, + 'parser_name': 'parsers/vasp'}, 'id_05': { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_05', 'entry_create_time': '2023-03-05T21:31:56.879000', - 'mainfile': 'mainfile_for_id_05', 'mainfile_key': None, + 'mainfile_path': 'mainfile_for_id_05', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', - 'parser_name': 'parsers/vasp', 'entry_metadata': None}, + 'parser_name': 'parsers/vasp'}, 'id_06': { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_06', 'entry_create_time': '2023-03-05T21:31:56.880000', - 'mainfile': 'mainfile_for_id_06', 'mainfile_key': None, + 'mainfile_path': 'mainfile_for_id_06', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', - 'parser_name': 'parsers/vasp', - 'entry_metadata': None}}}}}) + 'parser_name': 'parsers/vasp' + }}}}}) __user_print('link to entries from uploads, resolve with metadata, dict style', { 'm_request': { 'directive': 'plain' }, - 'm_uploads': { + Token.UPLOADS: { 'id_published_with_ref': { 'm_request': { 'directive': 'plain', }, - 'm_entries': { + Token.ENTRIES: { 'id_01': { 'm_request': { 'directive': 'plain', @@ -357,7 +366,7 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): '*': { 'm_request': { 'directive': 'plain', - 'include': ['entry_id', 'mainfile'] + 'include': ['entry_id', 'mainfile_path'] }, } } @@ -367,40 +376,42 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): }, result={ 'name': 'Sheldon Cooper', 'first_name': 'Sheldon', 'last_name': 'Cooper', 'email': 'sheldon.cooper@nomad-coe.eu', 'user_id': '00000000-0000-0000-0000-000000000001', - 'username': 'scooper', 'is_admin': False, 'is_oasis_admin': True, 'm_uploads': { + 'username': 'scooper', 'is_admin': False, 'is_oasis_admin': True, Token.UPLOADS: { 'id_published_with_ref': { 'process_running': False, 'current_process': 'process_upload', 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': '2023-03-05T21:31:56.873000', 'upload_id': 'id_published_with_ref', 'upload_name': 'name_published', 'upload_create_time': '2023-03-05T21:31:56.872000', - 'main_author': '00000000-0000-0000-0000-000000000001', 'coauthors': [], - 'reviewers': [], 'viewers': ['00000000-0000-0000-0000-000000000001'], - 'writers': ['00000000-0000-0000-0000-000000000001'], 'published': False, + 'main_author': user_dict, 'coauthors': [], + 'reviewers': [], 'viewers': [user_dict], + 'writers': [user_dict], 'published': False, + 'processing_failed': 0, 'processing_successful': 6, 'published_to': [], 'publish_time': None, 'with_embargo': False, - 'embargo_length': 0, 'license': 'CC BY 4.0', 'entries': 6, + 'embargo_length': 0, 'license': 'CC BY 4.0', 'n_entries': 6, 'upload_files_server_path': 'id_published_with_ref', - 'm_entries': { - 'id_02': {'entry_id': 'id_02', 'mainfile': 'mainfile_for_id_02'}, - 'id_03': {'entry_id': 'id_03', 'mainfile': 'mainfile_for_id_03'}, - 'id_04': {'entry_id': 'id_04', 'mainfile': 'mainfile_for_id_04'}, - 'id_05': {'entry_id': 'id_05', 'mainfile': 'mainfile_for_id_05'}, - 'id_06': {'entry_id': 'id_06', 'mainfile': 'mainfile_for_id_06'}, + Token.ENTRIES: { + 'm_response': {}, + 'id_02': {'entry_id': 'id_02', 'mainfile_path': 'mainfile_for_id_02'}, + 'id_03': {'entry_id': 'id_03', 'mainfile_path': 'mainfile_for_id_03'}, + 'id_04': {'entry_id': 'id_04', 'mainfile_path': 'mainfile_for_id_04'}, + 'id_05': {'entry_id': 'id_05', 'mainfile_path': 'mainfile_for_id_05'}, + 'id_06': {'entry_id': 'id_06', 'mainfile_path': 'mainfile_for_id_06'}, 'id_01': { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_01', 'entry_create_time': '2023-03-05T21:31:56.875000', - 'mainfile': 'mainfile_for_id_01', 'mainfile_key': None, + 'mainfile_path': 'mainfile_for_id_01', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', - 'parser_name': 'parsers/vasp', - 'entry_metadata': None}}}}}) + 'parser_name': 'parsers/vasp' + }}}}}) __user_print('uploads to entries back to uploads', { - 'm_uploads': { + Token.UPLOADS: { 'id_published_with_ref': { - 'm_entries': { + Token.ENTRIES: { 'id_01': { 'm_request': { 'directive': 'plain', @@ -416,74 +427,34 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): } } - }, result={'m_uploads': {'id_published_with_ref': {'m_entries': { + }, result={Token.UPLOADS: {'id_published_with_ref': {Token.ENTRIES: { 'id_01': { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_01', - 'entry_create_time': '2023-03-05T21:31:56.875000', 'mainfile': 'mainfile_for_id_01', - 'mainfile_key': None, 'parser_name': 'parsers/vasp', 'entry_metadata': None, + 'entry_create_time': '2023-03-05T21:31:56.875000', 'mainfile_path': 'mainfile_for_id_01', + 'mainfile_key': None, 'parser_name': 'parsers/vasp', 'upload_id': { 'process_running': False, 'current_process': 'process_upload', 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': '2023-03-05T21:31:56.873000', 'upload_id': 'id_published_with_ref', 'upload_name': 'name_published', 'upload_create_time': '2023-03-05T21:31:56.872000', - 'main_author': '00000000-0000-0000-0000-000000000001', 'coauthors': [], 'reviewers': [], - 'viewers': ['00000000-0000-0000-0000-000000000001'], - 'writers': ['00000000-0000-0000-0000-000000000001'], 'published': False, + 'main_author': user_dict, 'coauthors': [], 'reviewers': [], + 'viewers': [user_dict], + 'writers': [user_dict], 'published': False, + 'processing_failed': 0, 'processing_successful': 6, 'published_to': [], 'publish_time': None, 'with_embargo': False, 'embargo_length': 0, - 'license': 'CC BY 4.0', 'entries': 6, + 'license': 'CC BY 4.0', 'n_entries': 6, 'upload_files_server_path': 'id_published_with_ref'}}}}}}) - __user_print('uploads to entries back to uploads, resolve viewers', { - 'm_uploads': { - 'id_published_with_ref': { - 'm_entries': { - 'id_01': { - 'm_request': { - 'directive': 'plain', - }, - 'upload_id': { - 'm_request': { - 'directive': 'plain', - }, - 'viewers': { - 'username': { - 'm_request': '*' - } - } - } - } - } - } - - } - }, result={'m_uploads': {'id_published_with_ref': {'m_entries': { - 'id_01': { - 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', - 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_01', - 'entry_create_time': '2023-03-05T21:31:56.875000', 'mainfile': 'mainfile_for_id_01', - 'mainfile_key': None, 'parser_name': 'parsers/vasp', 'entry_metadata': None, - 'upload_id': { - 'process_running': False, 'current_process': 'process_upload', - 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], - 'complete_time': '2023-03-05T21:31:56.873000', 'upload_id': 'id_published_with_ref', - 'upload_name': 'name_published', 'upload_create_time': '2023-03-05T21:31:56.872000', - 'main_author': '00000000-0000-0000-0000-000000000001', 'coauthors': [], 'reviewers': [], - 'writers': ['00000000-0000-0000-0000-000000000001'], 'published': False, - 'published_to': [], 'publish_time': None, 'with_embargo': False, 'embargo_length': 0, - 'license': 'CC BY 4.0', 'entries': 6, - 'upload_files_server_path': 'id_published_with_ref', - 'viewers': [{'username': 'scooper'}]}}}}}}) - __user_print('uploads to entries to archive', { - 'm_uploads': { + Token.UPLOADS: { 'id_published_with_ref': { - 'm_entries': { + Token.ENTRIES: { 'id_01': { 'm_request': { 'directive': 'plain', }, - 'm_archive': { + Token.ARCHIVE: { 'm_request': { 'directive': 'plain', 'include': ['results'] @@ -494,14 +465,15 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): } } - }, result={'m_uploads': {'id_published_with_ref': {'m_entries': { + }, result={Token.UPLOADS: {'id_published_with_ref': {Token.ENTRIES: { 'id_01': { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_01', - 'entry_create_time': '2023-03-05T21:31:56.875000', 'mainfile': 'mainfile_for_id_01', + 'entry_create_time': '2023-03-05T21:31:56.875000', 'mainfile_path': 'mainfile_for_id_01', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', 'parser_name': 'parsers/vasp', - 'entry_metadata': None, 'm_archive': {'results': { + Token.ARCHIVE: {'results': { 'material': { + 'dimensionality': '3D', 'material_id': 'test_material_id', 'elements': ['H', 'O'], 'symmetry': {'crystal_system': 'cubic'}}, 'method': {'simulation': {'program_name': 'VASP', 'dft': {'xc_functional_type': 'GGA'}}}, @@ -527,15 +499,16 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': '2023-03-05T22:12:08.421000', 'upload_id': 'id_published_with_ref', 'upload_name': 'name_published', 'upload_create_time': '2023-03-05T22:12:08.420000', - 'main_author': '00000000-0000-0000-0000-000000000001', 'coauthors': [], 'reviewers': [], - 'viewers': ['00000000-0000-0000-0000-000000000001'], 'writers': ['00000000-0000-0000-0000-000000000001'], + 'main_author': user_dict, 'coauthors': [], 'reviewers': [], + 'viewers': [user_dict], 'writers': [user_dict], 'published': False, 'published_to': [], 'publish_time': None, 'with_embargo': False, 'embargo_length': 0, - 'license': 'CC BY 4.0', 'entries': 6, + 'processing_failed': 0, 'processing_successful': 6, + 'license': 'CC BY 4.0', 'n_entries': 6, 'upload_files_server_path': 'id_published_with_ref'}) __upload_print('upload, resolve raw files', { 'm_request': '*', - 'm_raw': { + Token.RAW: { 'm_request': '*', 'mainfile_for_id_01': { 'm_request': { @@ -548,33 +521,39 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': '2023-03-05T22:16:52.436000', 'upload_id': 'id_published_with_ref', 'upload_name': 'name_published', 'upload_create_time': '2023-03-05T22:16:52.435000', - 'main_author': '00000000-0000-0000-0000-000000000001', 'coauthors': [], 'reviewers': [], - 'viewers': ['00000000-0000-0000-0000-000000000001'], 'writers': ['00000000-0000-0000-0000-000000000001'], + 'main_author': user_dict, 'coauthors': [], 'reviewers': [], + 'viewers': [user_dict], 'writers': [user_dict], 'published': False, 'published_to': [], 'publish_time': None, 'with_embargo': False, 'embargo_length': 0, - 'license': 'CC BY 4.0', 'entries': 6, + 'processing_failed': 0, 'processing_successful': 6, + 'license': 'CC BY 4.0', 'n_entries': 6, 'upload_files_server_path': 'id_published_with_ref', - 'm_raw': { + Token.RAW: { + 'm_is': 'Directory', + '1.aux': {'path': '1.aux', 'm_is': 'File', 'size': 8}, + '2.aux': {'path': '2.aux', 'm_is': 'File', 'size': 8}, + '3.aux': {'path': '3.aux', 'm_is': 'File', 'size': 8}, + '4.aux': {'path': '4.aux', 'm_is': 'File', 'size': 8}, 'mainfile_for_id_02': { - 'path': 'mainfile_for_id_02', 'is_file': True, 'size': 3231, 'access': 'unpublished'}, + 'path': 'mainfile_for_id_02', 'm_is': 'File', 'size': 3231}, 'mainfile_for_id_03': { - 'path': 'mainfile_for_id_03', 'is_file': True, 'size': 3231, 'access': 'unpublished'}, + 'path': 'mainfile_for_id_03', 'm_is': 'File', 'size': 3231}, 'mainfile_for_id_04': { - 'path': 'mainfile_for_id_04', 'is_file': True, 'size': 3231, 'access': 'unpublished'}, + 'path': 'mainfile_for_id_04', 'm_is': 'File', 'size': 3231}, 'mainfile_for_id_05': { - 'path': 'mainfile_for_id_05', 'is_file': True, 'size': 3231, 'access': 'unpublished'}, + 'path': 'mainfile_for_id_05', 'm_is': 'File', 'size': 3231}, 'mainfile_for_id_06': { - 'path': 'mainfile_for_id_06', 'is_file': True, 'size': 3231, 'access': 'unpublished'}, + 'path': 'mainfile_for_id_06', 'm_is': 'File', 'size': 3231}, 'mainfile_for_id_01': { - 'path': 'mainfile_for_id_01', 'is_file': True, 'size': 3231, 'access': 'unpublished', - 'm_entries': { + 'path': 'mainfile_for_id_01', 'm_is': 'File', 'size': 3231, + Token.ENTRY: { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_01', 'entry_create_time': '2023-03-05T22:16:52.438000', - 'mainfile': 'mainfile_for_id_01', 'mainfile_key': None, + 'mainfile_path': 'mainfile_for_id_01', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', - 'parser_name': 'parsers/vasp', 'entry_metadata': None}}}}) + 'parser_name': 'parsers/vasp'}}}}) __upload_print('upload, resolve user', { 'm_request': { @@ -591,13 +570,14 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': '2023-03-05T22:16:52.436000', 'upload_id': 'id_published_with_ref', 'upload_name': 'name_published', 'upload_create_time': '2023-03-05T22:16:52.435000', - 'main_author': '00000000-0000-0000-0000-000000000001', 'coauthors': [], 'reviewers': [], - 'writers': ['00000000-0000-0000-0000-000000000001'], 'published': False, 'published_to': [], - 'publish_time': None, 'with_embargo': False, 'embargo_length': 0, 'license': 'CC BY 4.0', 'entries': 6, + 'main_author': user_dict, 'coauthors': [], 'reviewers': [], + 'writers': [user_dict], 'published': False, 'published_to': [], + 'publish_time': None, 'with_embargo': False, 'embargo_length': 0, 'license': 'CC BY 4.0', 'n_entries': 6, + 'processing_failed': 0, 'processing_successful': 6, 'upload_files_server_path': 'id_published_with_ref', 'viewers': [{ 'name': 'Sheldon Cooper', 'first_name': 'Sheldon', 'last_name': 'Cooper', - 'email': 'sheldon.cooper@nomad-coe.eu', 'user_id': '00000000-0000-0000-0000-000000000001', + 'email': 'sheldon.cooper@nomad-coe.eu', 'user_id': user_dict, 'username': 'scooper', 'is_admin': False, 'is_oasis_admin': True}]}) __upload_print('resolve itself using upload id', { @@ -614,21 +594,23 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): 'process_running': False, 'current_process': 'process_upload', 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': '2023-03-05T22:16:52.436000', 'upload_name': 'name_published', 'upload_create_time': '2023-03-05T22:16:52.435000', - 'main_author': '00000000-0000-0000-0000-000000000001', 'coauthors': [], 'reviewers': [], - 'viewers': ['00000000-0000-0000-0000-000000000001'], 'writers': ['00000000-0000-0000-0000-000000000001'], + 'main_author': user_dict, 'coauthors': [], 'reviewers': [], + 'viewers': [user_dict], 'writers': [user_dict], 'published': False, 'published_to': [], 'publish_time': None, 'with_embargo': False, 'embargo_length': 0, - 'license': 'CC BY 4.0', 'entries': 6, + 'license': 'CC BY 4.0', 'n_entries': 6, + 'processing_failed': 0, 'processing_successful': 6, 'upload_files_server_path': 'id_published_with_ref', 'upload_id': { 'process_running': False, 'current_process': 'process_upload', 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': '2023-03-05T22:16:52.436000', 'upload_id': 'id_published_with_ref', 'upload_name': 'name_published', 'upload_create_time': '2023-03-05T22:16:52.435000', - 'main_author': '00000000-0000-0000-0000-000000000001', 'coauthors': [], 'reviewers': [], - 'viewers': ['00000000-0000-0000-0000-000000000001'], - 'writers': ['00000000-0000-0000-0000-000000000001'], 'published': False, + 'main_author': user_dict, 'coauthors': [], 'reviewers': [], + 'viewers': [user_dict], + 'writers': [user_dict], 'published': False, 'published_to': [], 'publish_time': None, 'with_embargo': False, 'embargo_length': 0, - 'license': 'CC BY 4.0', 'entries': 6, + 'license': 'CC BY 4.0', 'n_entries': 6, + 'processing_failed': 0, 'processing_successful': 6, 'upload_files_server_path': 'id_published_with_ref'}}) __upload_print('resolve itself twice then go to entry', { @@ -637,7 +619,7 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): 'directive': 'plain', }, 'upload_id': { - 'm_entries': { + Token.ENTRIES: { 'id_01': { 'm_request': { 'directive': 'plain', @@ -651,14 +633,15 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': '2023-03-05T22:16:52.436000', 'upload_name': 'name_published', 'upload_create_time': '2023-03-05T22:16:52.435000', - 'main_author': '00000000-0000-0000-0000-000000000001', 'coauthors': [], 'reviewers': [], - 'viewers': ['00000000-0000-0000-0000-000000000001'], - 'writers': ['00000000-0000-0000-0000-000000000001'], 'published': False, + 'main_author': user_dict, 'coauthors': [], 'reviewers': [], + 'viewers': [user_dict], + 'writers': [user_dict], 'published': False, 'published_to': [], 'publish_time': None, 'with_embargo': False, 'embargo_length': 0, - 'license': 'CC BY 4.0', 'entries': 6, + 'license': 'CC BY 4.0', 'n_entries': 6, + 'processing_failed': 0, 'processing_successful': 6, 'upload_files_server_path': 'id_published_with_ref', 'upload_id': { - 'm_entries': { + Token.ENTRIES: { 'id_01': { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', @@ -666,11 +649,11 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): 'warnings': [], 'complete_time': None, 'entry_id': 'id_01', 'entry_create_time': '2023-03-05T22:16:52.438000', - 'mainfile': 'mainfile_for_id_01', + 'mainfile_path': 'mainfile_for_id_01', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', - 'parser_name': 'parsers/vasp', - 'entry_metadata': None}}}}}) + 'parser_name': 'parsers/vasp' + }}}}}) __upload_print('resolve itself twice then go to entry, collect other info on different levels', { 'm_request': { @@ -678,7 +661,7 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): }, 'upload_id': { 'upload_id': { - 'm_entries': { + Token.ENTRIES: { 'id_01': { 'm_request': { 'directive': 'plain', @@ -691,21 +674,22 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): 'process_running': False, 'current_process': 'process_upload', 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': '2023-03-05T22:16:52.436000', 'upload_name': 'name_published', 'upload_create_time': '2023-03-05T22:16:52.435000', - 'main_author': '00000000-0000-0000-0000-000000000001', 'coauthors': [], 'reviewers': [], - 'viewers': ['00000000-0000-0000-0000-000000000001'], 'writers': ['00000000-0000-0000-0000-000000000001'], + 'main_author': user_dict, 'coauthors': [], 'reviewers': [], + 'viewers': [user_dict], 'writers': [user_dict], 'published': False, 'published_to': [], 'publish_time': None, 'with_embargo': False, 'embargo_length': 0, - 'license': 'CC BY 4.0', 'entries': 6, + 'license': 'CC BY 4.0', 'n_entries': 6, + 'processing_failed': 0, 'processing_successful': 6, 'upload_files_server_path': 'id_published_with_ref', 'upload_id': { 'upload_id': { - 'm_entries': { + Token.ENTRIES: { 'id_01': { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_01', 'entry_create_time': '2023-03-05T22:16:52.438000', - 'mainfile': 'mainfile_for_id_01', 'mainfile_key': None, + 'mainfile_path': 'mainfile_for_id_01', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', 'parser_name': 'parsers/vasp', - 'entry_metadata': None}}}}}) + }}}}}) def __entry_print(msg, required, *, to_file: bool = False, result: dict = None): with EntryReader(required, user=test_user) as reader: @@ -728,24 +712,26 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): }, result={ 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_03', - 'entry_create_time': '2023-03-05T22:16:52.440000', 'mainfile': 'mainfile_for_id_03', + 'entry_create_time': '2023-03-05T22:16:52.440000', 'mainfile_path': 'mainfile_for_id_03', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', 'parser_name': 'parsers/vasp', - 'entry_metadata': None}) + }) __entry_print('plain entry reader, resolve inplace', { - 'm_archive': { + Token.ARCHIVE: { 'm_request': { 'directive': 'resolved', 'resolve_inplace': True, 'include': ['workflow2'] }, } - }, result={'m_uploads': {'id_published_with_ref': {'m_entries': {'id_01': {'m_archive': { + }, result={Token.UPLOADS: {'id_published_with_ref': {Token.ENTRIES: {'id_01': {Token.ARCHIVE: { 'workflow2': { - 'results': {'calculation_result_ref': 'm_uploads/id_published_with_ref/m_entries/id_01/m_archive/run/0/calculation/1'}}, + 'results': { + 'calculation_result_ref': + 'uploads/id_published_with_ref/entries/id_01/archive/run/0/calculation/1'}}, 'run': [{ 'calculation': [ None, { - 'system_ref': 'm_uploads/id_published_with_ref/m_entries/id_01/m_archive/run/0/system/1', + 'system_ref': 'uploads/id_published_with_ref/entries/id_01/archive/run/0/system/1', 'energy': { 'total': { 'value': 0.2}}, @@ -764,11 +750,11 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): 'labels': [ 'H']}, 'symmetry': [{ - 'space_group_number': 221}]}]}]}}}}}, - 'm_archive': {'workflow2': {'tasks': [ - {'task': 'm_uploads/id_published_with_ref/m_entries/id_01/m_archive/workflow2'}]}}}) + 'space_group_number': 221}]}]}]}}}}}, Token.ARCHIVE: { + 'workflow2': {'tasks': [{ + 'task': 'uploads/id_published_with_ref/entries/id_01/archive/workflow2'}]}}}) __entry_print('plain entry reader, resolve to root', { - 'm_archive': { + Token.ARCHIVE: { 'm_request': { 'directive': 'resolved', 'resolve_inplace': False, @@ -776,13 +762,15 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): }, } }, result={ - 'm_uploads': {'id_published_with_ref': {'m_entries': {'id_01': {'m_archive': { + Token.UPLOADS: {'id_published_with_ref': {Token.ENTRIES: {'id_01': {Token.ARCHIVE: { 'workflow2': { - 'results': {'calculation_result_ref': 'm_uploads/id_published_with_ref/m_entries/id_01/m_archive/run/0/calculation/1'}}, + 'results': { + 'calculation_result_ref': + 'uploads/id_published_with_ref/entries/id_01/archive/run/0/calculation/1'}}, 'run': [{ 'calculation': [ None, { - 'system_ref': 'm_uploads/id_published_with_ref/m_entries/id_01/m_archive/run/0/system/1', + 'system_ref': 'uploads/id_published_with_ref/entries/id_01/archive/run/0/system/1', 'energy': { 'total': { 'value': 0.2}}, @@ -802,27 +790,8 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): 'H']}, 'symmetry': [{ 'space_group_number': 221}]}]}]}}}}}, - 'm_archive': {'workflow2': { - 'tasks': [{'task': 'm_uploads/id_published_with_ref/m_entries/id_01/m_archive/workflow2'}]}}}) - # __entry_print('plain entry reader, resolve inplace', { - # 'm_archive': { - # 'workflow[0]': { - # 'm_def': { - # 'm_request': { - # 'directive': 'resolved', - # 'resolve_inplace': False, - # }, - # 'inherited_sections': '*' - # }, - # 'm_request': { - # 'directive': 'resolved', - # 'resolve_inplace': True, - # 'resolve_depth': 2, - # 'max_list_size': 5 - # }, - # } - # } - # }, to_file=True) + Token.ARCHIVE: {'workflow2': { + 'tasks': [{'task': 'uploads/id_published_with_ref/entries/id_01/archive/workflow2'}]}}}) __entry_print('go to upload, resolve explicitly', { 'm_request': { @@ -837,18 +806,19 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): }, result={ 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_03', - 'entry_create_time': '2023-03-05T22:16:52.440000', 'mainfile': 'mainfile_for_id_03', - 'mainfile_key': None, 'parser_name': 'parsers/vasp', 'entry_metadata': None, + 'entry_create_time': '2023-03-05T22:16:52.440000', 'mainfile_path': 'mainfile_for_id_03', + 'mainfile_key': None, 'parser_name': 'parsers/vasp', 'upload_id': { 'process_running': False, 'current_process': 'process_upload', 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': '2023-03-05T22:16:52.436000', 'upload_id': 'id_published_with_ref', 'upload_name': 'name_published', 'upload_create_time': '2023-03-05T22:16:52.435000', - 'main_author': '00000000-0000-0000-0000-000000000001', 'coauthors': [], 'reviewers': [], - 'viewers': ['00000000-0000-0000-0000-000000000001'], - 'writers': ['00000000-0000-0000-0000-000000000001'], 'published': False, + 'main_author': user_dict, 'coauthors': [], 'reviewers': [], + 'viewers': [user_dict], + 'writers': [user_dict], 'published': False, 'published_to': [], 'publish_time': None, 'with_embargo': False, 'embargo_length': 0, - 'license': 'CC BY 4.0', 'entries': 6, + 'processing_failed': 0, 'processing_successful': 6, + 'license': 'CC BY 4.0', 'n_entries': 6, 'upload_files_server_path': 'id_published_with_ref'}}) __entry_print('go to upload, resolve implicitly, resolve main author explicitly', { @@ -869,22 +839,23 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): }, result={ 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_03', - 'entry_create_time': '2023-03-05T22:16:52.440000', 'mainfile': 'mainfile_for_id_03', - 'mainfile_key': None, 'parser_name': 'parsers/vasp', 'entry_metadata': None, + 'entry_create_time': '2023-03-05T22:16:52.440000', 'mainfile_path': 'mainfile_for_id_03', + 'mainfile_key': None, 'parser_name': 'parsers/vasp', 'upload_id': { 'process_running': False, 'current_process': 'process_upload', 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': '2023-03-05T22:16:52.436000', 'upload_id': 'id_published_with_ref', 'upload_name': 'name_published', 'upload_create_time': '2023-03-05T22:16:52.435000', - 'coauthors': [], 'reviewers': [], 'viewers': ['00000000-0000-0000-0000-000000000001'], - 'writers': ['00000000-0000-0000-0000-000000000001'], 'published': False, + 'coauthors': [], 'reviewers': [], 'viewers': [user_dict], + 'writers': [user_dict], 'published': False, 'published_to': [], 'publish_time': None, 'with_embargo': False, 'embargo_length': 0, - 'license': 'CC BY 4.0', 'entries': 6, + 'license': 'CC BY 4.0', 'n_entries': 6, + 'processing_failed': 0, 'processing_successful': 6, 'upload_files_server_path': 'id_published_with_ref', 'main_author': { 'name': 'Sheldon Cooper', 'first_name': 'Sheldon', 'last_name': 'Cooper', 'email': 'sheldon.cooper@nomad-coe.eu', - 'user_id': '00000000-0000-0000-0000-000000000001', 'username': 'scooper', + 'user_id': user_dict, 'username': 'scooper', 'is_admin': False, 'is_oasis_admin': True}}}) def __fs_print(msg, required, *, result: dict = None): @@ -902,78 +873,88 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): 'directive': 'plain', }, }, result={ - 'mainfile_for_id_01': {'path': 'mainfile_for_id_01', 'is_file': True, 'size': 3231, 'access': 'unpublished'}, - 'mainfile_for_id_02': {'path': 'mainfile_for_id_02', 'is_file': True, 'size': 3231, 'access': 'unpublished'}, - 'mainfile_for_id_03': {'path': 'mainfile_for_id_03', 'is_file': True, 'size': 3231, 'access': 'unpublished'}, - 'mainfile_for_id_04': {'path': 'mainfile_for_id_04', 'is_file': True, 'size': 3231, 'access': 'unpublished'}, - 'mainfile_for_id_05': {'path': 'mainfile_for_id_05', 'is_file': True, 'size': 3231, 'access': 'unpublished'}, - 'mainfile_for_id_06': {'path': 'mainfile_for_id_06', 'is_file': True, 'size': 3231, 'access': 'unpublished'}}) + 'm_is': 'Directory', + '1.aux': {'path': '1.aux', 'm_is': 'File', 'size': 8}, + '2.aux': {'path': '2.aux', 'm_is': 'File', 'size': 8}, + '3.aux': {'path': '3.aux', 'm_is': 'File', 'size': 8}, + '4.aux': {'path': '4.aux', 'm_is': 'File', 'size': 8}, + 'mainfile_for_id_01': {'path': 'mainfile_for_id_01', 'm_is': 'File', 'size': 3231}, + 'mainfile_for_id_02': {'path': 'mainfile_for_id_02', 'm_is': 'File', 'size': 3231}, + 'mainfile_for_id_03': {'path': 'mainfile_for_id_03', 'm_is': 'File', 'size': 3231}, + 'mainfile_for_id_04': {'path': 'mainfile_for_id_04', 'm_is': 'File', 'size': 3231}, + 'mainfile_for_id_05': {'path': 'mainfile_for_id_05', 'm_is': 'File', 'size': 3231}, + 'mainfile_for_id_06': {'path': 'mainfile_for_id_06', 'm_is': 'File', 'size': 3231}}) __fs_print('go to entry', { 'm_request': { 'directive': 'resolved', }, }, result={ + 'm_is': 'Directory', + '1.aux': {'path': '1.aux', 'm_is': 'File', 'size': 8}, + '2.aux': {'path': '2.aux', 'm_is': 'File', 'size': 8}, + '3.aux': {'path': '3.aux', 'm_is': 'File', 'size': 8}, + '4.aux': {'path': '4.aux', 'm_is': 'File', 'size': 8}, 'mainfile_for_id_01': { - 'path': 'mainfile_for_id_01', 'is_file': True, 'size': 3231, 'access': 'unpublished', - 'm_entries': { + 'path': 'mainfile_for_id_01', 'm_is': 'File', 'size': 3231, + Token.ENTRY: { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_01', 'entry_create_time': '2023-03-05T22:16:52.438000', - 'mainfile': 'mainfile_for_id_01', 'mainfile_key': None, + 'mainfile_path': 'mainfile_for_id_01', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', 'parser_name': 'parsers/vasp', - 'entry_metadata': None}}, + }}, 'mainfile_for_id_02': { - 'path': 'mainfile_for_id_02', 'is_file': True, 'size': 3231, 'access': 'unpublished', - 'm_entries': { + 'path': 'mainfile_for_id_02', 'm_is': 'File', 'size': 3231, + Token.ENTRY: { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_02', 'entry_create_time': '2023-03-05T22:16:52.439000', - 'mainfile': 'mainfile_for_id_02', 'mainfile_key': None, + 'mainfile_path': 'mainfile_for_id_02', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', 'parser_name': 'parsers/vasp', - 'entry_metadata': None}}, + }}, 'mainfile_for_id_03': { - 'path': 'mainfile_for_id_03', 'is_file': True, 'size': 3231, 'access': 'unpublished', - 'm_entries': { + 'path': 'mainfile_for_id_03', 'm_is': 'File', 'size': 3231, + Token.ENTRY: { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_03', 'entry_create_time': '2023-03-05T22:16:52.440000', - 'mainfile': 'mainfile_for_id_03', 'mainfile_key': None, + 'mainfile_path': 'mainfile_for_id_03', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', 'parser_name': 'parsers/vasp', - 'entry_metadata': None}}, + }}, 'mainfile_for_id_04': { - 'path': 'mainfile_for_id_04', 'is_file': True, 'size': 3231, 'access': 'unpublished', - 'm_entries': { + 'path': 'mainfile_for_id_04', 'm_is': 'File', 'size': 3231, + Token.ENTRY: { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_04', 'entry_create_time': '2023-03-05T22:16:52.441000', - 'mainfile': 'mainfile_for_id_04', 'mainfile_key': None, + 'mainfile_path': 'mainfile_for_id_04', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', 'parser_name': 'parsers/vasp', - 'entry_metadata': None}}, + }}, 'mainfile_for_id_05': { - 'path': 'mainfile_for_id_05', 'is_file': True, 'size': 3231, 'access': 'unpublished', - 'm_entries': { + 'path': 'mainfile_for_id_05', 'm_is': 'File', 'size': 3231, + Token.ENTRY: { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_05', 'entry_create_time': '2023-03-05T22:16:52.442000', - 'mainfile': 'mainfile_for_id_05', 'mainfile_key': None, + 'mainfile_path': 'mainfile_for_id_05', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', 'parser_name': 'parsers/vasp', - 'entry_metadata': None}}, + }}, 'mainfile_for_id_06': { - 'path': 'mainfile_for_id_06', 'is_file': True, 'size': 3231, 'access': 'unpublished', - 'm_entries': { + 'path': 'mainfile_for_id_06', 'm_is': 'File', 'size': 3231, + Token.ENTRY: { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_06', 'entry_create_time': '2023-03-05T22:16:52.443000', - 'mainfile': 'mainfile_for_id_06', 'mainfile_key': None, + 'mainfile_path': 'mainfile_for_id_06', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', 'parser_name': 'parsers/vasp', - 'entry_metadata': None}}}) + }}}) __fs_print('go to selected entry', { 'm_request': { @@ -985,21 +966,26 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): }, } }, result={ - 'mainfile_for_id_02': {'path': 'mainfile_for_id_02', 'is_file': True, 'size': 3231, 'access': 'unpublished'}, - 'mainfile_for_id_03': {'path': 'mainfile_for_id_03', 'is_file': True, 'size': 3231, 'access': 'unpublished'}, - 'mainfile_for_id_04': {'path': 'mainfile_for_id_04', 'is_file': True, 'size': 3231, 'access': 'unpublished'}, - 'mainfile_for_id_05': {'path': 'mainfile_for_id_05', 'is_file': True, 'size': 3231, 'access': 'unpublished'}, - 'mainfile_for_id_06': {'path': 'mainfile_for_id_06', 'is_file': True, 'size': 3231, 'access': 'unpublished'}, + 'm_is': 'Directory', + '1.aux': {'path': '1.aux', 'm_is': 'File', 'size': 8}, + '2.aux': {'path': '2.aux', 'm_is': 'File', 'size': 8}, + '3.aux': {'path': '3.aux', 'm_is': 'File', 'size': 8}, + '4.aux': {'path': '4.aux', 'm_is': 'File', 'size': 8}, + 'mainfile_for_id_02': {'path': 'mainfile_for_id_02', 'm_is': 'File', 'size': 3231}, + 'mainfile_for_id_03': {'path': 'mainfile_for_id_03', 'm_is': 'File', 'size': 3231}, + 'mainfile_for_id_04': {'path': 'mainfile_for_id_04', 'm_is': 'File', 'size': 3231}, + 'mainfile_for_id_05': {'path': 'mainfile_for_id_05', 'm_is': 'File', 'size': 3231}, + 'mainfile_for_id_06': {'path': 'mainfile_for_id_06', 'm_is': 'File', 'size': 3231}, 'mainfile_for_id_01': { - 'path': 'mainfile_for_id_01', 'is_file': True, 'size': 3231, 'access': 'unpublished', - 'm_entries': { + 'path': 'mainfile_for_id_01', 'm_is': 'File', 'size': 3231, + Token.ENTRY: { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_01', 'entry_create_time': '2023-03-05T22:16:52.438000', - 'mainfile': 'mainfile_for_id_01', 'mainfile_key': None, + 'mainfile_path': 'mainfile_for_id_01', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', 'parser_name': 'parsers/vasp', - 'entry_metadata': None}}}) + }}}) __fs_print('go to selected entry then to upload', { 'm_request': { @@ -1009,7 +995,7 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): 'm_request': { 'directive': 'plain', }, - 'm_entries': { + Token.ENTRY: { 'upload_id': { 'm_request': { 'directive': 'resolved', @@ -1019,26 +1005,31 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): } } }, result={ - 'mainfile_for_id_02': {'path': 'mainfile_for_id_02', 'is_file': True, 'size': 3231, 'access': 'unpublished'}, - 'mainfile_for_id_03': {'path': 'mainfile_for_id_03', 'is_file': True, 'size': 3231, 'access': 'unpublished'}, - 'mainfile_for_id_04': {'path': 'mainfile_for_id_04', 'is_file': True, 'size': 3231, 'access': 'unpublished'}, - 'mainfile_for_id_05': {'path': 'mainfile_for_id_05', 'is_file': True, 'size': 3231, 'access': 'unpublished'}, - 'mainfile_for_id_06': {'path': 'mainfile_for_id_06', 'is_file': True, 'size': 3231, 'access': 'unpublished'}, + 'm_is': 'Directory', + '1.aux': {'path': '1.aux', 'm_is': 'File', 'size': 8}, + '2.aux': {'path': '2.aux', 'm_is': 'File', 'size': 8}, + '3.aux': {'path': '3.aux', 'm_is': 'File', 'size': 8}, + '4.aux': {'path': '4.aux', 'm_is': 'File', 'size': 8}, + 'mainfile_for_id_02': {'path': 'mainfile_for_id_02', 'm_is': 'File', 'size': 3231}, + 'mainfile_for_id_03': {'path': 'mainfile_for_id_03', 'm_is': 'File', 'size': 3231}, + 'mainfile_for_id_04': {'path': 'mainfile_for_id_04', 'm_is': 'File', 'size': 3231}, + 'mainfile_for_id_05': {'path': 'mainfile_for_id_05', 'm_is': 'File', 'size': 3231}, + 'mainfile_for_id_06': {'path': 'mainfile_for_id_06', 'm_is': 'File', 'size': 3231}, 'mainfile_for_id_01': { - 'path': 'mainfile_for_id_01', 'is_file': True, 'size': 3231, 'access': 'unpublished', - 'm_entries': { + 'path': 'mainfile_for_id_01', 'm_is': 'File', 'size': 3231, + Token.ENTRY: { 'upload_id': { 'process_running': False, 'current_process': 'process_upload', 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': '2023-03-05T22:16:52.436000', 'upload_id': 'id_published_with_ref', 'upload_name': 'name_published', 'upload_create_time': '2023-03-05T22:16:52.435000', - 'main_author': '00000000-0000-0000-0000-000000000001', 'coauthors': [], - 'reviewers': [], 'viewers': ['00000000-0000-0000-0000-000000000001'], - 'writers': ['00000000-0000-0000-0000-000000000001'], + 'main_author': user_dict, 'coauthors': [], + 'reviewers': [], 'viewers': [user_dict], + 'writers': [user_dict], 'published': False, 'published_to': [], 'publish_time': None, 'with_embargo': False, 'embargo_length': 0, 'license': 'CC BY 4.0', - 'entries': 6, + 'processing_failed': 0, 'processing_successful': 6, 'n_entries': 6, 'upload_files_server_path': 'id_published_with_ref'}}}}) __fs_print('go to selected entry then to upload, skipping file info', { @@ -1046,7 +1037,7 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): 'directive': 'plain', }, 'mainfile_for_id_01': { - 'm_entries': { + Token.ENTRY: { 'upload_id': { 'm_request': { 'directive': 'resolved', @@ -1056,38 +1047,38 @@ def test_remote_reference(json_dict, example_data_with_reference, test_user): } } }, result={ - 'mainfile_for_id_02': {'path': 'mainfile_for_id_02', 'is_file': True, 'size': 3231, 'access': 'unpublished'}, - 'mainfile_for_id_03': {'path': 'mainfile_for_id_03', 'is_file': True, 'size': 3231, 'access': 'unpublished'}, - 'mainfile_for_id_04': {'path': 'mainfile_for_id_04', 'is_file': True, 'size': 3231, 'access': 'unpublished'}, - 'mainfile_for_id_05': {'path': 'mainfile_for_id_05', 'is_file': True, 'size': 3231, 'access': 'unpublished'}, - 'mainfile_for_id_06': {'path': 'mainfile_for_id_06', 'is_file': True, 'size': 3231, 'access': 'unpublished'}, - 'mainfile_for_id_01': {'m_entries': { + 'm_is': 'Directory', + '1.aux': {'path': '1.aux', 'm_is': 'File', 'size': 8}, + '2.aux': {'path': '2.aux', 'm_is': 'File', 'size': 8}, + '3.aux': {'path': '3.aux', 'm_is': 'File', 'size': 8}, + '4.aux': {'path': '4.aux', 'm_is': 'File', 'size': 8}, + 'mainfile_for_id_02': {'path': 'mainfile_for_id_02', 'm_is': 'File', 'size': 3231}, + 'mainfile_for_id_03': {'path': 'mainfile_for_id_03', 'm_is': 'File', 'size': 3231}, + 'mainfile_for_id_04': {'path': 'mainfile_for_id_04', 'm_is': 'File', 'size': 3231}, + 'mainfile_for_id_05': {'path': 'mainfile_for_id_05', 'm_is': 'File', 'size': 3231}, + 'mainfile_for_id_06': {'path': 'mainfile_for_id_06', 'm_is': 'File', 'size': 3231}, + 'mainfile_for_id_01': {'path': 'mainfile_for_id_01', 'm_is': 'File', 'size': 3231, Token.ENTRY: { 'upload_id': { 'process_running': False, 'current_process': 'process_upload', 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': '2023-03-05T22:16:52.436000', 'upload_id': 'id_published_with_ref', 'upload_name': 'name_published', 'upload_create_time': '2023-03-05T22:16:52.435000', - 'main_author': '00000000-0000-0000-0000-000000000001', 'coauthors': [], 'reviewers': [], - 'viewers': ['00000000-0000-0000-0000-000000000001'], - 'writers': ['00000000-0000-0000-0000-000000000001'], 'published': False, 'published_to': [], + 'main_author': user_dict, 'coauthors': [], 'reviewers': [], + 'viewers': [user_dict], + 'writers': [user_dict], 'published': False, 'published_to': [], 'publish_time': None, 'with_embargo': False, 'embargo_length': 0, 'license': 'CC BY 4.0', - 'entries': 6, + 'n_entries': 6, 'processing_failed': 0, 'processing_successful': 6, 'upload_files_server_path': 'id_published_with_ref'}}}}) __fs_print('go to selected entry then to upload, resolve user', { 'mainfile_for_id_01': { - 'm_entries': { + Token.ENTRY: { 'upload_id': { - 'main_author': { - 'm_request': { - 'directive': 'resolved', - 'resolve_type': 'user' - }, - } + 'main_author': '*' } } } - }, result={'mainfile_for_id_01': {'m_entries': {'upload_id': { + }, result={'m_is': 'Directory', 'mainfile_for_id_01': {Token.ENTRY: {'upload_id': { 'main_author': { 'name': 'Sheldon Cooper', 'first_name': 'Sheldon', 'last_name': 'Cooper', 'email': 'sheldon.cooper@nomad-coe.eu', 'user_id': '00000000-0000-0000-0000-000000000001', @@ -1119,7 +1110,7 @@ def test_general_reader(json_dict, example_data_with_reference, test_user): f.write(json.dumps(reader.read())) __ge_print('general start from entry', { - 'm_entries': { + Token.ENTRIES: { 'm_request': { 'directive': 'resolved', 'resolve_type': 'entry', @@ -1129,23 +1120,24 @@ def test_general_reader(json_dict, example_data_with_reference, test_user): } }, } - }, result={'m_entries': { + }, result={Token.ENTRIES: { + 'm_response': {}, 'id_04': { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_04', 'entry_create_time': '2023-03-05T22:29:55.842000', - 'mainfile': 'mainfile_for_id_04', 'mainfile_key': None, + 'mainfile_path': 'mainfile_for_id_04', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', 'parser_name': 'parsers/vasp', - 'entry_metadata': None}, + }, 'id_05': { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_05', 'entry_create_time': '2023-03-05T22:29:55.843000', - 'mainfile': 'mainfile_for_id_05', 'mainfile_key': None, + 'mainfile_path': 'mainfile_for_id_05', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', 'parser_name': 'parsers/vasp', - 'entry_metadata': None}}}) + }}}) __ge_print('general start from entry with wildcard', { - 'm_entries': { + Token.ENTRIES: { 'id_01': { 'm_request': { 'directive': 'plain', @@ -1154,27 +1146,50 @@ def test_general_reader(json_dict, example_data_with_reference, test_user): '*': { 'm_request': { 'directive': 'plain', - 'include': ['entry_id', 'mainfile'] + 'include': ['entry_id', 'mainfile_path'] }, "upload_id": "*" } } }, result={ - 'm_entries': { + Token.ENTRIES: { + 'm_response': {}, 'id_01': { 'process_running': False, 'current_process': None, 'process_status': 'SUCCESS', 'last_status_message': None, 'errors': [], 'warnings': [], 'complete_time': None, 'entry_id': 'id_01', 'entry_create_time': '2023-03-05T22:20:46.586000', - 'mainfile': 'mainfile_for_id_01', 'mainfile_key': None, + 'mainfile_path': 'mainfile_for_id_01', 'mainfile_key': None, 'upload_id': 'id_published_with_ref', 'parser_name': 'parsers/vasp', - 'entry_metadata': None}, - 'id_02': {'entry_id': 'id_02', 'mainfile': 'mainfile_for_id_02', 'upload_id': 'id_published_with_ref'}, - 'id_03': {'entry_id': 'id_03', 'mainfile': 'mainfile_for_id_03', 'upload_id': 'id_published_with_ref'}, - 'id_04': {'entry_id': 'id_04', 'mainfile': 'mainfile_for_id_04', 'upload_id': 'id_published_with_ref'}, - 'id_05': {'entry_id': 'id_05', 'mainfile': 'mainfile_for_id_05', 'upload_id': 'id_published_with_ref'}, - 'id_06': {'entry_id': 'id_06', 'mainfile': 'mainfile_for_id_06', 'upload_id': 'id_published_with_ref'}}}) + }, + 'id_02': {'entry_id': 'id_02', 'mainfile_path': 'mainfile_for_id_02', 'upload_id': 'id_published_with_ref'}, + 'id_03': {'entry_id': 'id_03', 'mainfile_path': 'mainfile_for_id_03', 'upload_id': 'id_published_with_ref'}, + 'id_04': {'entry_id': 'id_04', 'mainfile_path': 'mainfile_for_id_04', 'upload_id': 'id_published_with_ref'}, + 'id_05': {'entry_id': 'id_05', 'mainfile_path': 'mainfile_for_id_05', 'upload_id': 'id_published_with_ref'}, + 'id_06': {'entry_id': 'id_06', 'mainfile_path': 'mainfile_for_id_06', 'upload_id': 'id_published_with_ref'} + }}) + __ge_print('general start from entry to metadata', { + Token.ENTRIES: { + 'id_01': { + 'metadata': { + 'results': { + 'm_request': { + 'directive': 'plain', + } + } + } + } + } + }, result={'entries': {'id_01': {'metadata': {'results': { + 'material': { + 'dimensionality': '3D', 'symmetry': {'crystal_system': 'cubic'}, 'elements': ['H', 'O'], 'elements_exclusive': 'H O', + 'material_id': 'test_material_id', 'structural_type': 'not processed', 'n_elements': 2}, + 'method': {'simulation': {'program_version': 'not processed', 'dft': { + 'basis_set_type': 'unavailable', 'core_electron_treatment': 'unavailable', 'xc_functional_type': 'GGA', + 'xc_functional_names': [], 'jacobs_ladder': 'not processed'}, 'program_name': 'VASP'}}, 'properties': { + 'available_properties': ['dos_electronic'], 'n_calculations': 1, + 'electronic': {'dos_electronic': [{'spin_polarized': False, 'band_gap': [{'type': 'indirect'}]}]}}}}}}}) __ge_print('general start from entry WITHOUT retrieval of metadata (just listing)', { - 'm_entries': { + Token.SEARCH: { 'm_request': { 'directive': 'plain', 'pagination': { @@ -1186,9 +1201,11 @@ def test_general_reader(json_dict, example_data_with_reference, test_user): } }, } - }, result={'m_entries': {'id_03': 'id_03', 'id_04': 'id_04'}}) + }, result={Token.SEARCH: { + 'id_03': 'id_03', 'id_04': 'id_04', + 'm_response': {'query': {'aggregations': {}, 'owner': 'user'}}}}) __ge_print('general start from upload', { - 'm_uploads': { + Token.UPLOADS: { 'm_request': { 'directive': 'resolved', 'resolve_type': 'upload', @@ -1198,7 +1215,8 @@ def test_general_reader(json_dict, example_data_with_reference, test_user): }, } }, result={ - 'm_uploads': { + Token.UPLOADS: { + 'm_response': {}, 'id_published_with_ref': { 'process_running': False, 'current_process': 'process_upload', 'process_status': 'SUCCESS', 'last_status_message': None, @@ -1207,16 +1225,16 @@ def test_general_reader(json_dict, example_data_with_reference, test_user): 'upload_id': 'id_published_with_ref', 'upload_name': 'name_published', 'upload_create_time': '2023-03-05T22:20:46.583000', - 'main_author': '00000000-0000-0000-0000-000000000001', + 'main_author': user_dict, 'coauthors': [], 'reviewers': [], - 'viewers': ['00000000-0000-0000-0000-000000000001'], - 'writers': ['00000000-0000-0000-0000-000000000001'], + 'viewers': [user_dict], + 'writers': [user_dict], 'published': False, 'published_to': [], 'publish_time': None, 'with_embargo': False, 'embargo_length': 0, - 'license': 'CC BY 4.0', 'entries': 6, + 'license': 'CC BY 4.0', 'n_entries': 6, 'processing_failed': 0, 'processing_successful': 6, 'upload_files_server_path': 'id_published_with_ref'}}}) __ge_print('general start from upload with query and pagination', { - 'm_uploads': { + Token.UPLOADS: { 'm_request': { 'directive': 'resolved', 'resolve_type': 'upload', @@ -1230,7 +1248,8 @@ def test_general_reader(json_dict, example_data_with_reference, test_user): }, } }, result={ - 'm_uploads': { + Token.UPLOADS: { + 'm_response': {'query': {'is_processing': False}}, 'id_published_with_ref': { 'process_running': False, 'current_process': 'process_upload', 'process_status': 'SUCCESS', 'last_status_message': None, @@ -1239,29 +1258,29 @@ def test_general_reader(json_dict, example_data_with_reference, test_user): 'upload_id': 'id_published_with_ref', 'upload_name': 'name_published', 'upload_create_time': '2023-03-05T22:20:46.583000', - 'main_author': '00000000-0000-0000-0000-000000000001', + 'main_author': user_dict, 'coauthors': [], 'reviewers': [], - 'viewers': ['00000000-0000-0000-0000-000000000001'], - 'writers': ['00000000-0000-0000-0000-000000000001'], + 'viewers': [user_dict], + 'writers': [user_dict], 'published': False, 'published_to': [], 'publish_time': None, 'with_embargo': False, 'embargo_length': 0, - 'license': 'CC BY 4.0', 'entries': 6, + 'license': 'CC BY 4.0', 'n_entries': 6, 'processing_failed': 0, 'processing_successful': 6, 'upload_files_server_path': 'id_published_with_ref'}}}) __ge_print('general start from user, does NOT perform search from security', { - 'm_users': { + Token.USER: { 'me': { 'm_request': { 'directive': 'plain' }, } } - }, result={'m_users': {'me': { + }, result={Token.USER: {'me': { 'name': 'Sheldon Cooper', 'first_name': 'Sheldon', 'last_name': 'Cooper', 'email': 'sheldon.cooper@nomad-coe.eu', 'user_id': '00000000-0000-0000-0000-000000000001', 'username': 'scooper', 'is_admin': False, 'is_oasis_admin': True}}}) __ge_print('general start from me, with its user id like fields resolved', { - 'm_users': { + Token.USER: { 'me': { 'm_request': { 'directive': 'resolved', @@ -1269,7 +1288,7 @@ def test_general_reader(json_dict, example_data_with_reference, test_user): }, } } - }, result={'m_users': {'me': { + }, result={Token.USER: {'me': { 'name': 'Sheldon Cooper', 'first_name': 'Sheldon', 'last_name': 'Cooper', 'email': 'sheldon.cooper@nomad-coe.eu', 'user_id': { @@ -1278,28 +1297,62 @@ def test_general_reader(json_dict, example_data_with_reference, test_user): 'user_id': '00000000-0000-0000-0000-000000000001', 'username': 'scooper', 'is_admin': False, 'is_oasis_admin': True}, 'username': 'scooper', 'is_admin': False, 'is_oasis_admin': True}}}) - # __ge_print('general start from entry to archive', { - # 'm_entries': { - # 'id_03': { - # 'm_archive': { - # 'workflow[0]': { - # 'm_request': { - # 'directive': 'resolved', - # 'resolve_inplace': False, - # 'include_definition': 'both', - # } - # } - # } - # } - # } - # }) - # __ge_print('general start from entry to archive', { - # 'm_entries': { - # 'id_01': { - # 'm_archive': '*' - # } - # } - # }, to_file=True) + + +# noinspection DuplicatedCode,SpellCheckingInspection +def test_general_reader_search(json_dict, example_data_with_reference, test_user): + def increment(): + n = 0 + while True: + n += 1 + yield n + + counter = increment() + + def __ge_print(msg, required, *, to_file: bool = False, result: dict = None): + with MongoReader(required, user=test_user) as reader: + if result: + assert_dict(reader.read(), result) + else: + rprint(f'\n\nExample: {next(counter)} -> {msg}:') + rprint(required) + if not to_file: + rprint('output:') + rprint(reader.read()) + else: + with open('archive_reader_test.json', 'w') as f: + f.write(json.dumps(reader.read())) + + __ge_print('general start from elastic search', { + Token.SEARCH: { + 'm_request': { + 'query': {}, + 'exclude': ['*'] + }, + 'id_01': { + Token.ENTRIES: { + 'mainfile': { + '..': '*' + } + } + } + } + }, result={ + 'search': { + 'm_response': {'query': {'aggregations': {}, 'owner': 'public'}}, + 'id_01': {'entries': {'mainfile': {'mainfile_for_id_01': {'..': { + 'm_is': 'Directory', + '1.aux': {'m_is': 'File', 'path': '1.aux', 'size': 8}, + '2.aux': {'m_is': 'File', 'path': '2.aux', 'size': 8}, + '3.aux': {'m_is': 'File', 'path': '3.aux', 'size': 8}, + '4.aux': {'m_is': 'File', 'path': '4.aux', 'size': 8}, + 'mainfile_for_id_01': {'m_is': 'File', 'path': 'mainfile_for_id_01', 'size': 3231}, + 'mainfile_for_id_02': {'m_is': 'File', 'path': 'mainfile_for_id_02', 'size': 3231}, + 'mainfile_for_id_03': {'m_is': 'File', 'path': 'mainfile_for_id_03', 'size': 3231}, + 'mainfile_for_id_04': {'m_is': 'File', 'path': 'mainfile_for_id_04', 'size': 3231}, + 'mainfile_for_id_05': {'m_is': 'File', 'path': 'mainfile_for_id_05', 'size': 3231}, + 'mainfile_for_id_06': {'m_is': 'File', 'path': 'mainfile_for_id_06', 'size': 3231} + }}}}}}}) @pytest.fixture(scope='function') diff --git a/tests/metainfo/test_metainfo.py b/tests/metainfo/test_metainfo.py index bd0035aac4d7582abe7fb6bfbf24cd87dbcf171b..bc95914a1ec5cb16f1d2a562cc7cbf2694d6b73c 100644 --- a/tests/metainfo/test_metainfo.py +++ b/tests/metainfo/test_metainfo.py @@ -778,6 +778,18 @@ class TestM1: assert copy.systems[0].m_parent_index == 0 assert copy.systems[0].m_parent_sub_section is run.systems[0].m_parent_sub_section + def test_copy_keeps_m_sub_section_list(self): + run = Run() + run.m_create(Parsing).parser_name = 'test' + system = run.m_create(System) + system.atom_labels = ['H', 'O'] + + copy = run.m_copy(deep=True) + copy.systems.append(System()) + + copy2 = copy.m_copy(deep=True) + copy2.m_to_dict() + def test_not_default_defaults(self): class TestSection(MSection): int_quantity = Quantity(type=int) @@ -843,6 +855,36 @@ class TestM1: system = root.m_setdefault(path) assert exception in str(exc_info.value) + def test_m_traverse(self): + expected = [ + ['quantity'], + ['child', 'quantity'], + ['child'], + ['child_repeated', 0, 'quantity'], + ['child_repeated'], + ['child_repeated', 1, 'quantity'], + ['child_repeated'], + ] + + class Child(MSection): + quantity = Quantity(type=int) + + class ChildRepeated(MSection): + quantity = Quantity(type=int) + + class Parent(MSection): + quantity = Quantity(type=int) + child = SubSection(sub_section=Child) + child_repeated = SubSection(sub_section=ChildRepeated, repeats=True) + + section = Parent( + quantity=1, + child=Child(quantity=2), + child_repeated=[ChildRepeated(quantity=3), ChildRepeated(quantity=4)] + ) + for i, [_, _, _, path] in enumerate(section.m_traverse()): + assert path == expected[i] + class TestEnvironment: diff --git a/tests/normalizing/conftest.py b/tests/normalizing/conftest.py index 84c5d63b1196bb4bc9099506e8e9d311479cce2a..4fca6108701f924f92e6d5909ec28834b381c4dc 100644 --- a/tests/normalizing/conftest.py +++ b/tests/normalizing/conftest.py @@ -21,10 +21,8 @@ import pytest from ase import Atoms import ase.build import re -import yaml from warnings import warn -from nomad.utils import strip from nomad.units import ureg from nomad.normalizing import normalizers from nomad.datamodel import EntryArchive @@ -40,13 +38,13 @@ from nomad.normalizing.common import cell_from_ase_atoms, nomad_atoms_from_ase_a from nomad.datamodel.metainfo.simulation.run import Run, Program from nomad.datamodel.metainfo.simulation.method import ( Method, BasisSetContainer, BasisSet, Electronic, DFT, XCFunctional, Functional, - Electronic, Smearing, Scf, GW, BSE, DMFT, AtomParameters, Projection, Wannier, + Electronic, Smearing, Scf, GW, Photon, BSE, DMFT, AtomParameters, Projection, Wannier, LatticeModelHamiltonian, HubbardKanamoriModel) from nomad.datamodel.metainfo.simulation.system import ( AtomsGroup, System, Atoms as NOMADAtoms) from nomad.datamodel.metainfo.simulation.calculation import ( Calculation, Energy, EnergyEntry, Dos, DosValues, BandStructure, BandEnergies, - RadiusOfGyration, RadiusOfGyrationValues) + RadiusOfGyration, RadiusOfGyrationValues, GreensFunctions, Spectra, ElectronicStructureProvenance) from nomad.datamodel.metainfo.simulation.workflow import ( DiffusionConstantValues, MolecularDynamicsMethod, @@ -69,9 +67,14 @@ from nomad.datamodel.metainfo.workflow import ( Link, TaskReference ) from nomad.datamodel.metainfo.simulation.workflow import ( - GWMethod, GW as GWworkflow + GWMethod, GW as GWworkflow, DMFTMethod, DMFT as DMFTworkflow, PhotonPolarization, + PhotonPolarizationMethod, PhotonPolarizationResults, XS as XSworkflow, MaxEntMethod, + MaxEnt as MaxEntworkflow ) -from nomad.datamodel.metainfo.measurements import Measurement, Sample +from nomad.datamodel.metainfo.measurements import ( + Measurement, Sample, EELSMeasurement, Spectrum, Instrument +) +from nomad.datamodel.results import EELSInstrument from nomad.datamodel.context import ServerContext from nomad.datamodel.datamodel import EntryArchive, EntryMetadata @@ -122,24 +125,12 @@ def normalized_template_example(parsed_template_example) -> EntryArchive: return run_normalize(parsed_template_example) -def get_template_dft() -> EntryArchive: - '''Returns a basic archive template for a DFT calculation. +def get_template_computation() -> EntryArchive: + '''Returns a basic archive template for a computational calculation ''' template = EntryArchive() run = template.m_create(Run) run.program = Program(name='VASP', version='4.6.35') - method = run.m_create(Method) - method.electrons_representation = [BasisSetContainer( - type='plane waves', - scope=['wavefunction'], - basis_set=[BasisSet( - type='plane waves', - scope=['valence'], - )] - )] - method.electronic = Electronic(method='DFT') - xc_functional = XCFunctional(exchange=[Functional(name='GGA_X_PBE')]) - method.dft = DFT(xc_functional=xc_functional) system = run.m_create(System) system.atoms = NOMADAtoms( lattice_vectors=[ @@ -157,44 +148,109 @@ def get_template_dft() -> EntryArchive: periodic=[True, True, True]) scc = run.m_create(Calculation) scc.system_ref = system - scc.method_ref = method scc.energy = Energy( free=EnergyEntry(value=-1.5936767191492225e-18), total=EnergyEntry(value=-1.5935696296699573e-18), total_t0=EnergyEntry(value=-3.2126683561907e-22)) + return template + + +def get_template_dft() -> EntryArchive: + '''Returns a basic archive template for a DFT calculation. + ''' + template = get_template_computation() + run = template.run[-1] + method = run.m_create(Method) + method.electrons_representation = [BasisSetContainer( + type='plane waves', + scope=['wavefunction'], + basis_set=[BasisSet( + type='plane waves', + scope=['valence'], + )] + )] + method.electronic = Electronic(method='DFT') + xc_functional = XCFunctional(exchange=[Functional(name='GGA_X_PBE')]) + method.dft = DFT(xc_functional=xc_functional) + scc = run.calculation[-1] + scc.method_ref = method template.workflow2 = GeometryOptimization() return template -def get_template_excited() -> EntryArchive: +def get_template_excited(type: str) -> EntryArchive: '''Returns a basic archive template for a ExcitedState calculation. ''' - template = EntryArchive() - run = template.m_create(Run) - run.program = Program(name='VASP', version='4.6.35') + template = get_template_computation() + run = template.run[-1] method = run.m_create(Method) - system = run.m_create(System) - system.atoms = NOMADAtoms( - lattice_vectors=[ - [5.76372622e-10, 0.0, 0.0], - [0.0, 5.76372622e-10, 0.0], - [0.0, 0.0, 4.0755698899999997e-10] - ], - positions=[ - [2.88186311e-10, 0.0, 2.0377849449999999e-10], - [0.0, 2.88186311e-10, 2.0377849449999999e-10], - [0.0, 0.0, 0.0], - [2.88186311e-10, 2.88186311e-10, 0.0], - ], - labels=['Br', 'K', 'Si', 'Si'], - periodic=[True, True, True]) - scc = run.m_create(Calculation) - scc.system_ref = system + if type == 'GW': + method.gw = GW(type='G0W0') + elif type == 'Photon': + photon = Photon(multipole_type='dipole') + method.m_add_sub_section(Method.photon, photon) + elif type == 'BSE': + method.bse = BSE(type='Singlet', solver='Lanczos-Haydock') + scc = run.calculation[-1] + scc.method_ref = method + template.workflow2 = SinglePoint() + return template + + +def get_template_projection() -> EntryArchive: + '''Returns a basic archive template for a Projection calculation. + ''' + template = get_template_computation() + run = template.run[-1] + run.program = Program(name='Wannier90', version='3.1.0') + method = run.m_create(Method) + method_proj = method.m_create(Projection) + method_proj.wannier = Wannier(is_maximally_localized=False) + system = run.system[-1] + system.m_add_sub_section(System.atoms_group, AtomsGroup( + label='Br', + type='projection', + index=0, + is_molecule=False, + n_atoms=1, + atom_indices=np.array([0]) + )) + scc = run.calculation[-1] + scc.method_ref = method + template.workflow2 = SinglePoint() + return template + + +def get_template_dmft() -> EntryArchive: + '''Returns a basic archive template for a DMFT calculation. + ''' + template = get_template_computation() + run = template.run[-1] + run.program = Program(name='w2dynamics') + input_method = run.m_create(Method) + input_model = input_method.m_create(LatticeModelHamiltonian) + input_model.hubbard_kanamori_model.append(HubbardKanamoriModel(orbital='d', u=4.0e-19, jh=0.6e-19)) + method_dmft = run.m_create(Method) + method_dmft.dmft = DMFT( + impurity_solver='CT-HYB', n_impurities=1, n_electrons=[1.0], n_correlated_orbitals=[3.0], + inverse_temperature=60.0, magnetic_state='paramagnetic') + method_dmft.starting_method_ref = input_method + scc = run.calculation[-1] + scc.method_ref = method_dmft + template.workflow2 = SinglePoint() + return template + + +def get_template_maxent() -> EntryArchive: + '''Returns a basic archive template for a MaxEnt analytical continuation calculation. + ''' + # TODO update when MaxEnt methodology is defined + template = get_template_computation() + run = template.run[-1] + run.program = Program(name='w2dynamics') + method = run.m_create(Method) + scc = run.calculation[-1] scc.method_ref = method - scc.energy = Energy( - free=EnergyEntry(value=-1.5936767191492225e-18), - total=EnergyEntry(value=-1.5935696296699573e-18), - total_t0=EnergyEntry(value=-3.2126683561907e-22)) template.workflow2 = SinglePoint() return template @@ -202,33 +258,37 @@ def get_template_excited() -> EntryArchive: def get_template_eels() -> EntryArchive: '''Returns a basic archive template for an EELS experiment. ''' - # Ensure that the eels schema is loaded - from eelsdbparser import eelsdb_parser # pylint: disable=unused-import,import-error - dct_data = yaml.safe_load(strip(f''' - results: - properties: - spectroscopy: - spectrum: '#/measurement/0/eels/spectrum' - eels: - detector_type: Quantum GIF - min_energy: {(100 * ureg.electron_volt).to(ureg.joule).m} - max_energy: {(200 * ureg.electron_volt).to(ureg.joule).m} - resolution: {(1 * ureg.electron_volt).to(ureg.joule).m} - measurement: - - method_name: electron energy loss spectroscopy - method_abbreviation: EELS - sample: - - elements: - - Si - - O - chemical_formula: SiO - eels: - spectrum: {{}} - ''')) - archive = EntryArchive.m_from_dict(dct_data) - archive.measurement[0].eels.spectrum.count = np.linspace(0, 100, 1) - archive.measurement[0].eels.spectrum.energy = np.linspace(100, 200, 1) - return archive + template = EntryArchive() + measurement = template.m_create(Measurement) + measurement.method_name = 'electron energy loss spectroscopy' + measurement.method_abbreviation = 'EELS' + # Sample + sample = Sample( + elements=['Si', 'O'], + chemical_formula='SiO' + ) + measurement.m_add_sub_section(Measurement.sample, sample) + # Instrument + instrument = measurement.m_create(Instrument) + min_energy = 100.0 * ureg.eV + max_energy = 200.0 * ureg.eV + instrument.eels = EELSInstrument( + min_energy=min_energy, + max_energy=max_energy, + detector_type='Quantum GIF', + resolution=1.0 * ureg.eV + ) + # Spectrum + eels_measurement = EELSMeasurement() + counts = np.linspace(0, 100, 101) + energies = np.linspace(100, 200, 101) * ureg.eV + spectrum = Spectrum( + count=counts, + energy=energies + ) + eels_measurement.m_add_sub_section(EELSMeasurement.spectrum, spectrum) + measurement.eels = eels_measurement + return template def get_template_for_structure(atoms: Atoms) -> EntryArchive: @@ -284,11 +344,12 @@ def add_template_dos( raise ValueError('Cannot create spin polarized DOS for non-electronic data.') scc = template.run[0].calculation[0] dos_type = Calculation.dos_electronic if type == 'electronic' else Calculation.dos_phonon - dos = scc.m_create(Dos, dos_type) energies = np.linspace(-5, 5, n_values) for i, range_list in enumerate(fill): + dos = scc.m_create(Dos, dos_type) + dos.spin_channel = i if (len(fill) == 2 and type == 'electronic') else None + dos.energies = energies * ureg.electron_volt dos_total = dos.m_create(DosValues, Dos.total) - dos_total.spin = i dos_value = np.zeros(n_values) for r in range_list: idx_bottom = (np.abs(energies - r[0])).argmin() @@ -296,7 +357,6 @@ def add_template_dos( dos_value[idx_bottom:idx_top] = 1 dos_total.value = dos_value - dos.energies = energies * ureg.electron_volt if energy_reference_fermi is not None: energy_reference_fermi *= ureg.electron_volt if energy_reference_highest_occupied is not None: @@ -423,33 +483,33 @@ def get_template_band_structure( return archive +def add_template_greens_functions(template: EntryArchive) -> EntryArchive: + '''Used to create a test data for Greens functions. + ''' + scc = template.run[0].calculation[0] + sec_gfs = scc.m_create(GreensFunctions) + sec_gfs.matsubara_freq = np.array([-2.0, -1.0, 0.0, 1.0, 2.0]) + sec_gfs.tau = np.array([-2.0, -1.0, 0.0, 1.0, 2.0]) + n_atoms = 1 + n_spin = 2 + n_orbitals = 3 + n_iw = len(sec_gfs.matsubara_freq) + self_energy_iw = [[[[w * 1j + o + s + a for w in range(n_iw)] for o in range(n_orbitals)] for s in range(n_spin)] for a in range(n_atoms)] + sec_gfs.self_energy_iw = self_energy_iw + sec_gfs.greens_function_tau = self_energy_iw + return template + + def get_template_gw_workflow() -> EntryArchive: + '''Returns a basic archive template for a GW workflow entry, composed of two main tasks: + DFT GeometryOptimization and GW SinglePoint.''' # Defining DFT and GW SinglePoint archives and adding band_structure and dos to them. archive_dft = get_template_dft() - archive_gw = get_template_excited() - band_gaps: List = None - type: str = 'electronic' - has_references: bool = True - has_reciprocal_cell: bool = True - archive_dft = add_template_band_structure( - archive_dft, band_gaps, type, has_references, has_reciprocal_cell) - archive_gw = add_template_band_structure( - archive_gw, band_gaps, type, has_references, has_reciprocal_cell) - fill: List = [[[0, 1], [2, 3]]] - energy_reference_fermi: Union[float, None] = None - energy_reference_highest_occupied: Union[float, None] = None - energy_reference_lowest_unoccupied: Union[float, None] = None - n_values: int = 101 - archive_dft = add_template_dos( - archive_dft, fill, energy_reference_fermi, energy_reference_highest_occupied, - energy_reference_lowest_unoccupied, n_values, type) - archive_gw = add_template_dos( - archive_gw, fill, energy_reference_fermi, energy_reference_highest_occupied, - energy_reference_lowest_unoccupied, n_values, type) - archive_gw.run[0].method = None - run = archive_gw.run[0] - method_gw = run.m_create(Method) - method_gw.gw = GW(type='G0W0') + archive_gw = get_template_excited(type='GW') + archive_dft = add_template_band_structure(archive_dft) + archive_gw = add_template_band_structure(archive_gw) + archive_dft = add_template_dos(archive_dft) + archive_gw = add_template_dos(archive_gw) # Normalizing SinglePoint archives run_normalize(archive_dft) run_normalize(archive_gw) @@ -460,7 +520,7 @@ def get_template_gw_workflow() -> EntryArchive: task_dft.outputs = [Link(name='Output DFT calculation', section=archive_dft.run[-1].calculation[-1])] task_gw = TaskReference(task=archive_gw.workflow2) task_gw.name = 'GW' - task_gw.inputs = [Link(name='Output DFT calculation', section=archive_gw.run[-1].calculation[-1])] + task_gw.inputs = [Link(name='Output DFT calculation', section=archive_dft.run[-1].calculation[-1])] task_gw.outputs = [Link(name='Output GW calculation', section=archive_gw.run[-1].calculation[-1])] # GW workflow entry (no need of creating Method nor Calculation) template = EntryArchive() @@ -482,6 +542,197 @@ def get_template_gw_workflow() -> EntryArchive: return template +def get_template_dmft_workflow() -> EntryArchive: + # Defining Projection and DMFT SinglePoint archives and adding band_structure and greens_functions to them. + archive_proj = get_template_projection() + archive_dmft = get_template_dmft() + archive_proj = add_template_band_structure(archive_proj) + archive_dmft = add_template_greens_functions(archive_dmft) + # Normalizing SinglePoint archives BEFORE defining the DMFT workflow entry + run_normalize(archive_proj) + run_normalize(archive_dmft) + # Defining Projection and DMFT tasks for later the DMFT workflow + task_proj = TaskReference(task=archive_proj.workflow2) + task_proj.name = 'Projection' + task_proj.inputs = [Link(name='Input structure', section=archive_proj.run[-1].system[-1])] + task_proj.outputs = [Link(name='Output Projection calculation', section=archive_proj.run[-1].calculation[-1])] + task_dmft = TaskReference(task=archive_dmft.workflow2) + task_dmft.name = 'DMFT' + task_dmft.inputs = [Link(name='Output Projection calculation', section=archive_proj.run[-1].calculation[-1])] + task_dmft.outputs = [Link(name='Output DMFT calculation', section=archive_dmft.run[-1].calculation[-1])] + # DMFT workflow entry (no need of creating Method nor Calculation) + template = EntryArchive() + run = template.m_create(Run) + run.program = archive_dmft.run[-1].program + run.system = archive_proj.run[-1].system + workflow = DMFTworkflow() + workflow.name = 'DMFT' + workflow_method = DMFTMethod( + projection_method_ref=archive_proj.run[-1].method[-1].projection, + dmft_method_ref=archive_dmft.run[-1].method[-1].dmft) + workflow.m_add_sub_section(DMFTworkflow.method, workflow_method) + workflow.m_add_sub_section(DMFTworkflow.inputs, Link(name='Input structure', section=archive_proj.run[-1].system[-1])) + workflow.m_add_sub_section(DMFTworkflow.outputs, Link(name='Output DMFT calculation', section=archive_dmft.run[-1].calculation[-1])) + workflow.m_add_sub_section(DMFTworkflow.tasks, task_proj) + workflow.m_add_sub_section(DMFTworkflow.tasks, task_dmft) + template.workflow2 = workflow + return template + + +def get_template_maxent_workflow() -> EntryArchive: + # Defining Projection and DMFT SinglePoint archives and adding band_structure and greens_functions to them. + archive_dmft = get_template_dmft() + archive_maxent = get_template_maxent() + archive_dmft = add_template_greens_functions(archive_dmft) + archive_maxent = add_template_greens_functions(archive_maxent) + # Normalizing SinglePoint archives BEFORE defining the DMFT workflow entry + run_normalize(archive_dmft) + run_normalize(archive_maxent) + # Defining Projection and DMFT tasks for later the DMFT workflow + task_dmft = TaskReference(task=archive_dmft.workflow2) + task_dmft.name = 'DMFT' + task_dmft.inputs = [Link(name='Input structure', section=archive_dmft.run[-1].system[-1])] + task_dmft.outputs = [Link(name='Output DMFT calculation', section=archive_dmft.run[-1].calculation[-1])] + task_maxent = TaskReference(task=archive_dmft.workflow2) + task_maxent.name = 'MaxEnt Sigma' + task_maxent.inputs = [Link(name='Output DMFT calculation', section=archive_dmft.run[-1].calculation[-1])] + task_maxent.outputs = [Link(name='Output MaxEnt Sigma calculation', section=archive_maxent.run[-1].calculation[-1])] + # DMFT workflow entry (no need of creating Method) + template = EntryArchive() + run = template.m_create(Run) + run.program = archive_dmft.run[-1].program + run.system = archive_dmft.run[-1].system + scc = run.m_create(Calculation) + scc.system_ref = run.system[-1] + template = add_template_dos(template) + workflow = MaxEntworkflow() + workflow.name = 'MaxEnt' + workflow_method = MaxEntMethod( + dmft_method_ref=archive_dmft.run[-1].method[-1].dmft, + maxent_method_ref=archive_maxent.run[-1].method[-1]) + workflow.m_add_sub_section(MaxEntworkflow.method, workflow_method) + workflow.m_add_sub_section(MaxEntworkflow.inputs, Link(name='Input structure', section=archive_dmft.run[-1].system[-1])) + outputs = [ + Link(name='Output MaxEnt Sigma calculation', section=archive_dmft.run[-1].calculation[-1]), + Link(name='Output MaxEnt calculation', section=template.run[-1].calculation[-1])] + workflow.outputs = outputs + workflow.m_add_sub_section(MaxEntworkflow.tasks, task_dmft) + workflow.m_add_sub_section(MaxEntworkflow.tasks, task_maxent) + template.workflow2 = workflow + return template + + +def get_template_bse_workflow() -> EntryArchive: + '''Returns a basic archive template for a BSE workflow entry, composed of two tasks: + PhotonPolarization SinglePoint number 1 and PhotonPolarization SinglePoint number 2.''' + # Adding two spectras for both photon polarizations + archive_photon_1 = get_template_excited(type='Photon') + archive_photon_2 = get_template_excited(type='Photon') + n_energies = 11 + spectra_1 = Spectra( + type='XAS', + n_energies=n_energies, + excitation_energies=np.linspace(0, 10, n_energies) * ureg.eV, + intensities=np.linspace(100, 200, n_energies), + intensities_units='F/m' + ) + provenance_1 = ElectronicStructureProvenance( + label='photon', + methodology=archive_photon_1.run[-1].method[-1] + ) + spectra_1.m_add_sub_section(Spectra.provenance, provenance_1) + archive_photon_1.run[-1].calculation[-1].m_add_sub_section(Calculation.spectra, spectra_1) + spectra_2 = Spectra( + type='XAS', + n_energies=n_energies, + excitation_energies=np.linspace(0, 10, n_energies) * ureg.eV, + intensities=np.linspace(200, 300, n_energies), + intensities_units='F/m' + ) + provenance_2 = ElectronicStructureProvenance( + label='photon', + methodology=archive_photon_2.run[-1].method[-1] + ) + spectra_2.m_add_sub_section(Spectra.provenance, provenance_2) + archive_photon_2.run[-1].calculation[-1].m_add_sub_section(Calculation.spectra, spectra_2) + # Normalizing SinglePoint archives BEFORE defining the BSE workflow entry + run_normalize(archive_photon_1) + run_normalize(archive_photon_2) + # Defining Photon1 and Photon2 tasks for later the BSE workflow + task_photon_1 = TaskReference(task=archive_photon_1.workflow2) + task_photon_1.name = 'Photon 1' + task_photon_1.inputs = [Link(name='Input structure', section=archive_photon_1.run[-1].system[-1])] + task_photon_1.outputs = [Link(name='Output polarization 1', section=archive_photon_1.run[-1].calculation[-1])] + task_photon_2 = TaskReference(task=archive_photon_2.workflow2) + task_photon_2.name = 'Photon 2' + task_photon_2.inputs = [Link(name='Input structure', section=archive_photon_1.run[-1].system[-1])] + task_photon_2.outputs = [Link(name='Output polarization 2', section=archive_photon_2.run[-1].calculation[-1])] + # BSE workflow entry (no need of creating Calculation). We need to define BSE method. + template = EntryArchive() + run = template.m_create(Run) + run.program = archive_photon_1.run[-1].program + run.system = archive_photon_1.run[-1].system + method = run.m_create(Method) + method.bse = BSE(type='Singlet', solver='Lanczos-Haydock') + workflow = PhotonPolarization() + workflow.name = 'BSE' + workflow_method = PhotonPolarizationMethod(bse_method_ref=template.run[-1].method[-1].bse) + workflow.m_add_sub_section(PhotonPolarization.method, workflow_method) + spectras = [spectra_1, spectra_2] + workflow_results = PhotonPolarizationResults( + n_polarizations=2, + spectrum_polarization=spectras + ) + workflow.m_add_sub_section(PhotonPolarization.results, workflow_results) + workflow.m_add_sub_section(PhotonPolarization.inputs, Link(name='Input structure', section=archive_photon_1.run[-1].system[-1])) + workflow.m_add_sub_section(PhotonPolarization.inputs, Link(name='Input BSE methodology', section=template.run[-1].method[-1])) + workflow.m_add_sub_section(PhotonPolarization.outputs, Link(name='Output polarization 1', section=archive_photon_1.run[-1].calculation[-1])) + workflow.m_add_sub_section(PhotonPolarization.outputs, Link(name='Output polarization 2', section=archive_photon_2.run[-1].calculation[-1])) + workflow.m_add_sub_section(PhotonPolarization.tasks, task_photon_1) + workflow.m_add_sub_section(PhotonPolarization.tasks, task_photon_2) + template.workflow2 = workflow + return template + + +def get_template_xs_workflow() -> EntryArchive: + '''Returns a basic archive template for a XS workflow entry, composed of two main tasks: + DFT GeometryOptimization and BSE workflow. The BSE workflow archive contains one + PhotonPolarization SinglePoint task.''' + # Defining DFT and GW SinglePoint archives and adding band_structure and dos to them. + archive_dft = get_template_dft() + archive_dft = add_template_band_structure(archive_dft) + archive_dft = add_template_dos(archive_dft) + archive_bse = get_template_bse_workflow() + # Normalizing SinglePoint archives BEFORE defining the XS workflow entry + run_normalize(archive_dft) + run_normalize(archive_bse) + # Defining DFT and BSE tasks for later the BS workflow + task_dft = TaskReference(task=archive_dft.workflow2) + task_dft.name = 'DFT' + task_dft.inputs = [Link(name='Input structure', section=archive_dft.run[-1].system[-1])] + task_dft.outputs = [Link(name='Output DFT calculation', section=archive_dft.run[-1].calculation[-1])] + task_bse = TaskReference(task=archive_bse.workflow2) + task_bse.name = 'BSE 1' + task_bse.inputs = [Link(name='Output DFT calculation', section=archive_dft.run[-1].calculation[-1])] + task_bse.outputs = [ + Link(name='Polarization 1', section=archive_bse.workflow2.outputs[0].section), + Link(name='Polarization 2', section=archive_bse.workflow2.outputs[1].section)] + # XS (BSE) workflow entry (no need of creating Method nor Calculation) + template = EntryArchive() + run = template.m_create(Run) + run.program = archive_dft.run[-1].program + run.system = archive_dft.run[-1].system + workflow = XSworkflow() + workflow.name = 'XS' + workflow.m_add_sub_section(XSworkflow.inputs, Link(name='Input structure', section=archive_dft.run[-1].system[-1])) + workflow.m_add_sub_section(XSworkflow.outputs, Link(name='Polarization 1', section=archive_bse.workflow2.outputs[0].section)) + workflow.m_add_sub_section(XSworkflow.outputs, Link(name='Polarization 2', section=archive_bse.workflow2.outputs[1].section)) + workflow.m_add_sub_section(XSworkflow.tasks, task_dft) + workflow.m_add_sub_section(XSworkflow.tasks, task_bse) + template.workflow2 = workflow + return template + + def set_dft_values(xc_functional_names: list) -> EntryArchive: '''''' template = get_template_dft() @@ -679,97 +930,28 @@ def dft_plus_u() -> EntryArchive: @pytest.fixture(scope='session') def projection() -> EntryArchive: '''Wannier Projection calculation.''' - template = EntryArchive() - run = template.m_create(Run) - run.program = Program(name='Wannier90', version='3.1.0') - method = run.m_create(Method) - method_proj = method.m_create(Projection) - method_proj.wannier = Wannier(is_maximally_localized=False) - system = run.m_create(System) - system.atoms = NOMADAtoms( - lattice_vectors=[ - [5.76372622e-10, 0.0, 0.0], - [0.0, 5.76372622e-10, 0.0], - [0.0, 0.0, 4.0755698899999997e-10] - ], - positions=[ - [2.88186311e-10, 0.0, 2.0377849449999999e-10], - [0.0, 2.88186311e-10, 2.0377849449999999e-10], - [0.0, 0.0, 0.0], - [2.88186311e-10, 2.88186311e-10, 0.0], - ], - labels=['Br', 'K', 'Si', 'Si'], - periodic=[True, True, True]) - system.m_add_sub_section(System.atoms_group, AtomsGroup( - label='Br', - type='projection', - index=0, - is_molecule=False, - n_atoms=1, - atom_indices=np.array([0]) - )) - scc = run.m_create(Calculation) - scc.system_ref = system - scc.method_ref = method - template.workflow2 = SinglePoint() + template = get_template_projection() return run_normalize(template) @pytest.fixture(scope='session') def gw() -> EntryArchive: '''GW calculation.''' - template = get_template_excited() - template.run[0].method = None - run = template.run[0] - method_gw = run.m_create(Method) - method_gw.gw = GW(type='G0W0') + template = get_template_excited(type='GW') return run_normalize(template) @pytest.fixture(scope='session') def bse() -> EntryArchive: '''BSE calculation.''' - template = get_template_excited() - template.run[0].method = None - run = template.run[0] - method_bse = run.m_create(Method) - method_bse.bse = BSE(type='Singlet', solver='Lanczos-Haydock') + template = get_template_excited(type='BSE') return run_normalize(template) @pytest.fixture(scope='session') def dmft() -> EntryArchive: '''DMFT calculation.''' - template = EntryArchive() - run = template.m_create(Run) - run.program = Program(name='w2dynamics') - input_method = run.m_create(Method) - input_model = input_method.m_create(LatticeModelHamiltonian) - input_model.hubbard_kanamori_model.append(HubbardKanamoriModel(orbital='d', u=4.0e-19, jh=0.6e-19)) - method_dmft = run.m_create(Method) - method_dmft.dmft = DMFT( - impurity_solver='CT-HYB', n_atoms_per_unit_cell=1, n_correlated_electrons=1.0, n_correlated_orbitals=[3.0], - inverse_temperature=60.0, magnetic_state='paramagnetic') - method_dmft.starting_method_ref = input_method - system = run.m_create(System) - system.atoms = NOMADAtoms( - lattice_vectors=[ - [5.76372622e-10, 0.0, 0.0], - [0.0, 5.76372622e-10, 0.0], - [0.0, 0.0, 4.0755698899999997e-10] - ], - positions=[ - [2.88186311e-10, 0.0, 2.0377849449999999e-10], - [0.0, 2.88186311e-10, 2.0377849449999999e-10], - [0.0, 0.0, 0.0], - [2.88186311e-10, 2.88186311e-10, 0.0], - ], - labels=['Br', 'K', 'Si', 'Si'], - periodic=[True, True, True]) - scc = run.m_create(Calculation) - scc.system_ref = system - scc.method_ref = method_dmft - template.workflow2 = SinglePoint() + template = get_template_dmft() return run_normalize(template) @@ -938,17 +1120,44 @@ def unknown_program() -> EntryArchive: def single_point() -> EntryArchive: '''Single point calculation.''' template = get_template_dft() - return run_normalize(template) @pytest.fixture(scope='session') def gw_workflow() -> EntryArchive: - '''GW workflow EntryArchive.''' + '''GW workflow (DFT+GW) EntryArchive.''' template = get_template_gw_workflow() return run_normalize(template) +@pytest.fixture(scope='session') +def dmft_workflow() -> EntryArchive: + '''DMFT workflow (Projection+DMFT) EntryArchive.''' + template = get_template_dmft_workflow() + return run_normalize(template) + + +@pytest.fixture(scope='session') +def maxent_workflow() -> EntryArchive: + '''MaxEnt workflow (DMFT+MaxEnt Sigma) EntryArchive.''' + template = get_template_maxent_workflow() + return run_normalize(template) + + +@pytest.fixture(scope='session') +def bse_workflow() -> EntryArchive: + '''BSE workflow (Photon1+Photon2) EntryArchive''' + template = get_template_bse_workflow() + return run_normalize(template) + + +@pytest.fixture(scope='session') +def xs_workflow() -> EntryArchive: + '''XS workflow (DFT+BSEworkflow) EntryArchive.''' + template = get_template_xs_workflow() + return run_normalize(template) + + @pytest.fixture(scope='session') def geometry_optimization() -> EntryArchive: template = get_template_dft() diff --git a/tests/normalizing/test_dos.py b/tests/normalizing/test_dos.py index 2fee370ddfaa9779ae2813b3967999fa81fe5c89..9e4fcef33849976b3ccef705d15940d7e28ee17d 100644 --- a/tests/normalizing/test_dos.py +++ b/tests/normalizing/test_dos.py @@ -81,25 +81,27 @@ def test_energy_reference_detection(ranges, highest, lowest, fermi, expected_hig lowest = lowest[0] if lowest else lowest highest = highest[0] if highest else highest archive = get_template_dos(ranges, fermi, highest, lowest, n) + assert len(archive.run[0].calculation[0].dos_electronic) == 1 dos = archive.run[0].calculation[0].dos_electronic[0] - n_channels = len(dos.total) - for i_channel in range(n_channels): - gap = dos.band_gap[i_channel] - assert gap.energy_highest_occupied.to(ureg.electron_volt).magnitude == pytest.approx( - expected_highest[i_channel] - ) - assert gap.energy_lowest_unoccupied.to(ureg.electron_volt).magnitude == pytest.approx( - expected_lowest[i_channel] - ) + gap = dos.band_gap[0] + assert gap.energy_highest_occupied.to(ureg.electron_volt).magnitude == pytest.approx( + expected_highest[0] + ) + assert gap.energy_lowest_unoccupied.to(ureg.electron_volt).magnitude == pytest.approx( + expected_lowest[0] + ) def test_dos_magnitude(dos_si_vasp: EntryArchive, dos_si_exciting: EntryArchive, dos_si_fhiaims: EntryArchive): """ - Verify that the raw DOS extracted from similar systems describes the same number of electrons + Verify that the raw DOS extracted from similar systems describes the same number of + electrons. Testing for VASP, exciting and FHI-aims DOS Si2 parsing. """ codes_to_check = list(locals().values()) # TODO add test for normalized DOS - dos_ints = [integrate_dos(dos_si.run[0].calculation[-1].dos_electronic[-1]) - for dos_si in codes_to_check] + dos_ints = [ + integrate_dos(dos_si.run[0].calculation[-1].dos_electronic) + for dos_si in codes_to_check + ] # Compare each DOS with its neighbor for index in range(len(dos_ints))[:-1]: diff --git a/tests/normalizing/test_method.py b/tests/normalizing/test_method.py index 965fe11eaf65a15769bf5cbdb7b2a5401fc94faf..3976a7fe64ce1389cfd33a8bc887502a2c2b001f 100644 --- a/tests/normalizing/test_method.py +++ b/tests/normalizing/test_method.py @@ -172,11 +172,10 @@ def test_method_dmft(dmft): assert method.method_name == "DMFT" assert method.simulation.program_name == "w2dynamics" assert method.simulation.dmft.impurity_solver_type == "CT-HYB" - assert method.simulation.dmft.total_filling == 0.5 / 3.0 assert method.simulation.dmft.inverse_temperature.magnitude == 60.0 assert method.simulation.dmft.magnetic_state == "paramagnetic" assert method.simulation.dmft.u.magnitude == 4.0e-19 - assert method.simulation.dmft.hunds_hubbard_ratio == 0.6e-19 / 4.0e-19 + assert method.simulation.dmft.jh.magnitude == 0.6e-19 def test_method_eels(eels): diff --git a/tests/normalizing/test_properties.py b/tests/normalizing/test_properties.py index ddfaa67688ba736a05c6ac58b81c3e6844b59a06..1b0a85adb73ecab6d7352b121a95fb1cf1dee4d2 100644 --- a/tests/normalizing/test_properties.py +++ b/tests/normalizing/test_properties.py @@ -32,14 +32,23 @@ from .conftest import ( def test_eels(eels): - assert eels.results.properties.spectroscopy.eels is not None - spectroscopy_data = eels.results.properties.spectroscopy.spectrum - eels_data = eels.results.properties.spectroscopy.eels - assert eels_data.resolution.to(ureg.electron_volt).magnitude == pytest.approx(1) - assert eels_data.min_energy.to(ureg.electron_volt).magnitude == pytest.approx(100) - assert eels_data.max_energy.to(ureg.electron_volt).magnitude == pytest.approx(200) - assert eels_data.detector_type == 'Quantum GIF' - assert spectroscopy_data.n_values == spectroscopy_data.count.shape[0] == spectroscopy_data.energy.shape[0] + assert eels.results.method.method_name == 'EELS' + assert eels.results.properties.spectroscopic is not None + spectra = eels.results.properties.spectroscopic.spectra + assert len(spectra) == 1 + assert spectra[0].type == 'EELS' + assert spectra[0].label == 'experiment' + assert spectra[0].n_energies == 101 + assert spectra[0].energies[22].to('eV').magnitude == pytest.approx(122.0) + assert spectra[0].intensities[22] == pytest.approx(22.0) + assert spectra[0].intensities_units == 'counts' + assert spectra[0].m_xpath('provenance.eels') + provenance = spectra[0].provenance + assert provenance.label == 'EELSDB' + assert provenance.eels.detector_type == 'Quantum GIF' + assert provenance.eels.min_energy.to('eV').magnitude == pytest.approx(100.0) + assert provenance.eels.max_energy.to('eV').magnitude == pytest.approx(200.0) + assert provenance.eels.resolution.to('eV').magnitude == pytest.approx(1.0) def test_bulk_modulus(mechanical_eos): @@ -92,35 +101,35 @@ def test_band_gap(): def test_dos_electronic(): gap_fill = [[0, 1], [2, 3]] - # DOS without energy references + # DOS without energy references (hence band gap information cannot be extracted) archive = get_template_dos() - dos = archive.results.properties.electronic.dos_electronic[0] - assert dos.spin_polarized is False - assert dos.total[0].value.shape == (101,) - assert dos.energies.shape == (101,) + dos = archive.results.properties.electronic.dos_electronic_new[0] + assert dos.spin_polarized is False and len(dos.data) == 1 + assert dos.data[0].total.value.shape == dos.data[0].energies.shape == (101,) # Unpolarized DOS with gap: efermi = 1.5 archive = get_template_dos(energy_reference_fermi=efermi) - dos = archive.results.properties.electronic.dos_electronic[0] - assert len(dos.band_gap) == 1 - assert dos.band_gap[0].energy_highest_occupied is not None - assert dos.band_gap[0].energy_lowest_unoccupied is not None - assert dos.spin_polarized is False - assert dos.total[0].value.shape == (101,) - assert dos.energies.shape == (101,) + dos = archive.results.properties.electronic.dos_electronic_new[0] + assert dos.spin_polarized is False and len(dos.data) == 1 + assert len(dos.data[0].band_gap) == 1 + assert dos.data[0].band_gap[0].energy_highest_occupied is not None + assert dos.data[0].band_gap[0].energy_highest_occupied.to('eV').magnitude == pytest.approx(1.0) + assert dos.data[0].band_gap[0].energy_lowest_unoccupied is not None + assert dos.data[0].band_gap[0].energy_lowest_unoccupied.to('eV').magnitude == pytest.approx(1.9) + assert dos.data[0].band_gap[0].value.to('eV').magnitude == pytest.approx(0.9) + assert dos.data[0].total.value.shape == dos.data[0].energies.shape == (101,) # Polarized DOS efermi = 1.5 archive = get_template_dos(fill=[gap_fill, gap_fill], energy_reference_fermi=efermi) - dos = archive.results.properties.electronic.dos_electronic[0] - assert len(dos.band_gap) == 2 - assert dos.band_gap[0].energy_highest_occupied is not None - assert dos.band_gap[0].energy_lowest_unoccupied is not None - assert dos.spin_polarized is True - assert dos.total[0].value.shape == (101,) - assert dos.total[1].value.shape == (101,) - assert dos.energies.shape == (101,) + dos = archive.results.properties.electronic.dos_electronic_new[0] + assert dos.spin_polarized is True and len(dos.data) == 2 + assert dos.data[0].spin_channel == 0 and dos.data[1].spin_channel == 1 + for nspin in range(len(dos.data)): + assert dos.data[nspin].total.value.shape == dos.data[nspin].energies.shape == (101,) + assert dos.data[0].band_gap[0].value == dos.data[1].band_gap[0].value + assert dos.data[0].band_gap[0].value.to('eV').magnitude == pytest.approx(0.9) # Vibrational instead of electronic archive = get_template_dos(type='vibrational') diff --git a/tests/normalizing/test_topology.py b/tests/normalizing/test_topology.py index a9482e51938a074ac89a97cf9da38024aa779ac1..3883fdc03d731a4159e79bcb8b930674c8451bc2 100644 --- a/tests/normalizing/test_topology.py +++ b/tests/normalizing/test_topology.py @@ -340,22 +340,22 @@ def test_topology_2d(surface, ref_topologies): if ref_atoms_property_key == 'm_def': continue atoms_property = atoms[ref_atoms_property_key] - if type(atoms_property) == list: + if isinstance(atoms_property, list): property = atoms_property[0] - if type(property) == list: + if isinstance(property, list): assert np.allclose(atoms_property, ref_atoms_property, rtol=1e-05, atol=1e-9) - elif type(property) == dict: + elif isinstance(property, dict): for property_keys, property_values in property.items(): ref_property = ref_atoms_property[0][property_keys] assert property_values == ref_property - elif type(atoms_property) == dict: + elif isinstance(atoms_property, dict): for property_keys, property_values in atoms_property.items(): ref_property_value = ref_atoms_property[property_keys] - if type(property_values) == float: + if isinstance(property_values, float): assert np.allclose(property_values, ref_property_value, rtol=1e-05, atol=1e-9) else: assert ref_atoms_property == property_values - elif type(atoms_property) == float: + elif isinstance(atoms_property, float): assert np.allclose(ref_atoms_property, atoms_property, rtol=1e-05, atol=1e-9) else: assert ref_atoms_property == atoms_property diff --git a/tests/normalizing/test_workflow.py b/tests/normalizing/test_workflow.py index 7d22547b099a6c7da310b0639945c0398999759a..a55f6fb217b7de2181b7ad7f512253542177fc53 100644 --- a/tests/normalizing/test_workflow.py +++ b/tests/normalizing/test_workflow.py @@ -64,7 +64,7 @@ def test_single_point_workflow(workflow_archive): def test_gw_workflow(gw_workflow): - """Testing GW workflow entry""" + """Testing GW workflow (DFT+GW) entry""" workflow = gw_workflow.workflow2 assert workflow.name == 'GW' assert workflow.method.gw_method_ref.type == 'G0W0' @@ -81,10 +81,126 @@ def test_gw_workflow(gw_workflow): assert results.method.simulation.gw.basis_set_type == 'plane waves' assert not results.properties.electronic.band_gap assert not results.properties.electronic.greens_functions_electronic - assert len(results.properties.electronic.dos_electronic) == 2 + assert len(results.properties.electronic.dos_electronic_new) == 2 assert len(results.properties.electronic.band_structure_electronic) == 2 - assert results.properties.electronic.dos_electronic[0].label == 'DFT' - assert results.properties.electronic.dos_electronic[1].label == 'GW' + assert results.properties.electronic.dos_electronic_new[0].label == 'DFT' + assert results.properties.electronic.dos_electronic_new[1].label == 'GW' + + +def test_dmft_workflow(dmft_workflow): + """Testing DMFT workflow entry""" + workflow = dmft_workflow.workflow2 + assert workflow.name == 'DMFT' + assert not workflow.method.projection_method_ref.wannier.is_maximally_localized + assert workflow.method.dmft_method_ref.n_impurities == 1 + assert workflow.method.dmft_method_ref.n_correlated_orbitals[0] == 3 + assert workflow.method.dmft_method_ref.n_electrons[0] == 1.0 + assert workflow.method.dmft_method_ref.inverse_temperature.magnitude == 60.0 + assert workflow.method.dmft_method_ref.magnetic_state == 'paramagnetic' + assert workflow.method.dmft_method_ref.impurity_solver == 'CT-HYB' + results = dmft_workflow.results + assert results.method.method_name == 'DMFT' + assert results.method.workflow_name == 'DMFT' + assert results.method.simulation.program_name == 'w2dynamics' + assert results.method.simulation.dmft.impurity_solver_type == 'CT-HYB' + assert results.method.simulation.dmft.inverse_temperature.magnitude == 60.0 + assert results.method.simulation.dmft.magnetic_state == 'paramagnetic' + assert results.method.simulation.dmft.u.magnitude == 4.0e-19 + assert results.method.simulation.dmft.jh.magnitude == 0.6e-19 + assert results.m_xpath('properties.electronic.band_gap') + assert len(results.properties.electronic.band_gap) == 1 + assert results.properties.electronic.band_gap[0].label == 'Projection' + assert results.m_xpath('properties.electronic.band_structure_electronic') + assert len(results.properties.electronic.band_structure_electronic) == 1 + # TODO check why this testing is not passing + # * conftest seems to not be able to normalize the archive_dmft for the Greens functions, despite self_energy_iw is defined. + # assert results.m_xpath('properties.electronic.greens_function_electronic') + + +def test_maxent_workflow(maxent_workflow): + """Testing MaxEnt workflow entry""" + workflow = maxent_workflow.workflow2 + assert workflow.name == 'MaxEnt' + assert workflow.method.dmft_method_ref.n_impurities == 1 + assert workflow.method.dmft_method_ref.n_correlated_orbitals[0] == 3 + assert workflow.method.dmft_method_ref.n_electrons[0] == 1.0 + assert workflow.method.dmft_method_ref.inverse_temperature.magnitude == 60.0 + assert workflow.method.dmft_method_ref.magnetic_state == 'paramagnetic' + assert workflow.method.dmft_method_ref.impurity_solver == 'CT-HYB' + assert workflow.method.maxent_method_ref + results = maxent_workflow.results + assert results.method.method_name == 'DMFT' + assert results.method.workflow_name == 'MaxEnt' + assert results.method.simulation.program_name == 'w2dynamics' + assert results.method.simulation.dmft.impurity_solver_type == 'CT-HYB' + assert results.method.simulation.dmft.inverse_temperature.magnitude == 60.0 + assert results.method.simulation.dmft.magnetic_state == 'paramagnetic' + assert results.method.simulation.dmft.u.magnitude == 4.0e-19 + assert results.method.simulation.dmft.jh.magnitude == 0.6e-19 + assert results.method.simulation.dmft.analytical_continuation == 'MaxEnt' + assert results.m_xpath('properties.electronic.dos_electronic_new') + assert len(results.properties.electronic.dos_electronic_new) == 1 + assert results.m_xpath('properties.electronic.greens_functions_electronic') + assert len(results.properties.electronic.greens_functions_electronic) == 2 + assert results.properties.electronic.greens_functions_electronic[0].label == 'DMFT' + assert results.properties.electronic.greens_functions_electronic[1].label == 'MaxEnt' + + +def test_bse_workflow(bse_workflow): + """Testing BSE workflow (Photon1+Photon2) entry""" + workflow = bse_workflow.workflow2 + assert workflow.name == 'BSE' + assert len(workflow.inputs) == 2 + assert workflow.inputs[0].name == 'Input structure' + assert workflow.inputs[1].name == 'Input BSE methodology' + assert len(workflow.outputs) == 2 and len(workflow.outputs) == workflow.results.n_polarizations + assert len(workflow.tasks) == 2 + assert workflow.method.bse_method_ref.type == 'Singlet' + assert workflow.method.bse_method_ref.solver == 'Lanczos-Haydock' + results = bse_workflow.results + assert results.method.method_name == 'BSE' + assert results.method.workflow_name == 'PhotonPolarization' + assert results.method.simulation.program_name == 'VASP' + assert results.method.simulation.program_version == '4.6.35' + assert results.method.simulation.bse.type == 'Singlet' + assert results.method.simulation.bse.solver == 'Lanczos-Haydock' + assert results.properties.spectroscopic + spectra = results.properties.spectroscopic.spectra + assert len(spectra) == 2 + assert spectra[0].type == 'XAS' + assert spectra[0].label == 'computation' + assert spectra[0].n_energies == 11 + assert spectra[0].energies[3].to('eV').magnitude == approx(3.0) + assert spectra[0].intensities[3] == approx(130.0) + assert spectra[0].intensities_units == 'F/m' + assert spectra[0].provenance and spectra[1].provenance + assert spectra[0].provenance != spectra[1].provenance + + +def test_xs_workflow(xs_workflow): + """Testing XS workflow (DFT+BSEworkflow) entry""" + workflow = xs_workflow.workflow2 + assert workflow.name == 'XS' + assert len(workflow.inputs) == 1 + assert workflow.inputs[0].name == 'Input structure' + assert len(workflow.outputs) == 2 + assert len(workflow.tasks) == 2 + assert workflow.tasks[0].name == 'DFT' and workflow.tasks[1].name == 'BSE 1' + assert workflow.results.dos_dft and workflow.results.band_structure_dft and workflow.results.spectra + results = xs_workflow.results + assert results.method.method_name == 'BSE' + assert results.method.workflow_name == 'XS' + assert results.method.simulation.program_name == 'VASP' + assert results.method.simulation.program_version == '4.6.35' + assert results.method.simulation.bse.type == 'Singlet' + assert results.method.simulation.bse.solver == 'Lanczos-Haydock' + assert results.method.simulation.bse.starting_point_type == 'GGA' + assert results.method.simulation.bse.starting_point_names == ['GGA_X_PBE'] + assert results.method.simulation.bse.basis_set_type == 'plane waves' + assert results.properties.electronic and results.properties.spectroscopic + assert results.properties.electronic.dos_electronic_new[0].label == 'DFT' + assert len(results.properties.spectroscopic.spectra) == 2 + assert results.properties.spectroscopic.spectra[0].provenance != results.properties.spectroscopic.spectra[1].provenance def test_geometry_optimization_workflow(workflow_archive): @@ -93,7 +209,7 @@ def test_geometry_optimization_workflow(workflow_archive): sec_workflow = vasp_archive.workflow2 assert sec_workflow.method.type == 'cell_shape' assert sec_workflow.results.calculation_result_ref.m_def.name == 'Calculation' - assert sec_workflow.results.final_energy_difference > 0.0 + assert sec_workflow.results.final_energy_difference.to('eV').magnitude == approx(0.00012532) assert sec_workflow.results.optimization_steps == 3 assert sec_workflow.results.final_force_maximum > 0.0 assert sec_workflow.results.is_converged_geometry @@ -189,27 +305,55 @@ def test_rdf_and_msd(workflow_archive): assert section_md.mean_squared_displacements[0].mean_squared_displacement_values[0].label == '0' assert section_md.mean_squared_displacements[0].mean_squared_displacement_values[0].n_times == 54 - assert section_md.mean_squared_displacements[0].mean_squared_displacement_values[0].times[13].magnitude == approx(1.3 * 10**(-11)) + assert section_md.mean_squared_displacements[0].mean_squared_displacement_values[0].times[13].magnitude == approx(1.3 * 10**(-12)) assert section_md.mean_squared_displacements[0].mean_squared_displacement_values[0].times[13].units == 'second' assert section_md.mean_squared_displacements[0].mean_squared_displacement_values[0].value[32].magnitude == approx(8.98473539965496 * 10**(-19)) assert section_md.mean_squared_displacements[0].mean_squared_displacement_values[0].value[32].units == 'meter^2' - assert section_md.mean_squared_displacements[0].mean_squared_displacement_values[0].diffusion_constant.value.magnitude == approx(6.09812270414572 * 10**(-9)) + assert section_md.mean_squared_displacements[0].mean_squared_displacement_values[0].diffusion_constant.value.magnitude == approx(6.09812270414572 * 10**(-8)) assert section_md.mean_squared_displacements[0].mean_squared_displacement_values[0].diffusion_constant.value.units == 'meter^2/second' assert section_md.mean_squared_displacements[0].mean_squared_displacement_values[0].diffusion_constant.error_type == 'Pearson correlation coefficient' assert section_md.mean_squared_displacements[0].mean_squared_displacement_values[0].diffusion_constant.errors == approx(0.9924847048341159) assert section_md.mean_squared_displacements[0].mean_squared_displacement_values[1].label == '1' assert section_md.mean_squared_displacements[0].mean_squared_displacement_values[1].n_times == 54 - assert section_md.mean_squared_displacements[0].mean_squared_displacement_values[1].times[13].magnitude == approx(1.3 * 10**(-11)) + assert section_md.mean_squared_displacements[0].mean_squared_displacement_values[1].times[13].magnitude == approx(1.3 * 10**(-12)) assert section_md.mean_squared_displacements[0].mean_squared_displacement_values[1].times[13].units == 'second' assert section_md.mean_squared_displacements[0].mean_squared_displacement_values[1].value[32].magnitude == approx(8.448369705677565 * 10**(-19)) assert section_md.mean_squared_displacements[0].mean_squared_displacement_values[1].value[32].units == 'meter^2' - assert section_md.mean_squared_displacements[0].mean_squared_displacement_values[1].diffusion_constant.value.magnitude == approx(5.094072039759048 * 10**(-9)) + assert section_md.mean_squared_displacements[0].mean_squared_displacement_values[1].diffusion_constant.value.magnitude == approx(5.094072039759048 * 10**(-8)) assert section_md.mean_squared_displacements[0].mean_squared_displacement_values[1].diffusion_constant.value.units == 'meter^2/second' assert section_md.mean_squared_displacements[0].mean_squared_displacement_values[1].diffusion_constant.error_type == 'Pearson correlation coefficient' assert section_md.mean_squared_displacements[0].mean_squared_displacement_values[1].diffusion_constant.errors == approx(0.9965870174917716) +def test_rdf_2(workflow_archive): + archive = workflow_archive( + 'parsers/gromacs', 'tests/data/parsers/gromacs/fe_test/mdrun.out') + + sec_workflow = archive.workflow2 + section_md = sec_workflow.results + + assert section_md.radial_distribution_functions[0].type == 'molecular' + assert section_md.radial_distribution_functions[0].n_smooth == 2 + assert section_md.radial_distribution_functions[0].variables_name[0] == 'distance' + + assert section_md.radial_distribution_functions[0].radial_distribution_function_values[0].label == 'SOL-Protein' + assert section_md.radial_distribution_functions[0].radial_distribution_function_values[0].n_bins == 198 + assert section_md.radial_distribution_functions[0].radial_distribution_function_values[0].bins[122].magnitude == approx(7.624056451320648 * 10**(-10)) + assert section_md.radial_distribution_functions[0].radial_distribution_function_values[0].bins[122].units == 'meter' + assert section_md.radial_distribution_functions[0].radial_distribution_function_values[0].value[96] == approx(1.093694948374587) + assert section_md.radial_distribution_functions[0].radial_distribution_function_values[0].frame_start == 0 + assert section_md.radial_distribution_functions[0].radial_distribution_function_values[0].frame_end == 2 + + assert section_md.radial_distribution_functions[0].radial_distribution_function_values[1].label == 'SOL-SOL' + assert section_md.radial_distribution_functions[0].radial_distribution_function_values[1].n_bins == 198 + assert section_md.radial_distribution_functions[0].radial_distribution_function_values[1].bins[102].magnitude == approx(6.389391438961029 * 10**(-10)) + assert section_md.radial_distribution_functions[0].radial_distribution_function_values[1].bins[102].units == 'meter' + assert section_md.radial_distribution_functions[0].radial_distribution_function_values[1].value[55] == approx(0.8368052672121375) + assert section_md.radial_distribution_functions[0].radial_distribution_function_values[1].frame_start == 0 + assert section_md.radial_distribution_functions[0].radial_distribution_function_values[1].frame_end == 2 + + def test_radius_of_gyration(workflow_archive): archive = workflow_archive( 'parsers/gromacs', 'tests/data/parsers/gromacs/protein_small_nowater/md.log') diff --git a/tests/parsing/test_chemotion_parser.py b/tests/parsing/test_chemotion_parser.py new file mode 100644 index 0000000000000000000000000000000000000000..e78e3c6d1faa46124241dbc1dbb250172caa5d9d --- /dev/null +++ b/tests/parsing/test_chemotion_parser.py @@ -0,0 +1,63 @@ +# +# Copyright The NOMAD Authors. +# +# This file is part of NOMAD. See https://nomad-lab.eu for further info. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import pytest +import numpy as np +from nomad import config +from nomad.parsing.chemotion.chemotion import ChemotionParser, _element_type_section_mapping +from nomad.files import StagingUploadFiles +from tests.parsing.test_elabftw_parser import _assert_parsed_data +from tests.processing.test_data import run_processing + + +def _assert_chemotion(test_archive): + assert test_archive.data is not None + assert test_archive.data.Collection is not None + + assert test_archive.data.Collection[0].label == 'Modification Sequence' + assert test_archive.data.Collection[0].user_id == '60c41de1-b83d-4487-a599-8eb310847b8a' + assert test_archive.data.Collection[0].is_locked is False + + assert len(test_archive.data.Sample) == 4 + assert test_archive.data.Sample[0].xref == {'cas': {'label': '554-95-0', 'value': '554-95-0'}} + assert test_archive.data.Sample[1].name == 'Aqua dest.' + assert test_archive.data.Sample[2].target_amount_value == np.float16(0.001) + assert test_archive.data.Sample[3].target_amount_value == np.float16(0.002) + + assert len(test_archive.data.CollectionsSample) == 4 + assert len(test_archive.data.Fingerprint) == 3 + assert len(test_archive.data.Molecule) == 3 + assert test_archive.data.Molecule[1].inchikey == 'XLYOFNOQVPJJNP-UHFFFAOYSA-N' + + for k in _element_type_section_mapping.keys(): + k = 'Reactions' if k == 'Reaction' else k + assert k in test_archive.data.m_def.all_properties + assert test_archive.data.m_def.all_properties[k] is not None + + +@pytest.mark.timeout(config.tests.default_timeout) +def test_chemotion_parser(raw_files, proc_infra, api_v1, test_user): + upload = run_processing(('test_upload', 'tests/data/parsers/chemotion/test.zip'), test_user) + + assert upload.total_entries_count == 2 + assert len(upload.successful_entries) == 2 + + with upload.entries_metadata() as entries: + _assert_parsed_data( + upload.upload_id, + entries, StagingUploadFiles, ChemotionParser(), _assert_chemotion, 'export.json', published=False) diff --git a/tests/parsing/test_elabftw_parser.py b/tests/parsing/test_elabftw_parser.py index 7f5713c954cdb44f92e2f51244d1a7fbfd6b6575..b67b068cdce37529a04c92a2c412a1a9ee09c88f 100644 --- a/tests/parsing/test_elabftw_parser.py +++ b/tests/parsing/test_elabftw_parser.py @@ -25,7 +25,7 @@ from nomad.files import StagingUploadFiles, UploadFiles from tests.processing.test_data import run_processing -def _assert_parsed_data(upload_id, entries, cls, no_archive: bool = False, **kwargs): +def _assert_parsed_data(upload_id, entries, cls, parser, assert_fnc, mainfile_str, no_archive: bool = False, **kwargs): upload_files = UploadFiles.get(upload_id) assert upload_files is not None @@ -36,27 +36,15 @@ def _assert_parsed_data(upload_id, entries, cls, no_archive: bool = False, **kwa f.read() try: - archive = upload_files.read_archive(entry.entry_id) - assert entry.entry_id in archive - if entry.entry_name and 'ro-crate-metadata.json' in entry.entry_name: + with upload_files.read_archive(entry.entry_id) as archive: + assert entry.entry_id in archive + if entry.entry_name and mainfile_str in entry.entry_name: test_archive = EntryArchive(metadata=EntryMetadata(entry_id=entry.entry_id, upload_id=upload_id)) test_archive.m_context = Context() mainfile = '/'.join([upload_files.os_path, 'raw', entry.mainfile]) - parser = ELabFTWParser() parser.parse(mainfile, test_archive, None, child_archives={'0': test_archive}) - assert test_archive.data is not None - assert test_archive.data.title == 'Test' - assert test_archive.data.id == 'ro-crate-metadata.json' - assert len(test_archive.data.experiment_data.experiments_links) == 1 - assert len(test_archive.data.experiment_files) == 5 - assert test_archive.data.experiment_data.experiments_links[0].title == 'JSON test ' - assert test_archive.data.experiment_data.items_links[0].title == 'Untitled' - assert test_archive.data.experiment_data.extra_fields is not None - for item in test_archive.data.experiment_files: - assert item.type == 'File' - assert item.file is not None - assert item.id is not None + assert_fnc(test_archive) except KeyError: assert no_archive @@ -64,6 +52,21 @@ def _assert_parsed_data(upload_id, entries, cls, no_archive: bool = False, **kwa upload_files.close() +def _assert_elabftw(test_archive): + assert test_archive.data is not None + assert test_archive.data.title == 'Test' + assert test_archive.data.id == 'ro-crate-metadata.json' + assert len(test_archive.data.experiment_data.experiments_links) == 1 + assert len(test_archive.data.experiment_files) == 5 + assert test_archive.data.experiment_data.experiments_links[0].title == 'JSON test ' + assert test_archive.data.experiment_data.items_links[0].title == 'Untitled' + assert test_archive.data.experiment_data.extra_fields is not None + for item in test_archive.data.experiment_files: + assert item.type == 'File' + assert item.file is not None + assert item.id is not None + + @pytest.mark.timeout(config.tests.default_timeout) def test_elabftw_parser(raw_files, proc_infra, api_v1, test_user): upload = run_processing(('test_upload', 'tests/data/parsers/elabftw/test.eln'), test_user) @@ -72,4 +75,6 @@ def test_elabftw_parser(raw_files, proc_infra, api_v1, test_user): assert len(upload.successful_entries) == 2 with upload.entries_metadata() as entries: - _assert_parsed_data(upload.upload_id, entries, StagingUploadFiles, published=False) + _assert_parsed_data( + upload.upload_id, + entries, StagingUploadFiles, ELabFTWParser(), _assert_elabftw, 'ro-crate-metadata.json', published=False) diff --git a/tests/parsing/test_tabular.py b/tests/parsing/test_tabular.py index 0699c5accab1bacff95a133fb639125ee9f7757f..224d906e23ac1996e6c3faf32edac20aef8b0bad 100644 --- a/tests/parsing/test_tabular.py +++ b/tests/parsing/test_tabular.py @@ -21,6 +21,7 @@ import os import os.path import re import datetime +import yaml from nomad import config from nomad.datamodel.datamodel import EntryArchive, EntryMetadata @@ -33,14 +34,25 @@ from nomad.processing import ProcessStatus from nomad import files -def quantity_generator(quantity_name, header_name, shape='shape: [\'*\']'): - base_case = f'''{quantity_name}: - type: str - {shape} - m_annotations: - tabular: - name: {header_name}''' - return re.sub(r'\n\s*\n', '\n', base_case) +def quantity_generator(quantity_name, header_name, shape='shape: [\'*\']', to_dict=False): + if to_dict: + return {quantity_name: { + 'type': 'str', + 'shape': shape, + 'm_annotations': { + 'tabular': { + 'name': header_name + } + } + }} + else: + base_case = f'''{quantity_name}: + type: str + {shape} + m_annotations: + tabular: + name: {header_name}''' + return re.sub(r'\n\s*\n', '\n', base_case) @pytest.mark.parametrize('schema', [ @@ -60,7 +72,8 @@ def quantity_generator(quantity_name, header_name, shape='shape: [\'*\']'): type: str m_annotations: tabular_parser: - comment: '#' + parsing_options: + comment: '#' quantity_1: type: str m_annotations: @@ -87,7 +100,8 @@ def quantity_generator(quantity_name, header_name, shape='shape: [\'*\']'): type: str m_annotations: tabular_parser: - comment: '#' + parsing_options: + comment: '#' quantity_1: type: str m_annotations: @@ -116,7 +130,8 @@ def quantity_generator(quantity_name, header_name, shape='shape: [\'*\']'): A reference to an uploaded .xlsx m_annotations: tabular_parser: - comment: '#' + parsing_options: + comment: '#' quantity_1: type: str m_annotations: @@ -146,10 +161,13 @@ def quantity_generator(quantity_name, header_name, shape='shape: [\'*\']'): type: str m_annotations: tabular_parser: - comment: '#' - current_entry: - row_to_sections: - - test_subsection + parsing_options: + comment: '#' + mapping_options: + - mapping_mode: row + file_mode: current_entry + sections: + - test_subsection sub_sections: test_subsection: repeats: true @@ -222,12 +240,17 @@ def quantity_generator(quantity_name, header_name, shape='shape: [\'*\']'): default: datafile.xlsx m_annotations: tabular_parser: - comment: '#' - current_entry: - row_to_sections: - - MySubsection2 - column_to_sections: - - MySubsection1 + parsing_options: + comment: '#' + mapping_options: + - mapping_mode: row + file_mode: current_entry + sections: + - MySubsection2 + - mapping_mode: column + file_mode: current_entry + sections: + - MySubsection1 sub_sections: MySubsection1: section: '#/MyColumnMode' @@ -287,54 +310,53 @@ def test_tabular_entry_mode(mongo, test_user, raw_files, monkeypatch, proc_infra upload.process_upload() upload.block_until_complete() assert upload is not None - assert upload.processed_entries_count == 2 + assert upload.processed_entries_count == 1 for entry in Entry.objects(upload_id='test_upload_id'): assert entry.process_status == ProcessStatus.SUCCESS -@pytest.mark.parametrize('test_case,section_placeholder,sub_sections_placeholder,quantity_placeholder,csv_content', [ - pytest.param('test_1', '', '', quantity_generator('quantity_0', 'header_0'), - 'header_0,header_1\n0_0,0_1\n1_0,1_1', id='simple'), - pytest.param('test_2', f'''Mysection: - quantities: - {quantity_generator('quantity_0', 'header_0')} - ''', '''sub_sections: - my_substance: - section: Mysection''', '', 'header_0,header_1\n0_0,0_1\n1_0,1_1', - id='nested'), +@pytest.mark.parametrize('test_case, sub_sections_placeholder, mapping_options_placeholder, csv_content', [ + pytest.param('test_1', {}, [], 'header_0,header_1\n0_0,0_1\n1_0,1_1', id='simple'), + pytest.param( + 'test_2', {'my_substance': {'section': '#/Mysection'}}, + [{'mapping_mode': 'column', 'file_mode': 'current_entry', 'sections': ['my_substance']}], + 'header_0,header_1\n0_0,0_1\n1_0,1_1', id='nested'), ]) -def test_tabular_column_mode(raw_files, monkeypatch, test_case, section_placeholder, quantity_placeholder, - sub_sections_placeholder, csv_content): +def test_tabular_column_mode(raw_files, monkeypatch, test_case, sub_sections_placeholder, mapping_options_placeholder, + csv_content): ''' Testing the TableData normalizer using default mode (column mode). This feature creates a list of values out of the given column in the excel/csv file for the given quantity. ''' - base_schema = '''definitions: - name: 'Eln' - sections: - <section_placeholder> - My_schema: - base_sections: - - nomad.parsing.tabular.TableData - quantities: - data_file: - type: str - description: <description_placeholder> - m_annotations: - tabular_parser: - comment: '#' - <quantity_placeholder> - <sub_sections_placeholder> -data: - m_def: My_schema - data_file: test.my_schema.archive.csv''' - - schema = base_schema.replace('<section_placeholder>', section_placeholder)\ - .replace('<sub_sections_placeholder>', sub_sections_placeholder)\ - .replace('<quantity_placeholder>', quantity_placeholder)\ - .replace('<description_placeholder>', test_case) - schema = re.sub(r'\n\s*\n', '\n', schema) + base_schema = { + 'definitions': { + 'name': 'Eln', + 'sections': { + 'Mysection': {'quantities': quantity_generator('quantity_1', 'header_1', shape=['*'], to_dict=True)}, + 'My_schema': { + 'base_section': 'nomad.parsing.tabular.TableData', + 'quantities': { + 'data_file': { + 'type': 'str', 'description': test_case, + 'm_annotations': { + 'tabular_parser': { + 'parsing_options': { + 'comment': '#' + }, + 'mapping_options': mapping_options_placeholder + } + } + }, + 'quantity_0': {'type': 'str', 'shape': ['*'], 'm_annotations': {'tabular': {'name': 'header_0'}}} + }, + 'sub_sections': sub_sections_placeholder + } + } + }, + 'data': {'m_def': 'My_schema', 'data_file': 'test.my_schema.archive.csv'} + } + schema = yaml.dump(base_schema) csv_file, schema_file = get_files(schema, csv_content) class MyContext(ClientContext): @@ -350,70 +372,64 @@ data: if 'test_1' in schema: assert main_archive.data.quantity_0 == ['0_0', '1_0'] elif 'test_2' in schema: - assert main_archive.data.my_substance.quantity_0 == ['0_0', '1_0'] - - -@pytest.mark.parametrize('test_case,section_placeholder,target_sub_section_placeholder,sub_sections_placeholder,csv_content', [ - pytest.param('test_1', '', '- my_substance1', '''my_substance1: - repeats: true - section: - base_section: Substance1''', 'header_0,header_1\n0_0,0_1\n1_0,1_1', id='simple_1_section'), - pytest.param('test_2', f'''Substance2: - quantities: - {quantity_generator('quantity_2', 'header_2', shape='')} - ''', '''- my_substance1 - - my_substance2''', '''my_substance1: - repeats: true - section: - base_section: Substance1 - my_substance2: - repeats: true - section: - base_section: Substance2''', 'header_0,header_1,header_2\n0_0,0_1,0_2\n1_0,1_1,1_2', id='simple_2_sections'), - pytest.param('test_3', '', '- subsection_1/my_substance1', f'''subsection_1: - section: - sub_sections: - my_substance1: - repeats: true - section: - base_section: Substance1''', 'header_0,header_1,header_2\n0_0,0_1,0_2\n1_0,1_1,1_2', id='nested')]) + assert main_archive.data.my_substance.quantity_1 == ['0_1', '1_1'] + + +@pytest.mark.parametrize('test_case, section_placeholder, target_sub_section_placeholder, sub_sections_placeholder, csv_content', [ + pytest.param('test_1', None, ['my_substance1'], + {'my_substance1': {'repeats': 'true', 'section': {'base_section': 'Substance1'}}}, + 'header_0,header_1\n0_0,0_1\n1_0,1_1', + id='simple_1_section'), + pytest.param('test_2', + {'Substance2': {'quantities': quantity_generator('quantity_2', 'header_2', shape='', to_dict=True)}}, + ['my_substance1', 'my_substance2'], + { + 'my_substance1': {'repeats': 'true', 'section': {'base_section': 'Substance1'}}, + 'my_substance2': {'repeats': 'true', 'section': {'base_section': 'Substance2'}} + }, + 'header_0,header_1,header_2\n0_0,0_1,0_2\n1_0,1_1,1_2', + id='simple_2_sections'), + pytest.param('test_3', None, + ['subsection_1/my_substance1'], + {'subsection_1': {'section': {'sub_sections': { + 'my_substance1': {'repeats': 'true', 'section': {'base_section': 'Substance1'}} + }}}}, + 'header_0,header_1\n0_0,0_1\n1_0,1_1', + id='nested')]) def test_tabular_row_mode(raw_files, monkeypatch, test_case, section_placeholder, target_sub_section_placeholder, sub_sections_placeholder, csv_content): ''' Testing the TableData normalizer with mode set to row. This feature is used to create a section out of each row in a given sheet_name of an excel file or a csv file, and append it to the repeating (sub)section(s). ''' - base_schema = f'''definitions: - name: 'Eln' - sections: - Substance1: - quantities: - {quantity_generator('quantity_4', 'header_0', shape='')} - <section_placeholder> - My_schema: - base_sections: - - nomad.parsing.tabular.TableData - quantities: - data_file: - type: str - description: <description_placeholder> - m_annotations: - tabular_parser: - comment: '#' - current_entry: - row_to_sections: - <target_sub_section_placeholder> - sub_sections: - <sub_sections_placeholder> -data: - m_def: My_schema - data_file: test.my_schema.archive.csv''' - - schema = base_schema.replace('<section_placeholder>', section_placeholder) \ - .replace('<target_sub_section_placeholder>', target_sub_section_placeholder) \ - .replace('<sub_sections_placeholder>', sub_sections_placeholder) \ - .replace('<description_placeholder>', test_case) - schema = re.sub(r'\n\s*\n', '\n', schema) + base_schema = { + 'definitions': { + 'name': 'Eln', + 'sections': { + 'Substance1': {'quantities': quantity_generator('quantity_4', 'header_0', shape='', to_dict=True)}, + 'Substance2': {'quantities': quantity_generator('quantity_2', 'header_2', shape='', to_dict=True)}, + 'My_schema': { + 'base_section': 'nomad.parsing.tabular.TableData', + 'quantities': {'data_file': { + 'type': 'str', 'description': test_case, + 'm_annotations': { + 'tabular_parser': { + 'parsing_options': { + 'comment': '#' + }, + 'mapping_options': [ + {'mapping_mode': 'row', 'file_mode': 'current_entry', 'sections': target_sub_section_placeholder} + ] + } + } + }}, + 'sub_sections': sub_sections_placeholder + } + } + }, + 'data': {'m_def': 'My_schema', 'data_file': 'test.my_schema.archive.csv'} + } + schema = yaml.dump(base_schema) csv_file, schema_file = get_files(schema, csv_content) class MyContext(ClientContext): @@ -459,11 +475,23 @@ data: type: str m_annotations: tabular_parser: - comment: '#' + parsing_options: + comment: '#' + mapping_options: + - mapping_mode: column + file_mode: current_entry + sections: + - '#root' header_0: + m_annotations: + tabular: + name: header_0 type: str header_1: type: str + m_annotations: + tabular: + name: header_1 data: m_def: MyTable data_file: test.my_schema.archive.csv @@ -487,10 +515,13 @@ data: type: str m_annotations: tabular_parser: - comment: '#' - current_entry: - row_to_sections: - - MySubsection + parsing_options: + comment: '#' + mapping_options: + - mapping_mode: row + file_mode: current_entry + sections: + - MySubsection sub_sections: MySubsection: repeats: true @@ -530,9 +561,13 @@ data: default: 'placeholder' m_annotations: tabular_parser: - current_entry: - row_to_sections: - - subsection_1 + parsing_options: + comment: '#' + mapping_options: + - mapping_mode: row + file_mode: current_entry + sections: + - subsection_1 sub_sections: subsection_1: repeats: True @@ -603,10 +638,13 @@ def test_tabular_csv(raw_files, monkeypatch, schema, content): type: str m_annotations: tabular_parser: - comment: '#' - current_entry: - row_to_sections: - - MySubsection + parsing_options: + comment: '#' + mapping_options: + - mapping_mode: row + file_mode: current_entry + sections: + - MySubsection sub_sections: MySubsection: repeats: true @@ -624,7 +662,7 @@ def test_tabular_csv(raw_files, monkeypatch, schema, content): strip(''' header_0,header_1 a,b - '''), id='checkoing checkbox' + '''), id='checking checkbox' ), pytest.param( strip(''' @@ -641,10 +679,13 @@ def test_tabular_csv(raw_files, monkeypatch, schema, content): type: str m_annotations: tabular_parser: - comment: '#' - current_entry: - row_to_sections: - - MySubsection + parsing_options: + comment: '#' + mapping_options: + - mapping_mode: row + file_mode: current_entry + sections: + - MySubsection sub_sections: MySubsection: repeats: true @@ -692,7 +733,7 @@ def test_tabular_checkbox(raw_files, monkeypatch, schema, content): assert main_archive.data.fill_archive_from_datafile is True main_archive.data.MySubsection[0].header_0 = 'c' run_normalize(main_archive) - assert main_archive.data.MySubsection[0].header_0 == 'a' + assert main_archive.data.MySubsection[0].header_0 == 'c' def get_files(schema=None, content=None): diff --git a/tests/processing/test_base.py b/tests/processing/test_base.py index c2b6a85662341656c23eba9ea5ba767fbddff8ba..dc8e4e882ddc9c656fd60b402018cfaf2f18281b 100644 --- a/tests/processing/test_base.py +++ b/tests/processing/test_base.py @@ -49,12 +49,12 @@ def assert_proc(proc, current_process, process_status=ProcessStatus.SUCCESS, err def assert_events(expected_events: List[Union[str, List[str]]]): ind = 0 for expected in expected_events: - if type(expected) == str: + if isinstance(expected, str): # str -> expect a specific event assert ind <= len(events), f'Not enough events, expecting {expected}' assert expected == events[ind] ind += 1 - elif type(expected) == list: + elif isinstance(expected, list): # list -> expecting a number of events, in any order while expected: assert ind <= len(events), f'Not enough events, expecting one of {expected}' @@ -216,7 +216,7 @@ class ParentProc(Proc): events.append(f'{self.parent_id}:join:fail') assert False, 'failing in join' else: - if type(join_arg) == bool: + if isinstance(join_arg, bool): join_arg = [join_arg] for i, succeed in enumerate(join_arg): # Start up another child @@ -316,7 +316,7 @@ def test_parent_child(worker, mongo, reset_events, spawn_kwargs, expected_events assert child.process_status == expected_child_status for i, join_arg in enumerate(join_args): if join_arg != fail: - if type(join_arg) == bool: + if isinstance(join_arg, bool): join_arg = [join_arg] for i2, succeed in enumerate(join_arg): child = ChildProc.get(f'rejoin{i + 1}.{i2}') diff --git a/tests/processing/test_data.py b/tests/processing/test_data.py index cd2ec398ee26998019f413b7a3d0c686f37c7422..7d1b06ad9a230d1100efec8e03b986306f92f6c6 100644 --- a/tests/processing/test_data.py +++ b/tests/processing/test_data.py @@ -846,9 +846,9 @@ def test_creating_new_entries_during_processing(proc_infra, test_user): assert entry.process_status == ProcessStatus.SUCCESS if entry.mainfile.startswith('my_batch_'): idx = int(entry.mainfile.split('.')[0].split('_')[-1]) - archive = upload_files.read_archive(entry.entry_id)[entry.entry_id] - assert archive['data']['batch_id'] == 'my_batch' - assert archive['data']['sample_number'] == idx + with upload_files.read_archive(entry.entry_id) as archive: + assert archive[entry.entry_id]['data']['batch_id'] == 'my_batch' + assert archive[entry.entry_id]['data']['sample_number'] == idx @pytest.mark.timeout(config.tests.default_timeout) diff --git a/tests/processing/test_edit_metadata.py b/tests/processing/test_edit_metadata.py index 2f57efca00aa2a7c945b774b7ec795478e8850f0..c06103eacc9a5b9e1aaab55755e6cede76d0e659 100644 --- a/tests/processing/test_edit_metadata.py +++ b/tests/processing/test_edit_metadata.py @@ -147,7 +147,7 @@ def convert_to_comparable_value(quantity, value, from_format, user): return convert_to_comparable_value_single(quantity, value, from_format, user) if value is None and from_format == 'es': return [] - if type(value) != list: + if not isinstance(value, list): value = [value] return [convert_to_comparable_value_single(quantity, v, from_format, user) for v in value] @@ -397,7 +397,7 @@ def test_list_quantities(proc_infra, purged_app, example_data_writeable, example return dataset_ref def replace_dataset_ref_or_reflist(ref_or_reflist): - if type(ref_or_reflist) == list: + if isinstance(ref_or_reflist, list): return [replace_dataset_ref(ref) for ref in ref_or_reflist] return replace_dataset_ref(ref_or_reflist) @@ -410,7 +410,7 @@ def test_list_quantities(proc_infra, purged_app, example_data_writeable, example kwargs[arg] = kwargs.pop(arg + suffix) datasets = kwargs['metadata'].get('datasets') if datasets is not None: - if type(datasets) == dict: + if isinstance(datasets, dict): datasets = {op: replace_dataset_ref_or_reflist(v) for op, v in datasets.items()} else: datasets = replace_dataset_ref_or_reflist(datasets) diff --git a/tests/processing/test_rfc3161.py b/tests/processing/test_rfc3161.py index 995f3950a7238d4f61b68c893e831c9a0b5d81cf..b21baff8c8ad45728841ded0d4bf82f2ef99eaeb 100644 --- a/tests/processing/test_rfc3161.py +++ b/tests/processing/test_rfc3161.py @@ -32,16 +32,17 @@ from nomad.processing.data import get_rfc3161_token, Entry pytest.param('http://zeitstempel.dfn.de', None, True, id='zeitstempel.dfn.de'), pytest.param('http://timestamp.sectigo.com', None, True, id='timestamp.sectigo.com'), pytest.param('https://freetsa.org/tsr', 'https://freetsa.org/files/tsa.crt', True, id='freetsa.org/tsr'), - pytest.param( - 'http://timestamp.digicert.com/', - 'https://knowledge.digicert.com/content/dam/digicertknowledgebase/attachments/time-stamp/TSACertificate.cer', - True, - id='timestamp.digicert.com-correct-cert'), - pytest.param( - 'http://timestamp.digicert.com/', - 'https://freetsa.org/files/tsa.crt', - False, - id='timestamp.digicert.com-wrong-cert'), + # The digicert server cannot be reached: the affected tests are skipped temporarily + # pytest.param( + # 'http://timestamp.digicert.com/', + # 'https://knowledge.digicert.com/content/dam/digicertknowledgebase/attachments/time-stamp/TSACertificate.cer', + # True, + # id='timestamp.digicert.com-correct-cert'), + # pytest.param( + # 'http://timestamp.digicert.com/', + # 'https://freetsa.org/files/tsa.crt', + # False, + # id='timestamp.digicert.com-wrong-cert'), ]) def test_rfc3161ng_timestamp(server, cert, result, monkeysession): # this is due to requests being used by rfc3161ng diff --git a/tests/states/entry.py b/tests/states/entry.py index 0143b6a31131d3e025af0c2cb0e78fbdd104ed4c..83e905f5046e75d4b16dbc788d8d1b88878c7394 100644 --- a/tests/states/entry.py +++ b/tests/states/entry.py @@ -459,3 +459,16 @@ def rdf(): ) data.save() + + +def plotly(): + infrastructure.setup() + main_author = infrastructure.user_management.get_user(username='test').user_id + upload = Upload( + upload_id='plotly_upload_id', + main_author=main_author) + upload.save() + files.StagingUploadFiles(upload_id=upload.upload_id, create=True) + upload.staging_upload_files.add_rawfiles('examples/data/plotly') + upload.process_upload() + upload.block_until_complete() diff --git a/tests/states/search.py b/tests/states/search.py index 09947e19553ad2ebfe25f516ed78177aab2d3c7b..853c417bc7dba155f6dd212b5a7c579dd53fe559 100644 --- a/tests/states/search.py +++ b/tests/states/search.py @@ -57,6 +57,14 @@ material_perovskite = { "chemical_formula_reduced": "H6Pb1C1I3N1", "chemical_formula_hill": "CH6I3NPb" } +material_movo = { + 'material_id': 'mock-material-id', + "material_name": "movo", + "elements": ["V", "Mo", "O"], + "chemical_formula_descriptive": "MoVO", + "chemical_formula_reduced": "MoVO", + "chemical_formula_hill": "MoVO" +} method_dft_vasp = { 'simulation': { @@ -105,6 +113,27 @@ properties_solar_cell = { } } } +properties_catalysis = { + "catalytic": { + "catalyst_characterization": { + "surface_area": 65.56, + "method_surface_area": "BET" + }, + "catalyst_synthesis": { + "catalyst_type": "bulk catalyst", + "preparation_method": "hydrothermal" + } + } +} + +eln_catalysis = { + "sections": [ + "CatalystSample" + ], + "names": [ + "MoVOx sample" + ] +} def search(): @@ -128,7 +157,7 @@ def search(): 'method': method_dft_vasp, 'properties': {} }, - sections=['nomad.datamodel.results.Simulation'] + quantities=['results.method.simulation.program_name'] ) data.create_entry( upload_id=upload_id, @@ -139,7 +168,7 @@ def search(): 'method': method_dft_exciting, 'properties': {} }, - sections=['nomad.datamodel.results.Simulation'] + quantities=['results.method.simulation.program_name'] ) data.create_entry( upload_id=upload_id, @@ -150,7 +179,7 @@ def search(): 'method': method_dft_vasp, 'properties': {} }, - sections=['nomad.datamodel.results.Simulation'] + quantities=['results.method.simulation.program_name'] ) data.create_entry( upload_id=upload_id, @@ -164,6 +193,17 @@ def search(): sections=['nomad.datamodel.results.SolarCell'], quantities=['data'] ) + data.create_entry( + upload_id=upload_id, + entry_id=create_uuid(), + mainfile='upload/movo.json', + results={ + 'material': material_movo, + 'properties': properties_catalysis, + 'eln': eln_catalysis + }, + quantities=['results.properties.catalytic'] + ) data.create_entry( upload_id=upload_id, entry_id=create_uuid(), diff --git a/tests/test_config.py b/tests/test_config.py index 110220e75ec37ea112505cc780a9429f0cdb5d8d..8ef15ae192e7b99235ee4ff89ad045e54895eab7 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -22,7 +22,7 @@ import yaml from pydantic import parse_obj_as from nomad import config -from nomad.utils import flat +from nomad.utils import flatten_dict from .utils import assert_log @@ -80,8 +80,8 @@ def load_config(config_dict, monkeypatch): def test_config(raw_files, with_config, monkeypatch, caplog, config_dict): load_config(config_dict, monkeypatch) for key, value in config_dict.items(): - flat_real = flat(getattr(config, key).dict()) - flat_expected = flat(value) + flat_real = flatten_dict(getattr(config, key).dict()) + flat_expected = flatten_dict(value) for key2, value2 in flat_expected.items(): assert flat_real[key2] == value2 @@ -106,7 +106,7 @@ def test_parser_plugins(): parsers = [ plugin for plugin in config.plugins.options.values() if isinstance(plugin, Parser)] - assert len(parsers) == 66 + assert len(parsers) == 68 def test_plugin_polymorphism(): diff --git a/tests/test_files.py b/tests/test_files.py index cdafd3ece2f086a5d4565cda5b620bf54bef3bfd..8dc5a3fddc6c5d67394c8dc86f6098ac88a9477d 100644 --- a/tests/test_files.py +++ b/tests/test_files.py @@ -565,9 +565,8 @@ def assert_upload_files( f.read() try: - archive = upload_files.read_archive(entry.entry_id) - assert entry.entry_id in archive - + with upload_files.read_archive(entry.entry_id) as archive: + assert entry.entry_id in archive except KeyError: assert no_archive diff --git a/tests/test_search.py b/tests/test_search.py index 6be91a8968da1e589a73a009398fc84a8cbdd11b..b72bdf234d78969188183a95818266046669206e 100644 --- a/tests/test_search.py +++ b/tests/test_search.py @@ -21,14 +21,20 @@ import pytest import json from datetime import datetime +from nomad.utils import deep_get from nomad import config, utils, infrastructure -from nomad.app.v1.models import WithQuery +from nomad.app.v1.models import WithQuery, MetadataRequired, MetadataPagination, Direction from nomad.datamodel.datamodel import EntryArchive, EntryData, EntryMetadata from nomad.metainfo.metainfo import Datetime, Quantity from nomad.metainfo.util import MEnum from nomad.search import quantity_values, search, update_by_query, refresh -from nomad.metainfo.elasticsearch_extension import entry_type, entry_index, material_index +from nomad.metainfo.elasticsearch_extension import entry_type, entry_index, material_index, schema_separator, dtype_separator from nomad.utils.exampledata import ExampleData +from tests.config import yaml_schema_name, python_schema_name + + +def split(path): + return [int(x) if x.isdigit() else x for x in path.split('.')] def assert_search_upload( @@ -59,7 +65,7 @@ def assert_search_upload( if search_results['total']['value'] > 0: for hit in search_results['hits']: - hit = utils.flat(hit['_source']) + hit = utils.flatten_dict(hit['_source']) for key, value in kwargs.items(): assert hit.get(key, None) == value, key @@ -116,6 +122,30 @@ def test_mapping_compatibility(elastic_infra): assert len([c for c in diff if c == '.']) == 1, diff +def get_schema_fixture(type, request): + return request.getfixturevalue(f'example_data_schema_{type}') + + +def get_schema_quantity(type, quantity): + if quantity is None: + return None + if not quantity.startswith('data.'): + return quantity + dtype = '' + if type == 'python': + name = python_schema_name + elif type == 'yaml': + name = yaml_schema_name + dtype = { + 'data.name': 'str', + 'data.count': 'int', + 'data.frequency': 'float' + }[quantity] + dtype = f'{dtype_separator}{dtype}' + + return f'{quantity}{schema_separator}{name}{dtype}' + + @pytest.fixture() def example_data(elastic, test_user): data = ExampleData(main_author=test_user) @@ -137,6 +167,7 @@ def example_eln_data(elastic, test_user): long = Quantity(type=int) double = Quantity(type=float) date = Quantity(type=Datetime) + boolean = Quantity(type=bool) data = ExampleData(main_author=test_user) data.create_upload(upload_id='test_upload_id', published=True, embargo_length=12) @@ -146,7 +177,8 @@ def example_eln_data(elastic, test_user): ('keyword', 'one'), ('long', 1), ('double', 1.2), - ('date', datetime.fromtimestamp(0))] + ('date', datetime.fromtimestamp(0)), + ('boolean', False)] for index, item in enumerate(parameters): quantity, value = item @@ -218,25 +250,187 @@ def test_quantity_values(indices, example_data): @pytest.mark.parametrize('api_query, total', [ - pytest.param('{}', 5, id='empty'), + pytest.param({}, 6, id='empty'), pytest.param( - '{"searchable_quantities": { "path": "data.text", "text_value": "test" } }', + {"search_quantities": {"id": f"data.text{schema_separator}tests.test_search.DataSection", "str_value": "test"}}, 1, id='simple-positive'), pytest.param( - '{"searchable_quantities": { "path": "data.text", "text_value": "wrong" } }', + {"search_quantities": {"id": f"data.text{schema_separator}tests.test_search.DataSection", "str_value": "wrong"}}, 0, id='simple-negative'), pytest.param( - '{"searchable_quantities": { "path": "data.keyword", "keyword_value": "one" } }', 1, id='keyword'), + {"search_quantities": {"id": f"data.keyword{schema_separator}tests.test_search.DataSection", "str_value": "one"}}, 1, id='keyword-as-text'), + pytest.param( + {"search_quantities": {"id": f"data.long{schema_separator}tests.test_search.DataSection", "int_value": {"lte": 1}}}, 1, id='int'), pytest.param( - '{"searchable_quantities": { "path": "data.long", "long_value": { "lte": 1 } } }', 1, id='long'), + {"search_quantities": {"id": f"data.double{schema_separator}tests.test_search.DataSection", "float_value": {"lt": 1.3}}}, 1, id='float'), pytest.param( - '{"searchable_quantities": { "path": "data.double", "double_value": { "lt": 1.3 } } }', 1, id='double'), + {"search_quantities": {"id": f"data.date{schema_separator}tests.test_search.DataSection", "datetime_value": {"lt": "1971-01-01"}}}, 1, id='datetime'), pytest.param( - '{"searchable_quantities": { "path": "data.date", "date_value": { "lt": "1971-01-01" } } }', 1, id='date'), + {"search_quantities": {"id": f"data.boolean{schema_separator}tests.test_search.DataSection", "bool_value": False}}, 1, id='bool'), pytest.param( - '{"searchable_quantities": { "path": "data.text", "keyword_value": "one" } }', 0, id='uses-nested') + {"search_quantities": {"id": f"data.text{schema_separator}tests.test_search.DataSection", "str_value": "one"}}, 0, id='uses-nested'), ]) -def test_eln_search_query(indices, example_eln_data, api_query, total): - api_query = json.loads(api_query) +def test_search_query_dynamic(indices, example_eln_data, api_query, total): + '''Tests that search queries targeting dynamic quantities work for different data types.''' results = search(owner='all', query=WithQuery(query=api_query).query) assert results.pagination.total == total # pylint: disable=no-member + + +@pytest.mark.parametrize('include, exclude, include_response, exclude_response', [ + pytest.param( + None, + None, + ['search_quantities.0.str_value', f'data.name'], + [], + id='no-required' + ), + pytest.param( + [], + None, + [], + ['search_quantities.0.str_value', f'data.name'], + id='include-nothing' + ), + pytest.param( + None, + ['search_quantities*'], + [f'data.name'], + ['search_quantities.0.str_value'], + id='exclude-searchable-quantities' + ), + pytest.param( + None, + ['search_quantities.str_value'], + [f'data.name', 'search_quantities.0.id'], + ['search_quantities/0/str_value'], + id='exclude-searchable-quantities-subset' + ), + pytest.param( + None, + [f'data.name'], + ['search_quantities.0.str_value'], + [f'data.name'], + id='exclude-dynamic' + ), + pytest.param( + ['search_quantities.str_value'], + None, + ['search_quantities.0.str_value'], + [f'data.name', 'search_quantities.0.id'], + id='include-searchable-quantities' + ), + pytest.param( + [f'data.name'], + None, + [f'data.name'], + ['search_quantities/0/id'], + id='include-dynamic' + ), + pytest.param( + [f'data.count', f'data.frequency'], + None, + [f'data.count', f'data.frequency'], + ['search_quantities.0.int_value', 'search_quantities.0.float_value'], + id='include-dynamic-multiple' + ), + pytest.param( + None, + [f'data.name', 'search_quantities*'], + [], + [f'data.name', 'search_quantities.0.id'], + id='exclude-both' + ), + pytest.param( + [f'data.name', 'search_quantities*'], + None, + [f'data.name', 'search_quantities.0.id'], + [], + id='include-both' + ), +]) +@pytest.mark.parametrize('schema_type', ['python', 'yaml']) +def test_search_query_dynamic_required(indices, plugin_schema, example_data_schema_python, schema_type, include, exclude, include_response, exclude_response): + '''Tests that the requiring works correctly for dynamic fields.''' + if include: + include = [get_schema_quantity(schema_type, x) for x in include] + if exclude: + exclude = [get_schema_quantity(schema_type, x) for x in exclude] + results = search(owner='all', required=MetadataRequired(include=include, exclude=exclude)) + + for path in include_response: + assert deep_get(results.data, 0, *split(path)) is not None + for path in exclude_response: + with pytest.raises(ValueError): + deep_get(results.data, 0, *split(path)) + + +@pytest.mark.parametrize('include', [ + pytest.param([(f'data.name', 'test0')], id='root-section'), + pytest.param([(f'data.child.name', 'test_child0')], id='nested-section'), + pytest.param([(f'data.child_repeating.0.name', 'test_child_repeating0')], id='nested-repeating-section'), +]) +@pytest.mark.parametrize('schema_type', ['python', 'yaml']) +def test_search_hits_dynamic(indices, plugin_schema, schema_type, include, request): + '''Tests that the response hit structure is properly reconstructed for + dynamic quantities that target a schema. + ''' + get_schema_fixture(schema_type, request) + results = search(owner='all') + for path, value in include: + assert deep_get(results.data, 0, *split(path)) == value + + +@pytest.mark.parametrize('order_by, order, expected', [ + pytest.param(None, None, None, id='default'), + pytest.param( + f'data.name', + Direction.asc, + [f'test{i}' for i in [0, 1, 10, 11, 12, 13, 14, 2, 3, 4]], + id='sort-string-single-asc' + ), + pytest.param( + f'data.name', + Direction.desc, + [f'test{i}' for i in [9, 8, 7, 6, 5, 4, 3, 2, 14, 13]], + id='sort-string-single-desc' + ), + pytest.param( + f'data.count', + Direction.asc, + range(10), + id='sort-int-single-asc' + ), + pytest.param( + f'data.count', + Direction.desc, + range(14, 4, -1), + id='sort-int-single-desc' + ), + pytest.param( + f'data.frequency', + Direction.asc, + [x + 0.5 for x in range(10)], + id='sort-float-single-asc' + ), + pytest.param( + f'data.frequency', + Direction.desc, + [x + 0.5 for x in range(14, 4, -1)], + id='sort-float-single-desc' + ), +]) +@pytest.mark.parametrize('schema_type', ['python', 'yaml']) +def test_pagination_dynamic(indices, plugin_schema, schema_type, order_by, order, expected, request): + '''Tests that sorting by a dynamic field works as expected. + ''' + get_schema_fixture(schema_type, request) + order_by = get_schema_quantity(schema_type, order_by) + pagination = MetadataPagination(order_by=order_by, page_size=10) + if order is not None: + pagination.order = order + results = search(owner='all', pagination=pagination) + if expected: + assert len(results.data) == len(expected) + path = order_by.split(schema_separator)[0] + for i, data in enumerate(results.data): + assert deep_get(data, *split(path)) == expected[i] diff --git a/tests/test_utils.py b/tests/test_utils.py index 9365103bbaa4ff567dd452a93159d88a0a65ed33..9da77ae9dda7774884f880e6fad0da186f7a1cdc 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -21,7 +21,10 @@ import json import pytest from nomad import utils -from nomad.utils import structlogging +from nomad.metainfo.metainfo import MSection, Quantity, SubSection +from nomad import files +from nomad.processing import Upload +from nomad.utils import structlogging, flatten_dict, rebuild_dict, deep_get def test_decode_handle_id(): @@ -86,3 +89,79 @@ def test_uuid(): def test_class_logger(): logger = utils.ClassicLogger(__name__, test='value') logger.warn('hello world', test='other value') + + +class TestSubSection(MSection): + name = Quantity(type=str) + subsection_number = Quantity(type=int) + + +class TestSection(MSection): + quantity_section = Quantity(type=int) + subsection = SubSection(sub_section=TestSubSection, repeats=True) + + +def test_extract_section(): + test_section = TestSection( + quantity_section=5, + subsection=[TestSubSection(name='subsection1', subsection_number=1), TestSubSection(name='subsection2')] + ) + # Check if quantities are properly extracted + assert utils.extract_section(test_section, ['quantity_section']) == 5 + # Check if last section is properly extracted: + path = ['subsection'] + assert utils.extract_section(test_section, path).name == 'subsection2' + # Check if last section in path is not a repeated section + assert not isinstance(utils.extract_section(test_section, path), list) + # Check if full_list works + assert isinstance(utils.extract_section(test_section, path, full_list=True), list) + assert len(utils.extract_section(test_section, path, full_list=True)) == 2 + # Check if not section is reported if the last of the intermediate elements do not contain it + path.append('subsection_number') + assert not utils.extract_section(test_section, path) + + +def create_upload(upload_id, user_id, file_paths=None): + if file_paths is None: + file_paths = [] + upload = Upload( + upload_id=upload_id, + main_author=user_id) + upload.save() + files.StagingUploadFiles(upload_id=upload.upload_id, create=True) + for file_path in file_paths: + upload.staging_upload_files.add_rawfiles(file_path) + upload.process_upload() + upload.block_until_complete() + return upload + + +@pytest.mark.parametrize('data, flatten_list', [ + pytest.param({}, True, id='empty'), + pytest.param({'a': 1}, True, id='dict'), + pytest.param({'a': {'b': 1}}, True, id='dict-dict'), + pytest.param({'a': [1, 2, 3]}, True, id='dict-list'), + pytest.param({'a': [{'b': 1}, {'c': 2}, {'d': 3}]}, True, id='dict-list-dict'), + pytest.param({'a': [{'b': [1, 2, 3]}]}, True, id='dict-list-dict-list'), + pytest.param({'a': [1, 2, 3]}, False, id='dict-list-no-list-flattening'), +]) +def test_dict_flatten_rebuild(data, flatten_list): + flattened = flatten_dict(data, flatten_list=flatten_list) + rebuilt = rebuild_dict(flattened) + + assert rebuilt == data + + +@pytest.mark.parametrize('data, path, value, exception', [ + pytest.param({'a': []}, ['a'], [], False, id='empty-list'), + pytest.param({'a': []}, ['a', 0], None, True, id='missing-index'), + pytest.param({'a': [{}]}, ['a', 0], {}, False, id='empty-dict'), + pytest.param({}, ['not-there'], None, True, id='missing-key-1'), + pytest.param({'a': [{}]}, ['a', 0, 'b'], None, True, id='missing-key-2'), +]) +def test_deep_get(data, path, value, exception): + if exception: + with pytest.raises(ValueError): + deep_get(data, *path) == value + else: + assert deep_get(data, *path) == value